ZGlmZiAtLWdpdCBhL0hBQ0tJTkcudHh0IGIvSEFDS0lORy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZTEzNjguLjAwMDAwMDAKLS0tIGEvSEFDS0lORy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotV29ya2luZyBvbiBiaW9uaWMKLT09PT09PT09PT09PT09PT09Ci0KLVdoYXQgYXJlIHRoZSBiaWcgcGllY2VzIG9mIGJpb25pYz8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbGliYy8gLS0tIGxpYmMuc28sIGxpYmMuYQotICBUaGUgQyBsaWJyYXJ5LiBTdHVmZiBsaWtlIGZvcGVuKDMpIGFuZCBraWxsKDIpLgotbGlibS8gLS0tIGxpYm0uc28sIGxpYm0uYQotICBUaGUgbWF0aCBsaWJyYXJ5LiBUcmFkaXRpb25hbGx5IFVuaXggc3lzdGVtcyBrZXB0IHN0dWZmIGxpa2Ugc2luKDMpIGFuZAotICBjb3MoMykgaW4gYSBzZXBhcmF0ZSBsaWJyYXJ5IHRvIHNhdmUgc3BhY2UgaW4gdGhlIGRheXMgYmVmb3JlIHNoYXJlZAotICBsaWJyYXJpZXMuCi1saWJkbC8gLS0tIGxpYmRsLnNvCi0gIFRoZSBkeW5hbWljIGxpbmtlciBpbnRlcmZhY2UgbGlicmFyeS4gVGhpcyBpcyBhY3R1YWxseSBqdXN0IGEgYnVuY2ggb2YKLSAgc3R1YnMgdGhhdCB0aGUgZHluYW1pYyBsaW5rZXIgcmVwbGFjZXMgd2l0aCBwb2ludGVycyB0byBpdHMgb3duCi0gIGltcGxlbWVudGF0aW9uIGF0IHJ1bnRpbWUuIFRoaXMgaXMgd2hlcmUgc3R1ZmYgbGlrZSBkbG9wZW4oMykgbGl2ZXMuCi1saWJzdGRjKysvIC0tLSBsaWJzdGRjKysuc28KLSAgVGhlIEMrKyBBQkkgc3VwcG9ydCBmdW5jdGlvbnMuIFRoZSBDKysgY29tcGlsZXIgZG9lc24ndCBrbm93IGhvdyB0bwotICBpbXBsZW1lbnQgdGhyZWFkLXNhZmUgc3RhdGljIGluaXRpYWxpemF0aW9uIGFuZCB0aGUgbGlrZSwgc28gaXQganVzdCBjYWxscwotICBmdW5jdGlvbnMgdGhhdCBhcmUgc3VwcGxpZWQgYnkgdGhlIHN5c3RlbS4gU3R1ZmYgbGlrZSBfX2N4YV9ndWFyZF9hY3F1aXJlCi0gIGFuZCBfX2N4YV9wdXJlX3ZpcnR1YWwgbGl2ZSBoZXJlLgotCi1saW5rZXIvIC0tLSAvc3lzdGVtL2Jpbi9saW5rZXIgYW5kIC9zeXN0ZW0vYmluL2xpbmtlcjY0Ci0gIFRoZSBkeW5hbWljIGxpbmtlci4gV2hlbiB5b3UgcnVuIGEgZHluYW1pY2FsbHktbGlua2VkIGV4ZWN1dGFibGUsIGl0cyBFTEYKLSAgZmlsZSBoYXMgYSBEVF9JTlRFUlAgZW50cnkgdGhhdCBzYXlzICJ1c2UgdGhlIGZvbGxvd2luZyBwcm9ncmFtIHRvIHN0YXJ0IG1lIi4KLSAgT24gQW5kcm9pZCwgdGhhdCdzIGVpdGhlciBsaW5rZXIgb3IgbGlua2VyNjQgKGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0J3MgYQotICAzMi1iaXQgb3IgNjQtYml0IGV4ZWN1dGFibGUpLiBJdCdzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHRoZSBFTEYgZXhlY3V0YWJsZQotICBpbnRvIG1lbW9yeSBhbmQgcmVzb2x2aW5nIHJlZmVyZW5jZXMgdG8gc3ltYm9scyAoc28gdGhhdCB3aGVuIHlvdXIgY29kZSB0cmllcwotICB0byBqdW1wIHRvIGZvcGVuKDMpLCBzYXksIGl0IGxhbmRzIGluIHRoZSByaWdodCBwbGFjZSkuCi0KLXRlc3RzLyAtLS0gdW5pdCB0ZXN0cwotICBUaGUgdGVzdHMvIGRpcmVjdG9yeSBjb250YWlucyB1bml0IHRlc3RzLiBSb3VnaGx5IGFycmFuZ2VkIGFzIG9uZSBmaWxlIHBlcgotICBwdWJsaWNseS1leHBvcnRlZCBoZWFkZXIgZmlsZS4KLWJlbmNobWFya3MvIC0tLSBiZW5jaG1hcmtzCi0gIFRoZSBiZW5jaG1hcmtzLyBkaXJlY3RvcnkgY29udGFpbnMgYmVuY2htYXJrcy4KLQotCi1XaGF0J3MgaW4gbGliYy8/Ci0tLS0tLS0tLS0tLS0tLS0tCi0KLWxpYmMvCi0gIGFyY2gtYXJtLwotICBhcmNoLWFybTY0LwotICBhcmNoLWNvbW1vbi8KLSAgYXJjaC1taXBzLwotICBhcmNoLW1pcHM2NC8KLSAgYXJjaC14ODYvCi0gIGFyY2gteDg2XzY0LwotICAgICMgRWFjaCBhcmNoaXRlY3R1cmUgaGFzIGl0cyBvd24gc3ViZGlyZWN0b3J5IGZvciBzdHVmZiB0aGF0IGlzbid0IHNoYXJlZAotICAgICMgYmVjYXVzZSBpdCdzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gVGhlcmUgd2lsbCBiZSBhIC5tayBmaWxlIGluIGhlcmUgdGhhdAotICAgICMgZHJhZ3MgaW4gYWxsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMuCi0gICAgYmlvbmljLwotICAgICAgIyBFdmVyeSBhcmNoaXRlY3R1cmUgbmVlZHMgYSBoYW5kZnVsIG9mIG1hY2hpbmUtc3BlY2lmaWMgYXNzZW1ibGVyIGZpbGVzLgotICAgICAgIyBUaGV5IGxpdmUgaGVyZS4KLSAgICBpbmNsdWRlLwotICAgICAgbWFjaGluZS8KLSAgICAgICAgIyBUaGUgbWFqb3JpdHkgb2YgaGVhZGVyIGZpbGVzIGFyZSBhY3R1YWxseSBpbiBsaWJjL2luY2x1ZGUvLCBidXQgbWFueQotICAgICAgICAjIG9mIHRoZW0gcHVsbCBpbiBhIDxtYWNoaW5lL3NvbWV0aGluZy5oPiBmb3IgdGhpbmdzIGxpa2UgbGltaXRzLAotICAgICAgICAjIGVuZGlhbm5lc3MsIGFuZCBob3cgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBhcmUgcmVwcmVzZW50ZWQuIFRob3NlCi0gICAgICAgICMgaGVhZGVycyBsaXZlIGhlcmUuCi0gICAgc3RyaW5nLwotICAgICAgIyBNb3N0IGFyY2hpdGVjdHVyZXMgaGF2ZSBhIGhhbmRmdWwgb2Ygb3B0aW9uYWwgYXNzZW1ibGVyIGZpbGVzCi0gICAgICAjIGltcGxlbWVudGluZyBvcHRpbWl6ZWQgdmVyc2lvbnMgb2YgdmFyaW91cyByb3V0aW5lcy4gVGhlIDxzdHJpbmcuaD4KLSAgICAgICMgZnVuY3Rpb25zIGFyZSBwYXJ0aWN1bGFyIGZhdm9yaXRlcy4KLSAgICBzeXNjYWxscy8KLSAgICAgICMgVGhlIHN5c2NhbGxzIGRpcmVjdG9yaWVzIGNvbnRhaW4gc2NyaXB0LWdlbmVyYXRlZCBhc3NlbWJsZXIgZmlsZXMuCi0gICAgICAjIFNlZSAnQWRkaW5nIHN5c3RlbSBjYWxscycgbGF0ZXIuCi0KLSAgaW5jbHVkZS8KLSAgICAjIFRoZSBwdWJsaWMgaGVhZGVyIGZpbGVzIG9uIGV2ZXJ5b25lJ3MgaW5jbHVkZSBwYXRoLiBUaGVzZSBhcmUgYSBtaXh0dXJlIG9mCi0gICAgIyBmaWxlcyB3cml0dGVuIGJ5IHVzIGFuZCBmaWxlcyB0YWtlbiBmcm9tIEJTRC4KLQotICBrZXJuZWwvCi0gICAgIyBUaGUga2VybmVsIHVhcGkgaGVhZGVyIGZpbGVzLiBUaGVzZSBhcmUgc2NydWJiZWQgY29waWVzIG9mIHRoZSBvcmlnaW5hbHMKLSAgICAjIGluIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzLy4gVGhlc2UgZmlsZXMgbXVzdCBub3QgYmUgZWRpdGVkIGRpcmVjdGx5LiBUaGUKLSAgICAjIGdlbmVyYXRlX3VhcGlfaGVhZGVycy5zaCBzY3JpcHQgc2hvdWxkIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGtlcm5lbCB0cmVlIHRvCi0gICAgIyBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy8gLS0tIHRoaXMgdGFrZXMgY2FyZSBvZiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljCi0gICAgIyBkZXRhaWxzLiBUaGUgdXBkYXRlX2FsbC5weSBzY3JpcHQgc2hvdWxkIGJlIHVzZWQgdG8gcmVnZW5lcmF0ZSBiaW9uaWMncwotICAgICMgc2NydWJiZWQgaGVhZGVycyBmcm9tIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzLy4KLQotICBwcml2YXRlLwotICAgICMgVGhlc2UgYXJlIHByaXZhdGUgaGVhZGVyIGZpbGVzIG1lYW50IGZvciB1c2Ugd2l0aGluIGJpb25pYyBpdHNlbGYuCi0KLSAgZG5zLwotICAgICMgQ29udGFpbnMgdGhlIEROUyByZXNvbHZlciAob3JpZ2luYXRlcyBmcm9tIE5ldEJTRCBjb2RlKS4KLQotICB1cHN0cmVhbS1kbG1hbGxvYy8KLSAgdXBzdHJlYW0tZnJlZWJzZC8KLSAgdXBzdHJlYW0tbmV0YnNkLwotICB1cHN0cmVhbS1vcGVuYnNkLwotICAgICMgVGhlc2UgZGlyZWN0b3JpZXMgY29udGFpbiB1bm1vbGVzdGVkIHVwc3RyZWFtIHNvdXJjZS4gQW55IHRpbWUgd2UgY2FuCi0gICAgIyBqdXN0IHVzZSBhIEJTRCBpbXBsZW1lbnRhdGlvbiBvZiBzb21ldGhpbmcgdW5tb2RpZmllZCwgd2Ugc2hvdWxkLgotICAgICMgVGhlIHN0cnVjdHVyZSB1bmRlciB0aGVzZSBkaXJlY3RvcmllcyBtaW1pY3MgdGhlIHVwc3RyZWFtIHRyZWUsCi0gICAgIyBidXQgdGhlcmUncyBhbHNvLi4uCi0gICAgYW5kcm9pZC8KLSAgICAgIGluY2x1ZGUvCi0gICAgICAgICMgVGhpcyBpcyB3aGVyZSB3ZSBrZWVwIHRoZSBoYWNrcyBuZWNlc3NhcnkgdG8gYnVpbGQgQlNEIHNvdXJjZQotICAgICAgICAjIGluIG91ciB3b3JsZC4gVGhlICotY29tcGF0LmggZmlsZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQKLSAgICAgICAgIyB1c2luZyAtaW5jbHVkZSwgYnV0IHdlIGFsc28gcHJvdmlkZSBlcXVpdmFsZW50cyBmb3IgbWlzc2luZwotICAgICAgICAjIGhlYWRlci9zb3VyY2UgZmlsZXMgbmVlZGVkIGJ5IHRoZSBCU0QgaW1wbGVtZW50YXRpb24uCi0KLSAgYmlvbmljLwotICAgICMgVGhpcyBpcyB0aGUgYmlnZ2VzdCBtZXNzLiBUaGUgQysrIGZpbGVzIGFyZSBmaWxlcyB3ZSBvd24sIHR5cGljYWxseQotICAgICMgYmVjYXVzZSB0aGUgTGludXgga2VybmVsIGludGVyZmFjZSBpcyBzdWZmaWNpZW50bHkgZGlmZmVyZW50IHRoYXQgd2UKLSAgICAjIGNhbid0IHVzZSBhbnkgb2YgdGhlIEJTRCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBDIGZpbGVzIGFyZSB1c3VhbGx5Ci0gICAgIyBsZWdhY3kgbWVzcyB0aGF0IG5lZWRzIHRvIGJlIHNvcnRlZCBvdXQsIGVpdGhlciBieSByZXBsYWNpbmcgaXQgd2l0aAotICAgICMgY3VycmVudCB1cHN0cmVhbSBzb3VyY2UgaW4gb25lIG9mIHRoZSB1cHN0cmVhbSBkaXJlY3RvcmllcyBvciBieQotICAgICMgc3dpdGNoaW5nIHRoZSBmaWxlIHRvIEMrKyBhbmQgY2xlYW5pbmcgaXQgdXAuCi0KLSAgc3RkaW8vCi0gICAgIyBUaGVzZSBhcmUgbGVnYWN5IGZpbGVzIG9mIGR1YmlvdXMgcHJvdmVuYW5jZS4gV2UncmUgd29ya2luZyB0byBjbGVhbgotICAgICMgdGhpcyBtZXNzIHVwLCBhbmQgdGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGRpc2FwcGVhci4KLQotICB0b29scy8KLSAgICAjIFZhcmlvdXMgdG9vbHMgdXNlZCB0byBtYWludGFpbiBiaW9uaWMuCi0KLSAgdHpjb2RlLwotICAgICMgQSBtb2RpZmllZCBzdXBlcnNldCBvZiB0aGUgSUFOQSB0emNvZGUuIE1vc3Qgb2YgdGhlIG1vZGlmaWNhdGlvbnMgcmVsYXRlCi0gICAgIyB0byBBbmRyb2lkJ3MgdXNlIG9mIGEgc2luZ2xlIGZpbGUgKHdpdGggY29ycmVzcG9uZGluZyBpbmRleCkgdG8gY29udGFpbgotICAgICMgdGltZSB6b25lIGRhdGEuCi0gIHpvbmVpbmZvLwotICAgICMgQW5kcm9pZC1mb3JtYXQgdGltZSB6b25lIGRhdGEuCi0gICAgIyBTZWUgJ1VwZGF0aW5nIHR6ZGF0YScgbGF0ZXIuCi0KLQotQWRkaW5nIHN5c3RlbSBjYWxscwotLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BZGRpbmcgYSBzeXN0ZW0gY2FsbCB1c3VhbGx5IGludm9sdmVzOgotCi0gIDEuIEFkZCBlbnRyaWVzIHRvIFNZU0NBTExTLlRYVC4KLSAgICAgU2VlIFNZU0NBTExTLlRYVCBpdHNlbGYgZm9yIGRvY3VtZW50YXRpb24gb24gdGhlIGZvcm1hdC4KLSAgMi4gUnVuIHRoZSBnZW5zeXNjYWxscy5weSBzY3JpcHQuCi0gIDMuIEFkZCBjb25zdGFudHMgKGFuZCBwZXJoYXBzIHR5cGVzKSB0byB0aGUgYXBwcm9wcmlhdGUgaGVhZGVyIGZpbGUuCi0gICAgIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIGNoZWNrIHRvIHNlZSB3aGV0aGVyIHRoZSBjb25zdGFudHMgYXJlIGFscmVhZHkgaW4KLSAgICAga2VybmVsIHVhcGkgaGVhZGVyIGZpbGVzLCBpbiB3aGljaCBjYXNlIHlvdSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQKLSAgICAgdGhlIGFwcHJvcHJpYXRlIFBPU0lYIGhlYWRlciBmaWxlIGluIGxpYmMvaW5jbHVkZS8gaW5jbHVkZXMgdGhlCi0gICAgIHJlbGV2YW50IGZpbGUgb3IgZmlsZXMuCi0gIDQuIEFkZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgdG8gdGhlIGFwcHJvcHJpYXRlIGhlYWRlciBmaWxlLgotICA1LiBBZGQgYXQgbGVhc3QgYmFzaWMgdGVzdHMuIEV2ZW4gYSB0ZXN0IHRoYXQgZGVsaWJlcmF0ZWx5IHN1cHBsaWVzCi0gICAgIGFuIGludmFsaWQgYXJndW1lbnQgaGVscHMgY2hlY2sgdGhhdCB3ZSdyZSBnZW5lcmF0aW5nIHRoZSByaWdodCBzeW1ib2wKLSAgICAgYW5kIGhhdmUgdGhlIHJpZ2h0IGRlY2xhcmF0aW9uIGluIHRoZSBoZWFkZXIgZmlsZS4gKEFuZCBzdHJhY2UoMSkgY2FuCi0gICAgIGNvbmZpcm0gdGhhdCB0aGUgY29ycmVjdCBzeXN0ZW0gY2FsbCBpcyBiZWluZyBtYWRlLikKLQotCi1VcGRhdGluZyBrZXJuZWwgaGVhZGVyIGZpbGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFzIG1lbnRpb25lZCBhYm92ZSwgdGhpcyBpcyBjdXJyZW50bHkgYSB0d28tc3RlcCBwcm9jZXNzOgotCi0gIDEuIFVzZSBnZW5lcmF0ZV91YXBpX2hlYWRlcnMuc2ggdG8gZ28gZnJvbSBhIExpbnV4IHNvdXJjZSB0cmVlIHRvIGFwcHJvcHJpYXRlCi0gICAgIGNvbnRlbnRzIGZvciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy8uCi0gIDIuIFJ1biB1cGRhdGVfYWxsLnB5IHRvIHNjcnViIHRob3NlIGhlYWRlcnMgYW5kIGltcG9ydCB0aGVtIGludG8gYmlvbmljLgotCi0KLVVwZGF0aW5nIHR6ZGF0YQotLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgaXMgZnVsbHkgYXV0b21hdGVkOgotCi0gIDEuIFJ1biB1cGRhdGUtdHpkYXRhLnB5LgotCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzMWZiYwotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRS5tZApAQCAtMCwwICsxLDI1OCBAQAorV29ya2luZyBvbiBiaW9uaWMKKz09PT09PT09PT09PT09PT09CisKK1doYXQgYXJlIHRoZSBiaWcgcGllY2VzIG9mIGJpb25pYz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyMjIyBsaWJjLyAtLS0gbGliYy5zbywgbGliYy5hCisKK1RoZSBDIGxpYnJhcnkuIFN0dWZmIGxpa2UgYGZvcGVuKDMpYCBhbmQgYGtpbGwoMilgLgorCisjIyMjIGxpYm0vIC0tLSBsaWJtLnNvLCBsaWJtLmEKKworVGhlIG1hdGggbGlicmFyeS4gVHJhZGl0aW9uYWxseSBVbml4IHN5c3RlbXMga2VwdCBzdHVmZiBsaWtlIGBzaW4oMylgIGFuZAorYGNvcygzKWAgaW4gYSBzZXBhcmF0ZSBsaWJyYXJ5IHRvIHNhdmUgc3BhY2UgaW4gdGhlIGRheXMgYmVmb3JlIHNoYXJlZAorbGlicmFyaWVzLgorCisjIyMjIGxpYmRsLyAtLS0gbGliZGwuc28KKworVGhlIGR5bmFtaWMgbGlua2VyIGludGVyZmFjZSBsaWJyYXJ5LiBUaGlzIGlzIGFjdHVhbGx5IGp1c3QgYSBidW5jaCBvZiBzdHVicwordGhhdCB0aGUgZHluYW1pYyBsaW5rZXIgcmVwbGFjZXMgd2l0aCBwb2ludGVycyB0byBpdHMgb3duIGltcGxlbWVudGF0aW9uIGF0CitydW50aW1lLiBUaGlzIGlzIHdoZXJlIHN0dWZmIGxpa2UgYGRsb3BlbigzKWAgbGl2ZXMuCisKKyMjIyMgbGlic3RkYysrLyAtLS0gbGlic3RkYysrLnNvCisKK1RoZSBDKysgQUJJIHN1cHBvcnQgZnVuY3Rpb25zLiBUaGUgQysrIGNvbXBpbGVyIGRvZXNuJ3Qga25vdyBob3cgdG8gaW1wbGVtZW50Cit0aHJlYWQtc2FmZSBzdGF0aWMgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBsaWtlLCBzbyBpdCBqdXN0IGNhbGxzIGZ1bmN0aW9ucyB0aGF0CithcmUgc3VwcGxpZWQgYnkgdGhlIHN5c3RlbS4gU3R1ZmYgbGlrZSBgX19jeGFfZ3VhcmRfYWNxdWlyZWAgYW5kCitgX19jeGFfcHVyZV92aXJ0dWFsYCBsaXZlIGhlcmUuCisKKyMjIyMgbGlua2VyLyAtLS0gL3N5c3RlbS9iaW4vbGlua2VyIGFuZCAvc3lzdGVtL2Jpbi9saW5rZXI2NAorCitUaGUgZHluYW1pYyBsaW5rZXIuIFdoZW4geW91IHJ1biBhIGR5bmFtaWNhbGx5LWxpbmtlZCBleGVjdXRhYmxlLCBpdHMgRUxGIGZpbGUKK2hhcyBhIGBEVF9JTlRFUlBgIGVudHJ5IHRoYXQgc2F5cyAidXNlIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSB0byBzdGFydCBtZSIuICBPbgorQW5kcm9pZCwgdGhhdCdzIGVpdGhlciBgbGlua2VyYCBvciBgbGlua2VyNjRgIChkZXBlbmRpbmcgb24gd2hldGhlciBpdCdzIGEKKzMyLWJpdCBvciA2NC1iaXQgZXhlY3V0YWJsZSkuIEl0J3MgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgdGhlIEVMRiBleGVjdXRhYmxlCitpbnRvIG1lbW9yeSBhbmQgcmVzb2x2aW5nIHJlZmVyZW5jZXMgdG8gc3ltYm9scyAoc28gdGhhdCB3aGVuIHlvdXIgY29kZSB0cmllcyB0bworanVtcCB0byBgZm9wZW4oMylgLCBzYXksIGl0IGxhbmRzIGluIHRoZSByaWdodCBwbGFjZSkuCisKKyMjIyMgdGVzdHMvIC0tLSB1bml0IHRlc3RzCisKK1RoZSBgdGVzdHMvYCBkaXJlY3RvcnkgY29udGFpbnMgdW5pdCB0ZXN0cy4gUm91Z2hseSBhcnJhbmdlZCBhcyBvbmUgZmlsZSBwZXIKK3B1YmxpY2x5LWV4cG9ydGVkIGhlYWRlciBmaWxlLgorCisjIyMjIGJlbmNobWFya3MvIC0tLSBiZW5jaG1hcmtzCisKK1RoZSBgYmVuY2htYXJrcy9gIGRpcmVjdG9yeSBjb250YWlucyBiZW5jaG1hcmtzLgorCisKK1doYXQncyBpbiBsaWJjLz8KKy0tLS0tLS0tLS0tLS0tLS0KKworPHByZT4KK2xpYmMvCisgIGFyY2gtYXJtLworICBhcmNoLWFybTY0LworICBhcmNoLWNvbW1vbi8KKyAgYXJjaC1taXBzLworICBhcmNoLW1pcHM2NC8KKyAgYXJjaC14ODYvCisgIGFyY2gteDg2XzY0LworICAgICMgRWFjaCBhcmNoaXRlY3R1cmUgaGFzIGl0cyBvd24gc3ViZGlyZWN0b3J5IGZvciBzdHVmZiB0aGF0IGlzbid0IHNoYXJlZAorICAgICMgYmVjYXVzZSBpdCdzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gVGhlcmUgd2lsbCBiZSBhIC5tayBmaWxlIGluIGhlcmUgdGhhdAorICAgICMgZHJhZ3MgaW4gYWxsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMuCisgICAgYmlvbmljLworICAgICAgIyBFdmVyeSBhcmNoaXRlY3R1cmUgbmVlZHMgYSBoYW5kZnVsIG9mIG1hY2hpbmUtc3BlY2lmaWMgYXNzZW1ibGVyIGZpbGVzLgorICAgICAgIyBUaGV5IGxpdmUgaGVyZS4KKyAgICBpbmNsdWRlLworICAgICAgbWFjaGluZS8KKyAgICAgICAgIyBUaGUgbWFqb3JpdHkgb2YgaGVhZGVyIGZpbGVzIGFyZSBhY3R1YWxseSBpbiBsaWJjL2luY2x1ZGUvLCBidXQgbWFueQorICAgICAgICAjIG9mIHRoZW0gcHVsbCBpbiBhIDxtYWNoaW5lL3NvbWV0aGluZy5oPiBmb3IgdGhpbmdzIGxpa2UgbGltaXRzLAorICAgICAgICAjIGVuZGlhbm5lc3MsIGFuZCBob3cgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBhcmUgcmVwcmVzZW50ZWQuIFRob3NlCisgICAgICAgICMgaGVhZGVycyBsaXZlIGhlcmUuCisgICAgc3RyaW5nLworICAgICAgIyBNb3N0IGFyY2hpdGVjdHVyZXMgaGF2ZSBhIGhhbmRmdWwgb2Ygb3B0aW9uYWwgYXNzZW1ibGVyIGZpbGVzCisgICAgICAjIGltcGxlbWVudGluZyBvcHRpbWl6ZWQgdmVyc2lvbnMgb2YgdmFyaW91cyByb3V0aW5lcy4gVGhlIDxzdHJpbmcuaD4KKyAgICAgICMgZnVuY3Rpb25zIGFyZSBwYXJ0aWN1bGFyIGZhdm9yaXRlcy4KKyAgICBzeXNjYWxscy8KKyAgICAgICMgVGhlIHN5c2NhbGxzIGRpcmVjdG9yaWVzIGNvbnRhaW4gc2NyaXB0LWdlbmVyYXRlZCBhc3NlbWJsZXIgZmlsZXMuCisgICAgICAjIFNlZSAnQWRkaW5nIHN5c3RlbSBjYWxscycgbGF0ZXIuCisKKyAgaW5jbHVkZS8KKyAgICAjIFRoZSBwdWJsaWMgaGVhZGVyIGZpbGVzIG9uIGV2ZXJ5b25lJ3MgaW5jbHVkZSBwYXRoLiBUaGVzZSBhcmUgYSBtaXh0dXJlIG9mCisgICAgIyBmaWxlcyB3cml0dGVuIGJ5IHVzIGFuZCBmaWxlcyB0YWtlbiBmcm9tIEJTRC4KKworICBrZXJuZWwvCisgICAgIyBUaGUga2VybmVsIHVhcGkgaGVhZGVyIGZpbGVzLiBUaGVzZSBhcmUgc2NydWJiZWQgY29waWVzIG9mIHRoZSBvcmlnaW5hbHMKKyAgICAjIGluIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzLy4gVGhlc2UgZmlsZXMgbXVzdCBub3QgYmUgZWRpdGVkIGRpcmVjdGx5LiBUaGUKKyAgICAjIGdlbmVyYXRlX3VhcGlfaGVhZGVycy5zaCBzY3JpcHQgc2hvdWxkIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGtlcm5lbCB0cmVlIHRvCisgICAgIyBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy8gLS0tIHRoaXMgdGFrZXMgY2FyZSBvZiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljCisgICAgIyBkZXRhaWxzLiBUaGUgdXBkYXRlX2FsbC5weSBzY3JpcHQgc2hvdWxkIGJlIHVzZWQgdG8gcmVnZW5lcmF0ZSBiaW9uaWMncworICAgICMgc2NydWJiZWQgaGVhZGVycyBmcm9tIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzLy4KKworICBwcml2YXRlLworICAgICMgVGhlc2UgYXJlIHByaXZhdGUgaGVhZGVyIGZpbGVzIG1lYW50IGZvciB1c2Ugd2l0aGluIGJpb25pYyBpdHNlbGYuCisKKyAgZG5zLworICAgICMgQ29udGFpbnMgdGhlIEROUyByZXNvbHZlciAob3JpZ2luYXRlcyBmcm9tIE5ldEJTRCBjb2RlKS4KKworICB1cHN0cmVhbS1kbG1hbGxvYy8KKyAgdXBzdHJlYW0tZnJlZWJzZC8KKyAgdXBzdHJlYW0tbmV0YnNkLworICB1cHN0cmVhbS1vcGVuYnNkLworICAgICMgVGhlc2UgZGlyZWN0b3JpZXMgY29udGFpbiB1bm1vbGVzdGVkIHVwc3RyZWFtIHNvdXJjZS4gQW55IHRpbWUgd2UgY2FuCisgICAgIyBqdXN0IHVzZSBhIEJTRCBpbXBsZW1lbnRhdGlvbiBvZiBzb21ldGhpbmcgdW5tb2RpZmllZCwgd2Ugc2hvdWxkLgorICAgICMgVGhlIHN0cnVjdHVyZSB1bmRlciB0aGVzZSBkaXJlY3RvcmllcyBtaW1pY3MgdGhlIHVwc3RyZWFtIHRyZWUsCisgICAgIyBidXQgdGhlcmUncyBhbHNvLi4uCisgICAgYW5kcm9pZC8KKyAgICAgIGluY2x1ZGUvCisgICAgICAgICMgVGhpcyBpcyB3aGVyZSB3ZSBrZWVwIHRoZSBoYWNrcyBuZWNlc3NhcnkgdG8gYnVpbGQgQlNEIHNvdXJjZQorICAgICAgICAjIGluIG91ciB3b3JsZC4gVGhlICotY29tcGF0LmggZmlsZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQKKyAgICAgICAgIyB1c2luZyAtaW5jbHVkZSwgYnV0IHdlIGFsc28gcHJvdmlkZSBlcXVpdmFsZW50cyBmb3IgbWlzc2luZworICAgICAgICAjIGhlYWRlci9zb3VyY2UgZmlsZXMgbmVlZGVkIGJ5IHRoZSBCU0QgaW1wbGVtZW50YXRpb24uCisKKyAgYmlvbmljLworICAgICMgVGhpcyBpcyB0aGUgYmlnZ2VzdCBtZXNzLiBUaGUgQysrIGZpbGVzIGFyZSBmaWxlcyB3ZSBvd24sIHR5cGljYWxseQorICAgICMgYmVjYXVzZSB0aGUgTGludXgga2VybmVsIGludGVyZmFjZSBpcyBzdWZmaWNpZW50bHkgZGlmZmVyZW50IHRoYXQgd2UKKyAgICAjIGNhbid0IHVzZSBhbnkgb2YgdGhlIEJTRCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBDIGZpbGVzIGFyZSB1c3VhbGx5CisgICAgIyBsZWdhY3kgbWVzcyB0aGF0IG5lZWRzIHRvIGJlIHNvcnRlZCBvdXQsIGVpdGhlciBieSByZXBsYWNpbmcgaXQgd2l0aAorICAgICMgY3VycmVudCB1cHN0cmVhbSBzb3VyY2UgaW4gb25lIG9mIHRoZSB1cHN0cmVhbSBkaXJlY3RvcmllcyBvciBieQorICAgICMgc3dpdGNoaW5nIHRoZSBmaWxlIHRvIEMrKyBhbmQgY2xlYW5pbmcgaXQgdXAuCisKKyAgc3RkaW8vCisgICAgIyBUaGVzZSBhcmUgbGVnYWN5IGZpbGVzIG9mIGR1YmlvdXMgcHJvdmVuYW5jZS4gV2UncmUgd29ya2luZyB0byBjbGVhbgorICAgICMgdGhpcyBtZXNzIHVwLCBhbmQgdGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGRpc2FwcGVhci4KKworICB0b29scy8KKyAgICAjIFZhcmlvdXMgdG9vbHMgdXNlZCB0byBtYWludGFpbiBiaW9uaWMuCisKKyAgdHpjb2RlLworICAgICMgQSBtb2RpZmllZCBzdXBlcnNldCBvZiB0aGUgSUFOQSB0emNvZGUuIE1vc3Qgb2YgdGhlIG1vZGlmaWNhdGlvbnMgcmVsYXRlCisgICAgIyB0byBBbmRyb2lkJ3MgdXNlIG9mIGEgc2luZ2xlIGZpbGUgKHdpdGggY29ycmVzcG9uZGluZyBpbmRleCkgdG8gY29udGFpbgorICAgICMgdGltZSB6b25lIGRhdGEuCisgIHpvbmVpbmZvLworICAgICMgQW5kcm9pZC1mb3JtYXQgdGltZSB6b25lIGRhdGEuCisgICAgIyBTZWUgJ1VwZGF0aW5nIHR6ZGF0YScgbGF0ZXIuCis8L3ByZT4KKworCitBZGRpbmcgc3lzdGVtIGNhbGxzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZGluZyBhIHN5c3RlbSBjYWxsIHVzdWFsbHkgaW52b2x2ZXM6CisKKyAgMS4gQWRkIGVudHJpZXMgdG8gU1lTQ0FMTFMuVFhULgorICAgICBTZWUgU1lTQ0FMTFMuVFhUIGl0c2VsZiBmb3IgZG9jdW1lbnRhdGlvbiBvbiB0aGUgZm9ybWF0LgorICAyLiBSdW4gdGhlIGdlbnN5c2NhbGxzLnB5IHNjcmlwdC4KKyAgMy4gQWRkIGNvbnN0YW50cyAoYW5kIHBlcmhhcHMgdHlwZXMpIHRvIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXIgZmlsZS4KKyAgICAgTm90ZSB0aGF0IHlvdSBzaG91bGQgY2hlY2sgdG8gc2VlIHdoZXRoZXIgdGhlIGNvbnN0YW50cyBhcmUgYWxyZWFkeSBpbgorICAgICBrZXJuZWwgdWFwaSBoZWFkZXIgZmlsZXMsIGluIHdoaWNoIGNhc2UgeW91IGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhhdAorICAgICB0aGUgYXBwcm9wcmlhdGUgUE9TSVggaGVhZGVyIGZpbGUgaW4gbGliYy9pbmNsdWRlLyBpbmNsdWRlcyB0aGUKKyAgICAgcmVsZXZhbnQgZmlsZSBvciBmaWxlcy4KKyAgNC4gQWRkIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB0byB0aGUgYXBwcm9wcmlhdGUgaGVhZGVyIGZpbGUuCisgIDUuIEFkZCBhdCBsZWFzdCBiYXNpYyB0ZXN0cy4gRXZlbiBhIHRlc3QgdGhhdCBkZWxpYmVyYXRlbHkgc3VwcGxpZXMKKyAgICAgYW4gaW52YWxpZCBhcmd1bWVudCBoZWxwcyBjaGVjayB0aGF0IHdlJ3JlIGdlbmVyYXRpbmcgdGhlIHJpZ2h0IHN5bWJvbAorICAgICBhbmQgaGF2ZSB0aGUgcmlnaHQgZGVjbGFyYXRpb24gaW4gdGhlIGhlYWRlciBmaWxlLiAoQW5kIHN0cmFjZSgxKSBjYW4KKyAgICAgY29uZmlybSB0aGF0IHRoZSBjb3JyZWN0IHN5c3RlbSBjYWxsIGlzIGJlaW5nIG1hZGUuKQorCisKK1VwZGF0aW5nIGtlcm5lbCBoZWFkZXIgZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgbWVudGlvbmVkIGFib3ZlLCB0aGlzIGlzIGN1cnJlbnRseSBhIHR3by1zdGVwIHByb2Nlc3M6CisKKyAgMS4gVXNlIGdlbmVyYXRlX3VhcGlfaGVhZGVycy5zaCB0byBnbyBmcm9tIGEgTGludXggc291cmNlIHRyZWUgdG8gYXBwcm9wcmlhdGUKKyAgICAgY29udGVudHMgZm9yIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzLy4KKyAgMi4gUnVuIHVwZGF0ZV9hbGwucHkgdG8gc2NydWIgdGhvc2UgaGVhZGVycyBhbmQgaW1wb3J0IHRoZW0gaW50byBiaW9uaWMuCisKKworVXBkYXRpbmcgdHpkYXRhCistLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBmdWxseSBhdXRvbWF0ZWQ6CisKKyAgMS4gUnVuIHVwZGF0ZS10emRhdGEucHkuCisKKworVmVyaWZ5aW5nIGNoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBtYWtlIGEgY2hhbmdlIHRoYXQgaXMgbGlrZWx5IHRvIGhhdmUgYSB3aWRlIGVmZmVjdCBvbiB0aGUgdHJlZSAoc3VjaCBhcyBhCitsaWJjIGhlYWRlciBjaGFuZ2UpLCB5b3Ugc2hvdWxkIHJ1biBgbWFrZSBjaGVja2J1aWxkYC4gQSByZWd1bGFyIGBtYWtlYCB3aWxsCitfbm90XyBidWlsZCB0aGUgZW50aXJlIHRyZWU7IGp1c3QgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHByb2plY3RzIHRoYXQgYXJlCityZXF1aXJlZCBmb3IgdGhlIGRldmljZS4gVGVzdHMsIGFkZGl0aW9uYWwgZGV2ZWxvcGVyIHRvb2xzLCBhbmQgdmFyaW91cyBvdGhlcgorbW9kdWxlcyB3aWxsIG5vdCBiZSBidWlsdC4gTm90ZSB0aGF0IGBtYWtlIGNoZWNrYnVpbGRgIHdpbGwgbm90IGJlIGNvbXBsZXRlCitlaXRoZXIsIGFzIGBtYWtlIHRlc3RzYCBjb3ZlcnMgYSBmZXcgYWRkaXRpb25hbCBtb2R1bGVzLCBidXQgZ2VuZXJhbGx5IHNwZWFraW5nCitgbWFrZSBjaGVja2J1aWxkYCBpcyBlbm91Z2guCisKKworUnVubmluZyB0aGUgdGVzdHMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB0ZXN0cyBhcmUgYWxsIGJ1aWx0IGZyb20gdGhlIHRlc3RzLyBkaXJlY3RvcnkuCisKKyMjIyBEZXZpY2UgdGVzdHMKKworICAgICQgbW1hCisgICAgJCBhZGIgc3luYworICAgICQgYWRiIHNoZWxsIC9kYXRhL25hdGl2ZXRlc3QvYmlvbmljLXVuaXQtdGVzdHMvYmlvbmljLXVuaXQtdGVzdHMzMgorICAgICQgYWRiIHNoZWxsIFwKKyAgICAgICAgL2RhdGEvbmF0aXZldGVzdC9iaW9uaWMtdW5pdC10ZXN0cy1zdGF0aWMvYmlvbmljLXVuaXQtdGVzdHMtc3RhdGljMzIKKyAgICAjIE9ubHkgZm9yIDY0LWJpdCB0YXJnZXRzCisgICAgJCBhZGIgc2hlbGwgL2RhdGEvbmF0aXZldGVzdC9iaW9uaWMtdW5pdC10ZXN0cy9iaW9uaWMtdW5pdC10ZXN0czY0CisgICAgJCBhZGIgc2hlbGwgXAorICAgICAgICAvZGF0YS9uYXRpdmV0ZXN0L2Jpb25pYy11bml0LXRlc3RzLXN0YXRpYy9iaW9uaWMtdW5pdC10ZXN0cy1zdGF0aWM2NAorCisjIyMgSG9zdCB0ZXN0cworCitUaGUgaG9zdCB0ZXN0cyByZXF1aXJlIHRoYXQgeW91IGhhdmUgYGx1bmNoYGVkIGVpdGhlciBhbiB4ODYgb3IgeDg2XzY0IHRhcmdldC4KKworICAgICQgbW1hCisgICAgIyA2NC1iaXQgdGVzdHMgZm9yIDY0LWJpdCB0YXJnZXRzLCAzMi1iaXQgb3RoZXJ3aXNlLgorICAgICQgbW0gYmlvbmljLXVuaXQtdGVzdHMtcnVuLW9uLWhvc3QKKyAgICAjIE9ubHkgZXhpc3RzIGZvciA2NC1iaXQgdGFyZ2V0cy4KKyAgICAkIG1tIGJpb25pYy11bml0LXRlc3RzLXJ1bi1vbi1ob3N0MzIKKworIyMjIEFnYWluc3QgZ2xpYmMKKworQXMgYSB3YXkgdG8gY2hlY2sgdGhhdCBvdXIgdGVzdHMgZG8gaW4gZmFjdCB0ZXN0IHRoZSBjb3JyZWN0IGJlaGF2aW9yIChhbmQgbm90CitqdXN0IHRoZSBiZWhhdmlvciB3ZSB0aGluayBpcyBjb3JyZWN0KSwgaXQgaXMgcG9zc2libGUgdG8gcnVuIHRoZSB0ZXN0cyBhZ2FpbnN0Cit0aGUgaG9zdCdzIGdsaWJjLgorCisgICAgJCBtbWEKKyAgICAkIGJpb25pYy11bml0LXRlc3RzLWdsaWJjMzIgIyBhbHJlYWR5IGluIHlvdXIgcGF0aAorICAgICQgYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmM2NAorCisKK0dhdGhlcmluZyB0ZXN0IGNvdmVyYWdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgZWl0aGVyIGhvc3Qgb3IgdGFyZ2V0IGNvdmVyYWdlLCB5b3UgbXVzdCBmaXJzdDoKKworICogYCQgZXhwb3J0IE5BVElWRV9DT1ZFUkFHRT10cnVlYAorICAgICAqIE5vdGUgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIGlzIGlnbm9yYW50IHRvIHRoaXMgZmxhZyBiZWluZyB0b2dnbGVkLCBpLmUuIGlmCisgICAgICAgeW91IGNoYW5nZSB0aGlzIGZsYWcsIHlvdSB3aWxsIGhhdmUgdG8gbWFudWFsbHkgcmVidWlsZCBiaW9uaWMuCisgKiBTZXQgYGJpb25pY19jb3ZlcmFnZT10cnVlYCBpbiBgbGliYy9BbmRyb2lkLm1rYCBhbmQgYGxpYm0vQW5kcm9pZC5ta2AuCisKKyMjIyBDb3ZlcmFnZSBmcm9tIGRldmljZSB0ZXN0cworCisgICAgJCBtbWEKKyAgICAkIGFkYiBzeW5jCisgICAgJCBhZGIgc2hlbGwgXAorICAgICAgICBHQ09WX1BSRUZJWD0vZGF0YS9sb2NhbC90bXAvZ2NvdiBcCisgICAgICAgIEdDT1ZfUFJFRklYX1NUUklQPWBlY2hvICRBTkRST0lEX0JVSUxEX1RPUCB8IGdyZXAgLW8gLyB8IHdjIC1sYCBcCisgICAgICAgIC9kYXRhL25hdGl2ZXRlc3QvYmlvbmljLXVuaXQtdGVzdHMvYmlvbmljLXVuaXQtdGVzdHMzMgorICAgICQgYWNvdgorCitgYWNvdmAgd2lsbCBwdWxsIGFsbCBjb3ZlcmFnZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkZXZpY2UsIHB1c2ggaXQgdG8gdGhlIHJpZ2h0CitkaXJlY3RvcmllcywgcnVuIGBsY292YCwgYW5kIG9wZW4gdGhlIGNvdmVyYWdlIHJlcG9ydCBpbiB5b3VyIGJyb3dzZXIuCisKKyMjIyBDb3ZlcmFnZSBmcm9tIGhvc3QgdGVzdHMKKworRmlyc3QsIGJ1aWxkIGFuZCBydW4gdGhlIGhvc3QgdGVzdHMgYXMgdXN1YWwgKHNlZSBhYm92ZSkuCisKKyAgICAkIGNyb290CisgICAgJCBsY292IC1jIC1kICRBTkRST0lEX1BST0RVQ1RfT1VUIC1vIGNvdmVyYWdlLmluZm8KKyAgICAkIGdlbmh0bWwgLW8gY292cmVwb3J0IGNvdmVyYWdlLmluZm8gIyBvciBsY292IC0tbGlzdCBjb3ZlcmFnZS5pbmZvCisKK1RoZSBjb3ZlcmFnZSByZXBvcnQgaXMgbm93IGF2YWlsYWJsZSBhdCBgY292cmVwb3J0L2luZGV4Lmh0bWxgLgpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy9BbmRyb2lkLm1rIGIvYmVuY2htYXJrcy9BbmRyb2lkLm1rCmluZGV4IDRkN2FkOTYuLmYxNjM0NjMgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3MvQW5kcm9pZC5taworKysgYi9iZW5jaG1hcmtzL0FuZHJvaWQubWsKQEAgLTMyLDcgKzMyLDYgQEAKIGJlbmNobWFya19zcmNfZmlsZXMgPSBcCiAgICAgYmVuY2htYXJrX21haW4uY3BwIFwKICAgICBtYXRoX2JlbmNobWFyay5jcHAgXAotICAgIHByb3BlcnR5X2JlbmNobWFyay5jcHAgXAogICAgIHB0aHJlYWRfYmVuY2htYXJrLmNwcCBcCiAgICAgc2VtYXBob3JlX2JlbmNobWFyay5jcHAgXAogICAgIHN0ZGlvX2JlbmNobWFyay5jcHAgXApAQCAtNDEsNyArNDAsOCBAQAogICAgIHVuaXN0ZF9iZW5jaG1hcmsuY3BwIFwKIAogIyBCdWlsZCBiZW5jaG1hcmtzIGZvciB0aGUgZGV2aWNlICh3aXRoIGJpb25pYydzIC5zbykuIFJ1biB3aXRoOgotIyAgIGFkYiBzaGVsbCBiaW9uaWMtYmVuY2htYXJrcworIyAgIGFkYiBzaGVsbCBiaW9uaWMtYmVuY2htYXJrczMyCisjICAgYWRiIHNoZWxsIGJpb25pYy1iZW5jaG1hcmtzNjQKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogTE9DQUxfTU9EVUxFIDo9IGJpb25pYy1iZW5jaG1hcmtzCiBMT0NBTF9NT0RVTEVfU1RFTV8zMiA6PSBiaW9uaWMtYmVuY2htYXJrczMyCkBAIC00OSwxMSArNDksMjkgQEAKIExPQ0FMX01VTFRJTElCIDo9IGJvdGgKIExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawogTE9DQUxfQ0ZMQUdTICs9ICQoYmVuY2htYXJrX2NfZmxhZ3MpCi1MT0NBTF9DX0lOQ0xVREVTICs9IGV4dGVybmFsL3N0bHBvcnQvc3RscG9ydCBiaW9uaWMvIGJpb25pYy9saWJzdGRjKysvaW5jbHVkZQotTE9DQUxfU0hBUkVEX0xJQlJBUklFUyArPSBsaWJzdGxwb3J0Ci1MT0NBTF9TUkNfRklMRVMgOj0gJChiZW5jaG1hcmtfc3JjX2ZpbGVzKQorTE9DQUxfU1JDX0ZJTEVTIDo9ICQoYmVuY2htYXJrX3NyY19maWxlcykgcHJvcGVydHlfYmVuY2htYXJrLmNwcAorTE9DQUxfQ1hYX1NUTCA6PSBsaWJjKysKIGluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQogCisjIFdlIGRvbid0IGJ1aWxkIGEgc3RhdGljIGJlbmNobWFyayBleGVjdXRhYmxlIGJlY2F1c2UgaXQncyBub3QgdXN1YWxseQorIyB1c2VmdWwuIElmIHlvdSdyZSB0cnlpbmcgdG8gcnVuIHRoZSBjdXJyZW50IGJlbmNobWFya3Mgb24gYW4gb2xkZXIKKyMgcmVsZWFzZSwgaXQncyAoc28gZmFyIGF0IGxlYXN0KSBhbHdheXMgYmVjYXVzZSB5b3Ugd2FudCB0byBtZWFzdXJlIHRoZQorIyBwZXJmb3JtYW5jZSBvZiB0aGUgb2xkIHJlbGVhc2UncyBsaWJjLCBhbmQgYSBzdGF0aWMgYmVuY2htYXJrIGlzbid0CisjIGdvaW5nIHRvIGxldCB5b3UgZG8gdGhhdC4KKworIyBCdWlsZCBiZW5jaG1hcmtzIGZvciB0aGUgaG9zdCAoYWdhaW5zdCBnbGliYyEpLiBSdW4gd2l0aDoKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IGJpb25pYy1iZW5jaG1hcmtzLWdsaWJjCitMT0NBTF9NT0RVTEVfU1RFTV8zMiA6PSBiaW9uaWMtYmVuY2htYXJrcy1nbGliYzMyCitMT0NBTF9NT0RVTEVfU1RFTV82NCA6PSBiaW9uaWMtYmVuY2htYXJrcy1nbGliYzY0CitMT0NBTF9NVUxUSUxJQiA6PSBib3RoCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKK0xPQ0FMX0NGTEFHUyArPSAkKGJlbmNobWFya19jX2ZsYWdzKQorTE9DQUxfTERGTEFHUyArPSAtbHJ0CitMT0NBTF9TUkNfRklMRVMgOj0gJChiZW5jaG1hcmtfc3JjX2ZpbGVzKQorTE9DQUxfQ1hYX1NUTCA6PSBsaWJjKysKK2luY2x1ZGUgJChCVUlMRF9IT1NUX0VYRUNVVEFCTEUpCisKIGlmZXEgKCQoSE9TVF9PUyktJChIT1NUX0FSQ0gpLCQoZmlsdGVyICQoSE9TVF9PUyktJChIT1NUX0FSQ0gpLGxpbnV4LXg4NiBsaW51eC14ODZfNjQpKQogaWZlcSAoJChUQVJHRVRfQVJDSCkseDg2KQogTElOS0VSID0gbGlua2VyCkBAIC02NCwxMyArODIsMTMgQEAKIGVuZGlmCiAKIGJpb25pYy1iZW5jaG1hcmtzLXJ1bi1vbi1ob3N0OiBiaW9uaWMtYmVuY2htYXJrcyAkKFRBUkdFVF9PVVRfRVhFQ1VUQUJMRVMpLyQoTElOS0VSKSAkKFRBUkdFVF9PVVRfRVhFQ1VUQUJMRVMpL3NoCi0JaWYgWyAhIC1kIC9zeXN0ZW0gLW8gISAtZCAvc3lzdGVtL2JpbiBdOyB0aGVuIFwKLQkgIGVjaG8gIkF0dGVtcHRpbmcgdG8gY3JlYXRlIC9zeXN0ZW0vYmluIjsgXAotCSAgc3VkbyBta2RpciAtcCAtbSAwNzc3IC9zeXN0ZW0vYmluOyBcCisJaWYgWyAhIC1kIC9zeXN0ZW0gXTsgdGhlbiBcCisJICBlY2hvICJBdHRlbXB0aW5nIHRvIGNyZWF0ZSAvc3lzdGVtIjsgXAorCSAgc3VkbyBta2RpciAtcCAtbSAwNzc3IC9zeXN0ZW07IFwKIAlmaQogCW1rZGlyIC1wICQoVEFSR0VUX09VVF9EQVRBKS9sb2NhbC90bXAKLQljcCAkKFRBUkdFVF9PVVRfRVhFQ1VUQUJMRVMpLyQoTElOS0VSKSAvc3lzdGVtL2JpbgotCWNwICQoVEFSR0VUX09VVF9FWEVDVVRBQkxFUykvc2ggL3N5c3RlbS9iaW4KKwlsbiAtZnMgYHJlYWxwYXRoICQoVEFSR0VUX09VVCkvYmluYCAvc3lzdGVtLworCWxuIC1mcyBgcmVhbHBhdGggJChUQVJHRVRfT1VUKS9ldGNgIC9zeXN0ZW0vCiAJQU5EUk9JRF9EQVRBPSQoVEFSR0VUX09VVF9EQVRBKSBcCiAJQU5EUk9JRF9ST09UPSQoVEFSR0VUX09VVCkgXAogCUxEX0xJQlJBUllfUEFUSD0kKFRBUkdFVF9PVVRfU0hBUkVEX0xJQlJBUklFUykgXApkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy9iZW5jaG1hcmtfbWFpbi5jcHAgYi9iZW5jaG1hcmtzL2JlbmNobWFya19tYWluLmNwcAppbmRleCBkNjA2NzBiLi44MTVkNTZiIDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL2JlbmNobWFya19tYWluLmNwcAorKysgYi9iZW5jaG1hcmtzL2JlbmNobWFya19tYWluLmNwcApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPHJlZ2V4Lmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CiAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8bWFwPgpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy9tYXRoX2JlbmNobWFyay5jcHAgYi9iZW5jaG1hcmtzL21hdGhfYmVuY2htYXJrLmNwcAppbmRleCBhOTc0OGNkLi44ZDZkZDEwIDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL21hdGhfYmVuY2htYXJrLmNwcAorKysgYi9iZW5jaG1hcmtzL21hdGhfYmVuY2htYXJrLmNwcApAQCAtMjAsOCArMjAsOCBAQAogI2luY2x1ZGUgPG1hdGguaD4KIAogLy8gQXZvaWQgb3B0aW1pemF0aW9uLgotZG91YmxlIGQ7Ci1kb3VibGUgdjsKK3ZvbGF0aWxlIGRvdWJsZSBkOwordm9sYXRpbGUgZG91YmxlIHY7CiAKIHN0YXRpYyB2b2lkIEJNX21hdGhfc3FydChpbnQgaXRlcnMpIHsKICAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKZGlmZiAtLWdpdCBhL2JlbmNobWFya3MvcHRocmVhZF9iZW5jaG1hcmsuY3BwIGIvYmVuY2htYXJrcy9wdGhyZWFkX2JlbmNobWFyay5jcHAKaW5kZXggYzAxMGRkMi4uOTJlNTk5OCAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy9wdGhyZWFkX2JlbmNobWFyay5jcHAKKysrIGIvYmVuY2htYXJrcy9wdGhyZWFkX2JlbmNobWFyay5jcHAKQEAgLTgwLDcgKzgwLDcgQEAKIAogc3RhdGljIHZvaWQgQk1fcHRocmVhZF9tdXRleF9sb2NrX0VSUk9SQ0hFQ0soaW50IGl0ZXJzKSB7CiAgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKLSAgcHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9FUlJPUkNIRUNLX01VVEVYX0lOSVRJQUxJWkVSOworICBwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX0VSUk9SQ0hFQ0tfTVVURVhfSU5JVElBTElaRVJfTlA7CiAgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CiAKICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CkBAIC05NCw3ICs5NCw3IEBACiAKIHN0YXRpYyB2b2lkIEJNX3B0aHJlYWRfbXV0ZXhfbG9ja19SRUNVUlNJVkUoaW50IGl0ZXJzKSB7CiAgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKLSAgcHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVI7CisgIHB0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QOwogICBTdGFydEJlbmNobWFya1RpbWluZygpOwogCiAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgewpAQCAtMTA1LDMgKzEwNSwzNSBAQAogICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CiB9CiBCRU5DSE1BUksoQk1fcHRocmVhZF9tdXRleF9sb2NrX1JFQ1VSU0lWRSk7CisKK3N0YXRpYyB2b2lkIEJNX3B0aHJlYWRfcndfbG9ja19yZWFkKGludCBpdGVycykgeworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisgIHB0aHJlYWRfcndsb2NrX3QgbG9jazsKKyAgcHRocmVhZF9yd2xvY2tfaW5pdCgmbG9jaywgTlVMTCk7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgcHRocmVhZF9yd2xvY2tfcmRsb2NrKCZsb2NrKTsKKyAgICBwdGhyZWFkX3J3bG9ja191bmxvY2soJmxvY2spOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworICBwdGhyZWFkX3J3bG9ja19kZXN0cm95KCZsb2NrKTsKK30KK0JFTkNITUFSSyhCTV9wdGhyZWFkX3J3X2xvY2tfcmVhZCk7CisKK3N0YXRpYyB2b2lkIEJNX3B0aHJlYWRfcndfbG9ja193cml0ZShpbnQgaXRlcnMpIHsKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworICBwdGhyZWFkX3J3bG9ja190IGxvY2s7CisgIHB0aHJlYWRfcndsb2NrX2luaXQoJmxvY2ssIE5VTEwpOworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIHB0aHJlYWRfcndsb2NrX3dybG9jaygmbG9jayk7CisgICAgcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZsb2NrKTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKyAgcHRocmVhZF9yd2xvY2tfZGVzdHJveSgmbG9jayk7Cit9CitCRU5DSE1BUksoQk1fcHRocmVhZF9yd19sb2NrX3dyaXRlKTsKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvc3RkaW9fYmVuY2htYXJrLmNwcCBiL2JlbmNobWFya3Mvc3RkaW9fYmVuY2htYXJrLmNwcAppbmRleCBlODk5ZGY3Li4zODZlYTA0IDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3N0ZGlvX2JlbmNobWFyay5jcHAKKysrIGIvYmVuY2htYXJrcy9zdGRpb19iZW5jaG1hcmsuY3BwCkBAIC0yNSwxNCArMjUsMTkgQEAKICAgICBBcmcoMSktPkFyZygyKS0+QXJnKDMpLT5BcmcoNCktPkFyZyg4KS0+QXJnKDE2KS0+QXJnKDMyKS0+QXJnKDY0KS0+QXJnKDUxMiktPiBcCiAgICAgQXJnKDEqS0IpLT5BcmcoNCpLQiktPkFyZyg4KktCKS0+QXJnKDE2KktCKS0+QXJnKDY0KktCKQogCi1zdGF0aWMgdm9pZCBCTV9zdGRpb19mcmVhZChpbnQgaXRlcnMsIGludCBjaHVua19zaXplKSB7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgRm4+CitzdGF0aWMgdm9pZCBSZWFkV3JpdGVUZXN0KGludCBpdGVycywgaW50IGNodW5rX3NpemUsIEZuIGYsIGJvb2wgYnVmZmVyZWQpIHsKICAgU3RvcEJlbmNobWFya1RpbWluZygpOwogICBGSUxFKiBmcCA9IGZvcGVuKCIvZGV2L3plcm8iLCAicnciKTsKICAgY2hhciogYnVmID0gbmV3IGNoYXJbY2h1bmtfc2l6ZV07CiAgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CiAKKyAgaWYgKCFidWZmZXJlZCkgeworICAgIHNldHZidWYoZnAsIDAsIF9JT05CRiwgMCk7CisgIH0KKwogICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKLSAgICBmcmVhZChidWYsIGNodW5rX3NpemUsIDEsIGZwKTsKKyAgICBmKGJ1ZiwgY2h1bmtfc2l6ZSwgMSwgZnApOwogICB9CiAKICAgU3RvcEJlbmNobWFya1RpbWluZygpOwpAQCAtNDAsMjIgKzQ1LDIzIEBACiAgIGRlbGV0ZVtdIGJ1ZjsKICAgZmNsb3NlKGZwKTsKIH0KKworc3RhdGljIHZvaWQgQk1fc3RkaW9fZnJlYWQoaW50IGl0ZXJzLCBpbnQgY2h1bmtfc2l6ZSkgeworICBSZWFkV3JpdGVUZXN0KGl0ZXJzLCBjaHVua19zaXplLCBmcmVhZCwgdHJ1ZSk7Cit9CiBCRU5DSE1BUksoQk1fc3RkaW9fZnJlYWQpLT5BVF9DT01NT05fU0laRVM7CiAKLQogc3RhdGljIHZvaWQgQk1fc3RkaW9fZndyaXRlKGludCBpdGVycywgaW50IGNodW5rX3NpemUpIHsKLSAgU3RvcEJlbmNobWFya1RpbWluZygpOwotICBGSUxFKiBmcCA9IGZvcGVuKCIvZGV2L3plcm8iLCAicnciKTsKLSAgY2hhciogYnVmID0gbmV3IGNoYXJbY2h1bmtfc2l6ZV07Ci0gIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7Ci0gICAgICBmd3JpdGUoYnVmLCBjaHVua19zaXplLCAxLCBmcCk7Ci0gIH0KLQotICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Ci0gIFNldEJlbmNobWFya0J5dGVzUHJvY2Vzc2VkKGludDY0X3QoaXRlcnMpICogaW50NjRfdChjaHVua19zaXplKSk7Ci0gIGRlbGV0ZVtdIGJ1ZjsKLSAgZmNsb3NlKGZwKTsKKyAgUmVhZFdyaXRlVGVzdChpdGVycywgY2h1bmtfc2l6ZSwgZndyaXRlLCB0cnVlKTsKIH0KIEJFTkNITUFSSyhCTV9zdGRpb19md3JpdGUpLT5BVF9DT01NT05fU0laRVM7CisKK3N0YXRpYyB2b2lkIEJNX3N0ZGlvX2ZyZWFkX3VuYnVmZmVyZWQoaW50IGl0ZXJzLCBpbnQgY2h1bmtfc2l6ZSkgeworICBSZWFkV3JpdGVUZXN0KGl0ZXJzLCBjaHVua19zaXplLCBmcmVhZCwgZmFsc2UpOworfQorQkVOQ0hNQVJLKEJNX3N0ZGlvX2ZyZWFkX3VuYnVmZmVyZWQpLT5BVF9DT01NT05fU0laRVM7CisKK3N0YXRpYyB2b2lkIEJNX3N0ZGlvX2Z3cml0ZV91bmJ1ZmZlcmVkKGludCBpdGVycywgaW50IGNodW5rX3NpemUpIHsKKyAgUmVhZFdyaXRlVGVzdChpdGVycywgY2h1bmtfc2l6ZSwgZndyaXRlLCBmYWxzZSk7Cit9CitCRU5DSE1BUksoQk1fc3RkaW9fZndyaXRlX3VuYnVmZmVyZWQpLT5BVF9DT01NT05fU0laRVM7CmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3RpbWVfYmVuY2htYXJrLmNwcCBiL2JlbmNobWFya3MvdGltZV9iZW5jaG1hcmsuY3BwCmluZGV4IDIyZjZlOGUuLmYwOTNlYzEgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3MvdGltZV9iZW5jaG1hcmsuY3BwCisrKyBiL2JlbmNobWFya3MvdGltZV9iZW5jaG1hcmsuY3BwCkBAIC0xNiw3ICsxNiw5IEBACiAKICNpbmNsdWRlICJiZW5jaG1hcmsuaCIKIAorI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAKIHN0YXRpYyB2b2lkIEJNX3RpbWVfY2xvY2tfZ2V0dGltZShpbnQgaXRlcnMpIHsKZGlmZiAtLWdpdCBhL2JlbmNobWFya3MvdW5pc3RkX2JlbmNobWFyay5jcHAgYi9iZW5jaG1hcmtzL3VuaXN0ZF9iZW5jaG1hcmsuY3BwCmluZGV4IDdlMmFjMzAuLjk0YmUxZGQgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3MvdW5pc3RkX2JlbmNobWFyay5jcHAKKysrIGIvYmVuY2htYXJrcy91bmlzdGRfYmVuY2htYXJrLmNwcApAQCAtNDEsNiArNDEsOCBAQAogfQogQkVOQ0hNQVJLKEJNX3VuaXN0ZF9nZXRwaWRfc3lzY2FsbCk7CiAKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisKIC8vIFN0b3AgR0NDIG9wdGltaXppbmcgb3V0IG91ciBwdXJlIGZ1bmN0aW9uLgogLyogTXVzdCBub3QgYmUgc3RhdGljISAqLyBwaWRfdCAoKmdldHRpZF9mcCkoKSA9IGdldHRpZDsKIApAQCAtNTUsNiArNTcsOCBAQAogfQogQkVOQ0hNQVJLKEJNX3VuaXN0ZF9nZXR0aWQpOwogCisjZW5kaWYKKwogc3RhdGljIHZvaWQgQk1fdW5pc3RkX2dldHRpZF9zeXNjYWxsKGludCBpdGVycykgewogICBTdGFydEJlbmNobWFya1RpbWluZygpOwogCmRpZmYgLS1naXQgYS9saWJjL0FuZHJvaWQubWsgYi9saWJjL0FuZHJvaWQubWsKaW5kZXggMDQ1NTU2ZS4uMTNmYzI5NyAxMDA2NDQKLS0tIGEvbGliYy9BbmRyb2lkLm1rCisrKyBiL2xpYmMvQW5kcm9pZC5tawpAQCAtMSw1ICsxLDcgQEAKIExPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKIAorYmlvbmljX2NvdmVyYWdlIDo9IGZhbHNlCisKICMgTWFrZSBldmVyeXRoaW5nIGRlcGVuZCBvbiBhbnkgY2hhbmdlcyB0byBpbmNsdWRlZCBtYWtlZmlsZXMuCiBsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKIApAQCAtMzgsMTIgKzQwLDkgQEAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBsaWJjX2NvbW1vbl9zcmNfZmlsZXMgOj0gXAogICAgIGJpb25pYy9iaW5kcmVzdnBvcnQuYyBcCi0gICAgYmlvbmljL2RhZW1vbi5jIFwKLSAgICBiaW9uaWMvZXJyLmMgXAogICAgIGJpb25pYy9ldGhlcl9hdG9uLmMgXAogICAgIGJpb25pYy9ldGhlcl9udG9hLmMgXAogICAgIGJpb25pYy9mdHMuYyBcCi0gICAgYmlvbmljL2dldGhvc3RuYW1lLmMgXAogICAgIGJpb25pYy9nZXRwcmlvcml0eS5jIFwKICAgICBiaW9uaWMvaWZfaW5kZXh0b25hbWUuYyBcCiAgICAgYmlvbmljL2lmX25hbWV0b2luZGV4LmMgXApAQCAtNTEsMTEgKzUwLDkgQEAKICAgICBiaW9uaWMvaW9jdGwuYyBcCiAgICAgYmlvbmljL2lzYXR0eS5jIFwKICAgICBiaW9uaWMvbWVtbWVtLmMgXAotICAgIGJpb25pYy9wYXRoY29uZi5jIFwKICAgICBiaW9uaWMvcHV0dXRsaW5lLmMgXAogICAgIGJpb25pYy9zY2hlZF9jcHVhbGxvYy5jIFwKICAgICBiaW9uaWMvc2NoZWRfY3B1Y291bnQuYyBcCi0gICAgYmlvbmljL3NlbWFwaG9yZS5jIFwKICAgICBiaW9uaWMvc2lnYmxvY2suYyBcCiAgICAgYmlvbmljL3NpZ2ludGVycnVwdC5jIFwKICAgICBiaW9uaWMvc2lnc2V0bWFzay5jIFwKQEAgLTYzLDYgKzYwLDcgQEAKICAgICBzdGRpby9maW5kZnAuYyBcCiAgICAgc3RkaW8vc25wcmludGYuY1wKICAgICBzdGRpby9zcHJpbnRmLmMgXAorICAgIHN0ZGlvL3N0ZGlvX2V4dC5jcHAgXAogCiAjIEZvcnRpZnkgaW1wbGVtZW50YXRpb25zIG9mIGxpYmMgZnVuY3Rpb25zLgogbGliY19jb21tb25fc3JjX2ZpbGVzICs9IFwKQEAgLTkxLDYgKzg5LDcgQEAKICAgICBiaW9uaWMvYWNjZXNzLmNwcCBcCiAgICAgYmlvbmljL2Fzc2VydC5jcHAgXAogICAgIGJpb25pYy9hdG9mLmNwcCBcCisgICAgYmlvbmljL2Jpb25pY19zeXN0cmFjZS5jcHAgXAogICAgIGJpb25pYy9iaW9uaWNfdGltZV9jb252ZXJzaW9ucy5jcHAgXAogICAgIGJpb25pYy9icmsuY3BwIFwKICAgICBiaW9uaWMvYzE2cnRvbWIuY3BwIFwKQEAgLTk5LDYgKzk4LDggQEAKICAgICBiaW9uaWMvY2hvd24uY3BwIFwKICAgICBiaW9uaWMvY2xlYXJlbnYuY3BwIFwKICAgICBiaW9uaWMvY2xvY2suY3BwIFwKKyAgICBiaW9uaWMvY2xvY2tfZ2V0Y3B1Y2xvY2tpZC5jcHAgXAorICAgIGJpb25pYy9jbG9ja19uYW5vc2xlZXAuY3BwIFwKICAgICBiaW9uaWMvY2xvbmUuY3BwIFwKICAgICBiaW9uaWMvX19jbXNnX254dGhkci5jcHAgXAogICAgIGJpb25pYy9jb25uZWN0LmNwcCBcCkBAIC0xMTksOSArMTIwLDExIEBACiAgICAgYmlvbmljL2dldGF1eHZhbC5jcHAgXAogICAgIGJpb25pYy9nZXRjd2QuY3BwIFwKICAgICBiaW9uaWMvZ2V0ZW50cm9weV9saW51eC5jIFwKKyAgICBiaW9uaWMvZ2V0aG9zdG5hbWUuY3BwIFwKICAgICBiaW9uaWMvZ2V0cGdycC5jcHAgXAogICAgIGJpb25pYy9nZXRwaWQuY3BwIFwKICAgICBiaW9uaWMvZ2V0dGlkLmNwcCBcCisgICAgYmlvbmljL19fZ251X2Jhc2VuYW1lLmNwcCBcCiAgICAgYmlvbmljL2lub3RpZnlfaW5pdC5jcHAgXAogICAgIGJpb25pYy9sY2hvd24uY3BwIFwKICAgICBiaW9uaWMvbGZzNjRfc3VwcG9ydC5jcHAgXApAQCAtMTMzLDYgKzEzNiw3IEBACiAgICAgYmlvbmljL2xpbmsuY3BwIFwKICAgICBiaW9uaWMvbG9jYWxlLmNwcCBcCiAgICAgYmlvbmljL2xzdGF0LmNwcCBcCisgICAgYmlvbmljL21hbGxvY19pbmZvLmNwcCBcCiAgICAgYmlvbmljL21icnRvYzE2LmNwcCBcCiAgICAgYmlvbmljL21icnRvYzMyLmNwcCBcCiAgICAgYmlvbmljL21ic3RhdGUuY3BwIFwKQEAgLTE0Miw2ICsxNDYsNyBAQAogICAgIGJpb25pYy9tbnRlbnQuY3BwIFwKICAgICBiaW9uaWMvTmV0ZENsaWVudERpc3BhdGNoLmNwcCBcCiAgICAgYmlvbmljL29wZW4uY3BwIFwKKyAgICBiaW9uaWMvcGF0aGNvbmYuY3BwIFwKICAgICBiaW9uaWMvcGF1c2UuY3BwIFwKICAgICBiaW9uaWMvcGlwZS5jcHAgXAogICAgIGJpb25pYy9wb2xsLmNwcCBcCkBAIC0xODEsNiArMTg2LDcgQEAKICAgICBiaW9uaWMvc2NhbmRpci5jcHAgXAogICAgIGJpb25pYy9zY2hlZF9nZXRhZmZpbml0eS5jcHAgXAogICAgIGJpb25pYy9zY2hlZF9nZXRjcHUuY3BwIFwKKyAgICBiaW9uaWMvc2VtYXBob3JlLmNwcCBcCiAgICAgYmlvbmljL3NlbmQuY3BwIFwKICAgICBiaW9uaWMvc2V0ZWdpZC5jcHAgXAogICAgIGJpb25pYy9fX3NldF9lcnJuby5jcHAgXApAQCAtMjAxLDE5ICsyMDcsMTQgQEAKICAgICBiaW9uaWMvc29ja2V0LmNwcCBcCiAgICAgYmlvbmljL3N0YXQuY3BwIFwKICAgICBiaW9uaWMvc3RhdHZmcy5jcHAgXAotICAgIGJpb25pYy9zdHJjb2xsX2wuY3BwIFwKICAgICBiaW9uaWMvc3RyZXJyb3IuY3BwIFwKICAgICBiaW9uaWMvc3RyZXJyb3Jfci5jcHAgXAotICAgIGJpb25pYy9zdHJmdGltZV9sLmNwcCBcCiAgICAgYmlvbmljL3N0cnNpZ25hbC5jcHAgXAogICAgIGJpb25pYy9zdHJ0b2xkLmNwcCBcCi0gICAgYmlvbmljL3N0cnRvbGRfbC5jcHAgXAotICAgIGJpb25pYy9zdHJ0b2xsX2wuY3BwIFwKLSAgICBiaW9uaWMvc3RydG91bGxfbC5jcHAgXAotICAgIGJpb25pYy9zdHJ4ZnJtX2wuY3BwIFwKICAgICBiaW9uaWMvc3R1YnMuY3BwIFwKICAgICBiaW9uaWMvc3ltbGluay5jcHAgXAogICAgIGJpb25pYy9zeXNjb25mLmNwcCBcCisgICAgYmlvbmljL3N5c2luZm8uY3BwIFwKICAgICBiaW9uaWMvc3lzbG9nLmNwcCBcCiAgICAgYmlvbmljL3N5c19zaWdsaXN0LmMgXAogICAgIGJpb25pYy9zeXNfc2lnbmFtZS5jIFwKQEAgLTIzOSw5ICsyNDAsNiBAQAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvZ2VuL2xkZXhwLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvZ2VuL3NsZWVwLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvZ2VuL3VzbGVlcC5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZjbG9zZS5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZsYWdzLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZm9wZW4uYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvYWJzLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL2dldG9wdF9sb25nLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL2ltYXhhYnMuYyBcCkBAIC0yODcsOCArMjg1LDggQEAKICAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2Rpdi5jIFwKICAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2RyYW5kNDguYyBcCiAgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9lcmFuZDQ4LmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvaW5zcXVlLmMgXAogICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvanJhbmQ0OC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2xjb25nNDguYyBcCiAgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9sZGl2LmMgXAogICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvbGxkaXYuYyBcCiAgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9scmFuZDQ4LmMgXApAQCAtMjk2LDE0ICsyOTQsMTIgQEAKICAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL25yYW5kNDguYyBcCiAgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9fcmFuZDQ4LmMgXAogICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvcmFuZF9yLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvcmVtcXVlLmMgXAogICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvc2VlZDQ4LmMgXAogICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvc3JhbmQ0OC5jIFwKICAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RyaW5nL21lbWNjcHkuYyBcCiAgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0cmluZy9zdHJjYXNlc3RyLmMgXAogICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdHJpbmcvc3RyY29sbC5jIFwKICAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RyaW5nL3N0cnhmcm0uYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYyBcCiAKIGxpYmNfdXBzdHJlYW1fb3BlbmJzZF9nZHRvYV9zcmNfZmlsZXMgOj0gXAogICAgIHVwc3RyZWFtLW9wZW5ic2QvYW5kcm9pZC9nZHRvYV9zdXBwb3J0LmNwcCBcCkBAIC0zMzMsMTAgKzMyOSwxNCBAQAogICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9yUS5jIFwKIAogbGliY191cHN0cmVhbV9vcGVuYnNkX3NyY19maWxlcyA6PSBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9jb21wYXQtNDMva2lsbHBnLmMgXAogICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvY3J5cHQvYXJjNHJhbmRvbS5jIFwKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2NyeXB0L2FyYzRyYW5kb21fdW5pZm9ybS5jIFwKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9hbGFybS5jIFwKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9jdHlwZV8uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vZGFlbW9uLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2Vyci5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9lcnJ4LmMgXAogICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2V4ZWMuYyBcCiAgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vZm5tYXRjaC5jIFwKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9mdG9rLmMgXApAQCAtMzQ2LDYgKzM0NiwxMiBAQAogICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3RpbWUuYyBcCiAgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdG9sb3dlcl8uYyBcCiAgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdG91cHBlcl8uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdmVyci5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi92ZXJyeC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi92d2Fybi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi92d2FybnguYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vd2Fybi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi93YXJueC5jIFwKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9idG93Yy5jIFwKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9tYnJsZW4uYyBcCiAgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvbWJzdG93Y3MuYyBcCkBAIC0zNzksNiArMzg1LDcgQEAKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2FzcHJpbnRmLmMgXAogICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vY2xyZXJyLmMgXAogICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZHByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZjbG9zZS5jIFwKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Zkb3Blbi5jIFwKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Zlb2YuYyBcCiAgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZXJyb3IuYyBcCkBAIC0zOTAsNiArMzk3LDkgQEAKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXR3Yy5jIFwKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXR3cy5jIFwKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbGVuby5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZsYWdzLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZm1lbW9wZW4uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mb3Blbi5jIFwKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwcmludGYuYyBcCiAgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHVyZ2UuYyBcCiAgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHV0Yy5jIFwKQEAgLTQxOCw2ICs0MjgsOCBAQAogICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0d2NoYXIuYyBcCiAgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9tYWtlYnVmLmMgXAogICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vbWt0ZW1wLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vb3Blbl9tZW1zdHJlYW0uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9vcGVuX3dtZW1zdHJlYW0uYyBcCiAgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wZXJyb3IuYyBcCiAgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wcmludGYuYyBcCiAgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXRjLmMgXApAQCAtNDY2LDcgKzQ3OCwxMCBAQAogICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0b2xsLmMgXAogICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2V4aXQuYyBcCiAgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvZ2V0ZW52LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2luc3F1ZS5jIFwKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9sc2VhcmNoLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3JlYWxsb2NhcnJheS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9yZW1xdWUuYyBcCiAgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc2V0ZW52LmMgXAogICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvaW1heC5jIFwKICAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2wuYyBcCkBAIC01MzUsMTMgKzU1MCw2IEBACiAgIGxpYmNfY29tbW9uX2NmbGFncyArPSAtRE1BTExPQ19BTElHTk1FTlQ9JChCT0FSRF9NQUxMT0NfQUxJR05NRU5UKQogZW5kaWYKIAotIyBEZWZpbmUgQU5EUk9JRF9TTVAgYXBwcm9wcmlhdGVseS4KLWlmZXEgKCQoVEFSR0VUX0NQVV9TTVApLHRydWUpCi0gICAgbGliY19jb21tb25fY2ZsYWdzICs9IC1EQU5EUk9JRF9TTVA9MQotZWxzZQotICAgIGxpYmNfY29tbW9uX2NmbGFncyArPSAtREFORFJPSURfU01QPTAKLWVuZGlmCi0KICMgRGVmaW5lIHNvbWUgY29tbW9uIGNvbmx5ZmxhZ3MKIGxpYmNfY29tbW9uX2Nvbmx5ZmxhZ3MgOj0gXAogICAgIC1zdGQ9Z251OTkKQEAgLTU4Niw3ICs1OTQsMTAgQEAKIExPQ0FMX01PRFVMRSA6PSBsaWJjX3N0YWNrX3Byb3RlY3RvcgogTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQorTE9DQUxfQ1hYX1NUTCA6PSBub25lCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQorTE9DQUxfQUREUkVTU19TQU5JVElaRVIgOj0gZmFsc2UKK0xPQ0FMX05BVElWRV9DT1ZFUkFHRSA6PSAkKGJpb25pY19jb3ZlcmFnZSkKIAogJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQpAQCAtNjI0LDcgKzYzNSwxMCBAQAogTE9DQUxfTU9EVUxFIDo9IGxpYmNfdHpjb2RlCiBMT0NBTF9DTEFORyA6PSAkKHVzZV9jbGFuZykKIExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQobGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMpCitMT0NBTF9DWFhfU1RMIDo9IG5vbmUKIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CitMT0NBTF9BRERSRVNTX1NBTklUSVpFUiA6PSBmYWxzZQorTE9DQUxfTkFUSVZFX0NPVkVSQUdFIDo9ICQoYmlvbmljX2NvdmVyYWdlKQogCiAkKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfQ0ZMQUdTLGxpYmNfY29tbW9uX2NmbGFncykpCiBpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCkBAIC02NDIsNyArNjU2LDEzIEBACiAgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2lzYy9ldl90aW1lcnMuYyBcCiAgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3Jlc29sdi9tdGN0eHJlcy5jIFwKIAotTE9DQUxfQ0ZMQUdTIDo9IFwKKyMgV2UgdXNlIHRoZSBPcGVuQlNEIHJlc19yYW5kb20uCitMT0NBTF9DRkxBR1MgKz0gXAorICAgIC1EcmVzX3JhbmRvbWlkPV9fcmVzX3JhbmRvbWlkCitMT0NBTF9TUkNfRklMRVMgKz0gXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L3Jlc19yYW5kb20uYyBcCisKK0xPQ0FMX0NGTEFHUyArPSBcCiAgICAgJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKICAgICAtREFORFJPSURfQ0hBTkdFUyBcCiAgICAgLURJTkVUNiBcCkBAIC02NjAsNyArNjgwLDEwIEBACiBMT0NBTF9NT0RVTEUgOj0gbGliY19kbnMKIExPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KK0xPQ0FMX0FERFJFU1NfU0FOSVRJWkVSIDo9IGZhbHNlCitMT0NBTF9OQVRJVkVfQ09WRVJBR0UgOj0gJChiaW9uaWNfY292ZXJhZ2UpCiAKICQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKQEAgLTY4OSw3ICs3MTIsMTAgQEAKIExPQ0FMX01PRFVMRSA6PSBsaWJjX2ZyZWVic2QKIExPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KK0xPQ0FMX0FERFJFU1NfU0FOSVRJWkVSIDo9IGZhbHNlCitMT0NBTF9OQVRJVkVfQ09WRVJBR0UgOj0gJChiaW9uaWNfY292ZXJhZ2UpCiAKICQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKICQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9TUkNfRklMRVMsbGliY19mcmVlYnNkX3NyY19maWxlcykpCkBAIC03MjAsNyArNzQ2LDEwIEBACiBMT0NBTF9NT0RVTEUgOj0gbGliY19uZXRic2QKIExPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KK0xPQ0FMX0FERFJFU1NfU0FOSVRJWkVSIDo9IGZhbHNlCitMT0NBTF9OQVRJVkVfQ09WRVJBR0UgOj0gJChiaW9uaWNfY292ZXJhZ2UpCiAKICQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKICQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9TUkNfRklMRVMsbGliY19uZXRic2Rfc3JjX2ZpbGVzKSkKQEAgLTc0Niw3ICs3NzUsOSBAQAogCiBMT0NBTF9DRkxBR1MgOj0gXAogICAgICQobGliY19jb21tb25fY2ZsYWdzKSBcCi0gICAgLVduby1zaWduLWNvbXBhcmUgLVduby11bmluaXRpYWxpemVkIC1Xbm8tdW51c2VkLXBhcmFtZXRlciBcCisgICAgLVduby1zaWduLWNvbXBhcmUgXAorICAgIC1Xbm8tdW5pbml0aWFsaXplZCBcCisgICAgLVduby11bnVzZWQtcGFyYW1ldGVyIFwKICAgICAtSSQoTE9DQUxfUEFUSCkvcHJpdmF0ZSBcCiAgICAgLUkkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLW9wZW5ic2QvYW5kcm9pZC9pbmNsdWRlIFwKICAgICAtSSQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9pbmNsdWRlIFwKQEAgLTc1OCw3ICs3ODksMTAgQEAKIExPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQogTE9DQUxfTU9EVUxFIDo9IGxpYmNfb3BlbmJzZAogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KK0xPQ0FMX0FERFJFU1NfU0FOSVRJWkVSIDo9IGZhbHNlCitMT0NBTF9OQVRJVkVfQ09WRVJBR0UgOj0gJChiaW9uaWNfY292ZXJhZ2UpCiAKICQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKICQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9TUkNfRklMRVMsbGliY19vcGVuYnNkX3NyY19maWxlcykpCkBAIC03OTcsNyArODMxLDEwIEBACiBMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKIExPQ0FMX01PRFVMRSA6PSBsaWJjX2dkdG9hCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQorTE9DQUxfQ1hYX1NUTCA6PSBub25lCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQorTE9DQUxfQUREUkVTU19TQU5JVElaRVIgOj0gZmFsc2UKK0xPQ0FMX05BVElWRV9DT1ZFUkFHRSA6PSAkKGJpb25pY19jb3ZlcmFnZSkKIAogJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQpAQCAtODEzLDE4ICs4NTAsMjMgQEAKIExPQ0FMX0NGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NmbGFncykgXAogICAgIC1XZnJhbWUtbGFyZ2VyLXRoYW49MjA0OCBcCiAKLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLHg4Nl82NCkKLSAgIyBDbGFuZyBhc3NlbWJsZXIgaGFzIHByb2JsZW0gd2l0aCBzc3NlMy1zdHJjbXAtc2xtLlMsIGh0dHA6Ly9iLzE3MzAyOTkxCi0gIExPQ0FMX0NMQU5HX0FTRkxBR1MgKz0gLW5vLWludGVncmF0ZWQtYXMKLWVuZGlmCisjIHNzc2UzLXN0cmNtcC1zbG0uUyBkb2VzIG5vdCBjb21waWxlIHdpdGggQ2xhbmcuCitMT0NBTF9DTEFOR19BU0ZMQUdTX3g4Nl82NCArPSAtbm8taW50ZWdyYXRlZC1hcworCisjIG1lbWNweS5TLCBtZW1jaHIuUywgZXRjLiBkbyBub3QgY29tcGlsZSB3aXRoIENsYW5nLgorTE9DQUxfQ0xBTkdfQVNGTEFHU19hcm0gKz0gLW5vLWludGVncmF0ZWQtYXMKK0xPQ0FMX0NMQU5HX0FTRkxBR1NfYXJtNjQgKz0gLW5vLWludGVncmF0ZWQtYXMKIAogTE9DQUxfQ09OTFlGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2Nvbmx5ZmxhZ3MpCiBMT0NBTF9DUFBGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NwcGZsYWdzKQotTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykgYmlvbmljL2xpYnN0ZGMrKy9pbmNsdWRlCiBMT0NBTF9NT0RVTEUgOj0gbGliY19iaW9uaWMKIExPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KK0xPQ0FMX0FERFJFU1NfU0FOSVRJWkVSIDo9IGZhbHNlCitMT0NBTF9OQVRJVkVfQ09WRVJBR0UgOj0gJChiaW9uaWNfY292ZXJhZ2UpCiAKICQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKICQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9TUkNfRklMRVMsbGliY19iaW9uaWNfc3JjX2ZpbGVzKSkKQEAgLTg0MywxMiArODg1LDE0IEBACiAKIExPQ0FMX0NPTkxZRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jb25seWZsYWdzKQogTE9DQUxfQ1BQRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jcHBmbGFncykKLUxPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpIGJpb25pYy9saWJzdGRjKysvaW5jbHVkZQogTE9DQUxfTU9EVUxFIDo9IGxpYmNfY3hhCi0jIEdDQyByZWZ1c2VzIHRvIGhpZGUgbmV3L2RlbGV0ZQotTE9DQUxfQ0xBTkcgOj0gdHJ1ZQorTE9DQUxfQ0xBTkcgOj0gdHJ1ZSAjIEdDQyByZWZ1c2VzIHRvIGhpZGUgbmV3L2RlbGV0ZQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KK0xPQ0FMX0FERFJFU1NfU0FOSVRJWkVSIDo9IGZhbHNlCitMT0NBTF9OQVRJVkVfQ09WRVJBR0UgOj0gJChiaW9uaWNfY292ZXJhZ2UpCiAKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIApAQCAtODY2LDcgKzkxMCwxMCBAQAogTE9DQUxfTU9EVUxFIDo9IGxpYmNfc3lzY2FsbHMKIExPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KK0xPQ0FMX0FERFJFU1NfU0FOSVRJWkVSIDo9IGZhbHNlCitMT0NBTF9OQVRJVkVfQ09WRVJBR0UgOj0gJChiaW9uaWNfY292ZXJhZ2UpCiAKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIApAQCAtODg1LDcgKzkzMiwxMCBAQAogTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCiBMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpIC1mbm8tYnVpbHRpbgogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KK0xPQ0FMX0FERFJFU1NfU0FOSVRJWkVSIDo9IGZhbHNlCitMT0NBTF9OQVRJVkVfQ09WRVJBR0UgOj0gJChiaW9uaWNfY292ZXJhZ2UpCiAKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIApAQCAtOTIyLDEwICs5NzIsMTMgQEAKIExPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgKz0gbGliamVtYWxsb2MKIGVuZGlmCiAKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KIAogIyBUT0RPOiBzcGxpdCBvdXQgdGhlIGFzZmxhZ3MuCiBMT0NBTF9BU0ZMQUdTIDo9ICQoTE9DQUxfQ0ZMQUdTKQorTE9DQUxfQUREUkVTU19TQU5JVElaRVIgOj0gZmFsc2UKK0xPQ0FMX05BVElWRV9DT1ZFUkFHRSA6PSAkKGJpb25pY19jb3ZlcmFnZSkKIAogJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQogJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX1NSQ19GSUxFUyxsaWJjX2NvbW1vbl9zcmNfZmlsZXMpKQpAQCAtOTYxLDcgKzEwMTQsMTAgQEAKIExPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKIExPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY19jb21tb24KK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KK0xPQ0FMX0FERFJFU1NfU0FOSVRJWkVSIDo9IGZhbHNlCitMT0NBTF9OQVRJVkVfQ09WRVJBR0UgOj0gJChiaW9uaWNfY292ZXJhZ2UpCiAKICQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKICQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9TUkNfRklMRVMsbGliY19hcmNoX3N0YXRpY19zcmNfZmlsZXMpKQpAQCAtOTgyLDYgKzEwMzgsOSBAQAogTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCiBMT0NBTF9NT0RVTEUgOj0gbGliY19tYWxsb2MKIExPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQorTE9DQUxfQ1hYX1NUTCA6PSBub25lCitMT0NBTF9BRERSRVNTX1NBTklUSVpFUiA6PSBmYWxzZQorTE9DQUxfTkFUSVZFX0NPVkVSQUdFIDo9ICQoYmlvbmljX2NvdmVyYWdlKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIApAQCAtMTAwNyw3ICsxMDY2LDEwIEBACiBMT0NBTF9DTEFORyA6PSAkKHVzZV9jbGFuZykKIExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQobGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMpCiBMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmNfY29tbW9uCitMT0NBTF9DWFhfU1RMIDo9IG5vbmUKIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CitMT0NBTF9BRERSRVNTX1NBTklUSVpFUiA6PSBmYWxzZQorTE9DQUxfTkFUSVZFX0NPVkVSQUdFIDo9ICQoYmlvbmljX2NvdmVyYWdlKQogCiAkKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfQ0ZMQUdTLGxpYmNfY29tbW9uX2NmbGFncykpCiAkKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfU1JDX0ZJTEVTLGxpYmNfYXJjaF9zdGF0aWNfc3JjX2ZpbGVzKSkKQEAgLTEwNDksNiArMTExMSw3IEBACiAKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliZGwKIExPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY19jb21tb24KK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KIAogIyBXZSdkIHJlYWxseSBsaWtlIHRvIGRvIHRoaXMgZm9yIGFsbCBhcmNoaXRlY3R1cmVzLCBidXQgc2luY2UgdGhpcyB3YXNuJ3QgZG9uZQpAQCAtMTA2OCw2ICsxMTMxLDggQEAKICAgICBhcmNoLWNvbW1vbi9iaW9uaWMvY3J0YmVnaW5fc28uYyBcCiAgICAgYXJjaC1hcm0vYmlvbmljL2F0ZXhpdF9sZWdhY3kuYyBcCiAgICAgYXJjaC1jb21tb24vYmlvbmljL2NydGVuZF9zby5TCitMT0NBTF9BRERSRVNTX1NBTklUSVpFUiA6PSBmYWxzZQorTE9DQUxfTkFUSVZFX0NPVkVSQUdFIDo9ICQoYmlvbmljX2NvdmVyYWdlKQogCiBpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCiAKQEAgLTEwODUsMTAgKzExNTAsNyBAQAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiAKLUxPQ0FMX0NGTEFHUyA6PSBcCi0gICAgJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKLSAgICAtRE1BTExPQ19MRUFLX0NIRUNLIFwKLQorTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKQogTE9DQUxfQ09OTFlGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2Nvbmx5ZmxhZ3MpCiBMT0NBTF9DUFBGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NwcGZsYWdzKQogCkBAIC0xMTA4LDE0ICsxMTcwLDE3IEBACiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQogCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmMgbGliZGwKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KICMgT25seSBuZWVkIHRoaXMgZm9yIGFybSBzaW5jZSBsaWJjKysgdXNlcyBpdHMgb3duIHVud2luZCBjb2RlIHRoYXQKICMgZG9lc24ndCBtaXggd2l0aCB0aGUgb3RoZXIgZGVmYXVsdCB1bndpbmQgY29kZS4KLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVNfYXJtIDo9IGxpYmMrKworTE9DQUxfU1RBVElDX0xJQlJBUklFU19hcm0gOj0gbGlidW53aW5kX2xsdm0KIExPQ0FMX0FMTE9XX1VOREVGSU5FRF9TWU1CT0xTIDo9IHRydWUKIAogIyBEb24ndCBpbnN0YWxsIG9uIHJlbGVhc2UgYnVpbGQKIExPQ0FMX01PRFVMRV9UQUdTIDo9IGVuZyBkZWJ1ZworTE9DQUxfQUREUkVTU19TQU5JVElaRVIgOj0gZmFsc2UKK0xPQ0FMX05BVElWRV9DT1ZFUkFHRSA6PSAkKGJpb25pY19jb3ZlcmFnZSkKIAogJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQogaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQpAQCAtMTE0NCwxMCArMTIwOSwxMyBAQAogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKIAogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJjIGxpYmRsCitMT0NBTF9DWFhfU1RMIDo9IG5vbmUKIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CiAKICMgRG9uJ3QgaW5zdGFsbCBvbiByZWxlYXNlIGJ1aWxkCiBMT0NBTF9NT0RVTEVfVEFHUyA6PSBlbmcgZGVidWcKK0xPQ0FMX0FERFJFU1NfU0FOSVRJWkVSIDo9IGZhbHNlCitMT0NBTF9OQVRJVkVfQ09WRVJBR0UgOj0gJChiaW9uaWNfY292ZXJhZ2UpCiAKICQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKIGluY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKQEAgLTExNjQsMjYgKzEyMzIsMzIgQEAKICAgICBiaW9uaWMvbGliY19sb2dnaW5nLmNwcCBcCiAKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykgYmlvbmljL2xpYnN0ZGMrKy9pbmNsdWRlCiBMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpCiBMT0NBTF9DUFBGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NwcGZsYWdzKQogTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGlic3RkY3h4X2NvbW1vbl9zcmNfZmlsZXMpCiBMT0NBTF9NT0RVTEU6PSBsaWJzdGRjKysKIExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5taworTE9DQUxfQ1hYX1NUTCA6PSBub25lCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJjCitMT0NBTF9BRERSRVNTX1NBTklUSVpFUiA6PSBmYWxzZQorTE9DQUxfTkFUSVZFX0NPVkVSQUdFIDo9ICQoYmlvbmljX2NvdmVyYWdlKQogaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIGxpYnN0ZGMrKy5hCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpIGJpb25pYy9saWJzdGRjKysvaW5jbHVkZQogTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKQogTE9DQUxfQ1BQRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jcHBmbGFncykKIExPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYnN0ZGN4eF9jb21tb25fc3JjX2ZpbGVzKQogTE9DQUxfTU9EVUxFOj0gbGlic3RkYysrCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliYworTE9DQUxfQUREUkVTU19TQU5JVElaRVIgOj0gZmFsc2UKK0xPQ0FMX05BVElWRV9DT1ZFUkFHRSA6PSAkKGJpb25pY19jb3ZlcmFnZSkKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIAogCmRpZmYgLS1naXQgYS9saWJjL05PVElDRSBiL2xpYmMvTk9USUNFCmluZGV4IDgwZDlhMjcuLjY5N2I4ZmMgMTAwNjQ0Ci0tLSBhL2xpYmMvTk9USUNFCisrKyBiL2xpYmMvTk9USUNFCkBAIC0yNTExLDM1ICsyNTExLDYgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQ29weXJpZ2h0IChjKSAxOTkzCi0gICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi1JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi1GT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLU9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLUxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLVNVQ0ggREFNQUdFLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNvcHlyaWdodCAoYykgMTk5MwogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzEzMSwzOCArMzEwMiw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChjKSAxOTk5IEt1bmdsaWdhIFRla25pc2thIEjDtmdza29sYW4KLShSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFyZSBtZXQ6Ci0KLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0zLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEtUSCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlCi0gICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgS1RIIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi1FWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi1QVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBLVEggT1IgSVRTIENPTlRSSUJVVE9SUyBCRQotTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLVNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgotQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCi1XSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgotT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIENvcHlyaWdodCAoYykgMjAwMCBCZW4gSGFycmlzLgogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCBhbmQgMTk5OCBXSURFIFByb2plY3QuCiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNDQyMiw2ICs0MzYxLDM5IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29weXJpZ2h0IChjKSAyMDExIE1hcnRpbiBQaWV1Y2hvdCA8bXBpQG9wZW5ic2Qub3JnPgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKK09SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDExIE1hcnRpbiBQaWV1Y2hvdCA8bXBpQG9wZW5ic2Qub3JnPgorQ29weXJpZ2h0IChjKSAyMDA5IFRlZCBVbmFuZ3N0CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogQ29weXJpZ2h0IChjKSAyMDA4IEFSTSBMdGQKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC00ODUzLDYgKzQ4MjUsNDIgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitDb3B5cmlnaHQgMTk5NyBOaWVscyBQcm92b3MgPHByb3Zvc0BwaHlzbmV0LnVuaS1oYW1idXJnLmRlPgorQ29weXJpZ2h0IDIwMDggRGFtaWVuIE1pbGxlciA8ZGptQG9wZW5ic2Qub3JnPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhlbyBkZSBSYWFkdCA8ZGVyYWFkdEBvcGVuYnNkLm9yZz4gY2FtZSB1cCB3aXRoIHRoZSBpZGVhIG9mIHVzaW5nCitzdWNoIGEgbWF0aGVtYXRpY2FsIHN5c3RlbSB0byBnZW5lcmF0ZSBtb3JlIHJhbmRvbSAoeWV0IG5vbi1yZXBlYXRpbmcpCitpZHMgdG8gc29sdmUgdGhlIHJlc29sdmVyL25hbWVkIHByb2JsZW0uICBCdXQgTmllbHMgZGVzaWduZWQgdGhlCithY3R1YWwgc3lzdGVtIGJhc2VkIG9uIHRoZSBjb25zdHJhaW50cy4KKworTGF0ZXIgbW9kaWZpZWQgYnkgRGFtaWVuIE1pbGxlciB0byB3cmFwIHRoZSBMQ0cgb3V0cHV0IGluIGEgMTUtYml0CitwZXJtdXRhdGlvbiBnZW5lcmF0b3IgYmFzZWQgb24gYSBMdWJ5LVJhY2tvZmYgYmxvY2sgY2lwaGVyLiBUaGlzCitlbnN1cmVzIHRoZSBvdXRwdXQgaXMgbm9uLXJlcGVhdGluZyBhbmQgcHJlc2VydmVzIHRoZSBNU0IgdHdpZGRsZQordHJpY2ssIGJ1dCBtYWtlcyBpdCBtb3JlIHJlc2lzdGFudCB0byBMQ0cgcHJlZGljdGlvbi4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCitOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBDb3B5cmlnaHQgMjAwMCBEYXZpZCBFLiBPJ0JyaWVuLCBKb2huIEQuIFBvbHN0cmEuCiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCmRpZmYgLS1naXQgYS9saWJjL1NZU0NBTExTLlRYVCBiL2xpYmMvU1lTQ0FMTFMuVFhUCmluZGV4IGMzYjdiYWIuLjM5ZmYzN2QgMTAwNjQ0Ci0tLSBhL2xpYmMvU1lTQ0FMTFMuVFhUCisrKyBiL2xpYmMvU1lTQ0FMTFMuVFhUCkBAIC0yMDIsOSArMjAyLDkgQEAKIGludCAgICAgICAgICAgc2V0dGltZW9mZGF5KGNvbnN0IHN0cnVjdCB0aW1ldmFsKiwgY29uc3Qgc3RydWN0IHRpbWV6b25lKikgICBhbGwKIGNsb2NrX3QgICAgICAgdGltZXMoc3RydWN0IHRtcyopICAgICAgIGFsbAogaW50ICAgICAgICAgICBuYW5vc2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjKiwgc3RydWN0IHRpbWVzcGVjKikgICBhbGwKLWludCAgICAgICAgICAgY2xvY2tfc2V0dGltZShjbG9ja2lkX3QgY2xrX2lkLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIHRwKSAgYWxsCi1pbnQgICAgICAgICAgIGNsb2NrX2dldHJlcyhjbG9ja2lkX3QgY2xrX2lkLCBzdHJ1Y3QgdGltZXNwZWMqIHJlcykgICBhbGwKLWludCAgICAgICAgICAgY2xvY2tfbmFub3NsZWVwKGNsb2NraWRfdCBjbG9ja19pZCwgaW50IGZsYWdzLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIHJlcSwgc3RydWN0IHRpbWVzcGVjKiByZW0pICBhbGwKK2ludCAgICAgICAgICAgY2xvY2tfc2V0dGltZShjbG9ja2lkX3QsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyopICBhbGwKK2ludCAgICAgICAgICAgY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVjKikgICBhbGwKK2ludCAgICAgICAgICAgX19jbG9ja19uYW5vc2xlZXA6Y2xvY2tfbmFub3NsZWVwKGNsb2NraWRfdCwgaW50LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqLCBzdHJ1Y3QgdGltZXNwZWMqKSAgYWxsCiBpbnQgICAgICAgICAgIGdldGl0aW1lcihpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJ2YWwqKSAgIGFsbAogaW50ICAgICAgICAgICBzZXRpdGltZXIoaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsKiwgc3RydWN0IGl0aW1lcnZhbCopICBhbGwKIGludCAgICAgICAgICAgX190aW1lcl9jcmVhdGU6dGltZXJfY3JlYXRlKGNsb2NraWRfdCBjbG9ja2lkLCBzdHJ1Y3Qgc2lnZXZlbnQqIGV2cCwgX19rZXJuZWxfdGltZXJfdCogdGltZXJpZCkgICAgYWxsCkBAIC0zMTMsNiArMzEzLDggQEAKIGludCBzZXRmc2dpZChnaWRfdCkgIGFsbAogaW50IHNldGZzdWlkKHVpZF90KSAgYWxsCiAKK2ludCBzZXRob3N0bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90KSAgYWxsCisKIHBpZF90IHdhaXQ0KHBpZF90LCBpbnQqLCBpbnQsIHN0cnVjdCBydXNhZ2UqKSAgYWxsCiBpbnQgX193YWl0aWQ6d2FpdGlkKGludCwgcGlkX3QsIHN0cnVjdCBzaWdpbmZvX3QqLCBpbnQsIHZvaWQqKSAgYWxsCiAKQEAgLTMyMSw3ICszMjMsNyBAQAogaW50ICAgICBjYWNoZWZsdXNoOl9fQVJNX05SX2NhY2hlZmx1c2gobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgZmxhZ3MpICBhcm0KIAogIyBNSVBTLXNwZWNpZmljCi1pbnQgICAgIF9mbHVzaF9jYWNoZTpjYWNoZWZsdXNoKGNoYXIqIGFkZHIsIGNvbnN0IGludCBuYnl0ZXMsIGNvbnN0IGludCBvcCkgbWlwcyxtaXBzNjQKK2ludCAgICAgX2ZsdXNoX2NhY2hlOmNhY2hlZmx1c2goY2hhciogYWRkciwgY29uc3QgaW50IG5ieXRlcywgY29uc3QgaW50IG9wKSBtaXBzCiBpbnQgICAgIF9fc2V0X3RsczpzZXRfdGhyZWFkX2FyZWEodm9pZCopIG1pcHMsbWlwczY0CiAKICMgeDg2LXNwZWNpZmljCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2FlYWJpLmMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2FlYWJpLmMKaW5kZXggMzI1NGY2NC4uMjU0YzdhNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvX19hZWFiaS5jCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL19fYWVhYmkuYwpAQCAtMzksNiArMzksOSBAQAogCiBleHRlcm4gaW50IF9fY3hhX2F0ZXhpdCh2b2lkICgqKSh2b2lkKiksIHZvaWQqLCB2b2lkKik7CiAKKy8vIEFsbCBvZiB0aGVzZSBhcmUgd2VhayBzeW1ib2xzIHRvIGF2b2lkIG11bHRpcGxlIGRlZmluaXRpb24gZXJyb3JzIHdoZW4KKy8vIGxpbmtpbmcgd2l0aCBsaWJzdGRjKystdjMgb3IgY29tcGlsZXItcnQuCisKIC8qIFRoZSAiQysrIEFCSSBmb3IgQVJNIiBkb2N1bWVudCBzdGF0ZXMgdGhhdCBzdGF0aWMgQysrIGNvbnN0cnVjdG9ycywKICAqIHdoaWNoIGFyZSBjYWxsZWQgZnJvbSB0aGUgLmluaXRfYXJyYXksIHNob3VsZCBtYW51YWxseSBjYWxsCiAgKiBfX2FlYWJpX2F0ZXhpdCgpIHRvIHJlZ2lzdGVyIHN0YXRpYyBkZXN0cnVjdG9ycyBleHBsaWNpdGx5LgpAQCAtNDcsMzUgKzUwLDM1IEBACiAgKiB2YXJpYWJsZSBmcm9tIHRoZSBzaGFyZWQgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGNvbnN0cnVjdG9yL2Rlc3RydWN0b3IKICAqLwogCi0vLyBNYWtlIHRoaXMgYSB3ZWFrIHN5bWJvbCB0byBhdm9pZCBhIG11bHRpcGxlIGRlZmluaXRpb24gZXJyb3Igd2hlbiBsaW5raW5nIHdpdGggbGlic3RkYysrLXYzLgogaW50IF9fYXR0cmlidXRlX18oKHdlYWspKQogX19hZWFiaV9hdGV4aXQodm9pZCAqb2JqZWN0LCB2b2lkICgqZGVzdHJ1Y3RvcikgKHZvaWQgKiksIHZvaWQgKmRzb19oYW5kbGUpIHsKICAgICByZXR1cm4gX19jeGFfYXRleGl0KGRlc3RydWN0b3IsIG9iamVjdCwgZHNvX2hhbmRsZSk7CiB9CiAKIAotdm9pZCBfX2FlYWJpX21lbWNweTgodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbikgewordm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKK19fYWVhYmlfbWVtY3B5OCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7CiAgICAgbWVtY3B5KGRlc3QsIHNyYywgbik7CiB9CiAKLXZvaWQgX19hZWFiaV9tZW1jcHk0KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pIHsKK3ZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIF9fYWVhYmlfbWVtY3B5NCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7CiAgICAgbWVtY3B5KGRlc3QsIHNyYywgbik7CiB9CiAKLXZvaWQgX19hZWFiaV9tZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbikgewordm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgX19hZWFiaV9tZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgewogICAgIG1lbWNweShkZXN0LCBzcmMsIG4pOwogfQogCiAKLXZvaWQgX19hZWFiaV9tZW1tb3ZlOCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7Cit2b2lkIF9fYXR0cmlidXRlX18oKHdlYWspKSBfX2FlYWJpX21lbW1vdmU4KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pIHsKICAgICBtZW1tb3ZlKGRlc3QsIHNyYywgbik7CiB9CiAKLXZvaWQgX19hZWFiaV9tZW1tb3ZlNCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7Cit2b2lkIF9fYXR0cmlidXRlX18oKHdlYWspKSBfX2FlYWJpX21lbW1vdmU0KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pIHsKICAgICBtZW1tb3ZlKGRlc3QsIHNyYywgbik7CiB9CiAKLXZvaWQgX19hZWFiaV9tZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pIHsKK3ZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIF9fYWVhYmlfbWVtbW92ZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7CiAgICAgbWVtbW92ZShkZXN0LCBzcmMsIG4pOwogfQogCkBAIC04NCwyNyArODcsMjcgQEAKICAqICBUaGlzIGFsbG93cyBfX2FlYWJpX21lbWNsciB0byB0YWlsLWNhbGwgX19hZWFiaV9tZW1zZXQKICAqLwogCi12b2lkIF9fYWVhYmlfbWVtc2V0OCh2b2lkICpkZXN0LCBzaXplX3QgbiwgaW50IGMpIHsKK3ZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIF9fYWVhYmlfbWVtc2V0OCh2b2lkICpkZXN0LCBzaXplX3QgbiwgaW50IGMpIHsKICAgICBtZW1zZXQoZGVzdCwgYywgbik7CiB9CiAKLXZvaWQgX19hZWFiaV9tZW1zZXQ0KHZvaWQgKmRlc3QsIHNpemVfdCBuLCBpbnQgYykgewordm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgX19hZWFiaV9tZW1zZXQ0KHZvaWQgKmRlc3QsIHNpemVfdCBuLCBpbnQgYykgewogICAgIG1lbXNldChkZXN0LCBjLCBuKTsKIH0KIAotdm9pZCBfX2FlYWJpX21lbXNldCh2b2lkICpkZXN0LCBzaXplX3QgbiwgaW50IGMpIHsKK3ZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIF9fYWVhYmlfbWVtc2V0KHZvaWQgKmRlc3QsIHNpemVfdCBuLCBpbnQgYykgewogICAgIG1lbXNldChkZXN0LCBjLCBuKTsKIH0KIAogCi12b2lkIF9fYWVhYmlfbWVtY2xyOCh2b2lkICpkZXN0LCBzaXplX3Qgbikgewordm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgX19hZWFiaV9tZW1jbHI4KHZvaWQgKmRlc3QsIHNpemVfdCBuKSB7CiAgICAgX19hZWFiaV9tZW1zZXQ4KGRlc3QsIG4sIDApOwogfQogCi12b2lkIF9fYWVhYmlfbWVtY2xyNCh2b2lkICpkZXN0LCBzaXplX3Qgbikgewordm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgX19hZWFiaV9tZW1jbHI0KHZvaWQgKmRlc3QsIHNpemVfdCBuKSB7CiAgICAgX19hZWFiaV9tZW1zZXQ0KGRlc3QsIG4sIDApOwogfQogCi12b2lkIF9fYWVhYmlfbWVtY2xyKHZvaWQgKmRlc3QsIHNpemVfdCBuKSB7Cit2b2lkIF9fYXR0cmlidXRlX18oKHdlYWspKSBfX2FlYWJpX21lbWNscih2b2lkICpkZXN0LCBzaXplX3QgbikgewogICAgIF9fYWVhYmlfbWVtc2V0KGRlc3QsIG4sIDApOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvX3NldGptcC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX3NldGptcC5TCmluZGV4IDY0YTBhMzEuLjdkNjM3ZmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19zZXRqbXAuUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fc2V0am1wLlMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiAJLyogdmFsaWRhdGlvbiBmYWlsZWQsIGRpZSBkaWUgZGllLiAqLwogYm90Y2g6Ci0JYmwJUElDX1NZTShsb25nam1wZXJyb3IsIFBMVCkKLQlibAlQSUNfU1lNKGFib3J0LCBQTFQpCisJYmwJbG9uZ2ptcGVycm9yCisJYmwJYWJvcnQKIAliCS4gLSA4CQkvKiBDYW5ub3QgZ2V0IGhlcmUgKi8KIEVORChfbG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2Fib3J0X2FybS5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvYWJvcnRfYXJtLlMKaW5kZXggNmIxODFlZi4uMTAzOTUwMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvYWJvcnRfYXJtLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvYWJvcnRfYXJtLlMKQEAgLTQwLDUgKzQwLDUgQEAKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgcjMsIDAKICAgICAuY2ZpX3JlbF9vZmZzZXQgcjE0LCA0Ci0gICAgYmwgICAgICBQSUNfU1lNKF9fbGliY19hbmRyb2lkX2Fib3J0LCBQTFQpCisgICAgYmwgICAgICBfX2xpYmNfYW5kcm9pZF9hYm9ydAogRU5EKGFib3J0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvc2V0am1wLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zZXRqbXAuUwppbmRleCBlZDU5ZDA3Li4wYzkwODJjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9zZXRqbXAuUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zZXRqbXAuUwpAQCAtNTYsNyArNTYsNyBAQAogCS5jZmlfcmVsX29mZnNldCByMTQsIDQKIAltb3YJcjAsICMweDAwMDAwMDAwCiAKLQlibAlQSUNfU1lNKHNpZ2Jsb2NrLCBQTFQpCisJYmwJc2lnYmxvY2sKIAltb3YJcjEsIHIwCiAKIAlsZG1mZAlzcCEsIHtyMCwgcjE0fQpAQCAtMTA4LDcgKzEwOCw3IEBACiAJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CiAKIAltb3YJcjAsIHIyCi0JYmwJUElDX1NZTShzaWdzZXRtYXNrLCBQTFQpCisJYmwJc2lnc2V0bWFzawogCiAJYWRkCXNwLCBzcCwgIzQJLyogdW5hbGlnbiB0aGUgc3RhY2sgKi8KIAkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IC00CkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogCS8qIHZhbGlkYXRpb24gZmFpbGVkLCBkaWUgZGllIGRpZS4gKi8KIGJvdGNoOgotCWJsCVBJQ19TWU0obG9uZ2ptcGVycm9yLCBQTFQpCi0JYmwJUElDX1NZTShhYm9ydCwgUExUKQorCWJsCWxvbmdqbXBlcnJvcgorCWJsCWFib3J0CiAJYgkuIC0gOAkJLyogQ2Fubm90IGdldCBoZXJlICovCiBFTkQobG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL3NpZ3NldGptcC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc2lnc2V0am1wLlMKaW5kZXggNzAxNmY1MC4uNmEyNWExMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvc2lnc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc2lnc2V0am1wLlMKQEAgLTMzLDggKzMzLDYgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNkZWZpbmUgX0FMSUdOX1RFWFQgLmFsaWduIDAKLQogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+CiAKQEAgLTUwLDggKzQ4LDggQEAKIAogRU5UUlkoc2lnc2V0am1wKQogCXRlcQlyMSwgIzAKLQliZXEJUElDX1NZTShfc2V0am1wLCBQTFQpCi0JYglQSUNfU1lNKHNldGptcCwgUExUKQorCWJlcQlfc2V0am1wCisJYglzZXRqbXAKIEVORChzaWdzZXRqbXApCiAKIC5MX3NldGptcF9tYWdpYzoKQEAgLTYxLDYgKzU5LDYgQEAKIAlsZHIJcjIsIC5MX3NldGptcF9tYWdpYwogCWxkcglyMywgW3IwXQogCXRlcQlyMiwgcjMKLQliZXEJUElDX1NZTShfbG9uZ2ptcCwgUExUKQotCWIJUElDX1NZTShsb25nam1wLCBQTFQpCisJYmVxCV9sb25nam1wCisJYglsb25nam1wCiBFTkQoc2lnbG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1zZXQuUyBiL2xpYmMvYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1zZXQuUwppbmRleCBiZjNkOWFkLi5kNzdjMjQ0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2RlbnZlci9iaW9uaWMvbWVtc2V0LlMKKysrIGIvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL21lbXNldC5TCkBAIC0zNyw2ICszNyw3IEBACiAgICAgICAgICAqIG1lbXNldCgpIHJldHVybnMgaXRzIGZpcnN0IGFyZ3VtZW50LgogICAgICAgICAgKi8KIAorICAgICAgICAuY3B1ICAgICAgICBjb3J0ZXgtYTE1CiAgICAgICAgIC5mcHUgICAgICAgIG5lb24KICAgICAgICAgLnN5bnRheCAgICAgdW5pZmllZAogCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9hc20uaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2FzbS5oCmluZGV4IDc5NTRmMDUuLjcwZGJlNjcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2FzbS5oCisrKyBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2FzbS5oCkBAIC0zOCw5ICszOCw3IEBACiAjaWZuZGVmIF9BUk0zMl9BU01fSF8KICNkZWZpbmUgX0FSTTMyX0FTTV9IXwogCi0jaWZuZGVmIF9BTElHTl9URVhUCi0jIGRlZmluZSBfQUxJR05fVEVYVCAuYWxpZ24gMAotI2VuZGlmCisjZGVmaW5lIF9fYmlvbmljX2FzbV9hbGlnbiAwCiAKICN1bmRlZiBfX2Jpb25pY19hc21fY3VzdG9tX2VudHJ5CiAjdW5kZWYgX19iaW9uaWNfYXNtX2N1c3RvbV9lbmQKQEAgLTUwLDEwICs0OCw0IEBACiAjdW5kZWYgX19iaW9uaWNfYXNtX2Z1bmN0aW9uX3R5cGUKICNkZWZpbmUgX19iaW9uaWNfYXNtX2Z1bmN0aW9uX3R5cGUgI2Z1bmN0aW9uCiAKLSNpZiBkZWZpbmVkKF9fRUxGX18pICYmIGRlZmluZWQoUElDKQotI2RlZmluZSBQSUNfU1lNKHgseSkgeCAjIyAoICMjIHkgIyMgKQotI2Vsc2UKLSNkZWZpbmUgUElDX1NZTSh4LHkpIHgKLSNlbmRpZgotCiAjZW5kaWYgLyogIV9BUk1fQVNNX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9lbmRpYW4uaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCmluZGV4IDhkOTcyM2QuLjA0YmJhMjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCisrKyBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCkBAIC02NywxMSArNjcsNyBAQAogCiAjZW5kaWYgIC8qIF9fR05VQ19fICovCiAKLSNpZiBkZWZpbmVkKF9fQVJNRUJfXykKLSNkZWZpbmUgX0JZVEVfT1JERVIgX0JJR19FTkRJQU4KLSNlbHNlCiAjZGVmaW5lIF9CWVRFX09SREVSIF9MSVRUTEVfRU5ESUFOCi0jZW5kaWYKICNkZWZpbmUgX19TVFJJQ1RfQUxJR05NRU5UCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19jbG9ja19uYW5vc2xlZXAuUwpzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCnJlbmFtZSB0byBsaWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fY2xvY2tfbmFub3NsZWVwLlMKaW5kZXggODAyOTViYi4uYmE3ZmZjNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fY2xvY2tfbmFub3NsZWVwLlMKQEAgLTIsNyArMiw3IEBACiAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotRU5UUlkoY2xvY2tfbmFub3NsZWVwKQorRU5UUlkoX19jbG9ja19uYW5vc2xlZXApCiAgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9jbG9ja19uYW5vc2xlZXAKICAgICBzd2kgICAgICMwCkBAIC0xMSw0ICsxMSw0IEBACiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCiAgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAotRU5EKGNsb2NrX25hbm9zbGVlcCkKK0VORChfX2Nsb2NrX25hbm9zbGVlcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGhvc3RuYW1lLlMKc2ltaWxhcml0eSBpbmRleCA3MyUKY29weSBmcm9tIGxpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKY29weSB0byBsaWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGhvc3RuYW1lLlMKaW5kZXggODAyOTViYi4uMGE5OGZkMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGhvc3RuYW1lLlMKQEAgLTIsMTMgKzIsMTMgQEAKIAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1FTlRSWShjbG9ja19uYW5vc2xlZXApCitFTlRSWShzZXRob3N0bmFtZSkKICAgICBtb3YgICAgIGlwLCByNwotICAgIGxkciAgICAgcjcsID1fX05SX2Nsb2NrX25hbm9zbGVlcAorICAgIGxkciAgICAgcjcsID1fX05SX3NldGhvc3RuYW1lCiAgICAgc3dpICAgICAjMAogICAgIG1vdiAgICAgcjcsIGlwCiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAogICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKLUVORChjbG9ja19uYW5vc2xlZXApCitFTkQoc2V0aG9zdG5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19zZXRqbXAuUyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX3NldGptcC5TCmluZGV4IDM4MzY4OTkuLmUxMWVmNjggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX3NldGptcC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX3NldGptcC5TCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogICAgIC8qIHZhbGlkYXRpb24gZmFpbGVkLCBkaWUgZGllIGRpZSAqLwogLkxfZmFpbDoKLSAgICBibCAgICAgIFBJQ19TWU0obG9uZ2ptcGVycm9yLCBQTFQpCi0gICAgYmwgICAgICBQSUNfU1lNKGFib3J0LCBQTFQpCisgICAgYmwgICAgICBsb25nam1wZXJyb3IKKyAgICBibCAgICAgIGFib3J0CiAgICAgYiAgICAgICAgLiAtIDggICAgICAgLyogQ2Fubm90IGdldCBoZXJlICovCiBFTkQoX2xvbmdqbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL3NldGptcC5TIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9zZXRqbXAuUwppbmRleCBmOWQyMjY2Li4zNTgxNWE2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL3NldGptcC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvc2V0am1wLlMKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICBzdHAgICAgIHgwLCB4MzAsIFtzcCwgIy0xNl0hCiAKICAgICBtb3YgICAgIHgwLCB4enIKLSAgICBibCAgICAgIFBJQ19TWU0oc2lnYmxvY2ssIFBMVCkKKyAgICBibCAgICAgIHNpZ2Jsb2NrCiAgICAgbW92ICAgICB3MSwgdzAKIAogICAgIGxkcCAgICAgeDAsIHgzMCwgW3NwXSwgIzE2CkBAIC0xMTcsNyArMTE3LDcgQEAKIAogICAgIC8qIHZhbGlkYXRpb24gZmFpbGVkLCBkaWUgZGllIGRpZSAqLwogLkxfZmFpbDoKLSAgICBibCAgICAgIFBJQ19TWU0obG9uZ2ptcGVycm9yLCBQTFQpCi0gICAgYmwgICAgICBQSUNfU1lNKGFib3J0LCBQTFQpCisgICAgYmwgICAgICBsb25nam1wZXJyb3IKKyAgICBibCAgICAgIGFib3J0CiAgICAgYiAgICAgICAuIC0gOCAgICAgICAvKiBDYW5ub3QgZ2V0IGhlcmUgKi8KIEVORChsb25nam1wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9zaWdzZXRqbXAuUyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvc2lnc2V0am1wLlMKaW5kZXggNGZkYjM2Ny4uYmU3Y2VjYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9zaWdzZXRqbXAuUworKysgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL3NpZ3NldGptcC5TCkBAIC0zNSw4ICszNSw4IEBACiAgKi8KIAogRU5UUlkoc2lnc2V0am1wKQotICAgIGNieiAgICAgdzEsIFBJQ19TWU0oX3NldGptcCwgUExUKQotICAgIGIgICAgICAgUElDX1NZTShzZXRqbXAsIFBMVCkKKyAgICBjYnogICAgIHcxLCBfc2V0am1wCisgICAgYiAgICAgICBzZXRqbXAKIEVORChzaWdzZXRqbXApCiAKIC5MX3NldGptcF9tYWdpYzoKQEAgLTQ2LDYgKzQ2LDYgQEAKICAgICBsZHIgICAgIHcyLCAuTF9zZXRqbXBfbWFnaWMKICAgICBsZHIgICAgIHczLCBbeDBdCiAgICAgY21wICAgICB3MiwgdzMKLSAgICBiLmVxICAgIFBJQ19TWU0oX2xvbmdqbXAsIFBMVCkKLSAgICBiICAgICAgIFBJQ19TWU0obG9uZ2ptcCwgUExUKQorICAgIGIuZXEgICAgX2xvbmdqbXAKKyAgICBiICAgICAgIGxvbmdqbXAKIEVORChzaWdsb25nam1wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2luY2x1ZGUvbWFjaGluZS9hc20uaCBiL2xpYmMvYXJjaC1hcm02NC9pbmNsdWRlL21hY2hpbmUvYXNtLmgKaW5kZXggNGJmYWJhZi4uMmJlYTA0MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L2luY2x1ZGUvbWFjaGluZS9hc20uaAorKysgYi9saWJjL2FyY2gtYXJtNjQvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCkBAIC0zOCwxNyArMzgsOSBAQAogI2lmbmRlZiBfQUFSQ0g2NF9BU01fSF8KICNkZWZpbmUgX0FBUkNINjRfQVNNX0hfCiAKLSNpZm5kZWYgX0FMSUdOX1RFWFQKLSMgZGVmaW5lIF9BTElHTl9URVhUIC5hbGlnbiAwCi0jZW5kaWYKKyNkZWZpbmUgX19iaW9uaWNfYXNtX2FsaWduIDAKIAogI3VuZGVmIF9fYmlvbmljX2FzbV9mdW5jdGlvbl90eXBlCiAjZGVmaW5lIF9fYmlvbmljX2FzbV9mdW5jdGlvbl90eXBlICVmdW5jdGlvbgogCi0jaWYgZGVmaW5lZChfX0VMRl9fKSAmJiBkZWZpbmVkKFBJQykKLSNkZWZpbmUgUElDX1NZTSh4LHkpIHggIyMgKCAjIyB5ICMjICkKLSNlbHNlCi0jZGVmaW5lIFBJQ19TWU0oeCx5KSB4Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9BQVJDSDY0X0FTTV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2luY2x1ZGUvbWFjaGluZS9lbmRpYW4uaCBiL2xpYmMvYXJjaC1hcm02NC9pbmNsdWRlL21hY2hpbmUvZW5kaWFuLmgKaW5kZXggODdhMDM4ZC4uNDc0MzczMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L2luY2x1ZGUvbWFjaGluZS9lbmRpYW4uaAorKysgYi9saWJjL2FyY2gtYXJtNjQvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCkBAIC0yOSw5ICsyOSw2IEBACiAjaWZuZGVmIF9BQVJDSDY0X0VORElBTl9IXwogI2RlZmluZSBfQUFSQ0g2NF9FTkRJQU5fSF8KIAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KLQogI2lmZGVmIF9fR05VQ19fCiAKICNkZWZpbmUgX19zd2FwMTZtZCh4KSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC00OSwxMCArNDYsOCBAQAogCiAjZW5kaWYgIC8qIF9fR05VQ19fICovCiAKLSNpZiBkZWZpbmVkKF9fQUFSQ0g2NEVCX18pCi0jZGVmaW5lIF9CWVRFX09SREVSIF9CSUdfRU5ESUFOCi0jZWxzZQogI2RlZmluZSBfQllURV9PUkRFUiBfTElUVExFX0VORElBTgotI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgogCiAjZW5kaWYgLyogX0FBUkNINjRfRU5ESUFOX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19jbG9ja19uYW5vc2xlZXAuUwpzaW1pbGFyaXR5IGluZGV4IDc2JQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2Nsb2NrX25hbm9zbGVlcC5TCmluZGV4IDM0OWM1Y2MuLjFkZjE1ZDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19jbG9ja19uYW5vc2xlZXAuUwpAQCAtMiw3ICsyLDcgQEAKIAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1FTlRSWShjbG9ja19uYW5vc2xlZXApCitFTlRSWShfX2Nsb2NrX25hbm9zbGVlcCkKICAgICBtb3YgICAgIHg4LCBfX05SX2Nsb2NrX25hbm9zbGVlcAogICAgIHN2YyAgICAgIzAKIApAQCAtMTEsNCArMTEsNSBAQAogICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAotRU5EKGNsb2NrX25hbm9zbGVlcCkKK0VORChfX2Nsb2NrX25hbm9zbGVlcCkKKy5oaWRkZW4gX19jbG9ja19uYW5vc2xlZXAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRob3N0bmFtZS5TCnNpbWlsYXJpdHkgaW5kZXggNzAlCmNvcHkgZnJvbSBsaWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKY29weSB0byBsaWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0aG9zdG5hbWUuUwppbmRleCAzNDljNWNjLi4yZGVhNDU3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldGhvc3RuYW1lLlMKQEAgLTIsOCArMiw4IEBACiAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotRU5UUlkoY2xvY2tfbmFub3NsZWVwKQotICAgIG1vdiAgICAgeDgsIF9fTlJfY2xvY2tfbmFub3NsZWVwCitFTlRSWShzZXRob3N0bmFtZSkKKyAgICBtb3YgICAgIHg4LCBfX05SX3NldGhvc3RuYW1lCiAgICAgc3ZjICAgICAjMAogCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQpAQCAtMTEsNCArMTEsNCBAQAogICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAotRU5EKGNsb2NrX25hbm9zbGVlcCkKK0VORChzZXRob3N0bmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fc2V0am1wLlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX3NldGptcC5TCmluZGV4IGQyMzdlNmQuLjA1MmRhY2IgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL19zZXRqbXAuUwpAQCAtMzAsMTMgKzMwLDExIEBACiAgKi8KIAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotI2luY2x1ZGUgPG1hY2hpbmUvcmVnbnVtLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9zaWduYWwuaD4KIAogLyoKICAqIF9zZXRqbXAsIF9sb25nam1wIChub3QgcmVzdG9yaW5nIHNpZ25hbCBzdGF0ZSkKICAqCi0gKiBYWFggRlBTRVQgc2hvdWxkIHByb2JhYmx5IGJlIHRha2VuIGZyb20gU1Igc2V0dGluZy4gaG1tbS4uLgogICogIEdQT0ZGIGFuZCBGUkFNRVNJWkUgbXVzdCBiZSB0aGUgc2FtZSBmb3IgYm90aCBfc2V0am1wIGFuZCBfbG9uZ2ptcCEKICAqCiAgKi8KQEAgLTQ4LDEwMyArNDYsMTI3IEBACiAJUFRSX1NVQlUgc3AsIEZSQU1FU1oKIAlTRVRVUF9HUDY0KEdQT0ZGLCBfc2V0am1wKQogCVNBVkVfR1AoR1BPRkYpCi0JLnNldAlub3Jlb3JkZXIKLSNpZiBkZWZpbmVkKF9fbWlwczY0KQotCWRsaQl2MCwgMHhBQ0VEQkFERQkJCSMgc2lnY29udGV4dCBtYWdpYyBudW1iZXIKLSNlbHNlCi0JbGkJdjAsIDB4QUNFREJBREUJCQkjIHNpZ2NvbnRleHQgbWFnaWMgbnVtYmVyCi0jZW5kaWYKLQlSRUdfUwl2MCwgU0NfUkVHUytaRVJPKlJFR1NaKGEwKQotCVJFR19TCXMwLCBTQ19SRUdTK1MwKlJFR1NaKGEwKQotCVJFR19TCXMxLCBTQ19SRUdTK1MxKlJFR1NaKGEwKQotCVJFR19TCXMyLCBTQ19SRUdTK1MyKlJFR1NaKGEwKQotCVJFR19TCXMzLCBTQ19SRUdTK1MzKlJFR1NaKGEwKQotCVJFR19TCXM0LCBTQ19SRUdTK1M0KlJFR1NaKGEwKQotCVJFR19TCXM1LCBTQ19SRUdTK1M1KlJFR1NaKGEwKQotCVJFR19TCXM2LCBTQ19SRUdTK1M2KlJFR1NaKGEwKQotCVJFR19TCXM3LCBTQ19SRUdTK1M3KlJFR1NaKGEwKQotCVJFR19TCXM4LCBTQ19SRUdTK1M4KlJFR1NaKGEwKQotCVJFR19MCXYwLCBHUE9GRihzcCkKLQlSRUdfUwl2MCwgU0NfUkVHUytHUCpSRUdTWihhMCkKLQlQVFJfQUREVSB2MCwgc3AsIEZSQU1FU1oKLQlSRUdfUwl2MCwgU0NfUkVHUytTUCpSRUdTWihhMCkKLQlSRUdfUwlyYSwgU0NfUEMoYTApCisJLnNldAlyZW9yZGVyCiAKLSNpZiAhZGVmaW5lZChTT0ZURkxPQVQpCi0JbGkJdjAsIDEJCQkJIyBiZSBuaWNlIGlmIHdlIGNvdWxkIHRlbGwKLQlSRUdfUwl2MCwgU0NfRlBVU0VEKGEwKQkJIyBzY19mcHVzZWQgPSAxCi0JY2ZjMQl2MCwgJDMxCi0Jcy5kCSRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKShhMCkKLQlzLmQJJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCi0Jcy5kCSRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKShhMCkKLQlzLmQJJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCi0jaWYgX01JUFNfRlBTRVQgPT0gMzIKLQlzLmQJJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCkoYTApCi0Jcy5kCSRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKShhMCkKLQlzLmQJJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCkoYTApCi0Jcy5kCSRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKShhMCkKKyNpZm5kZWYgX19MUDY0X18KKwlhZGRpdSAgIGEwLCA3CQkJCSMgcm91bmR1cCBqbXBidWYgYWRkciB0byA4LWJ5dGUgYm91bmRhcnkKKwlsaSAgICAgIHQwLCB+NworCWFuZCAgICAgYTAsIHQwCiAjZW5kaWYKLQlSRUdfUwl2MCwgU0NfRlBSRUdTKygoRlNSLUYwKSpSRUdTWikoYTApCi0jZW5kaWYgLyogIVNPRlRGTE9BVCAqLworCisJIyBTQ19NQVNLIGlzIHVudXNlZCBoZXJlCisKKwlsaQl2MCwgMHhBQ0VEQkFERQkJCSMgc2lnY29udGV4dCBtYWdpYyBudW1iZXIKKwlzdwl2MCwgU0NfTUFHSUMoYTApCisJIyBjYWxsZWUtc2F2ZWQgbG9uZy1zaXplZCByZWdzOgorCVJFR19TCXJhLCBTQ19SRUdTKzAqUkVHU1ooYTApCisJUkVHX1MJczAsIFNDX1JFR1MrMSpSRUdTWihhMCkKKwlSRUdfUwlzMSwgU0NfUkVHUysyKlJFR1NaKGEwKQorCVJFR19TCXMyLCBTQ19SRUdTKzMqUkVHU1ooYTApCisJUkVHX1MJczMsIFNDX1JFR1MrNCpSRUdTWihhMCkKKwlSRUdfUwlzNCwgU0NfUkVHUys1KlJFR1NaKGEwKQorCVJFR19TCXM1LCBTQ19SRUdTKzYqUkVHU1ooYTApCisJUkVHX1MJczYsIFNDX1JFR1MrNypSRUdTWihhMCkKKwlSRUdfUwlzNywgU0NfUkVHUys4KlJFR1NaKGEwKQorCVJFR19TCXM4LCBTQ19SRUdTKzkqUkVHU1ooYTApCisJUkVHX0wJdjAsIEdQT0ZGKHNwKQorCVJFR19TCXYwLCBTQ19SRUdTKzEwKlJFR1NaKGEwKQorCVBUUl9BRERVIHYwLCBzcCwgRlJBTUVTWgorCVJFR19TCXYwLCBTQ19SRUdTKzExKlJFR1NaKGEwKQorCisJY2ZjMQl2MCwgJDMxCisKKyNpZmRlZiBfX0xQNjRfXworCSMgY2FsbGVlLXNhdmVkIGZwIHJlZ3Mgb24gbWlwcyBuNjQgQUJJIGFyZSAkZjI0Li4kZjMxCisJcy5kCSRmMjQsIFNDX0ZQUkVHUyswKlJFR1NaX0ZQKGEwKQorCXMuZAkkZjI1LCBTQ19GUFJFR1MrMSpSRUdTWl9GUChhMCkKKwlzLmQJJGYyNiwgU0NfRlBSRUdTKzIqUkVHU1pfRlAoYTApCisJcy5kCSRmMjcsIFNDX0ZQUkVHUyszKlJFR1NaX0ZQKGEwKQorCXMuZAkkZjI4LCBTQ19GUFJFR1MrNCpSRUdTWl9GUChhMCkKKwlzLmQJJGYyOSwgU0NfRlBSRUdTKzUqUkVHU1pfRlAoYTApCisJcy5kCSRmMzAsIFNDX0ZQUkVHUys2KlJFR1NaX0ZQKGEwKQorCXMuZAkkZjMxLCBTQ19GUFJFR1MrNypSRUdTWl9GUChhMCkKKyNlbHNlCisJIyBjYWxsZWUtc2F2ZWQgZnAgcmVncyBvbiBtaXBzIG8zMiBBQkkgYXJlCisJIyAgIHRoZSBldmVuLW51bWJlcmVkIGZwIHJlZ3MgJGYyMCwkZjIyLC4uLiRmMzAKKwlzLmQJJGYyMCwgU0NfRlBSRUdTKzAqUkVHU1pfRlAoYTApCisJcy5kCSRmMjIsIFNDX0ZQUkVHUysxKlJFR1NaX0ZQKGEwKQorCXMuZAkkZjI0LCBTQ19GUFJFR1MrMipSRUdTWl9GUChhMCkKKwlzLmQJJGYyNiwgU0NfRlBSRUdTKzMqUkVHU1pfRlAoYTApCisJcy5kCSRmMjgsIFNDX0ZQUkVHUys0KlJFR1NaX0ZQKGEwKQorCXMuZAkkZjMwLCBTQ19GUFJFR1MrNSpSRUdTWl9GUChhMCkKKyNlbmRpZgorCXN3CXYwLCBTQ19GUFNSKGEwKQorCW1vdmUJdjAsIHplcm8KIAlSRVNUT1JFX0dQNjQKIAlQVFJfQUREVSBzcCwgRlJBTUVTWgogCWoJcmEKLQkgbW92ZQl2MCwgemVybwogRU5EKF9zZXRqbXApCiAKKwogTEVBRihfbG9uZ2ptcCwgRlJBTUVTWikKIAlQVFJfU1VCVSBzcCwgRlJBTUVTWgogCVNFVFVQX0dQNjQoR1BPRkYsIF9sb25nam1wKQogCVNBVkVfR1AoR1BPRkYpCi0JLnNldCAgICBub3Jlb3JkZXIKLQlSRUdfTAl2MCwgU0NfUkVHUytaRVJPKlJFR1NaKGEwKQotCWJuZQl2MCwgMHhBQ0VEQkFERSwgYm90Y2gJCSMganVtcCBpZiBlcnJvcgotCVJFR19MCXJhLCBTQ19QQyhhMCkKLQlSRUdfTAl2MCwgU0NfRlBSRUdTKygoRlNSLUYwKSpSRUdTWikoYTApCi0JUkVHX0wJczAsIFNDX1JFR1MrUzAqUkVHU1ooYTApCi0JUkVHX0wJczEsIFNDX1JFR1MrUzEqUkVHU1ooYTApCi0JUkVHX0wJczIsIFNDX1JFR1MrUzIqUkVHU1ooYTApCi0JUkVHX0wJczMsIFNDX1JFR1MrUzMqUkVHU1ooYTApCi0JUkVHX0wJczQsIFNDX1JFR1MrUzQqUkVHU1ooYTApCi0JUkVHX0wJczUsIFNDX1JFR1MrUzUqUkVHU1ooYTApCi0JUkVHX0wJczYsIFNDX1JFR1MrUzYqUkVHU1ooYTApCi0JUkVHX0wJczcsIFNDX1JFR1MrUzcqUkVHU1ooYTApCi0JUkVHX0wJczgsIFNDX1JFR1MrUzgqUkVHU1ooYTApCi0JUkVHX0wJZ3AsIFNDX1JFR1MrR1AqUkVHU1ooYTApCi0JUkVHX0wJc3AsIFNDX1JFR1MrU1AqUkVHU1ooYTApCi0jaWYgIWRlZmluZWQoU09GVEZMT0FUKQotCWN0YzEJdjAsICQzMQotCWwuZAkkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCkoYTApCi0JbC5kCSRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApKGEwKQotCWwuZAkkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCkoYTApCi0JbC5kCSRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApKGEwKQotI2lmIF9NSVBTX0ZQU0VUID09IDMyCi0JbC5kCSRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApKGEwKQotCWwuZAkkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCkoYTApCi0JbC5kCSRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApKGEwKQotCWwuZAkkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCkoYTApCisJLnNldAlyZW9yZGVyCisKKyNpZm5kZWYgX19MUDY0X18KKwlhZGRpdQlhMCwgNwkJCQkjIHJvdW5kdXAgam1wYnVmIGFkZHIgdG8gOC1ieXRlIGJvdW5kYXJ5CisJbGkgICAgICB0MCwgfjcKKwlhbmQJYTAsIHQwCiAjZW5kaWYKLSNlbmRpZiAvKiAhU09GVEZMT0FUICovCisKKwkjIFNDX01BU0sgaXMgdW51c2VkIGhlcmUKKworCWx3CXYwLCBTQ19NQUdJQyhhMCkKKwlsaQl0MCwgMHhBQ0VEQkFERQorCWJuZQl2MCwgdDAsIGJvdGNoCQkJIyBqdW1wIGlmIGVycm9yCisKKwkjIGNhbGxlZS1zYXZlZCBsb25nLXNpemVkIHJlZ3M6CisJUkVHX0wJcmEsIFNDX1JFR1MrMCpSRUdTWihhMCkKKwlSRUdfTAlzMCwgU0NfUkVHUysxKlJFR1NaKGEwKQorCVJFR19MCXMxLCBTQ19SRUdTKzIqUkVHU1ooYTApCisJUkVHX0wJczIsIFNDX1JFR1MrMypSRUdTWihhMCkKKwlSRUdfTAlzMywgU0NfUkVHUys0KlJFR1NaKGEwKQorCVJFR19MCXM0LCBTQ19SRUdTKzUqUkVHU1ooYTApCisJUkVHX0wJczUsIFNDX1JFR1MrNipSRUdTWihhMCkKKwlSRUdfTAlzNiwgU0NfUkVHUys3KlJFR1NaKGEwKQorCVJFR19MCXM3LCBTQ19SRUdTKzgqUkVHU1ooYTApCisJUkVHX0wJczgsIFNDX1JFR1MrOSpSRUdTWihhMCkKKwlSRUdfTAlncCwgU0NfUkVHUysxMCpSRUdTWihhMCkKKwlSRUdfTAlzcCwgU0NfUkVHUysxMSpSRUdTWihhMCkKKworCWx3CXYwLCBTQ19GUFNSKGEwKQorCWN0YzEJdjAsICQzMQorI2lmZGVmIF9fTFA2NF9fCisJIyBjYWxsZWUtc2F2ZWQgZnAgcmVncyBvbiBtaXBzIG42NCBBQkkgYXJlICRmMjQuLiRmMzEKKwlsLmQJJGYyNCwgU0NfRlBSRUdTKzAqUkVHU1pfRlAoYTApCisJbC5kCSRmMjUsIFNDX0ZQUkVHUysxKlJFR1NaX0ZQKGEwKQorCWwuZAkkZjI2LCBTQ19GUFJFR1MrMipSRUdTWl9GUChhMCkKKwlsLmQJJGYyNywgU0NfRlBSRUdTKzMqUkVHU1pfRlAoYTApCisJbC5kCSRmMjgsIFNDX0ZQUkVHUys0KlJFR1NaX0ZQKGEwKQorCWwuZAkkZjI5LCBTQ19GUFJFR1MrNSpSRUdTWl9GUChhMCkKKwlsLmQJJGYzMCwgU0NfRlBSRUdTKzYqUkVHU1pfRlAoYTApCisJbC5kCSRmMzEsIFNDX0ZQUkVHUys3KlJFR1NaX0ZQKGEwKQorI2Vsc2UKKwkjIGNhbGxlZS1zYXZlZCBmcCByZWdzIG9uIG1pcHMgbzMyIEFCSSBhcmUKKwkjICAgdGhlIGV2ZW4tbnVtYmVyZWQgZnAgcmVncyAkZjIwLCRmMjIsLi4uJGYzMAorCWwuZAkkZjIwLCBTQ19GUFJFR1MrMCpSRUdTWl9GUChhMCkKKwlsLmQJJGYyMiwgU0NfRlBSRUdTKzEqUkVHU1pfRlAoYTApCisJbC5kCSRmMjQsIFNDX0ZQUkVHUysyKlJFR1NaX0ZQKGEwKQorCWwuZAkkZjI2LCBTQ19GUFJFR1MrMypSRUdTWl9GUChhMCkKKwlsLmQJJGYyOCwgU0NfRlBSRUdTKzQqUkVHU1pfRlAoYTApCisJbC5kCSRmMzAsIFNDX0ZQUkVHUys1KlJFR1NaX0ZQKGEwKQorI2VuZGlmCiAJYm5lCWExLCB6ZXJvLCAxZgotCSBub3AKIAlsaQlhMSwgMQkJCSMgbmV2ZXIgcmV0dXJuIDAhCiAxOgorCW1vdmUJdjAsIGExCiAJaglyYQotCSBtb3ZlCXYwLCBhMQogCiBib3RjaDoKIAlqYWwJbG9uZ2ptcGVycm9yCi0Jbm9wCiAJamFsCWFib3J0Ci0Jbm9wCiAJUkVTVE9SRV9HUDY0CiAJUFRSX0FERFUgc3AsIEZSQU1FU1oKIEVORChfbG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9hdGV4aXQuaCBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9hdGV4aXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU5MDA4Yy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvYXRleGl0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLWV4dGVybiB2b2lkICpfX2Rzb19oYW5kbGU7Ci1leHRlcm4gaW50IF9fY3hhX2F0ZXhpdCh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnLCB2b2lkICpkc28pOwotCi1fX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKLWludCBhdGV4aXQodm9pZCAoKmZ1bmMpKHZvaWQpKQotewotICByZXR1cm4gKF9fY3hhX2F0ZXhpdCgodm9pZCAoKikodm9pZCAqKSlmdW5jLCAodm9pZCAqKTAsICZfX2Rzb19oYW5kbGUpKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9jcnRiZWdpbi5jIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2NydGJlZ2luLmMKaW5kZXggMjhlODgxNy4uNTBlOWVlYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL2NydGJlZ2luLmMKKysrIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2NydGJlZ2luLmMKQEAgLTkxLDQgKzkxLDQgQEAKICk7CiAKICNpbmNsdWRlICIuLi8uLi9hcmNoLWNvbW1vbi9iaW9uaWMvX19kc29faGFuZGxlLmgiCi0jaW5jbHVkZSAiYXRleGl0LmgiCisjaW5jbHVkZSAiLi4vLi4vYXJjaC1jb21tb24vYmlvbmljL2F0ZXhpdC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL3NldGptcC5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL3NldGptcC5TCmluZGV4IDMxNzg2YmUuLmExZDQ2OTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9zZXRqbXAuUworKysgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc2V0am1wLlMKQEAgLTMwLDEyICszMCwxMiBAQAogICovCiAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLSNpbmNsdWRlIDxtYWNoaW5lL3JlZ251bS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvc2lnbmFsLmg+CiAKIC8qCi0gKiBzZXRqbXAsIGxvbmdqbXAgaW1wbGVtZW50YXRpb24gZm9yIGxpYmMuIHRoaXMgY29kZSBkZXBlbmRzCi0gKiBvbiB0aGUgbGF5b3V0IG9mIHRoZSBzdHJ1Y3Qgc2lnY29udGV4dCBpbiBtYWNoaW5lL3NpZ25hbC5oLgorICogX3NldGptcCwgX2xvbmdqbXAgKHJlc3RvcmluZyBzaWduYWwgc3RhdGUpCisgKgorICogIEdQT0ZGIGFuZCBGUkFNRVNJWkUgbXVzdCBiZSB0aGUgc2FtZSBmb3IgYm90aCBfc2V0am1wIGFuZCBfbG9uZ2ptcCEKICAqCiAgKi8KIApAQCAtNTEsMTI0ICs1MSwxMzkgQEAKIAlTRVRVUF9HUDY0KEdQT0ZGLCBzZXRqbXApCiAJU0FWRV9HUChHUE9GRikKIAkuc2V0CXJlb3JkZXIKKworI2lmbmRlZiBfX0xQNjRfXworCWFkZGl1ICAgYTAsIDcJCQkJIyByb3VuZHVwIGptcGJ1ZiBhZGRyIHRvIDgtYnl0ZSBib3VuZGFyeQorCWxpICAgICAgdDAsIH43CisJYW5kICAgICBhMCwgdDAKKyNlbmRpZgorCiAJUkVHX1MJcmEsIFJBT0ZGKHNwKQkJCSMgc2F2ZSBzdGF0ZQogCVJFR19TCWEwLCBBME9GRihzcCkKLQogCW1vdmUJYTAsIHplcm8JCQkjIGdldCBjdXJyZW50IHNpZ25hbCBtYXNrCiAJamFsCXNpZ2Jsb2NrCi0KLQlSRUdfTAl2MSwgQTBPRkYoc3ApCQkJIyB2MSA9IGptcGJ1ZgotCVJFR19TCXYwLCBTQ19NQVNLKHYxKQkJCSMgc2F2ZSBzY19tYXNrID0gc2lnYmxvY2soMCkKLQotCVJFR19MCWEwLCBBME9GRihzcCkJCQkjIHJlc3RvcmUgam1wYnVmCisJUkVHX0wJYTAsIEEwT0ZGKHNwKQogCVJFR19MCXJhLCBSQU9GRihzcCkKLQlSRUdfUwlyYSwgU0NfUEMoYTApCQkJIyBzY19wYyA9IHJldHVybiBhZGRyZXNzCi0jaWYgZGVmaW5lZChfX21pcHM2NCkKLQlkbGkJdjAsIDB4QUNFREJBREUJCQkjIHNpZ2NvbnRleHQgbWFnaWMgbnVtYmVyCi0jZWxzZQotCWxpCXYwLCAweEFDRURCQURFCQkJIyBzaWdjb250ZXh0IG1hZ2ljIG51bWJlcgotI2VuZGlmCi0JUkVHX1MJdjAsIFNDX1JFR1MrWkVSTypSRUdTWihhMCkKLQlSRUdfUwlzMCwgU0NfUkVHUytTMCpSRUdTWihhMCkKLQlSRUdfUwlzMSwgU0NfUkVHUytTMSpSRUdTWihhMCkKLQlSRUdfUwlzMiwgU0NfUkVHUytTMipSRUdTWihhMCkKLQlSRUdfUwlzMywgU0NfUkVHUytTMypSRUdTWihhMCkKLQlSRUdfUwlzNCwgU0NfUkVHUytTNCpSRUdTWihhMCkKLQlSRUdfUwlzNSwgU0NfUkVHUytTNSpSRUdTWihhMCkKLQlSRUdfUwlzNiwgU0NfUkVHUytTNipSRUdTWihhMCkKLQlSRUdfUwlzNywgU0NfUkVHUytTNypSRUdTWihhMCkKLQlSRUdfUwlzOCwgU0NfUkVHUytTOCpSRUdTWihhMCkKLQlSRUdfTAl2MCwgR1BPRkYoc3ApCi0JUkVHX1MJdjAsIFNDX1JFR1MrR1AqUkVHU1ooYTApCi0JUFRSX0FERFUgdjAsIHNwLCBGUkFNRVNaCi0JUkVHX1MJdjAsIFNDX1JFR1MrU1AqUkVHU1ooYTApCiAKLSNpZiAhZGVmaW5lZChTT0ZURkxPQVQpCi0JbGkJdjAsIDEJCQkJIyBiZSBuaWNlIGlmIHdlIGNvdWxkIHRlbGwKLQlSRUdfUwl2MCwgU0NfRlBVU0VEKGEwKQkJIyBzY19mcHVzZWQgPSAxCisJUkVHX1MJdjAsIFNDX01BU0soYTApCQkJIyBzYXZlIHNjX21hc2sgPSBzaWdibG9jaygwKQorCisJbGkJdjAsIDB4QUNFREJBREUJCQkjIHNpZ2NvbnRleHQgbWFnaWMgbnVtYmVyCisJc3cJdjAsIFNDX01BR0lDKGEwKQorCSMgY2FsbGVlLXNhdmVkIGxvbmctc2l6ZWQgcmVnczoKKwlSRUdfUwlyYSwgU0NfUkVHUyswKlJFR1NaKGEwKQorCVJFR19TCXMwLCBTQ19SRUdTKzEqUkVHU1ooYTApCisJUkVHX1MJczEsIFNDX1JFR1MrMipSRUdTWihhMCkKKwlSRUdfUwlzMiwgU0NfUkVHUyszKlJFR1NaKGEwKQorCVJFR19TCXMzLCBTQ19SRUdTKzQqUkVHU1ooYTApCisJUkVHX1MJczQsIFNDX1JFR1MrNSpSRUdTWihhMCkKKwlSRUdfUwlzNSwgU0NfUkVHUys2KlJFR1NaKGEwKQorCVJFR19TCXM2LCBTQ19SRUdTKzcqUkVHU1ooYTApCisJUkVHX1MJczcsIFNDX1JFR1MrOCpSRUdTWihhMCkKKwlSRUdfUwlzOCwgU0NfUkVHUys5KlJFR1NaKGEwKQorCVJFR19MCXYwLCBHUE9GRihzcCkKKwlSRUdfUwl2MCwgU0NfUkVHUysxMCpSRUdTWihhMCkKKwlQVFJfQUREVSB2MCwgc3AsIEZSQU1FU1oKKwlSRUdfUwl2MCwgU0NfUkVHUysxMSpSRUdTWihhMCkKKwogCWNmYzEJdjAsICQzMQotCXMuZAkkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKShhMCkKLQlzLmQJJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCkoYTApCi0Jcy5kCSRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKShhMCkKLQlzLmQJJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCkoYTApCi0Jcy5kCSRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApKGEwKQotI2lmIF9NSVBTX0ZQU0VUID09IDMyCi0Jcy5kCSRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKShhMCkKLQlzLmQJJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCkoYTApCi0Jcy5kCSRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKShhMCkKLQlzLmQJJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCkoYTApCisKKyNpZmRlZiBfX0xQNjRfXworCSMgY2FsbGVlLXNhdmVkIGZwIHJlZ3Mgb24gbWlwcyBuNjQgQUJJIGFyZSAkZjI0Li4kZjMxCisJcy5kCSRmMjQsIFNDX0ZQUkVHUyswKlJFR1NaX0ZQKGEwKQorCXMuZAkkZjI1LCBTQ19GUFJFR1MrMSpSRUdTWl9GUChhMCkKKwlzLmQJJGYyNiwgU0NfRlBSRUdTKzIqUkVHU1pfRlAoYTApCisJcy5kCSRmMjcsIFNDX0ZQUkVHUyszKlJFR1NaX0ZQKGEwKQorCXMuZAkkZjI4LCBTQ19GUFJFR1MrNCpSRUdTWl9GUChhMCkKKwlzLmQJJGYyOSwgU0NfRlBSRUdTKzUqUkVHU1pfRlAoYTApCisJcy5kCSRmMzAsIFNDX0ZQUkVHUys2KlJFR1NaX0ZQKGEwKQorCXMuZAkkZjMxLCBTQ19GUFJFR1MrNypSRUdTWl9GUChhMCkKKyNlbHNlCisJIyBjYWxsZWUtc2F2ZWQgZnAgcmVncyBvbiBtaXBzIG8zMiBBQkkgYXJlCisJIyAgIHRoZSBldmVuLW51bWJlcmVkIGZwIHJlZ3MgJGYyMCwkZjIyLC4uLiRmMzAKKwlzLmQJJGYyMCwgU0NfRlBSRUdTKzAqUkVHU1pfRlAoYTApCisJcy5kCSRmMjIsIFNDX0ZQUkVHUysxKlJFR1NaX0ZQKGEwKQorCXMuZAkkZjI0LCBTQ19GUFJFR1MrMipSRUdTWl9GUChhMCkKKwlzLmQJJGYyNiwgU0NfRlBSRUdTKzMqUkVHU1pfRlAoYTApCisJcy5kCSRmMjgsIFNDX0ZQUkVHUys0KlJFR1NaX0ZQKGEwKQorCXMuZAkkZjMwLCBTQ19GUFJFR1MrNSpSRUdTWl9GUChhMCkKICNlbmRpZgotCVJFR19TCXYwLCBTQ19GUFJFR1MrKChGU1ItRjApKlJFR1NaKShhMCkKLSNlbmRpZiAvKiAhU09GVEZMT0FUICovCisJc3cJdjAsIFNDX0ZQU1IoYTApCiAJbW92ZQl2MCwgemVybwogCVJFU1RPUkVfR1A2NAogCVBUUl9BRERVIHNwLCBGUkFNRVNaCiAJaglyYQorRU5EKHNldGptcCkKKworCitOT05fTEVBRihsb25nam1wLCBGUkFNRVNaLCByYSkKKwkubWFzawkweDgwMDAwMDAwLCBSQU9GRgorCVBUUl9TVUJVIHNwLCBGUkFNRVNaCisJU0VUVVBfR1A2NChHUE9GRiwgbG9uZ2ptcCkKKwlTQVZFX0dQKEdQT0ZGKQorCS5zZXQJcmVvcmRlcgorCisjaWZuZGVmIF9fTFA2NF9fCisJYWRkaXUJYTAsIDcJCQkJIyByb3VuZHVwIGptcGJ1ZiBhZGRyIHRvIDgtYnl0ZSBib3VuZGFyeQorCWxpICAgICAgdDAsIH43CisJYW5kCWEwLCB0MAorI2VuZGlmCisKKwlSRUdfUwlhMSwgQTFPRkYoc3ApCisJUkVHX1MJYTAsIEEwT0ZGKHNwKQorCWx3CWEwLCBTQ19NQVNLKGEwKQorCWphbAlzaWdzZXRtYXNrCisJUkVHX0wJYTAsIEEwT0ZGKHNwKQorCVJFR19MCWExLCBBMU9GRihzcCkKKworCWx3CXYwLCBTQ19NQUdJQyhhMCkKKwlsaQl0MCwgMHhBQ0VEQkFERQorCWJuZQl2MCwgdDAsIGJvdGNoCQkJIyBqdW1wIGlmIGVycm9yCisKKwkjIGNhbGxlZS1zYXZlZCBsb25nLXNpemVkIHJlZ3M6CisJUkVHX0wJcmEsIFNDX1JFR1MrMCpSRUdTWihhMCkKKwlSRUdfTAlzMCwgU0NfUkVHUysxKlJFR1NaKGEwKQorCVJFR19MCXMxLCBTQ19SRUdTKzIqUkVHU1ooYTApCisJUkVHX0wJczIsIFNDX1JFR1MrMypSRUdTWihhMCkKKwlSRUdfTAlzMywgU0NfUkVHUys0KlJFR1NaKGEwKQorCVJFR19MCXM0LCBTQ19SRUdTKzUqUkVHU1ooYTApCisJUkVHX0wJczUsIFNDX1JFR1MrNipSRUdTWihhMCkKKwlSRUdfTAlzNiwgU0NfUkVHUys3KlJFR1NaKGEwKQorCVJFR19MCXM3LCBTQ19SRUdTKzgqUkVHU1ooYTApCisJUkVHX0wJczgsIFNDX1JFR1MrOSpSRUdTWihhMCkKKwlSRUdfTAlncCwgU0NfUkVHUysxMCpSRUdTWihhMCkKKwlSRUdfTAlzcCwgU0NfUkVHUysxMSpSRUdTWihhMCkKKworCWx3CXYwLCBTQ19GUFNSKGEwKQorCWN0YzEJdjAsICQzMQorI2lmZGVmIF9fTFA2NF9fCisJIyBjYWxsZWUtc2F2ZWQgZnAgcmVncyBvbiBtaXBzIG42NCBBQkkgYXJlICRmMjQuLiRmMzEKKwlsLmQJJGYyNCwgU0NfRlBSRUdTKzAqUkVHU1pfRlAoYTApCisJbC5kCSRmMjUsIFNDX0ZQUkVHUysxKlJFR1NaX0ZQKGEwKQorCWwuZAkkZjI2LCBTQ19GUFJFR1MrMipSRUdTWl9GUChhMCkKKwlsLmQJJGYyNywgU0NfRlBSRUdTKzMqUkVHU1pfRlAoYTApCisJbC5kCSRmMjgsIFNDX0ZQUkVHUys0KlJFR1NaX0ZQKGEwKQorCWwuZAkkZjI5LCBTQ19GUFJFR1MrNSpSRUdTWl9GUChhMCkKKwlsLmQJJGYzMCwgU0NfRlBSRUdTKzYqUkVHU1pfRlAoYTApCisJbC5kCSRmMzEsIFNDX0ZQUkVHUys3KlJFR1NaX0ZQKGEwKQorI2Vsc2UKKwkjIGNhbGxlZS1zYXZlZCBmcCByZWdzIG9uIG1pcHMgbzMyIEFCSSBhcmUKKwkjICAgdGhlIGV2ZW4tbnVtYmVyZWQgZnAgcmVncyAkZjIwLCRmMjIsLi4uJGYzMAorCWwuZAkkZjIwLCBTQ19GUFJFR1MrMCpSRUdTWl9GUChhMCkKKwlsLmQJJGYyMiwgU0NfRlBSRUdTKzEqUkVHU1pfRlAoYTApCisJbC5kCSRmMjQsIFNDX0ZQUkVHUysyKlJFR1NaX0ZQKGEwKQorCWwuZAkkZjI2LCBTQ19GUFJFR1MrMypSRUdTWl9GUChhMCkKKwlsLmQJJGYyOCwgU0NfRlBSRUdTKzQqUkVHU1pfRlAoYTApCisJbC5kCSRmMzAsIFNDX0ZQUkVHUys1KlJFR1NaX0ZQKGEwKQorI2VuZGlmCisJYm5lCWExLCB6ZXJvLCAxZgorCWxpCWExLCAxCQkJIyBuZXZlciByZXR1cm4gMCEKKzE6CisJbW92ZQl2MCwgYTEKKwlqCXJhCiAKIGJvdGNoOgogCWphbAlsb25nam1wZXJyb3IKIAlqYWwJYWJvcnQKIAlSRVNUT1JFX0dQNjQKIAlQVFJfQUREVSBzcCwgRlJBTUVTWgotRU5EKHNldGptcCkKLQotCi1MRUFGKGxvbmdqbXAsIEZSQU1FU1opCi0JUFRSX1NVQlUgc3AsIEZSQU1FU1oKLQlTRVRVUF9HUDY0KEdQT0ZGLCBsb25nam1wKQotCVNBVkVfR1AoR1BPRkYpCi0JLnNldAlyZW9yZGVyCi0Jc3cJYTEsIEExT0ZGKHNwKQotCXN3CWEwLCBBME9GRihzcCkKLQotCWx3CWEwLCBTQ19NQVNLKGEwKQotCWphbAlzaWdzZXRtYXNrCi0KLQlsdwlhMCwgQTBPRkYoc3ApCi0JbHcJYTEsIEExT0ZGKHNwKQotCi0JLnNldAlub3Jlb3JkZXIKLQlSRUdfTAl2MCwgU0NfUkVHUytaRVJPKlJFR1NaKGEwKQotCWJuZQl2MCwgMHhBQ0VEQkFERSwgYm90Y2gJCSMganVtcCBpZiBlcnJvcgotCVJFR19MCXJhLCBTQ19QQyhhMCkKLQlSRUdfTAlzMCwgU0NfUkVHUytTMCpSRUdTWihhMCkKLQlSRUdfTAlzMSwgU0NfUkVHUytTMSpSRUdTWihhMCkKLQlSRUdfTAlzMiwgU0NfUkVHUytTMipSRUdTWihhMCkKLQlSRUdfTAlzMywgU0NfUkVHUytTMypSRUdTWihhMCkKLQlSRUdfTAlzNCwgU0NfUkVHUytTNCpSRUdTWihhMCkKLQlSRUdfTAlzNSwgU0NfUkVHUytTNSpSRUdTWihhMCkKLQlSRUdfTAlzNiwgU0NfUkVHUytTNipSRUdTWihhMCkKLQlSRUdfTAlzNywgU0NfUkVHUytTNypSRUdTWihhMCkKLQlSRUdfTAlzOCwgU0NfUkVHUytTOCpSRUdTWihhMCkKLQlSRUdfTAlncCwgU0NfUkVHUytHUCpSRUdTWihhMCkKLQlSRUdfTAlzcCwgU0NfUkVHUytTUCpSRUdTWihhMCkKLQotI2lmICFkZWZpbmVkKFNPRlRGTE9BVCkKLQlSRUdfTAl2MCwgU0NfRlBSRUdTKygoRlNSLUYwKSpSRUdTWikoYTApCi0JY3RjMQl2MCwgJDMxCi0JbC5kCSRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApKGEwKQotCWwuZAkkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCi0JbC5kCSRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApKGEwKQotCWwuZAkkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCi0jaWYgX01JUFNfRlBTRVQgPT0gMzIKLQlsLmQJJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCkoYTApCi0JbC5kCSRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApKGEwKQotCWwuZAkkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCkoYTApCi0JbC5kCSRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApKGEwKQotCWwuZAkkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKShhMCkKLSNlbmRpZgotI2VuZGlmIC8qICFTT0ZURkxPQVQgKi8KLQlibmUJYTEsIHplcm8sIDFmCi0JIG5vcAotCWxpCWExLCAxCQkJIyBuZXZlciByZXR1cm4gMCEKLTE6Ci0JaglyYQotCSBtb3ZlCXYwLCBhMQotCiBFTkQobG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9zaWdzZXRqbXAuUyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9zaWdzZXRqbXAuUwppbmRleCA5ZDJlNWVhLi4zZWYwYTZmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc2lnc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL3NpZ3NldGptcC5TCkBAIC0zMiw3ICszMiw2IEBACiAgKi8KIAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotI2luY2x1ZGUgPG1hY2hpbmUvcmVnbnVtLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9zZXRqbXAuaD4KIAogLyoKQEAgLTQ2LDcgKzQ1LDcgQEAKIAlQVFJfU1VCVSBzcCwgRlJBTUVTWgogCVNFVFVQX0dQNjQoR1BPRkYsIHNpZ3NldGptcCkKIAkuc2V0CXJlb3JkZXIKLQlSRUdfUwlhMSwgKF9KQkxFTipSRUdTWikoYTApCQkjIHNhdmUgInNhdmVtYXNrIgorCXN3CWExLCBfSkJMRU4qUkVHU1ooYTApCQkjIHNhdmUgInNhdmVtYXNrIgogCWJuZQlhMSwgMHgwLCAxZgkJCSMgZG8gc2F2aW5nIG9mIHNpZ25hbCBtYXNrPwogCUxBCXQ5LCBfc2V0am1wCiAJUkVTVE9SRV9HUDY0CkBAIC02Myw3ICs2Miw3IEBACiAJUFRSX1NVQlUgc3AsIEZSQU1FU1oKIAlTRVRVUF9HUDY0KEdQT0ZGLCBzaWdsb25nam1wKQogCS5zZXQJcmVvcmRlcgotCVJFR19MCXQwLCAoX0pCTEVOKlJFR1NaKShhMCkJCSMgZ2V0ICJzYXZlbWFzayIKKwlsdwl0MCwgX0pCTEVOKlJFR1NaKGEwKQkJIyBnZXQgInNhdmVtYXNrIgogCWJuZQl0MCwgMHgwLCAxZgkJCSMgcmVzdG9yZSBzaWduYWwgbWFzaz8KIAlMQQl0OSwgX2xvbmdqbXAKIAlSRVNUT1JFX0dQNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9hc20uaCBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9hc20uaAppbmRleCA1ZWFjZGUzLi5jZGM3OTE0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvYXNtLmgKKysrIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCkBAIC0yOCw5ICsyOCw3IEBACiAjaWZuZGVmIF9NSVBTNjRfQVNNX0gKICNkZWZpbmUgX01JUFM2NF9BU01fSAogCi0jaWZuZGVmIF9BTElHTl9URVhUCi0jIGRlZmluZSBfQUxJR05fVEVYVCAuYWxpZ24gNAotI2VuZGlmCisjZGVmaW5lIF9fYmlvbmljX2FzbV9hbGlnbiA0CiAKICN1bmRlZiBfX2Jpb25pY19hc21fY3VzdG9tX2VudHJ5CiAjdW5kZWYgX19iaW9uaWNfYXNtX2N1c3RvbV9lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9lbmRpYW4uaCBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9lbmRpYW4uaAppbmRleCA0MWE5MDA0Li45MjcwZTlkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvZW5kaWFuLmgKKysrIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCkBAIC01OCwxMSArNTgsNyBAQAogI2VuZGlmICAvKiBfX21pcHMzMnIyX18gKi8KICNlbmRpZiAgLyogX19HTlVDX18gKi8KIAotI2lmIGRlZmluZWQoX19NSVBTRUJfXykKLSNkZWZpbmUgX0JZVEVfT1JERVIgX0JJR19FTkRJQU4KLSNlbHNlCiAjZGVmaW5lIF9CWVRFX09SREVSIF9MSVRUTEVfRU5ESUFOCi0jZW5kaWYKICNkZWZpbmUgX19TVFJJQ1RfQUxJR05NRU5UCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL3JlZ2RlZi5oIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL3JlZ2RlZi5oCmluZGV4IGFlMTgzOTIuLjNhN2NkNjggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9yZWdkZWYuaAorKysgYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvcmVnZGVmLmgKQEAgLTM3LDYgKzM3LDEzIEBACiAjaWZuZGVmIF9NSVBTX1JFR0RFRl9IXwogI2RlZmluZSBfTUlQU19SRUdERUZfSF8KIAorI2lmIChfTUlQU19TSU0gPT0gX0FCSTY0KSAmJiAhZGVmaW5lZChfX21pcHNfbjY0KQorI2RlZmluZSBfX21pcHNfbjY0IDEKKyNlbmRpZgorI2lmIChfTUlQU19TSU0gPT0gX0FCSU4zMikgJiYgICFkZWZpbmVkKF9fbWlwc19uMzIpCisjZGVmaW5lIF9fbWlwc19uMzIgMQorI2VuZGlmCisKICNkZWZpbmUgemVybwkkMAkvKiBhbHdheXMgemVybyAqLwogI2RlZmluZSBBVAkkYXQJLyogYXNzZW1ibGVyIHRlbXAgKi8KICNkZWZpbmUgdjAJJDIJLyogcmV0dXJuIHZhbHVlICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvcmVnbnVtLmggYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvcmVnbnVtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZTEyODAuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL3JlZ251bS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qCSRPcGVuQlNEOiByZWdudW0uaCx2IDEuMyAyMDA0LzA4LzEwIDIwOjI4OjEzIGRlcmFhZHQgRXhwICQgKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIE9wc3ljb24gQUIgICh3d3cub3BzeWNvbi5zZSAvIHd3dy5vcHN5Y29uLmNvbSkKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUwotICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfTUlQUzY0X1JFR05VTV9IXwotI2RlZmluZSBfTUlQUzY0X1JFR05VTV9IXwotCi0vKgotICogTG9jYXRpb24gb2YgdGhlIHNhdmVkIHJlZ2lzdGVycyByZWxhdGl2ZSB0byBaRVJPLgotICogVXNhZ2UgaXMgcC0+cF9yZWdzW1hYXS4KLSAqLwotI2RlZmluZSBaRVJPCTAKLSNkZWZpbmUgQVNUCTEKLSNkZWZpbmUgVjAJMgotI2RlZmluZSBWMQkzCi0jZGVmaW5lIEEwCTQKLSNkZWZpbmUgQTEJNQotI2RlZmluZSBBMgk2Ci0jZGVmaW5lIEEzCTcKLSNkZWZpbmUgVDAJOAotI2RlZmluZSBUMQk5Ci0jZGVmaW5lIFQyCTEwCi0jZGVmaW5lIFQzCTExCi0jZGVmaW5lIFQ0CTEyCi0jZGVmaW5lIFQ1CTEzCi0jZGVmaW5lIFQ2CTE0Ci0jZGVmaW5lIFQ3CTE1Ci0jZGVmaW5lIFMwCTE2Ci0jZGVmaW5lIFMxCTE3Ci0jZGVmaW5lIFMyCTE4Ci0jZGVmaW5lIFMzCTE5Ci0jZGVmaW5lIFM0CTIwCi0jZGVmaW5lIFM1CTIxCi0jZGVmaW5lIFM2CTIyCi0jZGVmaW5lIFM3CTIzCi0jZGVmaW5lIFQ4CTI0Ci0jZGVmaW5lIFQ5CTI1Ci0jZGVmaW5lIEswCTI2Ci0jZGVmaW5lIEsxCTI3Ci0jZGVmaW5lIEdQCTI4Ci0jZGVmaW5lIFNQCTI5Ci0jZGVmaW5lIFM4CTMwCi0jZGVmaW5lIFJBCTMxCi0jZGVmaW5lCVNSCTMyCi0jZGVmaW5lCVBTCVNSCS8qIGFsaWFzIGZvciBTUiAqLwotI2RlZmluZSBNVUxMTwkzMwotI2RlZmluZSBNVUxISQkzNAotI2RlZmluZSBCQURWQUREUiAzNQotI2RlZmluZSBDQVVTRQkzNgotI2RlZmluZQlQQwkzNwotI2RlZmluZQlJQwkzOAotI2RlZmluZQlDUEwJMzkKLQotI2RlZmluZQlOVU1TQVZFUkVHUyA0MAkJLyogTnVtYmVyIG9mIHJlZ2lzdGVycyBzYXZlZCBpbiB0cmFwICovCi0KLSNkZWZpbmUgRlBCQVNFCU5VTVNBVkVSRUdTCi0jZGVmaW5lIEYwCShGUEJBU0UrMCkKLSNkZWZpbmUgRjEJKEZQQkFTRSsxKQotI2RlZmluZSBGMgkoRlBCQVNFKzIpCi0jZGVmaW5lIEYzCShGUEJBU0UrMykKLSNkZWZpbmUgRjQJKEZQQkFTRSs0KQotI2RlZmluZSBGNQkoRlBCQVNFKzUpCi0jZGVmaW5lIEY2CShGUEJBU0UrNikKLSNkZWZpbmUgRjcJKEZQQkFTRSs3KQotI2RlZmluZSBGOAkoRlBCQVNFKzgpCi0jZGVmaW5lIEY5CShGUEJBU0UrOSkKLSNkZWZpbmUgRjEwCShGUEJBU0UrMTApCi0jZGVmaW5lIEYxMQkoRlBCQVNFKzExKQotI2RlZmluZSBGMTIJKEZQQkFTRSsxMikKLSNkZWZpbmUgRjEzCShGUEJBU0UrMTMpCi0jZGVmaW5lIEYxNAkoRlBCQVNFKzE0KQotI2RlZmluZSBGMTUJKEZQQkFTRSsxNSkKLSNkZWZpbmUgRjE2CShGUEJBU0UrMTYpCi0jZGVmaW5lIEYxNwkoRlBCQVNFKzE3KQotI2RlZmluZSBGMTgJKEZQQkFTRSsxOCkKLSNkZWZpbmUgRjE5CShGUEJBU0UrMTkpCi0jZGVmaW5lIEYyMAkoRlBCQVNFKzIwKQotI2RlZmluZSBGMjEJKEZQQkFTRSsyMSkKLSNkZWZpbmUgRjIyCShGUEJBU0UrMjIpCi0jZGVmaW5lIEYyMwkoRlBCQVNFKzIzKQotI2RlZmluZSBGMjQJKEZQQkFTRSsyNCkKLSNkZWZpbmUgRjI1CShGUEJBU0UrMjUpCi0jZGVmaW5lIEYyNgkoRlBCQVNFKzI2KQotI2RlZmluZSBGMjcJKEZQQkFTRSsyNykKLSNkZWZpbmUgRjI4CShGUEJBU0UrMjgpCi0jZGVmaW5lIEYyOQkoRlBCQVNFKzI5KQotI2RlZmluZSBGMzAJKEZQQkFTRSszMCkKLSNkZWZpbmUgRjMxCShGUEJBU0UrMzEpCi0jZGVmaW5lCUZTUgkoRlBCQVNFKzMyKQotCi0jZGVmaW5lCU5VTUZQUkVHUyAzMwotCi0jZGVmaW5lCU5SRUdTCShOVU1TQVZFUkVHUyArIE5VTUZQUkVHUykKLQotI2VuZGlmIC8qICFfTUlQUzY0X1JFR05VTV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL3NldGptcC5oIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL3NldGptcC5oCmluZGV4IDU1YmE3YmUuLmE5NzA3ZGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaAorKysgYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvc2V0am1wLmgKQEAgLTUsNiArNSwxMCBAQAogI2lmbmRlZiBfTUlQU19TRVRKTVBfSF8KICNkZWZpbmUgX01JUFNfU0VUSk1QX0hfCiAKLSNkZWZpbmUJX0pCTEVOCTE1NwkJLyogc2l6ZSwgaW4gbG9uZ3MsIG9mIGEgam1wX2J1ZiAqLworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lCV9KQkxFTgkyMgkJLyogc2l6ZSwgaW4gOC1ieXRlIGxvbmdzLCBvZiBhIG1pcHM2NCBqbXBfYnVmICovCisjZWxzZQorI2RlZmluZQlfSkJMRU4JMjkJCS8qIHNpemUsIGluIDQtYnl0ZSBsb25ncywgb2YgYSBtaXBzMzIgam1wX2J1ZiAqLworI2VuZGlmCiAKICNlbmRpZiAvKiAhX01JUFNfU0VUSk1QX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvc2lnbmFsLmggYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvc2lnbmFsLmgKaW5kZXggYjMxNzE1Yy4uYjljMTM2NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL3NpZ25hbC5oCisrKyBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9zaWduYWwuaApAQCAtMzcsMTUgKzM3LDQyIEBACiAjaWZuZGVmIF9NSVBTX1NJR05BTF9IXwogI2RlZmluZSBfTUlQU19TSUdOQUxfSF8KIAotI2RlZmluZQlTQ19SRUdNQVNLCSgwKlJFR1NaKQotI2RlZmluZQlTQ19TVEFUVVMJKDEqUkVHU1opCi0jZGVmaW5lCVNDX1BDCQkoMipSRUdTWikKLSNkZWZpbmUJU0NfUkVHUwkJKFNDX1BDKzgpCi0jZGVmaW5lCVNDX0ZQUkVHUwkoU0NfUkVHUyszMio4KQotI2RlZmluZQlTQ19BQ1gJCShTQ19GUFJFR1MrMzIqUkVHU1pfRlApCi0jZGVmaW5lCVNDX1VTRURfTUFUSAkoU0NfQUNYKzMqUkVHU1opCi0vKiBPcGVuQlNEIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUJU0NfTUFTSwkJU0NfUkVHTUFTSwotI2RlZmluZQlTQ19GUFVTRUQJU0NfVVNFRF9NQVRICisvKiBPbiBNaXBzMzIsIGptcGJ1ZiBiZWdpbnMgd2l0aCBvcHRpb25hbCA0LWJ5dGUgZmlsbGVyIHNvIHRoYXQKKyAqICBhbGwgc2F2ZWQgRlAgcmVncyBhcmUgYWxpZ25lZCBvbiA4LWJ5dGUgYm91bmRhcnksIGRlc3BpdGUgdGhpcyB3aG9sZQorICogIHN0cnVjdCBiZWluZyBtaXMtZGVjbGFyZWQgdG8gdXNlcnMgYXMgYW4gYXJyYXkgb2YgKDQtYnl0ZSkgbG9uZ3MuCisgKiAgQWxsIHRoZSBmb2xsb3dpbmcgb2Zmc2V0cyBhcmUgdGhlbiBmcm9tIHRoZSByb3VuZGVkLXVwIGJhc2UgYWRkcgorICovCisKKy8qIEZpZWxkcyBvZiBzYW1lIHNpemUgb24gYWxsIE1JUFMgYWJpczogKi8KKyNkZWZpbmUJU0NfTUFHSUMgICAgICAgICgwKjQpCQkvKiA0IGJ5dGVzLCBpZGVudGlmeSBqbXBidWYgKi8KKyNkZWZpbmUJU0NfTUFTSwkJKDEqNCkJCS8qIDQgYnl0ZXMsIHNhdmVkIHNpZ25hbCBtYXNrICovCisjZGVmaW5lCVNDX0ZQU1IJCSgyKjQpCQkvKiA0IGJ5dGVzLCBmbG9hdGluZyBwb2ludCBjb250cm9sL3N0YXR1cyByZWcgKi8KKy8qICAgICAJZmlsbGVyMgkJKDMqNCkJCSAgIDQgYnl0ZXMsIHBhZCB0byA4LWJ5dGUgYm91bmRhcnkgKi8KKworLyogUmVnaXN0ZXJzIHRoYXQgYXJlIDQtYnl0ZSBvbiBtaXBzMzIgbzMyLCBhbmQgOC1ieXRlIG9uIG1pcHM2NCBuNjQgYWJpICovCisjZGVmaW5lCVNDX1JFR1NfU0FWRUQJMTIJCS8qIHJhLGdwLHNwLHMwLXM4ICovCisjZGVmaW5lCVNDX1JFR1MJCSg0KjQpCQkvKiBTQ19SRUdTX1NBVkVEKlJFR1NaIGJ5dGVzICovCisKKy8qIEZsb2F0aW5nIHB0IHJlZ2lzdGVycyBhcmUgOC1ieXRlcyBvbiBhbGwgYWJpcywKKyAqIGJ1dCB0aGUgbnVtYmVyIG9mIHNhdmVkIGZwIHJlZ3MgdmFyaWVzIGZvciBvMzIvbjMyIHZlcnN1cyBuNjQgYWJpczoKKyAqLworCisjaWZkZWYgX19MUDY0X18KKyNkZWZpbmUJU0NfRlBSRUdTX1NBVkVECTggIC8qIGFsbCAgZnAgcmVncyBmMjQsZjI1LGYyNixmMjcsZjI4LGYyOSxmMzAsZjMxICovCisjZWxzZQorI2RlZmluZQlTQ19GUFJFR1NfU0FWRUQJNiAgLyogZXZlbiBmcCByZWdzIGYyMCxmMjIsZjI0LGYyNixmMjgsZjMwICovCisjZW5kaWYKKworI2RlZmluZQlTQ19GUFJFR1MJKFNDX1JFR1MgKyBTQ19SRUdTX1NBVkVEKlJFR1NaKSAgLyogU0NfRlBSRUdTX1NBVkVEKlJFR1NaX0ZQIGJ5dGVzICovCisKKyNkZWZpbmUJU0NfQllURVMJKFNDX0ZQUkVHUyArIFNDX0ZQUkVHU19TQVZFRCpSRUdTWl9GUCkKKyNkZWZpbmUJU0NfTE9OR1MJKFNDX0JZVEVTL1JFR1NaKQorCisjaWZkZWYgX19MUDY0X18KKy8qIFNDX0xPTkdTIGlzIDIyLCBzbyBfSkJMRU4gc2hvdWxkIGJlIDIyIG9yIGxhcmdlciAqLworI2Vsc2UKKy8qIFNDX0xPTkdTIGlzIDI4LCBidXQgbXVzdCBhbHNvIGFsbG9jYXRlIGR5bmFtaWMtcm91bmR1cCBmaWxsZXIuCisgICBzbyBfSkJMRU4gc2hvdWxkIGJlIDI5IG9yIGxhcmdlciAqLworI2VuZGlmCiAKICNlbmRpZgkvKiAhX01JUFNfU0lHTkFMX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc2dpZGVmcy5oIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9zZ2lkZWZzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvaW5jbHVkZS9zZ2lkZWZzLmgKcmVuYW1lIHRvIGxpYmMvYXJjaC1taXBzL2luY2x1ZGUvc2dpZGVmcy5oCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zdHJpbmcvbWlwc19zdHJsZW4uYyBiL2xpYmMvYXJjaC1taXBzL3N0cmluZy9taXBzX3N0cmxlbi5jCmluZGV4IDlmYjdlNmEuLjQ1ZmM0YjQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N0cmluZy9taXBzX3N0cmxlbi5jCisrKyBiL2xpYmMvYXJjaC1taXBzL3N0cmluZy9taXBzX3N0cmxlbi5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICJtaXBzLXN0cmluZy1vcHMuaCIKIAogI2RlZmluZSBkb19zdHJsZW5fd29yZChfX2F2KSB7XApAQCAtNDcsOCArNDgsOCBAQAogI2RlZmluZSBzdHJsZW4gbXlfc3RybGVuCiAjZW5kaWYKIAotaW50Ci1zdHJsZW4gKGNvbnN0IHZvaWQgKl9hKQorc2l6ZV90CitzdHJsZW4gKGNvbnN0IGNoYXIgKl9hKQogewogICBpbnQgY250ID0gMDsKICAgdW5zaWduZWQgeDsKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19jbG9ja19uYW5vc2xlZXAuUwpzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwpyZW5hbWUgdG8gbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19jbG9ja19uYW5vc2xlZXAuUwppbmRleCA2MDAyYWI0Li45N2JmYTI3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2Nsb2NrX25hbm9zbGVlcC5TCkBAIC0yLDcgKzIsNyBAQAogCiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLUVOVFJZKGNsb2NrX25hbm9zbGVlcCkKK0VOVFJZKF9fY2xvY2tfbmFub3NsZWVwKQogICAgIC5zZXQgbm9yZW9yZGVyCiAgICAgLmNwbG9hZCB0OQogICAgIGxpIHYwLCBfX05SX2Nsb2NrX25hbm9zbGVlcApAQCAtMTYsNCArMTYsNCBAQAogICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLUVORChjbG9ja19uYW5vc2xlZXApCitFTkQoX19jbG9ja19uYW5vc2xlZXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGhvc3RuYW1lLlMKc2ltaWxhcml0eSBpbmRleCA3NiUKY29weSBmcm9tIGxpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCmNvcHkgdG8gbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0aG9zdG5hbWUuUwppbmRleCA2MDAyYWI0Li4yOTg3YjUyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRob3N0bmFtZS5TCkBAIC0yLDEwICsyLDEwIEBACiAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotRU5UUlkoY2xvY2tfbmFub3NsZWVwKQorRU5UUlkoc2V0aG9zdG5hbWUpCiAgICAgLnNldCBub3Jlb3JkZXIKICAgICAuY3Bsb2FkIHQ5Ci0gICAgbGkgdjAsIF9fTlJfY2xvY2tfbmFub3NsZWVwCisgICAgbGkgdjAsIF9fTlJfc2V0aG9zdG5hbWUKICAgICBzeXNjYWxsCiAgICAgYm5leiBhMywgMWYKICAgICBtb3ZlIGEwLCB2MApAQCAtMTYsNCArMTYsNCBAQAogICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLUVORChjbG9ja19uYW5vc2xlZXApCitFTkQoc2V0aG9zdG5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9fc2V0am1wLlMgYi9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9fc2V0am1wLlMKaW5kZXggZDIzN2U2ZC4uMDUyZGFjYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvX3NldGptcC5TCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL19zZXRqbXAuUwpAQCAtMzAsMTMgKzMwLDExIEBACiAgKi8KIAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotI2luY2x1ZGUgPG1hY2hpbmUvcmVnbnVtLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9zaWduYWwuaD4KIAogLyoKICAqIF9zZXRqbXAsIF9sb25nam1wIChub3QgcmVzdG9yaW5nIHNpZ25hbCBzdGF0ZSkKICAqCi0gKiBYWFggRlBTRVQgc2hvdWxkIHByb2JhYmx5IGJlIHRha2VuIGZyb20gU1Igc2V0dGluZy4gaG1tbS4uLgogICogIEdQT0ZGIGFuZCBGUkFNRVNJWkUgbXVzdCBiZSB0aGUgc2FtZSBmb3IgYm90aCBfc2V0am1wIGFuZCBfbG9uZ2ptcCEKICAqCiAgKi8KQEAgLTQ4LDEwMyArNDYsMTI3IEBACiAJUFRSX1NVQlUgc3AsIEZSQU1FU1oKIAlTRVRVUF9HUDY0KEdQT0ZGLCBfc2V0am1wKQogCVNBVkVfR1AoR1BPRkYpCi0JLnNldAlub3Jlb3JkZXIKLSNpZiBkZWZpbmVkKF9fbWlwczY0KQotCWRsaQl2MCwgMHhBQ0VEQkFERQkJCSMgc2lnY29udGV4dCBtYWdpYyBudW1iZXIKLSNlbHNlCi0JbGkJdjAsIDB4QUNFREJBREUJCQkjIHNpZ2NvbnRleHQgbWFnaWMgbnVtYmVyCi0jZW5kaWYKLQlSRUdfUwl2MCwgU0NfUkVHUytaRVJPKlJFR1NaKGEwKQotCVJFR19TCXMwLCBTQ19SRUdTK1MwKlJFR1NaKGEwKQotCVJFR19TCXMxLCBTQ19SRUdTK1MxKlJFR1NaKGEwKQotCVJFR19TCXMyLCBTQ19SRUdTK1MyKlJFR1NaKGEwKQotCVJFR19TCXMzLCBTQ19SRUdTK1MzKlJFR1NaKGEwKQotCVJFR19TCXM0LCBTQ19SRUdTK1M0KlJFR1NaKGEwKQotCVJFR19TCXM1LCBTQ19SRUdTK1M1KlJFR1NaKGEwKQotCVJFR19TCXM2LCBTQ19SRUdTK1M2KlJFR1NaKGEwKQotCVJFR19TCXM3LCBTQ19SRUdTK1M3KlJFR1NaKGEwKQotCVJFR19TCXM4LCBTQ19SRUdTK1M4KlJFR1NaKGEwKQotCVJFR19MCXYwLCBHUE9GRihzcCkKLQlSRUdfUwl2MCwgU0NfUkVHUytHUCpSRUdTWihhMCkKLQlQVFJfQUREVSB2MCwgc3AsIEZSQU1FU1oKLQlSRUdfUwl2MCwgU0NfUkVHUytTUCpSRUdTWihhMCkKLQlSRUdfUwlyYSwgU0NfUEMoYTApCisJLnNldAlyZW9yZGVyCiAKLSNpZiAhZGVmaW5lZChTT0ZURkxPQVQpCi0JbGkJdjAsIDEJCQkJIyBiZSBuaWNlIGlmIHdlIGNvdWxkIHRlbGwKLQlSRUdfUwl2MCwgU0NfRlBVU0VEKGEwKQkJIyBzY19mcHVzZWQgPSAxCi0JY2ZjMQl2MCwgJDMxCi0Jcy5kCSRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKShhMCkKLQlzLmQJJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCi0Jcy5kCSRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKShhMCkKLQlzLmQJJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCi0jaWYgX01JUFNfRlBTRVQgPT0gMzIKLQlzLmQJJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCkoYTApCi0Jcy5kCSRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKShhMCkKLQlzLmQJJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCkoYTApCi0Jcy5kCSRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKShhMCkKKyNpZm5kZWYgX19MUDY0X18KKwlhZGRpdSAgIGEwLCA3CQkJCSMgcm91bmR1cCBqbXBidWYgYWRkciB0byA4LWJ5dGUgYm91bmRhcnkKKwlsaSAgICAgIHQwLCB+NworCWFuZCAgICAgYTAsIHQwCiAjZW5kaWYKLQlSRUdfUwl2MCwgU0NfRlBSRUdTKygoRlNSLUYwKSpSRUdTWikoYTApCi0jZW5kaWYgLyogIVNPRlRGTE9BVCAqLworCisJIyBTQ19NQVNLIGlzIHVudXNlZCBoZXJlCisKKwlsaQl2MCwgMHhBQ0VEQkFERQkJCSMgc2lnY29udGV4dCBtYWdpYyBudW1iZXIKKwlzdwl2MCwgU0NfTUFHSUMoYTApCisJIyBjYWxsZWUtc2F2ZWQgbG9uZy1zaXplZCByZWdzOgorCVJFR19TCXJhLCBTQ19SRUdTKzAqUkVHU1ooYTApCisJUkVHX1MJczAsIFNDX1JFR1MrMSpSRUdTWihhMCkKKwlSRUdfUwlzMSwgU0NfUkVHUysyKlJFR1NaKGEwKQorCVJFR19TCXMyLCBTQ19SRUdTKzMqUkVHU1ooYTApCisJUkVHX1MJczMsIFNDX1JFR1MrNCpSRUdTWihhMCkKKwlSRUdfUwlzNCwgU0NfUkVHUys1KlJFR1NaKGEwKQorCVJFR19TCXM1LCBTQ19SRUdTKzYqUkVHU1ooYTApCisJUkVHX1MJczYsIFNDX1JFR1MrNypSRUdTWihhMCkKKwlSRUdfUwlzNywgU0NfUkVHUys4KlJFR1NaKGEwKQorCVJFR19TCXM4LCBTQ19SRUdTKzkqUkVHU1ooYTApCisJUkVHX0wJdjAsIEdQT0ZGKHNwKQorCVJFR19TCXYwLCBTQ19SRUdTKzEwKlJFR1NaKGEwKQorCVBUUl9BRERVIHYwLCBzcCwgRlJBTUVTWgorCVJFR19TCXYwLCBTQ19SRUdTKzExKlJFR1NaKGEwKQorCisJY2ZjMQl2MCwgJDMxCisKKyNpZmRlZiBfX0xQNjRfXworCSMgY2FsbGVlLXNhdmVkIGZwIHJlZ3Mgb24gbWlwcyBuNjQgQUJJIGFyZSAkZjI0Li4kZjMxCisJcy5kCSRmMjQsIFNDX0ZQUkVHUyswKlJFR1NaX0ZQKGEwKQorCXMuZAkkZjI1LCBTQ19GUFJFR1MrMSpSRUdTWl9GUChhMCkKKwlzLmQJJGYyNiwgU0NfRlBSRUdTKzIqUkVHU1pfRlAoYTApCisJcy5kCSRmMjcsIFNDX0ZQUkVHUyszKlJFR1NaX0ZQKGEwKQorCXMuZAkkZjI4LCBTQ19GUFJFR1MrNCpSRUdTWl9GUChhMCkKKwlzLmQJJGYyOSwgU0NfRlBSRUdTKzUqUkVHU1pfRlAoYTApCisJcy5kCSRmMzAsIFNDX0ZQUkVHUys2KlJFR1NaX0ZQKGEwKQorCXMuZAkkZjMxLCBTQ19GUFJFR1MrNypSRUdTWl9GUChhMCkKKyNlbHNlCisJIyBjYWxsZWUtc2F2ZWQgZnAgcmVncyBvbiBtaXBzIG8zMiBBQkkgYXJlCisJIyAgIHRoZSBldmVuLW51bWJlcmVkIGZwIHJlZ3MgJGYyMCwkZjIyLC4uLiRmMzAKKwlzLmQJJGYyMCwgU0NfRlBSRUdTKzAqUkVHU1pfRlAoYTApCisJcy5kCSRmMjIsIFNDX0ZQUkVHUysxKlJFR1NaX0ZQKGEwKQorCXMuZAkkZjI0LCBTQ19GUFJFR1MrMipSRUdTWl9GUChhMCkKKwlzLmQJJGYyNiwgU0NfRlBSRUdTKzMqUkVHU1pfRlAoYTApCisJcy5kCSRmMjgsIFNDX0ZQUkVHUys0KlJFR1NaX0ZQKGEwKQorCXMuZAkkZjMwLCBTQ19GUFJFR1MrNSpSRUdTWl9GUChhMCkKKyNlbmRpZgorCXN3CXYwLCBTQ19GUFNSKGEwKQorCW1vdmUJdjAsIHplcm8KIAlSRVNUT1JFX0dQNjQKIAlQVFJfQUREVSBzcCwgRlJBTUVTWgogCWoJcmEKLQkgbW92ZQl2MCwgemVybwogRU5EKF9zZXRqbXApCiAKKwogTEVBRihfbG9uZ2ptcCwgRlJBTUVTWikKIAlQVFJfU1VCVSBzcCwgRlJBTUVTWgogCVNFVFVQX0dQNjQoR1BPRkYsIF9sb25nam1wKQogCVNBVkVfR1AoR1BPRkYpCi0JLnNldCAgICBub3Jlb3JkZXIKLQlSRUdfTAl2MCwgU0NfUkVHUytaRVJPKlJFR1NaKGEwKQotCWJuZQl2MCwgMHhBQ0VEQkFERSwgYm90Y2gJCSMganVtcCBpZiBlcnJvcgotCVJFR19MCXJhLCBTQ19QQyhhMCkKLQlSRUdfTAl2MCwgU0NfRlBSRUdTKygoRlNSLUYwKSpSRUdTWikoYTApCi0JUkVHX0wJczAsIFNDX1JFR1MrUzAqUkVHU1ooYTApCi0JUkVHX0wJczEsIFNDX1JFR1MrUzEqUkVHU1ooYTApCi0JUkVHX0wJczIsIFNDX1JFR1MrUzIqUkVHU1ooYTApCi0JUkVHX0wJczMsIFNDX1JFR1MrUzMqUkVHU1ooYTApCi0JUkVHX0wJczQsIFNDX1JFR1MrUzQqUkVHU1ooYTApCi0JUkVHX0wJczUsIFNDX1JFR1MrUzUqUkVHU1ooYTApCi0JUkVHX0wJczYsIFNDX1JFR1MrUzYqUkVHU1ooYTApCi0JUkVHX0wJczcsIFNDX1JFR1MrUzcqUkVHU1ooYTApCi0JUkVHX0wJczgsIFNDX1JFR1MrUzgqUkVHU1ooYTApCi0JUkVHX0wJZ3AsIFNDX1JFR1MrR1AqUkVHU1ooYTApCi0JUkVHX0wJc3AsIFNDX1JFR1MrU1AqUkVHU1ooYTApCi0jaWYgIWRlZmluZWQoU09GVEZMT0FUKQotCWN0YzEJdjAsICQzMQotCWwuZAkkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCkoYTApCi0JbC5kCSRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApKGEwKQotCWwuZAkkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCkoYTApCi0JbC5kCSRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApKGEwKQotI2lmIF9NSVBTX0ZQU0VUID09IDMyCi0JbC5kCSRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApKGEwKQotCWwuZAkkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCkoYTApCi0JbC5kCSRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApKGEwKQotCWwuZAkkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCkoYTApCisJLnNldAlyZW9yZGVyCisKKyNpZm5kZWYgX19MUDY0X18KKwlhZGRpdQlhMCwgNwkJCQkjIHJvdW5kdXAgam1wYnVmIGFkZHIgdG8gOC1ieXRlIGJvdW5kYXJ5CisJbGkgICAgICB0MCwgfjcKKwlhbmQJYTAsIHQwCiAjZW5kaWYKLSNlbmRpZiAvKiAhU09GVEZMT0FUICovCisKKwkjIFNDX01BU0sgaXMgdW51c2VkIGhlcmUKKworCWx3CXYwLCBTQ19NQUdJQyhhMCkKKwlsaQl0MCwgMHhBQ0VEQkFERQorCWJuZQl2MCwgdDAsIGJvdGNoCQkJIyBqdW1wIGlmIGVycm9yCisKKwkjIGNhbGxlZS1zYXZlZCBsb25nLXNpemVkIHJlZ3M6CisJUkVHX0wJcmEsIFNDX1JFR1MrMCpSRUdTWihhMCkKKwlSRUdfTAlzMCwgU0NfUkVHUysxKlJFR1NaKGEwKQorCVJFR19MCXMxLCBTQ19SRUdTKzIqUkVHU1ooYTApCisJUkVHX0wJczIsIFNDX1JFR1MrMypSRUdTWihhMCkKKwlSRUdfTAlzMywgU0NfUkVHUys0KlJFR1NaKGEwKQorCVJFR19MCXM0LCBTQ19SRUdTKzUqUkVHU1ooYTApCisJUkVHX0wJczUsIFNDX1JFR1MrNipSRUdTWihhMCkKKwlSRUdfTAlzNiwgU0NfUkVHUys3KlJFR1NaKGEwKQorCVJFR19MCXM3LCBTQ19SRUdTKzgqUkVHU1ooYTApCisJUkVHX0wJczgsIFNDX1JFR1MrOSpSRUdTWihhMCkKKwlSRUdfTAlncCwgU0NfUkVHUysxMCpSRUdTWihhMCkKKwlSRUdfTAlzcCwgU0NfUkVHUysxMSpSRUdTWihhMCkKKworCWx3CXYwLCBTQ19GUFNSKGEwKQorCWN0YzEJdjAsICQzMQorI2lmZGVmIF9fTFA2NF9fCisJIyBjYWxsZWUtc2F2ZWQgZnAgcmVncyBvbiBtaXBzIG42NCBBQkkgYXJlICRmMjQuLiRmMzEKKwlsLmQJJGYyNCwgU0NfRlBSRUdTKzAqUkVHU1pfRlAoYTApCisJbC5kCSRmMjUsIFNDX0ZQUkVHUysxKlJFR1NaX0ZQKGEwKQorCWwuZAkkZjI2LCBTQ19GUFJFR1MrMipSRUdTWl9GUChhMCkKKwlsLmQJJGYyNywgU0NfRlBSRUdTKzMqUkVHU1pfRlAoYTApCisJbC5kCSRmMjgsIFNDX0ZQUkVHUys0KlJFR1NaX0ZQKGEwKQorCWwuZAkkZjI5LCBTQ19GUFJFR1MrNSpSRUdTWl9GUChhMCkKKwlsLmQJJGYzMCwgU0NfRlBSRUdTKzYqUkVHU1pfRlAoYTApCisJbC5kCSRmMzEsIFNDX0ZQUkVHUys3KlJFR1NaX0ZQKGEwKQorI2Vsc2UKKwkjIGNhbGxlZS1zYXZlZCBmcCByZWdzIG9uIG1pcHMgbzMyIEFCSSBhcmUKKwkjICAgdGhlIGV2ZW4tbnVtYmVyZWQgZnAgcmVncyAkZjIwLCRmMjIsLi4uJGYzMAorCWwuZAkkZjIwLCBTQ19GUFJFR1MrMCpSRUdTWl9GUChhMCkKKwlsLmQJJGYyMiwgU0NfRlBSRUdTKzEqUkVHU1pfRlAoYTApCisJbC5kCSRmMjQsIFNDX0ZQUkVHUysyKlJFR1NaX0ZQKGEwKQorCWwuZAkkZjI2LCBTQ19GUFJFR1MrMypSRUdTWl9GUChhMCkKKwlsLmQJJGYyOCwgU0NfRlBSRUdTKzQqUkVHU1pfRlAoYTApCisJbC5kCSRmMzAsIFNDX0ZQUkVHUys1KlJFR1NaX0ZQKGEwKQorI2VuZGlmCiAJYm5lCWExLCB6ZXJvLCAxZgotCSBub3AKIAlsaQlhMSwgMQkJCSMgbmV2ZXIgcmV0dXJuIDAhCiAxOgorCW1vdmUJdjAsIGExCiAJaglyYQotCSBtb3ZlCXYwLCBhMQogCiBib3RjaDoKIAlqYWwJbG9uZ2ptcGVycm9yCi0Jbm9wCiAJamFsCWFib3J0Ci0Jbm9wCiAJUkVTVE9SRV9HUDY0CiAJUFRSX0FERFUgc3AsIEZSQU1FU1oKIEVORChfbG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL2F0ZXhpdC5oIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvYXRleGl0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1OTAwOGMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvYXRleGl0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLWV4dGVybiB2b2lkICpfX2Rzb19oYW5kbGU7Ci1leHRlcm4gaW50IF9fY3hhX2F0ZXhpdCh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnLCB2b2lkICpkc28pOwotCi1fX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKLWludCBhdGV4aXQodm9pZCAoKmZ1bmMpKHZvaWQpKQotewotICByZXR1cm4gKF9fY3hhX2F0ZXhpdCgodm9pZCAoKikodm9pZCAqKSlmdW5jLCAodm9pZCAqKTAsICZfX2Rzb19oYW5kbGUpKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL2NydGJlZ2luLmMgYi9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9jcnRiZWdpbi5jCmluZGV4IDJlYTMxYWQuLjEzNzRmZWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL2NydGJlZ2luLmMKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvY3J0YmVnaW4uYwpAQCAtOTEsNCArOTEsNCBAQAogKTsKIAogI2luY2x1ZGUgIi4uLy4uL2FyY2gtY29tbW9uL2Jpb25pYy9fX2Rzb19oYW5kbGUuaCIKLSNpbmNsdWRlICJhdGV4aXQuaCIKKyNpbmNsdWRlICIuLi8uLi9hcmNoLWNvbW1vbi9iaW9uaWMvYXRleGl0LmgiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9jcnRiZWdpbl9zby5jIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvY3J0YmVnaW5fc28uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY2NGNlNi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9jcnRiZWdpbl9zby5jCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi1leHRlcm4gdm9pZCBfX2N4YV9maW5hbGl6ZSh2b2lkICopOwotZXh0ZXJuIHZvaWQgKl9fZHNvX2hhbmRsZTsKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIiksZGVzdHJ1Y3RvcikpCi12b2lkIF9fb25fZGxjbG9zZSgpIHsKLSAgX19jeGFfZmluYWxpemUoJl9fZHNvX2hhbmRsZSk7Ci19Ci0KLSNpbmNsdWRlICIuLi8uLi9hcmNoLWNvbW1vbi9iaW9uaWMvX19kc29faGFuZGxlX3NvLmgiCi0jaW5jbHVkZSAiYXRleGl0LmgiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9zZXRqbXAuUyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3NldGptcC5TCmluZGV4IDMxNzg2YmUuLmExZDQ2OTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3NldGptcC5TCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3NldGptcC5TCkBAIC0zMCwxMiArMzAsMTIgQEAKICAqLwogCiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9yZWdudW0uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3NpZ25hbC5oPgogCiAvKgotICogc2V0am1wLCBsb25nam1wIGltcGxlbWVudGF0aW9uIGZvciBsaWJjLiB0aGlzIGNvZGUgZGVwZW5kcwotICogb24gdGhlIGxheW91dCBvZiB0aGUgc3RydWN0IHNpZ2NvbnRleHQgaW4gbWFjaGluZS9zaWduYWwuaC4KKyAqIF9zZXRqbXAsIF9sb25nam1wIChyZXN0b3Jpbmcgc2lnbmFsIHN0YXRlKQorICoKKyAqICBHUE9GRiBhbmQgRlJBTUVTSVpFIG11c3QgYmUgdGhlIHNhbWUgZm9yIGJvdGggX3NldGptcCBhbmQgX2xvbmdqbXAhCiAgKgogICovCiAKQEAgLTUxLDEyNCArNTEsMTM5IEBACiAJU0VUVVBfR1A2NChHUE9GRiwgc2V0am1wKQogCVNBVkVfR1AoR1BPRkYpCiAJLnNldAlyZW9yZGVyCisKKyNpZm5kZWYgX19MUDY0X18KKwlhZGRpdSAgIGEwLCA3CQkJCSMgcm91bmR1cCBqbXBidWYgYWRkciB0byA4LWJ5dGUgYm91bmRhcnkKKwlsaSAgICAgIHQwLCB+NworCWFuZCAgICAgYTAsIHQwCisjZW5kaWYKKwogCVJFR19TCXJhLCBSQU9GRihzcCkJCQkjIHNhdmUgc3RhdGUKIAlSRUdfUwlhMCwgQTBPRkYoc3ApCi0KIAltb3ZlCWEwLCB6ZXJvCQkJIyBnZXQgY3VycmVudCBzaWduYWwgbWFzawogCWphbAlzaWdibG9jawotCi0JUkVHX0wJdjEsIEEwT0ZGKHNwKQkJCSMgdjEgPSBqbXBidWYKLQlSRUdfUwl2MCwgU0NfTUFTSyh2MSkJCQkjIHNhdmUgc2NfbWFzayA9IHNpZ2Jsb2NrKDApCi0KLQlSRUdfTAlhMCwgQTBPRkYoc3ApCQkJIyByZXN0b3JlIGptcGJ1ZgorCVJFR19MCWEwLCBBME9GRihzcCkKIAlSRUdfTAlyYSwgUkFPRkYoc3ApCi0JUkVHX1MJcmEsIFNDX1BDKGEwKQkJCSMgc2NfcGMgPSByZXR1cm4gYWRkcmVzcwotI2lmIGRlZmluZWQoX19taXBzNjQpCi0JZGxpCXYwLCAweEFDRURCQURFCQkJIyBzaWdjb250ZXh0IG1hZ2ljIG51bWJlcgotI2Vsc2UKLQlsaQl2MCwgMHhBQ0VEQkFERQkJCSMgc2lnY29udGV4dCBtYWdpYyBudW1iZXIKLSNlbmRpZgotCVJFR19TCXYwLCBTQ19SRUdTK1pFUk8qUkVHU1ooYTApCi0JUkVHX1MJczAsIFNDX1JFR1MrUzAqUkVHU1ooYTApCi0JUkVHX1MJczEsIFNDX1JFR1MrUzEqUkVHU1ooYTApCi0JUkVHX1MJczIsIFNDX1JFR1MrUzIqUkVHU1ooYTApCi0JUkVHX1MJczMsIFNDX1JFR1MrUzMqUkVHU1ooYTApCi0JUkVHX1MJczQsIFNDX1JFR1MrUzQqUkVHU1ooYTApCi0JUkVHX1MJczUsIFNDX1JFR1MrUzUqUkVHU1ooYTApCi0JUkVHX1MJczYsIFNDX1JFR1MrUzYqUkVHU1ooYTApCi0JUkVHX1MJczcsIFNDX1JFR1MrUzcqUkVHU1ooYTApCi0JUkVHX1MJczgsIFNDX1JFR1MrUzgqUkVHU1ooYTApCi0JUkVHX0wJdjAsIEdQT0ZGKHNwKQotCVJFR19TCXYwLCBTQ19SRUdTK0dQKlJFR1NaKGEwKQotCVBUUl9BRERVIHYwLCBzcCwgRlJBTUVTWgotCVJFR19TCXYwLCBTQ19SRUdTK1NQKlJFR1NaKGEwKQogCi0jaWYgIWRlZmluZWQoU09GVEZMT0FUKQotCWxpCXYwLCAxCQkJCSMgYmUgbmljZSBpZiB3ZSBjb3VsZCB0ZWxsCi0JUkVHX1MJdjAsIFNDX0ZQVVNFRChhMCkJCSMgc2NfZnB1c2VkID0gMQorCVJFR19TCXYwLCBTQ19NQVNLKGEwKQkJCSMgc2F2ZSBzY19tYXNrID0gc2lnYmxvY2soMCkKKworCWxpCXYwLCAweEFDRURCQURFCQkJIyBzaWdjb250ZXh0IG1hZ2ljIG51bWJlcgorCXN3CXYwLCBTQ19NQUdJQyhhMCkKKwkjIGNhbGxlZS1zYXZlZCBsb25nLXNpemVkIHJlZ3M6CisJUkVHX1MJcmEsIFNDX1JFR1MrMCpSRUdTWihhMCkKKwlSRUdfUwlzMCwgU0NfUkVHUysxKlJFR1NaKGEwKQorCVJFR19TCXMxLCBTQ19SRUdTKzIqUkVHU1ooYTApCisJUkVHX1MJczIsIFNDX1JFR1MrMypSRUdTWihhMCkKKwlSRUdfUwlzMywgU0NfUkVHUys0KlJFR1NaKGEwKQorCVJFR19TCXM0LCBTQ19SRUdTKzUqUkVHU1ooYTApCisJUkVHX1MJczUsIFNDX1JFR1MrNipSRUdTWihhMCkKKwlSRUdfUwlzNiwgU0NfUkVHUys3KlJFR1NaKGEwKQorCVJFR19TCXM3LCBTQ19SRUdTKzgqUkVHU1ooYTApCisJUkVHX1MJczgsIFNDX1JFR1MrOSpSRUdTWihhMCkKKwlSRUdfTAl2MCwgR1BPRkYoc3ApCisJUkVHX1MJdjAsIFNDX1JFR1MrMTAqUkVHU1ooYTApCisJUFRSX0FERFUgdjAsIHNwLCBGUkFNRVNaCisJUkVHX1MJdjAsIFNDX1JFR1MrMTEqUkVHU1ooYTApCisKIAljZmMxCXYwLCAkMzEKLQlzLmQJJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCkoYTApCi0Jcy5kCSRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKShhMCkKLQlzLmQJJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCkoYTApCi0Jcy5kCSRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKShhMCkKLSNpZiBfTUlQU19GUFNFVCA9PSAzMgotCXMuZAkkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKShhMCkKLQlzLmQJJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCkoYTApCi0Jcy5kCSRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApKGEwKQotCXMuZAkkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKShhMCkKLQlzLmQJJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCkoYTApCi0Jcy5kCSRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApKGEwKQorCisjaWZkZWYgX19MUDY0X18KKwkjIGNhbGxlZS1zYXZlZCBmcCByZWdzIG9uIG1pcHMgbjY0IEFCSSBhcmUgJGYyNC4uJGYzMQorCXMuZAkkZjI0LCBTQ19GUFJFR1MrMCpSRUdTWl9GUChhMCkKKwlzLmQJJGYyNSwgU0NfRlBSRUdTKzEqUkVHU1pfRlAoYTApCisJcy5kCSRmMjYsIFNDX0ZQUkVHUysyKlJFR1NaX0ZQKGEwKQorCXMuZAkkZjI3LCBTQ19GUFJFR1MrMypSRUdTWl9GUChhMCkKKwlzLmQJJGYyOCwgU0NfRlBSRUdTKzQqUkVHU1pfRlAoYTApCisJcy5kCSRmMjksIFNDX0ZQUkVHUys1KlJFR1NaX0ZQKGEwKQorCXMuZAkkZjMwLCBTQ19GUFJFR1MrNipSRUdTWl9GUChhMCkKKwlzLmQJJGYzMSwgU0NfRlBSRUdTKzcqUkVHU1pfRlAoYTApCisjZWxzZQorCSMgY2FsbGVlLXNhdmVkIGZwIHJlZ3Mgb24gbWlwcyBvMzIgQUJJIGFyZQorCSMgICB0aGUgZXZlbi1udW1iZXJlZCBmcCByZWdzICRmMjAsJGYyMiwuLi4kZjMwCisJcy5kCSRmMjAsIFNDX0ZQUkVHUyswKlJFR1NaX0ZQKGEwKQorCXMuZAkkZjIyLCBTQ19GUFJFR1MrMSpSRUdTWl9GUChhMCkKKwlzLmQJJGYyNCwgU0NfRlBSRUdTKzIqUkVHU1pfRlAoYTApCisJcy5kCSRmMjYsIFNDX0ZQUkVHUyszKlJFR1NaX0ZQKGEwKQorCXMuZAkkZjI4LCBTQ19GUFJFR1MrNCpSRUdTWl9GUChhMCkKKwlzLmQJJGYzMCwgU0NfRlBSRUdTKzUqUkVHU1pfRlAoYTApCiAjZW5kaWYKLQlSRUdfUwl2MCwgU0NfRlBSRUdTKygoRlNSLUYwKSpSRUdTWikoYTApCi0jZW5kaWYgLyogIVNPRlRGTE9BVCAqLworCXN3CXYwLCBTQ19GUFNSKGEwKQogCW1vdmUJdjAsIHplcm8KIAlSRVNUT1JFX0dQNjQKIAlQVFJfQUREVSBzcCwgRlJBTUVTWgogCWoJcmEKK0VORChzZXRqbXApCisKKworTk9OX0xFQUYobG9uZ2ptcCwgRlJBTUVTWiwgcmEpCisJLm1hc2sJMHg4MDAwMDAwMCwgUkFPRkYKKwlQVFJfU1VCVSBzcCwgRlJBTUVTWgorCVNFVFVQX0dQNjQoR1BPRkYsIGxvbmdqbXApCisJU0FWRV9HUChHUE9GRikKKwkuc2V0CXJlb3JkZXIKKworI2lmbmRlZiBfX0xQNjRfXworCWFkZGl1CWEwLCA3CQkJCSMgcm91bmR1cCBqbXBidWYgYWRkciB0byA4LWJ5dGUgYm91bmRhcnkKKwlsaSAgICAgIHQwLCB+NworCWFuZAlhMCwgdDAKKyNlbmRpZgorCisJUkVHX1MJYTEsIEExT0ZGKHNwKQorCVJFR19TCWEwLCBBME9GRihzcCkKKwlsdwlhMCwgU0NfTUFTSyhhMCkKKwlqYWwJc2lnc2V0bWFzaworCVJFR19MCWEwLCBBME9GRihzcCkKKwlSRUdfTAlhMSwgQTFPRkYoc3ApCisKKwlsdwl2MCwgU0NfTUFHSUMoYTApCisJbGkJdDAsIDB4QUNFREJBREUKKwlibmUJdjAsIHQwLCBib3RjaAkJCSMganVtcCBpZiBlcnJvcgorCisJIyBjYWxsZWUtc2F2ZWQgbG9uZy1zaXplZCByZWdzOgorCVJFR19MCXJhLCBTQ19SRUdTKzAqUkVHU1ooYTApCisJUkVHX0wJczAsIFNDX1JFR1MrMSpSRUdTWihhMCkKKwlSRUdfTAlzMSwgU0NfUkVHUysyKlJFR1NaKGEwKQorCVJFR19MCXMyLCBTQ19SRUdTKzMqUkVHU1ooYTApCisJUkVHX0wJczMsIFNDX1JFR1MrNCpSRUdTWihhMCkKKwlSRUdfTAlzNCwgU0NfUkVHUys1KlJFR1NaKGEwKQorCVJFR19MCXM1LCBTQ19SRUdTKzYqUkVHU1ooYTApCisJUkVHX0wJczYsIFNDX1JFR1MrNypSRUdTWihhMCkKKwlSRUdfTAlzNywgU0NfUkVHUys4KlJFR1NaKGEwKQorCVJFR19MCXM4LCBTQ19SRUdTKzkqUkVHU1ooYTApCisJUkVHX0wJZ3AsIFNDX1JFR1MrMTAqUkVHU1ooYTApCisJUkVHX0wJc3AsIFNDX1JFR1MrMTEqUkVHU1ooYTApCisKKwlsdwl2MCwgU0NfRlBTUihhMCkKKwljdGMxCXYwLCAkMzEKKyNpZmRlZiBfX0xQNjRfXworCSMgY2FsbGVlLXNhdmVkIGZwIHJlZ3Mgb24gbWlwcyBuNjQgQUJJIGFyZSAkZjI0Li4kZjMxCisJbC5kCSRmMjQsIFNDX0ZQUkVHUyswKlJFR1NaX0ZQKGEwKQorCWwuZAkkZjI1LCBTQ19GUFJFR1MrMSpSRUdTWl9GUChhMCkKKwlsLmQJJGYyNiwgU0NfRlBSRUdTKzIqUkVHU1pfRlAoYTApCisJbC5kCSRmMjcsIFNDX0ZQUkVHUyszKlJFR1NaX0ZQKGEwKQorCWwuZAkkZjI4LCBTQ19GUFJFR1MrNCpSRUdTWl9GUChhMCkKKwlsLmQJJGYyOSwgU0NfRlBSRUdTKzUqUkVHU1pfRlAoYTApCisJbC5kCSRmMzAsIFNDX0ZQUkVHUys2KlJFR1NaX0ZQKGEwKQorCWwuZAkkZjMxLCBTQ19GUFJFR1MrNypSRUdTWl9GUChhMCkKKyNlbHNlCisJIyBjYWxsZWUtc2F2ZWQgZnAgcmVncyBvbiBtaXBzIG8zMiBBQkkgYXJlCisJIyAgIHRoZSBldmVuLW51bWJlcmVkIGZwIHJlZ3MgJGYyMCwkZjIyLC4uLiRmMzAKKwlsLmQJJGYyMCwgU0NfRlBSRUdTKzAqUkVHU1pfRlAoYTApCisJbC5kCSRmMjIsIFNDX0ZQUkVHUysxKlJFR1NaX0ZQKGEwKQorCWwuZAkkZjI0LCBTQ19GUFJFR1MrMipSRUdTWl9GUChhMCkKKwlsLmQJJGYyNiwgU0NfRlBSRUdTKzMqUkVHU1pfRlAoYTApCisJbC5kCSRmMjgsIFNDX0ZQUkVHUys0KlJFR1NaX0ZQKGEwKQorCWwuZAkkZjMwLCBTQ19GUFJFR1MrNSpSRUdTWl9GUChhMCkKKyNlbmRpZgorCWJuZQlhMSwgemVybywgMWYKKwlsaQlhMSwgMQkJCSMgbmV2ZXIgcmV0dXJuIDAhCisxOgorCW1vdmUJdjAsIGExCisJaglyYQogCiBib3RjaDoKIAlqYWwJbG9uZ2ptcGVycm9yCiAJamFsCWFib3J0CiAJUkVTVE9SRV9HUDY0CiAJUFRSX0FERFUgc3AsIEZSQU1FU1oKLUVORChzZXRqbXApCi0KLQotTEVBRihsb25nam1wLCBGUkFNRVNaKQotCVBUUl9TVUJVIHNwLCBGUkFNRVNaCi0JU0VUVVBfR1A2NChHUE9GRiwgbG9uZ2ptcCkKLQlTQVZFX0dQKEdQT0ZGKQotCS5zZXQJcmVvcmRlcgotCXN3CWExLCBBMU9GRihzcCkKLQlzdwlhMCwgQTBPRkYoc3ApCi0KLQlsdwlhMCwgU0NfTUFTSyhhMCkKLQlqYWwJc2lnc2V0bWFzawotCi0JbHcJYTAsIEEwT0ZGKHNwKQotCWx3CWExLCBBMU9GRihzcCkKLQotCS5zZXQJbm9yZW9yZGVyCi0JUkVHX0wJdjAsIFNDX1JFR1MrWkVSTypSRUdTWihhMCkKLQlibmUJdjAsIDB4QUNFREJBREUsIGJvdGNoCQkjIGp1bXAgaWYgZXJyb3IKLQlSRUdfTAlyYSwgU0NfUEMoYTApCi0JUkVHX0wJczAsIFNDX1JFR1MrUzAqUkVHU1ooYTApCi0JUkVHX0wJczEsIFNDX1JFR1MrUzEqUkVHU1ooYTApCi0JUkVHX0wJczIsIFNDX1JFR1MrUzIqUkVHU1ooYTApCi0JUkVHX0wJczMsIFNDX1JFR1MrUzMqUkVHU1ooYTApCi0JUkVHX0wJczQsIFNDX1JFR1MrUzQqUkVHU1ooYTApCi0JUkVHX0wJczUsIFNDX1JFR1MrUzUqUkVHU1ooYTApCi0JUkVHX0wJczYsIFNDX1JFR1MrUzYqUkVHU1ooYTApCi0JUkVHX0wJczcsIFNDX1JFR1MrUzcqUkVHU1ooYTApCi0JUkVHX0wJczgsIFNDX1JFR1MrUzgqUkVHU1ooYTApCi0JUkVHX0wJZ3AsIFNDX1JFR1MrR1AqUkVHU1ooYTApCi0JUkVHX0wJc3AsIFNDX1JFR1MrU1AqUkVHU1ooYTApCi0KLSNpZiAhZGVmaW5lZChTT0ZURkxPQVQpCi0JUkVHX0wJdjAsIFNDX0ZQUkVHUysoKEZTUi1GMCkqUkVHU1opKGEwKQotCWN0YzEJdjAsICQzMQotCWwuZAkkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCkoYTApCi0JbC5kCSRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApKGEwKQotCWwuZAkkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCkoYTApCi0JbC5kCSRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApKGEwKQotI2lmIF9NSVBTX0ZQU0VUID09IDMyCi0JbC5kCSRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApKGEwKQotCWwuZAkkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCkoYTApCi0JbC5kCSRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApKGEwKQotCWwuZAkkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKShhMCkKLQlsLmQJJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCkoYTApCi0jZW5kaWYKLSNlbmRpZiAvKiAhU09GVEZMT0FUICovCi0JYm5lCWExLCB6ZXJvLCAxZgotCSBub3AKLQlsaQlhMSwgMQkJCSMgbmV2ZXIgcmV0dXJuIDAhCi0xOgotCWoJcmEKLQkgbW92ZQl2MCwgYTEKLQogRU5EKGxvbmdqbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9zaWdzZXRqbXAuUyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3NpZ3NldGptcC5TCmluZGV4IDlkMmU1ZWEuLjNlZjBhNmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3NpZ3NldGptcC5TCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3NpZ3NldGptcC5TCkBAIC0zMiw3ICszMiw2IEBACiAgKi8KIAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotI2luY2x1ZGUgPG1hY2hpbmUvcmVnbnVtLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9zZXRqbXAuaD4KIAogLyoKQEAgLTQ2LDcgKzQ1LDcgQEAKIAlQVFJfU1VCVSBzcCwgRlJBTUVTWgogCVNFVFVQX0dQNjQoR1BPRkYsIHNpZ3NldGptcCkKIAkuc2V0CXJlb3JkZXIKLQlSRUdfUwlhMSwgKF9KQkxFTipSRUdTWikoYTApCQkjIHNhdmUgInNhdmVtYXNrIgorCXN3CWExLCBfSkJMRU4qUkVHU1ooYTApCQkjIHNhdmUgInNhdmVtYXNrIgogCWJuZQlhMSwgMHgwLCAxZgkJCSMgZG8gc2F2aW5nIG9mIHNpZ25hbCBtYXNrPwogCUxBCXQ5LCBfc2V0am1wCiAJUkVTVE9SRV9HUDY0CkBAIC02Myw3ICs2Miw3IEBACiAJUFRSX1NVQlUgc3AsIEZSQU1FU1oKIAlTRVRVUF9HUDY0KEdQT0ZGLCBzaWdsb25nam1wKQogCS5zZXQJcmVvcmRlcgotCVJFR19MCXQwLCAoX0pCTEVOKlJFR1NaKShhMCkJCSMgZ2V0ICJzYXZlbWFzayIKKwlsdwl0MCwgX0pCTEVOKlJFR1NaKGEwKQkJIyBnZXQgInNhdmVtYXNrIgogCWJuZQl0MCwgMHgwLCAxZgkJCSMgcmVzdG9yZSBzaWduYWwgbWFzaz8KIAlMQQl0OSwgX2xvbmdqbXAKIAlSRVNUT1JFX0dQNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3N5c2NhbGwuUyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3N5c2NhbGwuUwppbmRleCA5MjQ3NDFkLi40YzczOWZkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9zeXNjYWxsLlMKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvc3lzY2FsbC5TCkBAIC01Miw3ICs1Miw3IEBACiAjZWxzZQogCW1vdmUJYTMsIGE0CiAJbW92ZQlhNCwgYTUKLQlSRUdfTAlhNSwgRlJBTUVTWihzcCkKKwltb3ZlCWE1LCBhNgogI2VuZGlmCiAJc3lzY2FsbAogCW1vdmUJYTAsIHYwCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9hc20uaCBiL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCmluZGV4IDVlYWNkZTMuLmNkYzc5MTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCkBAIC0yOCw5ICsyOCw3IEBACiAjaWZuZGVmIF9NSVBTNjRfQVNNX0gKICNkZWZpbmUgX01JUFM2NF9BU01fSAogCi0jaWZuZGVmIF9BTElHTl9URVhUCi0jIGRlZmluZSBfQUxJR05fVEVYVCAuYWxpZ24gNAotI2VuZGlmCisjZGVmaW5lIF9fYmlvbmljX2FzbV9hbGlnbiA0CiAKICN1bmRlZiBfX2Jpb25pY19hc21fY3VzdG9tX2VudHJ5CiAjdW5kZWYgX19iaW9uaWNfYXNtX2N1c3RvbV9lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvZW5kaWFuLmgKaW5kZXggNDFhOTAwNC4uOTI3MGU5ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvZW5kaWFuLmgKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvZW5kaWFuLmgKQEAgLTU4LDExICs1OCw3IEBACiAjZW5kaWYgIC8qIF9fbWlwczMycjJfXyAqLwogI2VuZGlmICAvKiBfX0dOVUNfXyAqLwogCi0jaWYgZGVmaW5lZChfX01JUFNFQl9fKQotI2RlZmluZSBfQllURV9PUkRFUiBfQklHX0VORElBTgotI2Vsc2UKICNkZWZpbmUgX0JZVEVfT1JERVIgX0xJVFRMRV9FTkRJQU4KLSNlbmRpZgogI2RlZmluZSBfX1NUUklDVF9BTElHTk1FTlQKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9yZWdudW0uaCBiL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL3JlZ251bS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmUxMjgwLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL3JlZ251bS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qCSRPcGVuQlNEOiByZWdudW0uaCx2IDEuMyAyMDA0LzA4LzEwIDIwOjI4OjEzIGRlcmFhZHQgRXhwICQgKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIE9wc3ljb24gQUIgICh3d3cub3BzeWNvbi5zZSAvIHd3dy5vcHN5Y29uLmNvbSkKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUwotICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfTUlQUzY0X1JFR05VTV9IXwotI2RlZmluZSBfTUlQUzY0X1JFR05VTV9IXwotCi0vKgotICogTG9jYXRpb24gb2YgdGhlIHNhdmVkIHJlZ2lzdGVycyByZWxhdGl2ZSB0byBaRVJPLgotICogVXNhZ2UgaXMgcC0+cF9yZWdzW1hYXS4KLSAqLwotI2RlZmluZSBaRVJPCTAKLSNkZWZpbmUgQVNUCTEKLSNkZWZpbmUgVjAJMgotI2RlZmluZSBWMQkzCi0jZGVmaW5lIEEwCTQKLSNkZWZpbmUgQTEJNQotI2RlZmluZSBBMgk2Ci0jZGVmaW5lIEEzCTcKLSNkZWZpbmUgVDAJOAotI2RlZmluZSBUMQk5Ci0jZGVmaW5lIFQyCTEwCi0jZGVmaW5lIFQzCTExCi0jZGVmaW5lIFQ0CTEyCi0jZGVmaW5lIFQ1CTEzCi0jZGVmaW5lIFQ2CTE0Ci0jZGVmaW5lIFQ3CTE1Ci0jZGVmaW5lIFMwCTE2Ci0jZGVmaW5lIFMxCTE3Ci0jZGVmaW5lIFMyCTE4Ci0jZGVmaW5lIFMzCTE5Ci0jZGVmaW5lIFM0CTIwCi0jZGVmaW5lIFM1CTIxCi0jZGVmaW5lIFM2CTIyCi0jZGVmaW5lIFM3CTIzCi0jZGVmaW5lIFQ4CTI0Ci0jZGVmaW5lIFQ5CTI1Ci0jZGVmaW5lIEswCTI2Ci0jZGVmaW5lIEsxCTI3Ci0jZGVmaW5lIEdQCTI4Ci0jZGVmaW5lIFNQCTI5Ci0jZGVmaW5lIFM4CTMwCi0jZGVmaW5lIFJBCTMxCi0jZGVmaW5lCVNSCTMyCi0jZGVmaW5lCVBTCVNSCS8qIGFsaWFzIGZvciBTUiAqLwotI2RlZmluZSBNVUxMTwkzMwotI2RlZmluZSBNVUxISQkzNAotI2RlZmluZSBCQURWQUREUiAzNQotI2RlZmluZSBDQVVTRQkzNgotI2RlZmluZQlQQwkzNwotI2RlZmluZQlJQwkzOAotI2RlZmluZQlDUEwJMzkKLQotI2RlZmluZQlOVU1TQVZFUkVHUyA0MAkJLyogTnVtYmVyIG9mIHJlZ2lzdGVycyBzYXZlZCBpbiB0cmFwICovCi0KLSNkZWZpbmUgRlBCQVNFCU5VTVNBVkVSRUdTCi0jZGVmaW5lIEYwCShGUEJBU0UrMCkKLSNkZWZpbmUgRjEJKEZQQkFTRSsxKQotI2RlZmluZSBGMgkoRlBCQVNFKzIpCi0jZGVmaW5lIEYzCShGUEJBU0UrMykKLSNkZWZpbmUgRjQJKEZQQkFTRSs0KQotI2RlZmluZSBGNQkoRlBCQVNFKzUpCi0jZGVmaW5lIEY2CShGUEJBU0UrNikKLSNkZWZpbmUgRjcJKEZQQkFTRSs3KQotI2RlZmluZSBGOAkoRlBCQVNFKzgpCi0jZGVmaW5lIEY5CShGUEJBU0UrOSkKLSNkZWZpbmUgRjEwCShGUEJBU0UrMTApCi0jZGVmaW5lIEYxMQkoRlBCQVNFKzExKQotI2RlZmluZSBGMTIJKEZQQkFTRSsxMikKLSNkZWZpbmUgRjEzCShGUEJBU0UrMTMpCi0jZGVmaW5lIEYxNAkoRlBCQVNFKzE0KQotI2RlZmluZSBGMTUJKEZQQkFTRSsxNSkKLSNkZWZpbmUgRjE2CShGUEJBU0UrMTYpCi0jZGVmaW5lIEYxNwkoRlBCQVNFKzE3KQotI2RlZmluZSBGMTgJKEZQQkFTRSsxOCkKLSNkZWZpbmUgRjE5CShGUEJBU0UrMTkpCi0jZGVmaW5lIEYyMAkoRlBCQVNFKzIwKQotI2RlZmluZSBGMjEJKEZQQkFTRSsyMSkKLSNkZWZpbmUgRjIyCShGUEJBU0UrMjIpCi0jZGVmaW5lIEYyMwkoRlBCQVNFKzIzKQotI2RlZmluZSBGMjQJKEZQQkFTRSsyNCkKLSNkZWZpbmUgRjI1CShGUEJBU0UrMjUpCi0jZGVmaW5lIEYyNgkoRlBCQVNFKzI2KQotI2RlZmluZSBGMjcJKEZQQkFTRSsyNykKLSNkZWZpbmUgRjI4CShGUEJBU0UrMjgpCi0jZGVmaW5lIEYyOQkoRlBCQVNFKzI5KQotI2RlZmluZSBGMzAJKEZQQkFTRSszMCkKLSNkZWZpbmUgRjMxCShGUEJBU0UrMzEpCi0jZGVmaW5lCUZTUgkoRlBCQVNFKzMyKQotCi0jZGVmaW5lCU5VTUZQUkVHUyAzMwotCi0jZGVmaW5lCU5SRUdTCShOVU1TQVZFUkVHUyArIE5VTUZQUkVHUykKLQotI2VuZGlmIC8qICFfTUlQUzY0X1JFR05VTV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvc2V0am1wLmggYi9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaAppbmRleCA1NWJhN2JlLi5hOTcwN2RjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaAorKysgYi9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaApAQCAtNSw2ICs1LDEwIEBACiAjaWZuZGVmIF9NSVBTX1NFVEpNUF9IXwogI2RlZmluZSBfTUlQU19TRVRKTVBfSF8KIAotI2RlZmluZQlfSkJMRU4JMTU3CQkvKiBzaXplLCBpbiBsb25ncywgb2YgYSBqbXBfYnVmICovCisjaWZkZWYgX19MUDY0X18KKyNkZWZpbmUJX0pCTEVOCTIyCQkvKiBzaXplLCBpbiA4LWJ5dGUgbG9uZ3MsIG9mIGEgbWlwczY0IGptcF9idWYgKi8KKyNlbHNlCisjZGVmaW5lCV9KQkxFTgkyOQkJLyogc2l6ZSwgaW4gNC1ieXRlIGxvbmdzLCBvZiBhIG1pcHMzMiBqbXBfYnVmICovCisjZW5kaWYKIAogI2VuZGlmIC8qICFfTUlQU19TRVRKTVBfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL3NpZ25hbC5oIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvc2lnbmFsLmgKaW5kZXggYjMxNzE1Yy4uYjljMTM2NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvc2lnbmFsLmgKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvc2lnbmFsLmgKQEAgLTM3LDE1ICszNyw0MiBAQAogI2lmbmRlZiBfTUlQU19TSUdOQUxfSF8KICNkZWZpbmUgX01JUFNfU0lHTkFMX0hfCiAKLSNkZWZpbmUJU0NfUkVHTUFTSwkoMCpSRUdTWikKLSNkZWZpbmUJU0NfU1RBVFVTCSgxKlJFR1NaKQotI2RlZmluZQlTQ19QQwkJKDIqUkVHU1opCi0jZGVmaW5lCVNDX1JFR1MJCShTQ19QQys4KQotI2RlZmluZQlTQ19GUFJFR1MJKFNDX1JFR1MrMzIqOCkKLSNkZWZpbmUJU0NfQUNYCQkoU0NfRlBSRUdTKzMyKlJFR1NaX0ZQKQotI2RlZmluZQlTQ19VU0VEX01BVEgJKFNDX0FDWCszKlJFR1NaKQotLyogT3BlbkJTRCBjb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lCVNDX01BU0sJCVNDX1JFR01BU0sKLSNkZWZpbmUJU0NfRlBVU0VECVNDX1VTRURfTUFUSAorLyogT24gTWlwczMyLCBqbXBidWYgYmVnaW5zIHdpdGggb3B0aW9uYWwgNC1ieXRlIGZpbGxlciBzbyB0aGF0CisgKiAgYWxsIHNhdmVkIEZQIHJlZ3MgYXJlIGFsaWduZWQgb24gOC1ieXRlIGJvdW5kYXJ5LCBkZXNwaXRlIHRoaXMgd2hvbGUKKyAqICBzdHJ1Y3QgYmVpbmcgbWlzLWRlY2xhcmVkIHRvIHVzZXJzIGFzIGFuIGFycmF5IG9mICg0LWJ5dGUpIGxvbmdzLgorICogIEFsbCB0aGUgZm9sbG93aW5nIG9mZnNldHMgYXJlIHRoZW4gZnJvbSB0aGUgcm91bmRlZC11cCBiYXNlIGFkZHIKKyAqLworCisvKiBGaWVsZHMgb2Ygc2FtZSBzaXplIG9uIGFsbCBNSVBTIGFiaXM6ICovCisjZGVmaW5lCVNDX01BR0lDICAgICAgICAoMCo0KQkJLyogNCBieXRlcywgaWRlbnRpZnkgam1wYnVmICovCisjZGVmaW5lCVNDX01BU0sJCSgxKjQpCQkvKiA0IGJ5dGVzLCBzYXZlZCBzaWduYWwgbWFzayAqLworI2RlZmluZQlTQ19GUFNSCQkoMio0KQkJLyogNCBieXRlcywgZmxvYXRpbmcgcG9pbnQgY29udHJvbC9zdGF0dXMgcmVnICovCisvKiAgICAgCWZpbGxlcjIJCSgzKjQpCQkgICA0IGJ5dGVzLCBwYWQgdG8gOC1ieXRlIGJvdW5kYXJ5ICovCisKKy8qIFJlZ2lzdGVycyB0aGF0IGFyZSA0LWJ5dGUgb24gbWlwczMyIG8zMiwgYW5kIDgtYnl0ZSBvbiBtaXBzNjQgbjY0IGFiaSAqLworI2RlZmluZQlTQ19SRUdTX1NBVkVECTEyCQkvKiByYSxncCxzcCxzMC1zOCAqLworI2RlZmluZQlTQ19SRUdTCQkoNCo0KQkJLyogU0NfUkVHU19TQVZFRCpSRUdTWiBieXRlcyAqLworCisvKiBGbG9hdGluZyBwdCByZWdpc3RlcnMgYXJlIDgtYnl0ZXMgb24gYWxsIGFiaXMsCisgKiBidXQgdGhlIG51bWJlciBvZiBzYXZlZCBmcCByZWdzIHZhcmllcyBmb3IgbzMyL24zMiB2ZXJzdXMgbjY0IGFiaXM6CisgKi8KKworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lCVNDX0ZQUkVHU19TQVZFRAk4ICAvKiBhbGwgIGZwIHJlZ3MgZjI0LGYyNSxmMjYsZjI3LGYyOCxmMjksZjMwLGYzMSAqLworI2Vsc2UKKyNkZWZpbmUJU0NfRlBSRUdTX1NBVkVECTYgIC8qIGV2ZW4gZnAgcmVncyBmMjAsZjIyLGYyNCxmMjYsZjI4LGYzMCAqLworI2VuZGlmCisKKyNkZWZpbmUJU0NfRlBSRUdTCShTQ19SRUdTICsgU0NfUkVHU19TQVZFRCpSRUdTWikgIC8qIFNDX0ZQUkVHU19TQVZFRCpSRUdTWl9GUCBieXRlcyAqLworCisjZGVmaW5lCVNDX0JZVEVTCShTQ19GUFJFR1MgKyBTQ19GUFJFR1NfU0FWRUQqUkVHU1pfRlApCisjZGVmaW5lCVNDX0xPTkdTCShTQ19CWVRFUy9SRUdTWikKKworI2lmZGVmIF9fTFA2NF9fCisvKiBTQ19MT05HUyBpcyAyMiwgc28gX0pCTEVOIHNob3VsZCBiZSAyMiBvciBsYXJnZXIgKi8KKyNlbHNlCisvKiBTQ19MT05HUyBpcyAyOCwgYnV0IG11c3QgYWxzbyBhbGxvY2F0ZSBkeW5hbWljLXJvdW5kdXAgZmlsbGVyLgorICAgc28gX0pCTEVOIHNob3VsZCBiZSAyOSBvciBsYXJnZXIgKi8KKyNlbmRpZgogCiAjZW5kaWYJLyogIV9NSVBTX1NJR05BTF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9taXBzNjQubWsgYi9saWJjL2FyY2gtbWlwczY0L21pcHM2NC5tawppbmRleCAwZDRiNzI3Li5iOTYyMjgzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwczY0L21pcHM2NC5taworKysgYi9saWJjL2FyY2gtbWlwczY0L21pcHM2NC5tawpAQCAtNDksNyArNDksNiBAQAogbGliY19iaW9uaWNfc3JjX2ZpbGVzX21pcHM2NCArPSBcCiAgICAgYXJjaC1taXBzNjQvYmlvbmljL19fYmlvbmljX2Nsb25lLlMgXAogICAgIGFyY2gtbWlwczY0L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMgXAotICAgIGFyY2gtbWlwczY0L2Jpb25pYy9fX2dldF9zcC5TIFwKICAgICBhcmNoLW1pcHM2NC9iaW9uaWMvX3NldGptcC5TIFwKICAgICBhcmNoLW1pcHM2NC9iaW9uaWMvc2V0am1wLlMgXAogICAgIGFyY2gtbWlwczY0L2Jpb25pYy9zaWdzZXRqbXAuUyBcCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2Nsb2NrX25hbm9zbGVlcC5TCnNpbWlsYXJpdHkgaW5kZXggODMlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19jbG9ja19uYW5vc2xlZXAuUwppbmRleCBjOTU4YTEwLi4yMDQ2NzVmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19jbG9ja19uYW5vc2xlZXAuUwpAQCAtMiw3ICsyLDcgQEAKIAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1FTlRSWShjbG9ja19uYW5vc2xlZXApCitFTlRSWShfX2Nsb2NrX25hbm9zbGVlcCkKICAgICAuc2V0IHB1c2gKICAgICAuc2V0IG5vcmVvcmRlcgogICAgIGxpIHYwLCBfX05SX2Nsb2NrX25hbm9zbGVlcApAQCAtMjIsNCArMjIsNSBAQAogICAgIGogdDkKICAgICBtb3ZlIHJhLCB0MAogICAgIC5zZXQgcG9wCi1FTkQoY2xvY2tfbmFub3NsZWVwKQorRU5EKF9fY2xvY2tfbmFub3NsZWVwKQorLmhpZGRlbiBfX2Nsb2NrX25hbm9zbGVlcApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fZmx1c2hfY2FjaGUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0aG9zdG5hbWUuUwpzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19mbHVzaF9jYWNoZS5TCnJlbmFtZSB0byBsaWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldGhvc3RuYW1lLlMKaW5kZXggYTllNDg0Mi4uMmYxMzJhMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fZmx1c2hfY2FjaGUuUworKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldGhvc3RuYW1lLlMKQEAgLTIsMTAgKzIsMTAgQEAKIAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1FTlRSWShfZmx1c2hfY2FjaGUpCitFTlRSWShzZXRob3N0bmFtZSkKICAgICAuc2V0IHB1c2gKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIGxpIHYwLCBfX05SX2NhY2hlZmx1c2gKKyAgICBsaSB2MCwgX19OUl9zZXRob3N0bmFtZQogICAgIHN5c2NhbGwKICAgICBibmV6IGEzLCAxZgogICAgIG1vdmUgYTAsIHYwCkBAIC0yMiw0ICsyMiw0IEBACiAgICAgaiB0OQogICAgIG1vdmUgcmEsIHQwCiAgICAgLnNldCBwb3AKLUVORChfZmx1c2hfY2FjaGUpCitFTkQoc2V0aG9zdG5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzbGVuLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NsZW4tYXRvbS5TCmluZGV4IDZhNmFkNTEuLjJmMTBkYjQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NsZW4tYXRvbS5TCisrKyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NsZW4tYXRvbS5TCkBAIC02NSwyMSArNjUsMjEgQEAKIEVOVFJZICh3Y3NsZW4pCiAJbW92CVNUUiglZXNwKSwgJWVkeAogI2VuZGlmCi0JY21wCSQwLCAoJWVkeCkKKwljbXBsCSQwLCAoJWVkeCkKIAlqeglMKGV4aXRfdGFpbDApCi0JY21wCSQwLCA0KCVlZHgpCisJY21wbAkkMCwgNCglZWR4KQogCWp6CUwoZXhpdF90YWlsMSkKLQljbXAJJDAsIDgoJWVkeCkKKwljbXBsCSQwLCA4KCVlZHgpCiAJanoJTChleGl0X3RhaWwyKQotCWNtcAkkMCwgMTIoJWVkeCkKKwljbXBsCSQwLCAxMiglZWR4KQogCWp6CUwoZXhpdF90YWlsMykKLQljbXAJJDAsIDE2KCVlZHgpCisJY21wbAkkMCwgMTYoJWVkeCkKIAlqeglMKGV4aXRfdGFpbDQpCi0JY21wCSQwLCAyMCglZWR4KQorCWNtcGwJJDAsIDIwKCVlZHgpCiAJanoJTChleGl0X3RhaWw1KQotCWNtcAkkMCwgMjQoJWVkeCkKKwljbXBsCSQwLCAyNCglZWR4KQogCWp6CUwoZXhpdF90YWlsNikKLQljbXAJJDAsIDI4KCVlZHgpCisJY21wbAkkMCwgMjgoJWVkeCkKIAlqeglMKGV4aXRfdGFpbDcpCiAKIAlweG9yCSV4bW0wLCAleG1tMApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy13Y3NjYXQtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy13Y3NjYXQtYXRvbS5TCmluZGV4IDE3YjA4NDMuLjhhMzg5YTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtd2NzY2F0LWF0b20uUworKysgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXdjc2NhdC1hdG9tLlMKQEAgLTk4LDEzICs5OCwxMyBAQAogCW1vdglTVFIyKCVlc3ApLCAlZWN4CiAJbGVhCSglZWRpLCAlZWF4KSwgJWVkeAogCi0JY21wCSQwLCAoJWVjeCkKKwljbXBsCSQwLCAoJWVjeCkKIAlqeglMKEV4aXQ0KQotCWNtcAkkMCwgNCglZWN4KQorCWNtcGwJJDAsIDQoJWVjeCkKIAlqeglMKEV4aXQ4KQotCWNtcAkkMCwgOCglZWN4KQorCWNtcGwJJDAsIDgoJWVjeCkKIAlqeglMKEV4aXQxMikKLQljbXAJJDAsIDEyKCVlY3gpCisJY21wbAkkMCwgMTIoJWVjeCkKIAlqeglMKEV4aXQxNikKIAogI3VuZGVmIFJFVFVSTgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy13Y3NjcHktYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy13Y3NjcHktYXRvbS5TCmluZGV4IDhiYTg0YmMuLjI3Y2I2MWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtd2NzY3B5LWF0b20uUworKysgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXdjc2NweS1hdG9tLlMKQEAgLTkyLDEzICs5MiwxMyBAQAogCW1vdglTVFIxKCVlc3ApLCAlZWR4CiAJbW92CVNUUjIoJWVzcCksICVlY3gKIAotCWNtcAkkMCwgKCVlY3gpCisJY21wbAkkMCwgKCVlY3gpCiAJanoJTChFeGl0VGFpbDQpCi0JY21wCSQwLCA0KCVlY3gpCisJY21wbAkkMCwgNCglZWN4KQogCWp6CUwoRXhpdFRhaWw4KQotCWNtcAkkMCwgOCglZWN4KQorCWNtcGwJJDAsIDgoJWVjeCkKIAlqeglMKEV4aXRUYWlsMTIpCi0JY21wCSQwLCAxMiglZWN4KQorCWNtcGwJJDAsIDEyKCVlY3gpCiAJanoJTChFeGl0VGFpbDE2KQogCiAJUFVTSAkoJWVkaSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2FzbS5oIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvYXNtLmgKaW5kZXggNjcyNDkzZC4uOTQzZjlkZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvYXNtLmgKKysrIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvYXNtLmgKQEAgLTQ5LDE1ICs0OSw2IEBACiAjZGVmaW5lIFBJQ19HT1QoeCkJeEBHT1QoJWVieCkKICNkZWZpbmUgUElDX0dPVE9GRih4KQl4QEdPVE9GRiglZWJ4KQogCi0vKiBsZXQga2VybmVscyBhbmQgb3RoZXJzIG92ZXJyaWRlIGVudHJ5cG9pbnQgYWxpZ25tZW50ICovCi0jaWYgIWRlZmluZWQoX0FMSUdOX1RFWFQpICYmICFkZWZpbmVkKF9LRVJORUwpCi0jIGlmZGVmIF9TVEFOREFMT05FCi0jICBkZWZpbmUgX0FMSUdOX1RFWFQgLmFsaWduIDEKLSMgZWxpZiBkZWZpbmVkIF9fRUxGX18KLSMgIGRlZmluZSBfQUxJR05fVEVYVCAuYWxpZ24gMTYKLSMgZWxzZQotIyAgZGVmaW5lIF9BTElHTl9URVhUIC5hbGlnbiA0Ci0jIGVuZGlmCi0jZW5kaWYKKyNkZWZpbmUgX19iaW9uaWNfYXNtX2FsaWduIDE2CiAKICNlbmRpZiAvKiAhX0kzODZfQVNNX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2Nsb2NrX25hbm9zbGVlcC5TCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19jbG9ja19uYW5vc2xlZXAuUwppbmRleCA1ZTJjYzAzLi43NWE1NGQxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19jbG9ja19uYW5vc2xlZXAuUwpAQCAtMiw3ICsyLDcgQEAKIAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1FTlRSWShjbG9ja19uYW5vc2xlZXApCitFTlRSWShfX2Nsb2NrX25hbm9zbGVlcCkKICAgICBwdXNobCAgICVlYngKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCkBAIC0zMyw0ICszMyw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0Ci1FTkQoY2xvY2tfbmFub3NsZWVwKQorRU5EKF9fY2xvY2tfbmFub3NsZWVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRob3N0bmFtZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRob3N0bmFtZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmY2ZkNzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGhvc3RuYW1lLlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRob3N0bmFtZSkKKyAgICBwdXNobCAgICVlYngKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zZXRob3N0bmFtZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBhZGRsICAgICQ0LCAlZXNwCisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKHNldGhvc3RuYW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9pbmNsdWRlL21hY2hpbmUvYXNtLmggYi9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9hc20uaAppbmRleCAwNmRhMzlhLi4yOGNkMDhmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9hc20uaAorKysgYi9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9hc20uaApAQCAtNDAsMTMgKzQwLDYgQEAKICNkZWZpbmUgUElDX1BMVCh4KQl4QFBMVAogI2RlZmluZSBQSUNfR09UKHgpCXhAR09UUENSRUwoJXJpcCkKIAotLyogbGV0IGtlcm5lbHMgYW5kIG90aGVycyBvdmVycmlkZSBlbnRyeXBvaW50IGFsaWdubWVudCAqLwotI2lmbmRlZiBfQUxJR05fVEVYVAotIyBpZmRlZiBfU1RBTkRBTE9ORQotIyAgZGVmaW5lIF9BTElHTl9URVhUIC5hbGlnbiA0Ci0jIGVsc2UKLSMgIGRlZmluZSBfQUxJR05fVEVYVCAuYWxpZ24gMTYKLSMgZW5kaWYKLSNlbmRpZgorI2RlZmluZSBfX2Jpb25pY19hc21fYWxpZ24gMTYKIAogI2VuZGlmIC8qICFfQU1ENjRfQVNNX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9lbmRpYW4uaCBiL2xpYmMvYXJjaC14ODZfNjQvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCmluZGV4IDc4ODlhMzcuLjhhM2IwYzUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCkBAIC01Niw2ICs1Niw3IEBACiAjZW5kaWYJLyogX19HTlVDX18gKi8KIAogI2RlZmluZSBfQllURV9PUkRFUiBfTElUVExFX0VORElBTgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KIAogI2VuZGlmIC8qIF9NQUNISU5FX0VORElBTl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJsY2F0LXNsbS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJsY2F0LXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OWU4YzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cmxjYXQtc2xtLlMKQEAgLTAsMCArMSwzNyBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2RlZmluZSBVU0VfQVNfU1RSTENBVAorCisjaWZuZGVmIFNUUkxDUFkKKyMgZGVmaW5lIFNUUkxDUFkJc3RybGNhdAorI2VuZGlmCisKKyNpbmNsdWRlICJzc2UyLXN0cmxjcHktc2xtLlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cmxjcHktc2xtLlMgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cmxjcHktc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWQ0YjUyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybGNweS1zbG0uUwpAQCAtMCwwICsxLDEwNjIgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgTAorIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCisjZW5kaWYKKworI2lmbmRlZiBjZmlfc3RhcnRwcm9jCisjIGRlZmluZSBjZmlfc3RhcnRwcm9jCS5jZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfZW5kcHJvYworIyBkZWZpbmUgY2ZpX2VuZHByb2MJLmNmaV9lbmRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJXAorCS50eXBlIG5hbWUsIEBmdW5jdGlvbjsJXAorCS5nbG9ibCBuYW1lOwlcCisJLnAyYWxpZ24gNDsJXAorbmFtZToJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCVwKKyAgICAgICBjZmlfZW5kcHJvYzsJXAorICAgICAgIC5zaXplIG5hbWUsIC4tbmFtZQorI2VuZGlmCisKKworI2lmbmRlZiBTVFJMQ1BZCisjIGRlZmluZSBTVFJMQ1BZCXN0cmxjcHkKKyNlbmRpZgorCisjZGVmaW5lIEpNUFRCTChJLCBCKQlJIC0gQgorI2RlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFLCBJTkRFWCwgU0NBTEUpCVwKKwlsZWEJVEFCTEUoJXJpcCksICVyMTE7CVwKKwltb3ZzbHEJKCVyMTEsIElOREVYLCBTQ0FMRSksICVyY3g7CVwKKwlsZWEJKCVyMTEsICVyY3gpLCAlcmN4OwlcCisJam1wCSolcmN4CisKKyNkZWZpbmUgUkVUVVJOCVwKKwlhZGQJJXI5LCAlcmF4OwlcCisJcmV0CisKKy50ZXh0CitFTlRSWSAoU1RSTENQWSkKKwl4b3IJJXJheCwgJXJheAorCXhvcgklcjksICVyOQorCW1vdgklcmR4LCAlcjgKKwljbXAJJDAsICVyOAorCWp6CUwoQ2FsY3VsYXRlU3JjTGVuKQorCisjaWZkZWYgVVNFX0FTX1NUUkxDQVQKKwl4b3IJJXJjeCwgJXJjeAorCXB4b3IJJXhtbTAsICV4bW0wCisKKwltb3ZkcXUJKCVyZGkpLCAleG1tMQorCXBjbXBlcWIgJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKworCWNtcAkkMTcsICVyOAorCWpiCUwoU2l6ZUVuZENhc2UxKQorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKFN0cmluZ0VuZENhc2UxKQorCisJYWRkCSQxNiwgJXJheAorCW1vdmRxdQkxNiglcmRpKSwgJXhtbTEKKwlwY21wZXFiICV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisKKwljbXAJJDMzLCAlcjgKKwlqYglMKFNpemVFbmRDYXNlMSkKKwl0ZXN0CSVyZHgsICVyZHgKKwlqbnoJTChTdHJpbmdFbmRDYXNlMSkKKworCW1vdgklcmRpLCAlcmN4CisJYW5kCSQxNSwgJXJjeAorCWFuZAkkLTE2LCAlcmRpCisKKwlhZGQJJXJjeCwgJXI4CisJc3ViCSQxNiwgJXI4CisKK0woRHN0TGVuTG9vcCk6CisJbW92ZHFhCSglcmRpLCAlcmF4KSwgJXhtbTEKKwlwY21wZXFiICV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisJc3ViCSQxNiwgJXI4CisJamJlCUwoU2l6ZUVuZENhc2UyKQorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKFN0cmluZ0VuZENhc2UyKQorCWFkZAkkMTYsICVyYXgKKwlqbXAJTChEc3RMZW5Mb29wKQorCitMKFN0cmluZ0VuZENhc2UyKToKKwlhZGQJJDE2LCAlcjgKKwlic2YJJXJkeCwgJXJkeAorCXN1YgklcmR4LCAlcjgKKwlhZGQJJXJkeCwgJXJheAorCXN1YgklcmN4LCAlcjkKKwlhZGQJJXJheCwgJXJkaQorCWptcAkgTChDb3B5U3JjU3RyaW5nKQorCitMKFNpemVFbmRDYXNlMSk6CisJdGVzdAklcmR4LCAlcmR4CisJanoJTChTaXplRW5kKQorCWJzZgklcmR4LCAlcmR4CisJYWRkCSVyZHgsICVyYXgKKwljbXAJJXI4LCAlcmF4CisJamIJTChTdHJpbmdFbmQpCitMKFNpemVFbmQpOgorCW1vdgklcjgsICVyOQorCWptcAlMKENhbGN1bGF0ZVNyY0xlbkNhc2UxKQorCitMKFNpemVFbmRDYXNlMik6CisJYWRkCSQxNiwgJXI4CisJdGVzdAklcmR4LCAlcmR4CisJanoJTChTdHJpbmdFbmRDYXNlNCkKKwlic2YJJXJkeCwgJXJkeAorCWNtcAklcjgsICVyZHgKKwlqYglMKFN0cmluZ0VuZENhc2UzKQorTChTdHJpbmdFbmRDYXNlNCk6CisJYWRkCSVyOCwgJXJheAorCXN1YgklcmN4LCAlcmF4CisJbW92CSVyYXgsICVyOQorCWptcAlMKENhbGN1bGF0ZVNyY0xlbkNhc2UxKQorCitMKFN0cmluZ0VuZENhc2UzKToKKwlhZGQJJXJkeCwgJXJheAorCXN1YgklcmN4LCAlcjkKKwlhZGQJJXJheCwgJXJkaQorCXN1YgklcmR4LCAlcjgKKwlqbXAJTChDb3B5U3JjU3RyaW5nKQorCitMKFN0cmluZ0VuZENhc2UxKToKKwlic2YJJXJkeCwgJXJkeAorCWFkZAklcmR4LCAlcmF4CisJc3ViCSVyY3gsICVyYXgKK0woU3RyaW5nRW5kKToKKwlhZGQJJXJheCwgJXJkaQorCXN1YgklcmF4LCAlcjgKKyNlbmRpZgorCisJbW92CSVyc2ksICVyY3gKKwlhbmQJJDYzLCAlcmN4CisJY21wCSQzMiwgJXJjeAorCWpiZQlMKENvcHlTcmNTdHJpbmcpCisKKwlhbmQJJC0xNiwgJXJzaQorCWFuZAkkMTUsICVyY3gKKwlweG9yCSV4bW0wLCAleG1tMAorCXB4b3IJJXhtbTEsICV4bW0xCisKKwlwY21wZXFiCSglcnNpKSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJXJkeAorCXNocgklY2wsICVyZHgKKwltb3YJJDE2LCAlcjEwCisJc3ViCSVyY3gsICVyMTAKKwljbXAJJXIxMCwgJXI4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzVGFpbENhc2UyT3JDYXNlMykKKwl0ZXN0CSVyZHgsICVyZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsKQorCisJcGNtcGVxYgkxNiglcnNpKSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJXJkeAorCWFkZAkkMTYsICVyMTAKKwljbXAJJXIxMCwgJXI4CisJamJlCUwoQ29weUZyb20xVG8zMkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKENvcHlGcm9tMVRvMzJCeXRlcykKKworCW1vdmRxdQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHF1CSV4bW0xLCAoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RSTENBVAorCWFkZAklcmF4LCAlcjkKKyNlbmRpZgorCWptcAlMKExvb3BTdGFydCkKKworCS5wMmFsaWduIDQKK0woQ29weVNyY1N0cmluZyk6CisjaWZkZWYgVVNFX0FTX1NUUkxDQVQKKwlhZGQJJXJheCwgJXI5CisJeG9yCSVyYXgsICVyYXgKKyNlbmRpZgorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHF1CSglcnNpKSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisKKwljbXAJJDE3LCAlcjgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxQ2FzZTJPckNhc2UzKQorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxKQorCisJbW92ZHF1CTE2KCVyc2kpLCAleG1tMgorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJbW92ZHF1CSV4bW0xLCAoJXJkaSkKKwlwbW92bXNrYiAleG1tMCwgJXJkeAorCWFkZAkkMTYsICVyYXgKKworCWNtcAkkMzMsICVyOAorCWpiCUwoQ29weUZyb20xVG8zMkJ5dGVzMUNhc2UyT3JDYXNlMykKKwl0ZXN0CSVyZHgsICVyZHgKKwlqbnoJTChDb3B5RnJvbTFUbzMyQnl0ZXMxKQorCisJbW92CSVyc2ksICVyY3gKKwlhbmQJJDE1LCAlcmN4CisJYW5kCSQtMTYsICVyc2kKKworTChMb29wU3RhcnQpOgorCXN1YgklcmN4LCAlcmRpCisJYWRkCSVyY3gsICVyOAorCXN1YgkkMTYsICVyOAorCW1vdgkkMTYsICVyYXgKKworTCgxNkxvb3ApOgorCW1vdmRxYQkoJXJzaSwgJXJheCksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJXJkeAorCXN1YgkkMTYsICVyOAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVyZHgsICVyZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW1FeGl0KQorCW1vdmRxdQkleG1tMSwgKCVyZGksICVyYXgpCisJYWRkCSQxNiwgJXJheAorCWptcAlMKDE2TG9vcCkKKworLyotLS0tLS1FbmQgb2YgbWFpbiBwYXJ0IHdpdGggbG9vcHMtLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBDYXNlMSAqLworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzKToKKwlhZGQJJXJjeCwgJXJkaQorCWFkZAklcmN4LCAlcnNpCisJYnNmCSVyZHgsICVyZHgKKwlhZGQJJXJkeCwgJXJheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cmluZ1RhaWxUYWJsZSksICVyZHgsIDQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwpOgorCWFkZAklcmN4LCAlcnNpCisJYnNmCSVyZHgsICVyZHgKKwlhZGQJJXJkeCwgJXJheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cmluZ1RhaWxUYWJsZSksICVyZHgsIDQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMzJCeXRlczEpOgorCWFkZAkkMTYsICVyc2kKKwlhZGQJJDE2LCAlcmRpCisJc3ViCSQxNiwgJXI4CitMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxKToKKwlic2YJJXJkeCwgJXJkeAorCWFkZAklcmR4LCAlcmF4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0U3RyaW5nVGFpbFRhYmxlKSwgJXJkeCwgNCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8zMkJ5dGVzKToKKwlic2YJJXJkeCwgJXJkeAorCWFkZAklcmN4LCAlcnNpCisJYWRkCSQxNiwgJXJkeAorCXN1YgklcmN4LCAlcmR4CisJYWRkCSVyZHgsICVyYXgKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJpbmdUYWlsVGFibGUpLCAlcmR4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNFeGl0KToKKwlhZGQJJXJkeCwgJXJheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cmluZ1RhaWxUYWJsZSksICVyZHgsIDQpCisKKy8qIENhc2UyICovCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyKToKKwlhZGQJJDE2LCAlcjgKKwlhZGQJJXJheCwgJXJkaQorCWFkZAklcmF4LCAlcnNpCisJYnNmCSVyZHgsICVyZHgKKwlzdWIJJXJjeCwgJXJheAorCWNtcAklcjgsICVyZHgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpCisJYWRkCSVyOCwgJXJheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXI4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzMyQnl0ZXNDYXNlMik6CisJYWRkCSVyY3gsICVyc2kKKwlic2YJJXJkeCwgJXJkeAorCWFkZAkkMTYsICVyZHgKKwlzdWIJJXJjeCwgJXJkeAorCWNtcAklcjgsICVyZHgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpCisJYWRkCSVyOCwgJXJheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXI4LCA0KQorCitMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWxDYXNlMik6CisJYWRkCSVyY3gsICVyc2kKKwlic2YJJXJkeCwgJXJkeAorCWNtcAklcjgsICVyZHgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpCisJYWRkCSVyOCwgJXJheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXI4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsMUNhc2UyKToKKwlic2YJJXJkeCwgJXJkeAorCWNtcAklcjgsICVyZHgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpCisJYWRkCSVyOCwgJXJheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXI4LCA0KQorCisvKiBDYXNlMiBvciBDYXNlMywgIENhc2UzICovCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMyk6CisJdGVzdAklcmR4LCAlcmR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTIpCisJYWRkCSQxNiwgJXI4CisJYWRkCSVyYXgsICVyZGkKKwlhZGQJJXJheCwgJXJzaQorCWFkZAklcjgsICVyYXgKKwlzdWIJJXJjeCwgJXJheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXI4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzMyQnl0ZXNDYXNlMk9yQ2FzZTMpOgorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKENvcHlGcm9tMVRvMzJCeXRlc0Nhc2UyKQorCWFkZAklcmN4LCAlcnNpCisJYWRkCSVyOCwgJXJheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXI4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsQ2FzZTJPckNhc2UzKToKKwl0ZXN0CSVyZHgsICVyZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsQ2FzZTIpCisJYWRkCSVyY3gsICVyc2kKKwlhZGQJJXI4LCAlcmF4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlcjgsIDQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMzJCeXRlczFDYXNlMk9yQ2FzZTMpOgorCWFkZAkkMTYsICVyZGkKKwlhZGQJJDE2LCAlcnNpCisJc3ViCSQxNiwgJXI4CitMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxQ2FzZTJPckNhc2UzKToKKwl0ZXN0CSVyZHgsICVyZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsMUNhc2UyKQorCWFkZAklcjgsICVyYXgKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRUYWJsZSksICVyOCwgNCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzWG1tRXhpdCk6CisJYnNmCSVyZHgsICVyZHgKKwlhZGQJJXJheCwgJXJkaQorCWFkZAklcmF4LCAlcnNpCisJYWRkCSVyZHgsICVyYXgKKwlzdWIJJXJjeCwgJXJheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cmluZ1RhaWxUYWJsZSksICVyZHgsIDQpCisKKy8qLS0tLS0tLS0tLS0tRW5kIGxhYmVscyByZWdhcmRpbmcgd2l0aCBjb3B5aW5nIDEtMTYgYnl0ZXMtLWFuZCAxLTMyIGJ5dGVzLS0tLSovCisKKworCS5wMmFsaWduIDQKK0woRXhpdDApOgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MSk6CisJbW92YgkkMCwgKCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0Mik6CisJbW92YgkoJXJzaSksICVkaAorCW1vdmIJJWRoLCAoJXJkaSkKKwltb3ZiCSQwLCAxKCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0Myk6CisJbW92dwkoJXJzaSksICVkeAorCW1vdncJJWR4LCAoJXJkaSkKKwltb3ZiCSQwLCAyKCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0NCk6CisJbW92dwkoJXJzaSksICVjeAorCW1vdmIJMiglcnNpKSwgJWRoCisJbW92dwklY3gsICglcmRpKQorCW1vdmIJJWRoLCAyKCVyZGkpCisJbW92YgkkMCwgMyglcmRpKQorCWptcAlMKENhbGN1bGF0ZVNyY0xlbikKKworCS5wMmFsaWduIDQKK0woRXhpdDUpOgorCW1vdmwJKCVyc2kpLCAlZWR4CisJbW92bAklZWR4LCAoJXJkaSkKKwltb3ZiCSQwLCA0KCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0Nik6CisJbW92bAkoJXJzaSksICVlY3gKKwltb3ZiCTQoJXJzaSksICVkaAorCW1vdmwJJWVjeCwgKCVyZGkpCisJbW92YgklZGgsIDQoJXJkaSkKKwltb3ZiCSQwLCA1KCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0Nyk6CisJbW92bAkoJXJzaSksICVlY3gKKwltb3Z3CTQoJXJzaSksICVkeAorCW1vdmwJJWVjeCwgKCVyZGkpCisJbW92dwklZHgsIDQoJXJkaSkKKwltb3ZiCSQwLCA2KCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0OCk6CisJbW92bAkoJXJzaSksICVlY3gKKwltb3ZsCTMoJXJzaSksICVlZHgKKwltb3ZsCSVlY3gsICglcmRpKQorCW1vdmwJJWVkeCwgMyglcmRpKQorCW1vdmIJJDAsIDcoJXJkaSkKKwlqbXAJTChDYWxjdWxhdGVTcmNMZW4pCisKKwkucDJhbGlnbiA0CitMKEV4aXQ5KToKKwltb3ZxCSglcnNpKSwgJXJkeAorCW1vdnEJJXJkeCwgKCVyZGkpCisJbW92YgkkMCwgOCglcmRpKQorCWptcAlMKENhbGN1bGF0ZVNyY0xlbikKKworCS5wMmFsaWduIDQKK0woRXhpdDEwKToKKwltb3ZxCSglcnNpKSwgJXJjeAorCW1vdmIJOCglcnNpKSwgJWRoCisJbW92cQklcmN4LCAoJXJkaSkKKwltb3ZiCSVkaCwgOCglcmRpKQorCW1vdmIJJDAsIDkoJXJkaSkKKwlqbXAJTChDYWxjdWxhdGVTcmNMZW4pCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMSk6CisJbW92cQkoJXJzaSksICVyY3gKKwltb3Z3CTgoJXJzaSksICVkeAorCW1vdnEJJXJjeCwgKCVyZGkpCisJbW92dwklZHgsIDgoJXJkaSkKKwltb3ZiCSQwLCAxMCglcmRpKQorCWptcAlMKENhbGN1bGF0ZVNyY0xlbikKKworCS5wMmFsaWduIDQKK0woRXhpdDEyKToKKwltb3ZxCSglcnNpKSwgJXJjeAorCW1vdmwJNyglcnNpKSwgJWVkeAorCW1vdnEJJXJjeCwgKCVyZGkpCisJbW92bAklZWR4LCA3KCVyZGkpCisJbW92YgkkMCwgMTEoJXJkaSkKKwlqbXAJTChDYWxjdWxhdGVTcmNMZW4pCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMyk6CisJbW92cQkoJXJzaSksICVyY3gKKwltb3ZsCTgoJXJzaSksICVlZHgKKwltb3ZxCSVyY3gsICglcmRpKQorCW1vdmwJJWVkeCwgOCglcmRpKQorCW1vdmIJJDAsIDEyKCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0MTQpOgorCW1vdnEJKCVyc2kpLCAlcmN4CisJbW92cQk1KCVyc2kpLCAlcmR4CisJbW92cQklcmN4LCAoJXJkaSkKKwltb3ZxCSVyZHgsIDUoJXJkaSkKKwltb3ZiCSQwLCAxMyglcmRpKQorCWptcAlMKENhbGN1bGF0ZVNyY0xlbikKKworCS5wMmFsaWduIDQKK0woRXhpdDE1KToKKwltb3ZxCSglcnNpKSwgJXJjeAorCW1vdnEJNiglcnNpKSwgJXJkeAorCW1vdnEJJXJjeCwgKCVyZGkpCisJbW92cQklcmR4LCA2KCVyZGkpCisJbW92YgkkMCwgMTQoJXJkaSkKKwlqbXAJTChDYWxjdWxhdGVTcmNMZW4pCisKKwkucDJhbGlnbiA0CitMKEV4aXQxNik6CisJbW92cQkoJXJzaSksICVyY3gKKwltb3ZxCTcoJXJzaSksICVyZHgKKwltb3ZxCSVyY3gsICglcmRpKQorCW1vdnEJJXJkeCwgNyglcmRpKQorCW1vdmIJJDAsIDE1KCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0MTcpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZiCSQwLCAxNiglcmRpKQorCWptcAlMKENhbGN1bGF0ZVNyY0xlbikKKworCS5wMmFsaWduIDQKK0woRXhpdDE4KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmIJMTYoJXJzaSksICVkaAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92YgklZGgsIDE2KCVyZGkpCisJbW92YgkkMCwgMTcoJXJkaSkKKwlqbXAJTChDYWxjdWxhdGVTcmNMZW4pCisKKwkucDJhbGlnbiA0CitMKEV4aXQxOSk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3Z3CTE2KCVyc2kpLCAlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdncJJWN4LCAxNiglcmRpKQorCW1vdmIJJDAsIDE4KCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0MjApOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92bAkxNSglcnNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92bAklZWN4LCAxNSglcmRpKQorCW1vdmIJJDAsIDE5KCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0MjEpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92bAkxNiglcnNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92bAklZWN4LCAxNiglcmRpKQorCW1vdmIJJDAsIDIwKCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0MjIpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92bAkxNiglcnNpKSwgJWVjeAorCW1vdmIJMjAoJXJzaSksICVkaAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92bAklZWN4LCAxNiglcmRpKQorCW1vdmIJJWRoLCAyMCglcmRpKQorCW1vdmIJJDAsIDIxKCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0MjMpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92cQkxNCglcnNpKSwgJXJjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92cQklcmN4LCAxNCglcmRpKQorCW1vdmIJJDAsIDIyKCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0MjQpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92cQkxNSglcnNpKSwgJXJjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92cQklcmN4LCAxNSglcmRpKQorCW1vdmIJJDAsIDIzKCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0MjUpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92cQkxNiglcnNpKSwgJXJjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92cQklcmN4LCAxNiglcmRpKQorCW1vdmIJJDAsIDI0KCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0MjYpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92cQkxNiglcnNpKSwgJXJjeAorCW1vdmIJMjQoJXJzaSksICVkaAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92cQklcmN4LCAxNiglcmRpKQorCW1vdgklZGgsIDI0KCVyZGkpCisJbW92YgkkMCwgMjUoJXJkaSkKKwlqbXAJTChDYWxjdWxhdGVTcmNMZW4pCisKKwkucDJhbGlnbiA0CitMKEV4aXQyNyk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZxCTE2KCVyc2kpLCAlcmR4CisJbW92dwkyNCglcnNpKSwgJWN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZxCSVyZHgsIDE2KCVyZGkpCisJbW92dwklY3gsIDI0KCVyZGkpCisJbW92YgkkMCwgMjYoJXJkaSkKKwlqbXAJTChDYWxjdWxhdGVTcmNMZW4pCisKKwkucDJhbGlnbiA0CitMKEV4aXQyOCk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZxCTE2KCVyc2kpLCAlcmR4CisJbW92bAkyMyglcnNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92cQklcmR4LCAxNiglcmRpKQorCW1vdmwJJWVjeCwgMjMoJXJkaSkKKwltb3ZiCSQwLCAyNyglcmRpKQorCWptcAlMKENhbGN1bGF0ZVNyY0xlbikKKworCS5wMmFsaWduIDQKK0woRXhpdDI5KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdnEJMTYoJXJzaSksICVyZHgKKwltb3ZsCTI0KCVyc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZxCSVyZHgsIDE2KCVyZGkpCisJbW92bAklZWN4LCAyNCglcmRpKQorCW1vdmIJJDAsIDI4KCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0MzApOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTEzKCVyc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0yLCAxMyglcmRpKQorCW1vdmIJJDAsIDI5KCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0MzEpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTE0KCVyc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0yLCAxNCglcmRpKQorCW1vdmIJJDAsIDMwKCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChFeGl0MzIpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTE1KCVyc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0yLCAxNSglcmRpKQorCW1vdmIJJDAsIDMxKCVyZGkpCisJam1wCUwoQ2FsY3VsYXRlU3JjTGVuKQorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMCk6CisJbW92CSglcnNpKSwgJWRsCisJbW92CSVkbCwgKCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cmluZ1RhaWwxKToKKwltb3YJKCVyc2kpLCAlZHgKKwltb3YJJWR4LCAoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RyaW5nVGFpbDIpOgorCW1vdgkoJXJzaSksICVjeAorCW1vdgkyKCVyc2kpLCAlZGwKKwltb3YJJWN4LCAoJXJkaSkKKwltb3YJJWRsLCAyKCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cmluZ1RhaWwzKToKKwltb3YJKCVyc2kpLCAlZWR4CisJbW92CSVlZHgsICglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsNCk6CisJbW92CSglcnNpKSwgJWVjeAorCW1vdgk0KCVyc2kpLCAlZGwKKwltb3YJJWVjeCwgKCVyZGkpCisJbW92CSVkbCwgNCglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsNSk6CisJbW92CSglcnNpKSwgJWVjeAorCW1vdgk0KCVyc2kpLCAlZHgKKwltb3YJJWVjeCwgKCVyZGkpCisJbW92CSVkeCwgNCglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsNik6CisJbW92CSglcnNpKSwgJWVjeAorCW1vdgkzKCVyc2kpLCAlZWR4CisJbW92CSVlY3gsICglcmRpKQorCW1vdgklZWR4LCAzKCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cmluZ1RhaWw3KToKKwltb3YJKCVyc2kpLCAlcmR4CisJbW92CSVyZHgsICglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsOCk6CisJbW92CSglcnNpKSwgJXJjeAorCW1vdgk4KCVyc2kpLCAlZGwKKwltb3YJJXJjeCwgKCVyZGkpCisJbW92CSVkbCwgOCglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsOSk6CisJbW92CSglcnNpKSwgJXJjeAorCW1vdgk4KCVyc2kpLCAlZHgKKwltb3YJJXJjeCwgKCVyZGkpCisJbW92CSVkeCwgOCglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMTApOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJNyglcnNpKSwgJWVkeAorCW1vdgklcmN4LCAoJXJkaSkKKwltb3YJJWVkeCwgNyglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMTEpOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJOCglcnNpKSwgJWVkeAorCW1vdgklcmN4LCAoJXJkaSkKKwltb3YJJWVkeCwgOCglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMTIpOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJNSglcnNpKSwgJXJkeAorCW1vdgklcmN4LCAoJXJkaSkKKwltb3YJJXJkeCwgNSglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMTMpOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJNiglcnNpKSwgJXJkeAorCW1vdgklcmN4LCAoJXJkaSkKKwltb3YJJXJkeCwgNiglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMTQpOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJNyglcnNpKSwgJXJkeAorCW1vdgklcmN4LCAoJXJkaSkKKwltb3YJJXJkeCwgNyglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMTUpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RyaW5nVGFpbDE2KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJWNsCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJWNsLCAxNiglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMTcpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE2KCVyc2kpLCAlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklY3gsIDE2KCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cmluZ1RhaWwxOCk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTUoJXJzaSksICVlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklZWN4LCAxNSglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMTkpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE2KCVyc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJWVjeCwgMTYoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RyaW5nVGFpbDIwKToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJWVjeAorCW1vdgkyMCglcnNpKSwgJWRsCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJWVjeCwgMTYoJXJkaSkKKwltb3YJJWRsLCAyMCglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMjEpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE0KCVyc2kpLCAlcmN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJXJjeCwgMTQoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RyaW5nVGFpbDIyKToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNSglcnNpKSwgJXJjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVyY3gsIDE1KCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cmluZ1RhaWwyMyk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVyY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmN4LCAxNiglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMjQpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE2KCVyc2kpLCAlcmR4CisJbW92CTI0KCVyc2kpLCAlY2wKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmR4LCAxNiglcmRpKQorCW1vdgklY2wsIDI0KCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cmluZ1RhaWwyNSk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVyZHgKKwltb3YJMjQoJXJzaSksICVjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVyZHgsIDE2KCVyZGkpCisJbW92CSVjeCwgMjQoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RyaW5nVGFpbDI2KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJXJkeAorCW1vdgkyMyglcnNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVyZHgsIDE2KCVyZGkpCisJbW92CSVlY3gsIDIzKCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cmluZ1RhaWwyNyk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVyZHgKKwltb3YJMjQoJXJzaSksICVlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmR4LCAxNiglcmRpKQorCW1vdgklZWN4LCAyNCglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMjgpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTEzKCVyc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0yLCAxMyglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMjkpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTE0KCVyc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0yLCAxNCglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMzApOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTE1KCVyc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0yLCAxNSglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMzEpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTE2KCVyc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0yLCAxNiglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJpbmdUYWlsMzIpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTE2KCVyc2kpLCAleG1tMgorCW1vdgkzMiglcnNpKSwgJWNsCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTIsIDE2KCVyZGkpCisJbW92CSVjbCwgMzIoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RyaW5nVGFpbDMzKToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQkxNiglcnNpKSwgJXhtbTIKKwltb3YJMzIoJXJzaSksICVjbAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0yLCAxNiglcmRpKQorCW1vdgklY2wsIDMyKCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKENhbGN1bGF0ZVNyY0xlbkNhc2UxKToKKwl4b3IJJXI4LCAlcjgKKwl4b3IJJXJheCwgJXJheAorTChDYWxjdWxhdGVTcmNMZW4pOgorCXB4b3IJJXhtbTAsICV4bW0wCisJeG9yCSVyY3gsICVyY3gKKwlhZGQJJXI4LCAlcnNpCisJbW92ZHF1CSglcnNpKSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisJdGVzdAklcmR4LCAlcmR4CisJam56CUwoU3JjTGVuTG9vcEVuZCkKKworCWFkZAklcmF4LCAlcjkKKwltb3YJJDE2LCAlcmF4CisJbW92CSVyc2ksICVyY3gKKwlhbmQJJDE1LCAlcmN4CisJYW5kCSQtMTYsICVyc2kKK0woU3JjTGVuTG9vcCk6CisJbW92ZHFhCSglcnNpLCAlcmF4KSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisJdGVzdAklcmR4LCAlcmR4CisJam56CUwoU3JjTGVuTG9vcEVuZCkKKwlhZGQJJDE2LCAlcmF4CisJam1wCUwoU3JjTGVuTG9vcCkKKworCS5wMmFsaWduIDQKK0woU3JjTGVuTG9vcEVuZCk6CisJYnNmCSVyZHgsICVyZHgKKwlhZGQJJXJkeCwgJXJheAorCXN1YgklcmN4LCAlcmF4CisJUkVUVVJOCisKK0VORCAoU1RSTENQWSkKKworCS5wMmFsaWduIDQKKwkuc2VjdGlvbiAucm9kYXRhCitMKEV4aXRUYWJsZSk6CisJLmludAlKTVBUQkwoTChFeGl0MCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxKSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDIpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQ0KSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDUpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0NiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQ3KSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDgpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0OSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxMCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxMSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxMiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxMyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxNCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxNSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxNiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxNyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxOCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxOSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyMCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyMSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyMiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyMyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyNCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyNSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyNiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyNyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyOCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyOSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQzMCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQzMSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQzMiksIEwoRXhpdFRhYmxlKSkKK0woRXhpdFN0cmluZ1RhaWxUYWJsZSk6CisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsMCksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsMSksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsMiksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsMyksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsNCksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsNSksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsNiksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsNyksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsOCksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsOSksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsMTApLCBMKEV4aXRTdHJpbmdUYWlsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RyaW5nVGFpbDExKSwgTChFeGl0U3RyaW5nVGFpbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cmluZ1RhaWwxMiksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsMTMpLCBMKEV4aXRTdHJpbmdUYWlsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RyaW5nVGFpbDE0KSwgTChFeGl0U3RyaW5nVGFpbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cmluZ1RhaWwxNSksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsMTYpLCBMKEV4aXRTdHJpbmdUYWlsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RyaW5nVGFpbDE3KSwgTChFeGl0U3RyaW5nVGFpbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cmluZ1RhaWwxOCksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsMTkpLCBMKEV4aXRTdHJpbmdUYWlsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RyaW5nVGFpbDIwKSwgTChFeGl0U3RyaW5nVGFpbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cmluZ1RhaWwyMSksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsMjIpLCBMKEV4aXRTdHJpbmdUYWlsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RyaW5nVGFpbDIzKSwgTChFeGl0U3RyaW5nVGFpbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cmluZ1RhaWwyNCksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsMjUpLCBMKEV4aXRTdHJpbmdUYWlsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RyaW5nVGFpbDI2KSwgTChFeGl0U3RyaW5nVGFpbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cmluZ1RhaWwyNyksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsMjgpLCBMKEV4aXRTdHJpbmdUYWlsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RyaW5nVGFpbDI5KSwgTChFeGl0U3RyaW5nVGFpbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cmluZ1RhaWwzMCksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJpbmdUYWlsMzEpLCBMKEV4aXRTdHJpbmdUYWlsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RyaW5nVGFpbDMyKSwgTChFeGl0U3RyaW5nVGFpbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cmluZ1RhaWwzMyksIEwoRXhpdFN0cmluZ1RhaWxUYWJsZSkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2Nsb2NrX25hbm9zbGVlcC5TCnNpbWlsYXJpdHkgaW5kZXggNzklCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19jbG9ja19uYW5vc2xlZXAuUwppbmRleCAyYTc5YmRkLi4zNzcyNmMwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19jbG9ja19uYW5vc2xlZXAuUwpAQCAtMiw3ICsyLDcgQEAKIAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1FTlRSWShjbG9ja19uYW5vc2xlZXApCitFTlRSWShfX2Nsb2NrX25hbm9zbGVlcCkKICAgICBtb3ZxICAgICVyY3gsICVyMTAKICAgICBtb3ZsICAgICRfX05SX2Nsb2NrX25hbm9zbGVlcCwgJWVheAogICAgIHN5c2NhbGwKQEAgLTEzLDQgKzEzLDUgQEAKICAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAotRU5EKGNsb2NrX25hbm9zbGVlcCkKK0VORChfX2Nsb2NrX25hbm9zbGVlcCkKKy5oaWRkZW4gX19jbG9ja19uYW5vc2xlZXAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGhvc3RuYW1lLlMKc2ltaWxhcml0eSBpbmRleCA2NyUKY29weSBmcm9tIGxpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKY29weSB0byBsaWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGhvc3RuYW1lLlMKaW5kZXggMmE3OWJkZC4uNGJjZDEyZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGhvc3RuYW1lLlMKQEAgLTIsOSArMiw4IEBACiAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotRU5UUlkoY2xvY2tfbmFub3NsZWVwKQotICAgIG1vdnEgICAgJXJjeCwgJXIxMAotICAgIG1vdmwgICAgJF9fTlJfY2xvY2tfbmFub3NsZWVwLCAlZWF4CitFTlRSWShzZXRob3N0bmFtZSkKKyAgICBtb3ZsICAgICRfX05SX3NldGhvc3RuYW1lLCAlZWF4CiAgICAgc3lzY2FsbAogICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKICAgICBqYiAgICAgIDFmCkBAIC0xMyw0ICsxMiw0IEBACiAgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKLUVORChjbG9ja19uYW5vc2xlZXApCitFTkQoc2V0aG9zdG5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3g4Nl82NC5tayBiL2xpYmMvYXJjaC14ODZfNjQveDg2XzY0Lm1rCmluZGV4IDg2NzVlZjQuLjAwYTM3NjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQveDg2XzY0Lm1rCisrKyBiL2xpYmMvYXJjaC14ODZfNjQveDg2XzY0Lm1rCkBAIC0yNSwxMCArMjUsNiBAQAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jbXAuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbW1vdmUuYyBcCiAKLWxpYmNfb3BlbmJzZF9zcmNfZmlsZXNfeDg2XzY0ICs9IFwKLSAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsY2F0LmMgXAotICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmxjcHkuYyBcCi0KICMKICMgSW5oZXJlbnRseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZS4KICMKQEAgLTU2LDYgKzUyLDggQEAKICAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHBuY3B5LXNsbS5TIFwKICAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJjYXQtc2xtLlMgXAogICAgIGFyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cmNweS1zbG0uUyBcCisgICAgYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybGNhdC1zbG0uUyBcCisgICAgYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybGNweS1zbG0uUyBcCiAgICAgYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybGVuLXNsbS5TIFwKICAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJuY2F0LXNsbS5TIFwKICAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJuY3B5LXNsbS5TIFwKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cnhmcm1fbC5jcHAgYi9saWJjL2Jpb25pYy9fX2dudV9iYXNlbmFtZS5jcHAKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gbGliYy9iaW9uaWMvc3RyeGZybV9sLmNwcApyZW5hbWUgdG8gbGliYy9iaW9uaWMvX19nbnVfYmFzZW5hbWUuY3BwCmluZGV4IGFmZTNiOTYuLjFlYjNmNjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3N0cnhmcm1fbC5jcHAKKysrIGIvbGliYy9iaW9uaWMvX19nbnVfYmFzZW5hbWUuY3BwCkBAIC0yNiw4ICsyNiwxMCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAorI2RlZmluZSBfR05VX1NPVVJDRSAxCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLXNpemVfdCBzdHJ4ZnJtX2woY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbiwgbG9jYWxlX3QpIHsKLSAgcmV0dXJuIHN0cnhmcm0oZGVzdCwgc3JjLCBuKTsKK2V4dGVybiAiQyIgY29uc3QgY2hhciogX19nbnVfYmFzZW5hbWUoY29uc3QgY2hhciogcGF0aCkgeworICBjb25zdCBjaGFyKiBsYXN0X3NsYXNoID0gc3RycmNocihwYXRoLCAnLycpOworICByZXR1cm4gKGxhc3Rfc2xhc2ggIT0gTlVMTCkgPyBsYXN0X3NsYXNoICsgMSA6IHBhdGg7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9iaW9uaWNfc3lzdHJhY2UuY3BwIGIvbGliYy9iaW9uaWMvYmlvbmljX3N5c3RyYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWJlNDE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvYmlvbmljX3N5c3RyYWNlLmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxjdXRpbHMvdHJhY2UuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19zeXN0cmFjZS5oIgorI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCisKKyNkZWZpbmUgX1JFQUxMWV9JTkNMVURFX1NZU19fU1lTVEVNX1BST1BFUlRJRVNfSF8KKyNpbmNsdWRlIDxzeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmg+CisKKyNkZWZpbmUgV1JJVEVfT0ZGU0VUICAgMzIKKworc3RhdGljIGNvbnN0IHByb3BfaW5mbyogZ19waW5mbyA9IE5VTEw7CitzdGF0aWMgdWludDMyX3QgZ19zZXJpYWwgPSAtMTsKK3N0YXRpYyB1aW50NjRfdCBnX3RhZ3MgPSAwOworc3RhdGljIGludCBnX3RyYWNlX21hcmtlcl9mZCA9IC0xOworCitzdGF0aWMgYm9vbCBzaG91bGRfdHJhY2UoKSB7CisgIC8vIElmIGdfcGluZm8gaXMgbnVsbCwgdGhpcyBtZWFucyB0aGF0IHN5c3RyYWNlIGhhc24ndCBiZWVuIHJ1biBhbmQgaXQncyBzYWZlIHRvCisgIC8vIGFzc3VtZSB0aGF0IG5vIHRyYWNlIHdyaXRpbmcgd2lsbCBuZWVkIHRvIHRha2UgcGxhY2UuICBIb3dldmVyLCB0byBhdm9pZCBydW5uaW5nCisgIC8vIHRoaXMgY29zdGx5IGZpbmQgY2hlY2sgZWFjaCB0aW1lLCB3ZSBzZXQgaXQgdG8gYSBub24tdHJhY2luZyB2YWx1ZSBzbyB0aGF0IG5leHQKKyAgLy8gdGltZSwgaXQgd2lsbCBqdXN0IGNoZWNrIHRoZSBzZXJpYWwgdG8gc2VlIGlmIHRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkLgorICAvLyB0aGlzIGZ1bmN0aW9uIGFsc28gZGVhbHMgd2l0aCB0aGUgYm9vdHVwIGNhc2UsIGR1cmluZyB3aGljaCB0aGUgY2FsbCB0byBwcm9wZXJ0eQorICAvLyBzZXQgd2lsbCBmYWlsIGlmIHRoZSBwcm9wZXJ0eSBzZXJ2ZXIgaGFzbid0IHlldCBzdGFydGVkLgorICBpZiAoZ19waW5mbyA9PSBOVUxMKSB7CisgICAgZ19waW5mbyA9IF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoImRlYnVnLmF0cmFjZS50YWdzLmVuYWJsZWZsYWdzIik7CisgICAgaWYgKGdfcGluZm8gPT0gTlVMTCkgeworICAgICAgX19zeXN0ZW1fcHJvcGVydHlfc2V0KCJkZWJ1Zy5hdHJhY2UudGFncy5lbmFibGVmbGFncyIsICIwIik7CisgICAgICBnX3BpbmZvID0gX19zeXN0ZW1fcHJvcGVydHlfZmluZCgiZGVidWcuYXRyYWNlLnRhZ3MuZW5hYmxlZmxhZ3MiKTsKKyAgICAgIGlmIChnX3BpbmZvID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIEZpbmQgb3V0IHdoaWNoIHRhZ3MgaGF2ZSBiZWVuIGVuYWJsZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhbmQgc2V0CisgIC8vIHRoZSB2YWx1ZSBvZiB0YWdzIGFjY29yZGluZ2x5LiAgSWYgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBjaGFuZ2VzLAorICAvLyB0aGUgc2VyaWFsIHdpbGwgYWxzbyBjaGFuZ2UsIHNvIHRoZSBjb3N0bHkgc3lzdGVtX3Byb3BlcnR5X3JlYWQgZnVuY3Rpb24KKyAgLy8gY2FuIGJlIGF2b2lkZWQgYnkgY2FsbGluZyB0aGUgbXVjaCBjaGVhcGVyIHN5c3RlbV9wcm9wZXJ0eV9zZXJpYWwKKyAgLy8gZmlyc3QuICBUaGUgdmFsdWVzIHdpdGhpbiBwaW5mbyBtYXkgY2hhbmdlLCBidXQgaXRzIGxvY2F0aW9uIGlzIGd1YXJhbnRlZWQKKyAgLy8gbm90IHRvIG1vdmUuCisgIGNvbnN0IHVpbnQzMl90IGN1cl9zZXJpYWwgPSBfX3N5c3RlbV9wcm9wZXJ0eV9zZXJpYWwoZ19waW5mbyk7CisgIGlmIChjdXJfc2VyaWFsICE9IGdfc2VyaWFsKSB7CisgICAgZ19zZXJpYWwgPSBjdXJfc2VyaWFsOworICAgIGNoYXIgdmFsdWVbUFJPUF9WQUxVRV9NQVhdOworICAgIF9fc3lzdGVtX3Byb3BlcnR5X3JlYWQoZ19waW5mbywgMCwgdmFsdWUpOworICAgIGdfdGFncyA9IHN0cnRvdWxsKHZhbHVlLCBOVUxMLCAwKTsKKyAgfQorCisgIC8vIEZpbmFsbHksIHZlcmlmeSB0aGF0IHRoaXMgdGFnIHZhbHVlIGVuYWJsZXMgYmlvbmljIHRyYWNpbmcuCisgIHJldHVybiAoKGdfdGFncyAmIEFUUkFDRV9UQUdfQklPTklDKSAhPSAwKTsKK30KKworU2NvcGVkVHJhY2U6OlNjb3BlZFRyYWNlKGNvbnN0IGNoYXIqIG1lc3NhZ2UpIHsKKyAgaWYgKCFzaG91bGRfdHJhY2UoKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIGlmIChnX3RyYWNlX21hcmtlcl9mZCA9PSAtMSkgeworICAgIGdfdHJhY2VfbWFya2VyX2ZkID0gb3BlbigiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjZV9tYXJrZXIiLCBPX0NMT0VYRUMgfCBPX1dST05MWSk7CisgICAgaWYgKGdfdHJhY2VfbWFya2VyX2ZkID09IC0xKSB7CisgICAgICBfX2xpYmNfZmF0YWwoIkNvdWxkIG5vdCBvcGVuIGtlcm5lbCB0cmFjZSBmaWxlOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisgIH0KKworICAvLyBJZiBiaW9uaWMgdHJhY2luZyBoYXMgYmVlbiBlbmFibGVkLCB0aGVuIHdyaXRlIHRoZSBtZXNzYWdlIHRvIHRoZQorICAvLyBrZXJuZWwgdHJhY2VfbWFya2VyLgorICBpbnQgbGVuZ3RoID0gc3RybGVuKG1lc3NhZ2UpOworICBjaGFyIGJ1ZltsZW5ndGggKyBXUklURV9PRkZTRVRdOworICBzaXplX3QgbGVuID0gc25wcmludGYoYnVmLCBsZW5ndGggKyBXUklURV9PRkZTRVQsICJCfCVkfCVzIiwgZ2V0cGlkKCksIG1lc3NhZ2UpOworICBzc2l6ZV90IHdieXRlcyA9IFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZShnX3RyYWNlX21hcmtlcl9mZCwgYnVmLCBsZW4pKTsKKworICAvLyBFcnJvciB3aGlsZSB3cml0aW5nCisgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KHdieXRlcykgIT0gbGVuKSB7CisgICAgX19saWJjX2ZhdGFsKCJDb3VsZCBub3Qgd3JpdGUgdG8ga2VybmVsIHRyYWNlIGZpbGU6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICB9Cit9CisKK1Njb3BlZFRyYWNlOjp+U2NvcGVkVHJhY2UoKSB7CisgIGlmICghc2hvdWxkX3RyYWNlKCkpIHsKKyAgICByZXR1cm47CisgIH0KKworICBzc2l6ZV90IHdieXRlcyA9IFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZShnX3RyYWNlX21hcmtlcl9mZCwgIkUiLCAxKSk7CisKKyAgLy8gRXJyb3Igd2hpbGUgd3JpdGluZworICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90Pih3Ynl0ZXMpICE9IDEpIHsKKyAgICBfX2xpYmNfZmF0YWwoIkNvdWxkIG5vdCB3cml0ZSB0byBrZXJuZWwgdHJhY2UgZmlsZTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Jpb25pY190aW1lX2NvbnZlcnNpb25zLmNwcCBiL2xpYmMvYmlvbmljL2Jpb25pY190aW1lX2NvbnZlcnNpb25zLmNwcAppbmRleCA3ZjNjMDI2Li43NWU4ZDQ5IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9iaW9uaWNfdGltZV9jb252ZXJzaW9ucy5jcHAKKysrIGIvbGliYy9iaW9uaWMvYmlvbmljX3RpbWVfY29udmVyc2lvbnMuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY190aW1lX2NvbnZlcnNpb25zLmgiCiAKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19jb25zdGFudHMuaCIKKwogYm9vbCB0aW1lc3BlY19mcm9tX3RpbWV2YWwodGltZXNwZWMmIHRzLCBjb25zdCB0aW1ldmFsJiB0dikgewogICAvLyBXaG9sZSBzZWNvbmRzIGNhbiBqdXN0IGJlIGNvcGllZC4KICAgdHMudHZfc2VjID0gdHYudHZfc2VjOwpAQCAtNDksMyArNTEsMTkgQEAKICAgdHYudHZfc2VjID0gdHMudHZfc2VjOwogICB0di50dl91c2VjID0gdHMudHZfbnNlYyAvIDEwMDA7CiB9CisKKy8vIEluaXRpYWxpemVzICd0cycgd2l0aCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuICdhYnNfdHMnIGFuZCB0aGUgY3VycmVudCB0aW1lCisvLyBhY2NvcmRpbmcgdG8gJ2Nsb2NrJy4gUmV0dXJucyBmYWxzZSBpZiBhYnN0aW1lIGFscmVhZHkgZXhwaXJlZCwgdHJ1ZSBvdGhlcndpc2UuCitib29sIHRpbWVzcGVjX2Zyb21fYWJzb2x1dGVfdGltZXNwZWModGltZXNwZWMmIHRzLCBjb25zdCB0aW1lc3BlYyYgYWJzX3RzLCBjbG9ja2lkX3QgY2xvY2spIHsKKyAgY2xvY2tfZ2V0dGltZShjbG9jaywgJnRzKTsKKyAgdHMudHZfc2VjID0gYWJzX3RzLnR2X3NlYyAtIHRzLnR2X3NlYzsKKyAgdHMudHZfbnNlYyA9IGFic190cy50dl9uc2VjIC0gdHMudHZfbnNlYzsKKyAgaWYgKHRzLnR2X25zZWMgPCAwKSB7CisgICAgdHMudHZfc2VjLS07CisgICAgdHMudHZfbnNlYyArPSBOU19QRVJfUzsKKyAgfQorICBpZiAodHMudHZfbnNlYyA8IDAgfHwgdHMudHZfc2VjIDwgMCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Nsb2NrLmNwcCBiL2xpYmMvYmlvbmljL2Nsb2NrLmNwcAppbmRleCA1YmQzMmY5Li4wNTNlOWU3IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9jbG9jay5jcHAKKysrIGIvbGliYy9iaW9uaWMvY2xvY2suY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8c3lzL3N5c2NvbmYuaD4KICNpbmNsdWRlIDxzeXMvdGltZXMuaD4KIAotI2RlZmluZSBOU19QRVJfUyAxMDAwMDAwMDAwIC8vIE5vICJwcml2YXRlL2Jpb25pY19jb25zdGFudHMuaCIgaW4gbG1wLWRldi4KKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19jb25zdGFudHMuaCIKIAogLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2Nsb2NrLmh0bWwKIGNsb2NrX3QgY2xvY2soKSB7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdHJmdGltZV9sLmNwcCBiL2xpYmMvYmlvbmljL2Nsb2NrX2dldGNwdWNsb2NraWQuY3BwCnNpbWlsYXJpdHkgaW5kZXggNzIlCmNvcHkgZnJvbSBsaWJjL2Jpb25pYy9zdHJmdGltZV9sLmNwcApjb3B5IHRvIGxpYmMvYmlvbmljL2Nsb2NrX2dldGNwdWNsb2NraWQuY3BwCmluZGV4IGZiMDFkYTUuLjU1MTFlYjQgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3N0cmZ0aW1lX2wuY3BwCisrKyBiL2xpYmMvYmlvbmljL2Nsb2NrX2dldGNwdWNsb2NraWQuY3BwCkBAIC0yNiw5ICsyNiwyNSBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCi1zaXplX3Qgc3RyZnRpbWVfbChjaGFyICpzLCBzaXplX3QgbWF4LCBjb25zdCBjaGFyICpmb3JtYXQsIGNvbnN0IHN0cnVjdCB0bSAqdG0sCi0gICAgICAgICAgICAgICAgICBsb2NhbGVfdCkgewotICByZXR1cm4gc3RyZnRpbWUocywgbWF4LCBmb3JtYXQsIHRtKTsKKyNpbmNsdWRlICJwcml2YXRlL0Vycm5vUmVzdG9yZXIuaCIKKworaW50IGNsb2NrX2dldGNwdWNsb2NraWQocGlkX3QgcGlkLCBjbG9ja2lkX3QqIGNsb2NraWQpIHsKKyAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKKworICAvLyBUaGUgdGlkIGlzIHN0b3JlZCBpbiB0aGUgdG9wIGJpdHMsIGJ1dCBuZWdhdGVkLgorICBjbG9ja2lkX3QgcmVzdWx0ID0gfnN0YXRpY19jYXN0PGNsb2NraWRfdD4ocGlkKSA8PCAzOworICAvLyBCaXRzIDAgYW5kIDE6IGNsb2NrIHR5cGUgKDAgPSBDUFVDTE9DS19QUk9GLCAxID0gQ1BVQ0xPQ0tfVklSVCwgMiA9IENQVUNMT0NLX1NDSEVEKS4KKyAgcmVzdWx0IHw9IDI7CisgIC8vIEJpdCAyOiB0aHJlYWQgKHNldCkgb3IgcHJvY2VzcyAoY2xlYXIpLiBCaXQgMiBhbHJlYWR5IDAuCisKKyAgdGltZXNwZWMgdHM7CisgIGlmIChjbG9ja19nZXRyZXMocmVzdWx0LCAmdHMpID09IC0xKSB7CisgICAgcmV0dXJuIEVTUkNIOworICB9CisKKyAgKmNsb2NraWQgPSByZXN1bHQ7CisgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RyZnRpbWVfbC5jcHAgYi9saWJjL2Jpb25pYy9jbG9ja19uYW5vc2xlZXAuY3BwCnNpbWlsYXJpdHkgaW5kZXggODElCnJlbmFtZSBmcm9tIGxpYmMvYmlvbmljL3N0cmZ0aW1lX2wuY3BwCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9jbG9ja19uYW5vc2xlZXAuY3BwCmluZGV4IGZiMDFkYTUuLjE1YjhmZTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3N0cmZ0aW1lX2wuY3BwCisrKyBiL2xpYmMvYmlvbmljL2Nsb2NrX25hbm9zbGVlcC5jcHAKQEAgLTI4LDcgKzI4LDExIEBACiAKICNpbmNsdWRlIDx0aW1lLmg+CiAKLXNpemVfdCBzdHJmdGltZV9sKGNoYXIgKnMsIHNpemVfdCBtYXgsIGNvbnN0IGNoYXIgKmZvcm1hdCwgY29uc3Qgc3RydWN0IHRtICp0bSwKLSAgICAgICAgICAgICAgICAgIGxvY2FsZV90KSB7Ci0gIHJldHVybiBzdHJmdGltZShzLCBtYXgsIGZvcm1hdCwgdG0pOworI2luY2x1ZGUgInByaXZhdGUvRXJybm9SZXN0b3Jlci5oIgorCitleHRlcm4gIkMiIGludCBfX2Nsb2NrX25hbm9zbGVlcChjbG9ja2lkX3QsIGludCwgY29uc3QgdGltZXNwZWMqLCB0aW1lc3BlYyopOworCitpbnQgY2xvY2tfbmFub3NsZWVwKGNsb2NraWRfdCBjbG9ja19pZCwgaW50IGZsYWdzLCBjb25zdCB0aW1lc3BlYyogaW4sIHRpbWVzcGVjKiBvdXQpIHsKKyAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKKyAgcmV0dXJuIChfX2Nsb2NrX25hbm9zbGVlcChjbG9ja19pZCwgZmxhZ3MsIGluLCBvdXQpID09IDApID8gMCA6IGVycm5vOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvY2xvbmUuY3BwIGIvbGliYy9iaW9uaWMvY2xvbmUuY3BwCmluZGV4IDBhMGZkZDUuLjliNWM5ZTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2Nsb25lLmNwcAorKysgYi9saWJjL2Jpb25pYy9jbG9uZS5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNkZWZpbmUgX19HTlVfU09VUkNFIDEKKyNkZWZpbmUgX0dOVV9TT1VSQ0UgMQogI2luY2x1ZGUgPHNjaGVkLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9kYWVtb24uYyBiL2xpYmMvYmlvbmljL2RhZW1vbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTgxZDE2Li4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL2RhZW1vbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0KLWludCAgZGFlbW9uKCBpbnQgIG5vY2hkaXIsIGludCAgbm9jbG9zZSApCi17Ci0gICBwaWRfdCAgcGlkOwotCi0gICBpZiAoICFub2NoZGlyICYmIGNoZGlyKCIvIikgIT0gMCApCi0gICAgICAgcmV0dXJuIC0xOwotICAgCi0gICBpZiAoICFub2Nsb3NlICkKLSAgIHsKLSAgICAgaW50ICBmZCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7Ci0KLSAgICAgaWYgKCBmZCA8IDAgKQotICAgICAgcmV0dXJuIC0xOwotCi0gICAgIGlmICggZHVwMiggZmQsIDAgKSA8IDAgfHwKLQkgIGR1cDIoIGZkLCAxICkgPCAwIHx8Ci0gICAgICAgICAgZHVwMiggZmQsIDIgKSA8IDAgKSAKLSAgICAgewotICAgICAgIGNsb3NlKGZkKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICAgfQotICAgICBjbG9zZShmZCk7Ci0gIH0KLSAgCi0gICBwaWQgPSBmb3JrKCk7Ci0gICBpZiAocGlkIDwgMCkKLSAgICByZXR1cm4gLTE7Ci0KLSAgIGlmIChwaWQgPiAwKQotICAgIF9leGl0KDApOwotCi0gICBpZiAoIHNldHNpZCgpIDwgMCApCi0gICAgIHJldHVybiAtMTsKLQotICAgcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RlYnVnX21hcGluZm8uY3BwIGIvbGliYy9iaW9uaWMvZGVidWdfbWFwaW5mby5jcHAKaW5kZXggZDgzNzk5YS4uNjk4YWI2YiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvZGVidWdfbWFwaW5mby5jcHAKKysrIGIvbGliYy9iaW9uaWMvZGVidWdfbWFwaW5mby5jcHAKQEAgLTcxLDcgKzcxLDcgQEAKICAgc3RydWN0IG1hcGluZm9fdCogbWlsaXN0ID0gTlVMTDsKICAgY2hhciBkYXRhWzEwMjRdOyAvLyBVc2VkIHRvIHJlYWQgbGluZXMgYXMgd2VsbCBhcyB0byBjb25zdHJ1Y3QgdGhlIGZpbGVuYW1lLgogICBzbnByaW50ZihkYXRhLCBzaXplb2YoZGF0YSksICIvcHJvYy8lZC9tYXBzIiwgcGlkKTsKLSAgRklMRSogZnAgPSBmb3BlbihkYXRhLCAiciIpOworICBGSUxFKiBmcCA9IGZvcGVuKGRhdGEsICJyZSIpOwogICBpZiAoZnAgIT0gTlVMTCkgewogICAgIHdoaWxlIChmZ2V0cyhkYXRhLCBzaXplb2YoZGF0YSksIGZwKSAhPSBOVUxMKSB7CiAgICAgICBtYXBpbmZvX3QqIG1pID0gcGFyc2VfbWFwc19saW5lKGRhdGEpOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZGlyZW50LmNwcCBiL2xpYmMvYmlvbmljL2RpcmVudC5jcHAKaW5kZXggN2FiYzdmMy4uNmQ4NzA5NyAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvZGlyZW50LmNwcAorKysgYi9saWJjL2Jpb25pYy9kaXJlbnQuY3BwCkBAIC00Myw2ICs0Myw3IEBACiAgIGludCBmZF87CiAgIHNpemVfdCBhdmFpbGFibGVfYnl0ZXNfOwogICBkaXJlbnQqIG5leHRfOworICBsb25nIGN1cnJlbnRfcG9zXzsKICAgcHRocmVhZF9tdXRleF90IG11dGV4XzsKICAgZGlyZW50IGJ1ZmZfWzE1XTsKIH07CkBAIC01NSw2ICs1Niw3IEBACiAgIGQtPmZkXyA9IGZkOwogICBkLT5hdmFpbGFibGVfYnl0ZXNfID0gMDsKICAgZC0+bmV4dF8gPSBOVUxMOworICBkLT5jdXJyZW50X3Bvc18gPSAwTDsKICAgcHRocmVhZF9tdXRleF9pbml0KCZkLT5tdXRleF8sIE5VTEwpOwogICByZXR1cm4gZDsKIH0KQEAgLTc4LDcgKzgwLDcgQEAKIH0KIAogRElSKiBvcGVuZGlyKGNvbnN0IGNoYXIqIHBhdGgpIHsKLSAgaW50IGZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTsKKyAgaW50IGZkID0gb3BlbihwYXRoLCBPX0NMT0VYRUMgfCBPX0RJUkVDVE9SWSB8IE9fUkRPTkxZKTsKICAgcmV0dXJuIChmZCAhPSAtMSkgPyBfX2FsbG9jYXRlX0RJUihmZCkgOiBOVUxMOwogfQogCkBAIC0xMDAsNiArMTAyLDkgQEAKICAgZGlyZW50KiBlbnRyeSA9IGQtPm5leHRfOwogICBkLT5uZXh0XyA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZGlyZW50Kj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZW50cnkpICsgZW50cnktPmRfcmVjbGVuKTsKICAgZC0+YXZhaWxhYmxlX2J5dGVzXyAtPSBlbnRyeS0+ZF9yZWNsZW47CisgIC8vIFRoZSBkaXJlY3RvcnkgZW50cnkgb2Zmc2V0IHVzZXMgMCwgMSwgMiBpbnN0ZWFkIG9mIHJlYWwgZmlsZSBvZmZzZXQsCisgIC8vIHNvIHRoZSB2YWx1ZSByYW5nZSBvZiBsb25nIHR5cGUgaXMgZW5vdWdoLgorICBkLT5jdXJyZW50X3Bvc18gPSBzdGF0aWNfY2FzdDxsb25nPihlbnRyeS0+ZF9vZmYpOwogICByZXR1cm4gZW50cnk7CiB9CiAKQEAgLTE0Niw2ICsxNTEsMjAgQEAKICAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZC0+bXV0ZXhfKTsKICAgbHNlZWsoZC0+ZmRfLCAwLCBTRUVLX1NFVCk7CiAgIGQtPmF2YWlsYWJsZV9ieXRlc18gPSAwOworICBkLT5jdXJyZW50X3Bvc18gPSAwTDsKK30KKwordm9pZCBzZWVrZGlyKERJUiogZCwgbG9uZyBvZmZzZXQpIHsKKyAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZC0+bXV0ZXhfKTsKKyAgb2ZmX3QgcmV0ID0gbHNlZWsoZC0+ZmRfLCBvZmZzZXQsIFNFRUtfU0VUKTsKKyAgaWYgKHJldCAhPSAtMUwpIHsKKyAgICBkLT5hdmFpbGFibGVfYnl0ZXNfID0gMDsKKyAgICBkLT5jdXJyZW50X3Bvc18gPSByZXQ7CisgIH0KK30KKworbG9uZyB0ZWxsZGlyKERJUiogZCkgeworICByZXR1cm4gZC0+Y3VycmVudF9wb3NfOwogfQogCiBpbnQgYWxwaGFzb3J0KGNvbnN0IGRpcmVudCoqIGEsIGNvbnN0IGRpcmVudCoqIGIpIHsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RsbWFsbG9jLmMgYi9saWJjL2Jpb25pYy9kbG1hbGxvYy5jCmluZGV4IGU4OWM1ZDEuLjU4NTNlN2MgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2RsbWFsbG9jLmMKKysrIGIvbGliYy9iaW9uaWMvZGxtYWxsb2MuYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAiZGxtYWxsb2MuaCIKIAorI2luY2x1ZGUgIm1hbGxvYy5oIgogI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX3ByY3RsLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKIApAQCAtNTQsMyArNTUsMjUgQEAKICAgcHJjdGwoUFJfU0VUX1ZNQSwgUFJfU0VUX1ZNQV9BTk9OX05BTUUsIG1hcCwgbGVuZ3RoLCAibGliY19tYWxsb2MiKTsKICAgcmV0dXJuIG1hcDsKIH0KKworLy8gU2luY2UgZGxtYWxsb2MgaXNuJ3QgdGhlIGRlZmF1bHQsIHdlJ2xsIGxlYXZlIHRoaXMgdW5pbXBsZW1lbnRlZCBmb3Igbm93LiBJZgorLy8gd2UgZGVjaWRlIHdlIG5lZWQgaXQgbGF0ZXIsIHdlIGNhbiBmaWxsIGl0IGluLgorc2l6ZV90IF9fbWFsbGluZm9fbmFyZW5hcygpIHsKKyAgcmV0dXJuIDA7Cit9CisKK3NpemVfdCBfX21hbGxpbmZvX25iaW5zKCkgeworICByZXR1cm4gMDsKK30KKworc3RydWN0IG1hbGxpbmZvIF9fbWFsbGluZm9fYXJlbmFfaW5mbyhzaXplX3QgYWlkeCBfX3VudXNlZCkgeworICBzdHJ1Y3QgbWFsbGluZm8gbWk7CisgIG1lbXNldCgmbWksIDAsIHNpemVvZihtaSkpOworICByZXR1cm4gbWk7Cit9CisKK3N0cnVjdCBtYWxsaW5mbyBfX21hbGxpbmZvX2Jpbl9pbmZvKHNpemVfdCBhaWR4IF9fdW51c2VkLCBzaXplX3QgYmlkeCBfX3VudXNlZCkgeworICBzdHJ1Y3QgbWFsbGluZm8gbWk7CisgIG1lbXNldCgmbWksIDAsIHNpemVvZihtaSkpOworICByZXR1cm4gbWk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9lcnIuYyBiL2xpYmMvYmlvbmljL2Vyci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGEzZDg1Li4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL2Vyci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkzCi0gKiAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8ZXJyLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi1leHRlcm4gY29uc3QgY2hhciogX19wcm9nbmFtZTsKLQotX19ub3JldHVybiB2b2lkCi1lcnIoaW50IGV2YWwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotICAgICAgICB2YV9saXN0IGFwOwotCi0gICAgICAgIHZhX3N0YXJ0KGFwLCBmbXQpOwotICAgICAgICB2ZXJyKGV2YWwsIGZtdCwgYXApOwotICAgICAgICB2YV9lbmQoYXApOwotfQotCi1fX25vcmV0dXJuIHZvaWQKLWVycngoaW50IGV2YWwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotICAgICAgICB2YV9saXN0IGFwOwotCi0gICAgICAgIHZhX3N0YXJ0KGFwLCBmbXQpOwotICAgICAgICB2ZXJyeChldmFsLCBmbXQsIGFwKTsKLSAgICAgICAgdmFfZW5kKGFwKTsKLX0KLQotX19ub3JldHVybiB2b2lkCi12ZXJyKGludCBldmFsLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCi17Ci0gICAgICAgIGludCBzdmVycm5vOwotCi0gICAgICAgIHN2ZXJybm8gPSBlcnJubzsKLSAgICAgICAgKHZvaWQpZnByaW50ZihzdGRlcnIsICIlczogIiwgX19wcm9nbmFtZSk7Ci0gICAgICAgIGlmIChmbXQgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICh2b2lkKXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7Ci0gICAgICAgICAgICAgICAgKHZvaWQpZnByaW50ZihzdGRlcnIsICI6ICIpOwotICAgICAgICB9Ci0gICAgICAgICh2b2lkKWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN0cmVycm9yKHN2ZXJybm8pKTsKLSAgICAgICAgZXhpdChldmFsKTsKLX0KLQotCi1fX25vcmV0dXJuIHZvaWQKLXZlcnJ4KGludCBldmFsLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCi17Ci0gICAgICAgICh2b2lkKWZwcmludGYoc3RkZXJyLCAiJXM6ICIsIF9fcHJvZ25hbWUpOwotICAgICAgICBpZiAoZm10ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgKHZvaWQpdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKLSAgICAgICAgKHZvaWQpZnByaW50ZihzdGRlcnIsICJcbiIpOwotICAgICAgICBleGl0KGV2YWwpOwotfQotCi12b2lkCi13YXJuKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQl2d2FybihmbXQsIGFwKTsKLQl2YV9lbmQoYXApOwotfQotCi12b2lkCi13YXJueChjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0Jdndhcm54KGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KLXZvaWQKLXZ3YXJuKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKLXsKLQlpbnQgc3ZlcnJubzsKLQotCXN2ZXJybm8gPSBlcnJubzsKLQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzOiAiLCBfX3Byb2duYW1lKTsKLQlpZiAoZm10ICE9IE5VTEwpIHsKLQkJKHZvaWQpdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKLQkJKHZvaWQpZnByaW50ZihzdGRlcnIsICI6ICIpOwotCX0KLQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBzdHJlcnJvcihzdmVycm5vKSk7Ci19Ci0KLXZvaWQKLXZ3YXJueChjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCi17Ci0JKHZvaWQpZnByaW50ZihzdGRlcnIsICIlczogIiwgX19wcm9nbmFtZSk7Ci0JaWYgKGZtdCAhPSBOVUxMKQotCQkodm9pZCl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOwotCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiXG4iKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Z0cy5jIGIvbGliYy9iaW9uaWMvZnRzLmMKaW5kZXggYzQ5MWI2YS4uMzFhNGIyZiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvZnRzLmMKKysrIGIvbGliYy9iaW9uaWMvZnRzLmMKQEAgLTEsNCArMSw0IEBACi0vKgkkT3BlbkJTRDogZnRzLmMsdiAxLjQ2IDIwMTQvMDUvMjUgMTc6NDc6MDQgdGVkdSBFeHAgJAkqLworLyoJJE9wZW5CU0Q6IGZ0cy5jLHYgMS40OCAyMDE0LzExLzIwIDA0OjE0OjE1IGd1ZW50aGVyIEV4cCAkCSovCiAKIC8qLQogICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzLCAxOTk0CkBAIC00OSwxMSArNDksMTIgQEAKIHN0YXRpYyB2b2lkCSBmdHNfcGFkanVzdChGVFMgKiwgRlRTRU5UICopOwogc3RhdGljIGludAkgZnRzX3BhbGxvYyhGVFMgKiwgc2l6ZV90KTsKIHN0YXRpYyBGVFNFTlQJKmZ0c19zb3J0KEZUUyAqLCBGVFNFTlQgKiwgaW50KTsKLXN0YXRpYyB1X3Nob3J0CSBmdHNfc3RhdChGVFMgKiwgRlRTRU5UICosIGludCk7CitzdGF0aWMgdV9zaG9ydAkgZnRzX3N0YXQoRlRTICosIEZUU0VOVCAqLCBpbnQsIGludCk7CiBzdGF0aWMgaW50CSBmdHNfc2FmZV9jaGFuZ2VkaXIoRlRTICosIEZUU0VOVCAqLCBpbnQsIGNoYXIgKik7CiAKICNkZWZpbmUgQUxJR05CWVRFUyAoc2l6ZW9mKHVpbnRwdHJfdCkgLSAxKQogI2RlZmluZSBBTElHTihwKSAoKCh1aW50cHRyX3QpKHApICsgQUxJR05CWVRFUykgJn4gQUxJR05CWVRFUykKK3ZvaWQqIHJlYWxsb2NhcnJheSh2b2lkKiwgc2l6ZV90LCBzaXplX3QpOwogCiAjZGVmaW5lCUlTRE9UKGEpCShhWzBdID09ICcuJyAmJiAoIWFbMV0gfHwgKGFbMV0gPT0gJy4nICYmICFhWzJdKSkpCiAKQEAgLTExOSw3ICsxMjAsNyBAQAogCQlwLT5mdHNfbGV2ZWwgPSBGVFNfUk9PVExFVkVMOwogCQlwLT5mdHNfcGFyZW50ID0gcGFyZW50OwogCQlwLT5mdHNfYWNjcGF0aCA9IHAtPmZ0c19uYW1lOwotCQlwLT5mdHNfaW5mbyA9IGZ0c19zdGF0KHNwLCBwLCBJU1NFVChGVFNfQ09NRk9MTE9XKSk7CisJCXAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIHAsIElTU0VUKEZUU19DT01GT0xMT1cpLCAtMSk7CiAKIAkJLyogQ29tbWFuZC1saW5lICIuIiBhbmQgIi4uIiBhcmUgcmVhbCBkaXJlY3Rvcmllcy4gKi8KIAkJaWYgKHAtPmZ0c19pbmZvID09IEZUU19ET1QpCkBAIC0yNzMsNyArMjc0LDcgQEAKIAogCS8qIEFueSB0eXBlIG9mIGZpbGUgbWF5IGJlIHJlLXZpc2l0ZWQ7IHJlLXN0YXQgYW5kIHJlLXR1cm4uICovCiAJaWYgKGluc3RyID09IEZUU19BR0FJTikgewotCQlwLT5mdHNfaW5mbyA9IGZ0c19zdGF0KHNwLCBwLCAwKTsKKwkJcC0+ZnRzX2luZm8gPSBmdHNfc3RhdChzcCwgcCwgMCwgLTEpOwogCQlyZXR1cm4gKHApOwogCX0KIApAQCAtMjg1LDcgKzI4Niw3IEBACiAJICovCiAJaWYgKGluc3RyID09IEZUU19GT0xMT1cgJiYKIAkgICAgKHAtPmZ0c19pbmZvID09IEZUU19TTCB8fCBwLT5mdHNfaW5mbyA9PSBGVFNfU0xOT05FKSkgewotCQlwLT5mdHNfaW5mbyA9IGZ0c19zdGF0KHNwLCBwLCAxKTsKKwkJcC0+ZnRzX2luZm8gPSBmdHNfc3RhdChzcCwgcCwgMSwgLTEpOwogCQlpZiAocC0+ZnRzX2luZm8gPT0gRlRTX0QgJiYgIUlTU0VUKEZUU19OT0NIRElSKSkgewogCQkJaWYgKChwLT5mdHNfc3ltZmQgPSBvcGVuKCIuIiwgT19SRE9OTFksIDApKSA8IDApIHsKIAkJCQlwLT5mdHNfZXJybm8gPSBlcnJubzsKQEAgLTM3NCw3ICszNzUsNyBAQAogCQlpZiAocC0+ZnRzX2luc3RyID09IEZUU19TS0lQKQogCQkJZ290byBuZXh0OwogCQlpZiAocC0+ZnRzX2luc3RyID09IEZUU19GT0xMT1cpIHsKLQkJCXAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIHAsIDEpOworCQkJcC0+ZnRzX2luZm8gPSBmdHNfc3RhdChzcCwgcCwgMSwgLTEpOwogCQkJaWYgKHAtPmZ0c19pbmZvID09IEZUU19EICYmICFJU1NFVChGVFNfTk9DSERJUikpIHsKIAkJCQlpZiAoKHAtPmZ0c19zeW1mZCA9CiAJCQkJICAgIG9wZW4oIi4iLCBPX1JET05MWSwgMCkpIDwgMCkgewpAQCAtNzE5LDEwICs3MjAsMTEgQEAKIAkJCWlmIChJU1NFVChGVFNfTk9DSERJUikpIHsKIAkJCQlwLT5mdHNfYWNjcGF0aCA9IHAtPmZ0c19wYXRoOwogCQkJCW1lbW1vdmUoY3AsIHAtPmZ0c19uYW1lLCBwLT5mdHNfbmFtZWxlbiArIDEpOwotCQkJfSBlbHNlCisJCQkJcC0+ZnRzX2luZm8gPSBmdHNfc3RhdChzcCwgcCwgMCwgZGlyZmQoZGlycCkpOworCQkJfSBlbHNlIHsKIAkJCQlwLT5mdHNfYWNjcGF0aCA9IHAtPmZ0c19uYW1lOwotCQkJLyogU3RhdCBpdC4gKi8KLQkJCXAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIHAsIDApOworCQkJCXAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIHAsIDAsIC0xKTsKKwkJCX0KIAogCQkJLyogRGVjcmVtZW50IGxpbmsgY291bnQgaWYgYXBwbGljYWJsZS4gKi8KIAkJCWlmIChubGlua3MgPiAwICYmIChwLT5mdHNfaW5mbyA9PSBGVFNfRCB8fApAQCAtNzg5LDEzICs3OTEsMjAgQEAKIH0KIAogc3RhdGljIHVfc2hvcnQKLWZ0c19zdGF0KEZUUyAqc3AsIEZUU0VOVCAqcCwgaW50IGZvbGxvdykKK2Z0c19zdGF0KEZUUyAqc3AsIEZUU0VOVCAqcCwgaW50IGZvbGxvdywgaW50IGRmZCkKIHsKIAlGVFNFTlQgKnQ7CiAJZGV2X3QgZGV2OwogCWlub190IGlubzsKIAlzdHJ1Y3Qgc3RhdCAqc2JwLCBzYjsKIAlpbnQgc2F2ZWRfZXJybm87CisJY29uc3QgY2hhciAqcGF0aDsKKworCWlmIChkZmQgPT0gLTEpIHsKKwkJcGF0aCA9IHAtPmZ0c19hY2NwYXRoOworCQlkZmQgPSBBVF9GRENXRDsKKwl9IGVsc2UKKwkJcGF0aCA9IHAtPmZ0c19uYW1lOwogCiAJLyogSWYgdXNlciBuZWVkcyBzdGF0IGluZm8sIHN0YXQgYnVmZmVyIGFscmVhZHkgYWxsb2NhdGVkLiAqLwogCXNicCA9IElTU0VUKEZUU19OT1NUQVQpID8gJnNiIDogcC0+ZnRzX3N0YXRwOwpAQCAtODA2LDE2ICs4MTUsMTYgQEAKIAkgKiBmYWlsLCBzZXQgdGhlIGVycm5vIGZyb20gdGhlIHN0YXQgY2FsbC4KIAkgKi8KIAlpZiAoSVNTRVQoRlRTX0xPR0lDQUwpIHx8IGZvbGxvdykgewotCQlpZiAoc3RhdChwLT5mdHNfYWNjcGF0aCwgc2JwKSkgeworCQlpZiAoZnN0YXRhdChkZmQsIHBhdGgsIHNicCwgMCkpIHsKIAkJCXNhdmVkX2Vycm5vID0gZXJybm87Ci0JCQlpZiAoIWxzdGF0KHAtPmZ0c19hY2NwYXRoLCBzYnApKSB7CisJCQlpZiAoIWZzdGF0YXQoZGZkLCBwYXRoLCBzYnAsIEFUX1NZTUxJTktfTk9GT0xMT1cpKSB7CiAJCQkJZXJybm8gPSAwOwogCQkJCXJldHVybiAoRlRTX1NMTk9ORSk7CiAJCQl9CiAJCQlwLT5mdHNfZXJybm8gPSBzYXZlZF9lcnJubzsKIAkJCWdvdG8gZXJyOwogCQl9Ci0JfSBlbHNlIGlmIChsc3RhdChwLT5mdHNfYWNjcGF0aCwgc2JwKSkgeworCX0gZWxzZSBpZiAoZnN0YXRhdChkZmQsIHBhdGgsIHNicCwgQVRfU1lNTElOS19OT0ZPTExPVykpIHsKIAkJcC0+ZnRzX2Vycm5vID0gZXJybm87CiBlcnI6CQltZW1zZXQoc2JwLCAwLCBzaXplb2Yoc3RydWN0IHN0YXQpKTsKIAkJcmV0dXJuIChGVFNfTlMpOwpAQCAtODczLDggKzg4Miw4IEBACiAJCXN0cnVjdCBfZnRzZW50ICoqYTsKIAogCQlzcC0+ZnRzX25pdGVtcyA9IG5pdGVtcyArIDQwOwotCQlpZiAoKGEgPSByZWFsbG9jKHNwLT5mdHNfYXJyYXksCi0JCSAgICBzcC0+ZnRzX25pdGVtcyAqIHNpemVvZihGVFNFTlQgKikpKSA9PSBOVUxMKSB7CisJCWlmICgoYSA9IHJlYWxsb2NhcnJheShzcC0+ZnRzX2FycmF5LAorCQkgICAgc3AtPmZ0c19uaXRlbXMsIHNpemVvZihGVFNFTlQgKikpKSA9PSBOVUxMKSB7CiAJCQlpZiAoc3AtPmZ0c19hcnJheSkKIAkJCQlmcmVlKHNwLT5mdHNfYXJyYXkpOwogCQkJc3AtPmZ0c19hcnJheSA9IE5VTEw7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9nZXRob3N0bmFtZS5jIGIvbGliYy9iaW9uaWMvZ2V0aG9zdG5hbWUuY3BwCnNpbWlsYXJpdHkgaW5kZXggNzglCnJlbmFtZSBmcm9tIGxpYmMvYmlvbmljL2dldGhvc3RuYW1lLmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL2dldGhvc3RuYW1lLmNwcAppbmRleCA1ZDNkN2Q5Li45NjJmZWExIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9nZXRob3N0bmFtZS5jCisrKyBiL2xpYmMvYmlvbmljL2dldGhvc3RuYW1lLmNwcApAQCAtMjUsMjcgKzI1LDI0IEBACiAgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCisKICNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLWludCBnZXRob3N0bmFtZShjaGFyKiAgYnVmZiwgc2l6ZV90ICBidWZsZW4pCi17Ci0gICAgc3RydWN0IHV0c25hbWUgIG5hbWU7Ci0gICAgaW50ICAgICAgICAgICAgIHJlc3VsdCA9IDA7CitpbnQgZ2V0aG9zdG5hbWUoY2hhciogYnVmLCBzaXplX3QgbikgeworICBzdHJ1Y3QgdXRzbmFtZSBuYW1lOworICBpZiAodW5hbWUoJm5hbWUpID09IC0xKSB7CisgICAgcmV0dXJuIC0xOworICB9CiAKLSAgICByZXN1bHQgPSB1bmFtZSgmbmFtZSk7Ci0gICAgaWYgKHJlc3VsdCAhPSAtMSkKLSAgICB7Ci0gICAgICAgIGludCAgbmFtZWxlbiA9IHN0cmxlbihuYW1lLm5vZGVuYW1lKTsKKyAgc2l6ZV90IG5hbWVfbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdHJsZW4obmFtZS5ub2RlbmFtZSkgKyAxKTsKKyAgaWYgKG5hbWVfbGVuZ3RoID4gbikgeworICAgIGVycm5vID0gRU5BTUVUT09MT05HOworICAgIHJldHVybiAtMTsKKyAgfQogCi0gICAgICAgIGlmICgoaW50KWJ1ZmxlbiA8IG5hbWVsZW4rMSkgewotICAgICAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgICAgICByZXN1bHQgPSAtMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1lbWNweSggYnVmZiwgbmFtZS5ub2RlbmFtZSwgbmFtZWxlbisxICk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgbWVtY3B5KGJ1ZiwgbmFtZS5ub2RlbmFtZSwgbmFtZV9sZW5ndGgpOworICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2hhc2guaCBiL2xpYmMvYmlvbmljL2hhc2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I0ODNmMS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9oYXNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk5IEt1bmdsaWdhIFRla25pc2thIEj2Z3Nrb2xhbgotICogKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuIAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIAotICogYXJlIG1ldDogCi0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgCi0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSAKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICoKLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgS1RIIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUKLSAqICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEtUSCBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgS1RIIE9SIElUUyBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKLSAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAotICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKLSAqIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKLSAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqLwotCi0vKiAkSGVpbWRhbDogaGFzaC5oLHYgMS4xIDE5OTkvMDMvMjIgMTk6MTY6MjUgam9kYSBFeHAgJAotICAgJE5ldEJTRDogaGFzaC5oLHYgMS4xLjEuMyAyMDAyLzA5LzEyIDEyOjQxOjQyIGpvZGEgRXhwICQgKi8KLQotLyogc3R1ZmYgaW4gY29tbW9uIGJldHdlZW4gbWQ0LCBtZDUsIGFuZCBzaGExICovCi0KLSNpZm5kZWYgX19oYXNoX2hfXwotI2RlZmluZSBfX2hhc2hfaF9fCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmbmRlZiBtaW4KLSNkZWZpbmUgbWluKGEsYikgKCgoYSk+KGIpKT8oYik6KGEpKQotI2VuZGlmCi0KLS8qIFZlY3RvciBDcmF5cyBkb2Vzbid0IGhhdmUgYSBnb29kIDMyLWJpdCB0eXBlLCBvciBtb3JlIHByZWNpc2VseSwKLSAgIGludDMyX3QgYXMgZGVmaW5lZCBieSA8YmluZC9iaXR5cGVzLmg+IGlzbid0IDMyIGJpdHMsIGFuZCB3ZSBkb24ndAotICAgd2FudCB0byBkZXBlbmQgaW4gYmVpbmcgYWJsZSB0byByZWRlZmluZSB0aGlzIHR5cGUuICBUbyBjb3BlIHdpdGgKLSAgIHRoaXMgd2UgaGF2ZSB0byBjbGFtcCB0aGUgcmVzdWx0IGluIHNvbWUgcGxhY2VzIHRvIFswLDJeMzIpOyBubwotICAgbmVlZCB0byBkbyB0aGlzIG9uIG90aGVyIG1hY2hpbmVzLiAgRGlkIEkgc2F5IHRoaXMgd2FzIGEgbWVzcz8KLSAgICovCi0KLSNpZmRlZiBfQ1JBWQotI2RlZmluZSBDUkFZRklYKFgpICgoWCkgJiAweGZmZmZmZmZmKQotI2Vsc2UKLSNkZWZpbmUgQ1JBWUZJWChYKSAoWCkKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHVfaW50MzJfdAotY3NoaWZ0ICh1X2ludDMyX3QgeCwgdW5zaWduZWQgaW50IG4pCi17Ci0gICAgeCA9IENSQVlGSVgoeCk7Ci0gICAgcmV0dXJuIENSQVlGSVgoKHggPDwgbikgfCAoeCA+PiAoMzIgLSBuKSkpOwotfQotCi0jZW5kaWYgLyogX19oYXNoX2hfXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGZzNjRfc3VwcG9ydC5jcHAgYi9saWJjL2Jpb25pYy9sZnM2NF9zdXBwb3J0LmNwcAppbmRleCBhYjc5NWY1Li40NWQ0ZjdmIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9sZnM2NF9zdXBwb3J0LmNwcAorKysgYi9saWJjL2Jpb25pYy9sZnM2NF9zdXBwb3J0LmNwcApAQCAtMTcsMTEgKzE3LDIwIEBACiAjaW5jbHVkZSA8ZnR3Lmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLWludCBta3N0ZW1wNjQoY2hhciogZmlsZW5hbWUpIHsKLSAgLy8gRGVsZWdhdGlvbiB3aWxsIHdvcmsgaW4gdGhpcyBjYXNlIGJlY2F1c2UgYWxsIHRoZSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcwotICAvLyBhcmUgYWxyZWFkeSA2NC1iaXQgcmVhZHkuIEluIHBhcnRpY3VsYXIsIHdlIGRvbid0IGhhdmUgbm9uLU9fTEFSR0VGSUxFCi0gIC8vIG9wZW4gKG91ciBvcGVuIGlzIGFjdHVhbGx5IG9wZW42NCkgYW5kIHN0YXQgYW5kIHN0YXQ2NCBhcmUgdGhlIHNhbWUuCi0gIHJldHVybiBta3N0ZW1wKGZpbGVuYW1lKTsKKy8vIERlbGVnYXRpb24gd2lsbCB3b3JrIGluIHRoZXNlIGNhc2VzIGJlY2F1c2UgYWxsIHRoZSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcworLy8gYXJlIGFscmVhZHkgNjQtYml0IHJlYWR5LiBJbiBwYXJ0aWN1bGFyLCB3ZSBkb24ndCBoYXZlIG5vbi1PX0xBUkdFRklMRQorLy8gb3BlbiAob3VyIG9wZW4gaXMgYWN0dWFsbHkgb3BlbjY0KSBhbmQgc3RhdCBhbmQgc3RhdDY0IGFyZSB0aGUgc2FtZS4KK2ludCBta3N0ZW1wNjQoY2hhciogcGF0aCkgeworICByZXR1cm4gbWtzdGVtcChwYXRoKTsKK30KK2ludCBta29zdGVtcDY0KGNoYXIqIHBhdGgsIGludCBmbGFncykgeworICByZXR1cm4gbWtvc3RlbXAocGF0aCwgZmxhZ3MpOworfQoraW50IG1rc3RlbXBzNjQoY2hhciogcGF0aCwgaW50IHN1ZmZpeF9sZW5ndGgpIHsKKyAgcmV0dXJuIG1rc3RlbXBzKHBhdGgsIHN1ZmZpeF9sZW5ndGgpOworfQoraW50IG1rb3N0ZW1wczY0KGNoYXIqIHBhdGgsIGludCBzdWZmaXhfbGVuZ3RoLCBpbnQgZmxhZ3MpIHsKKyAgcmV0dXJuIG1rb3N0ZW1wcyhwYXRoLCBzdWZmaXhfbGVuZ3RoLCBmbGFncyk7CiB9CiAKIHR5cGVkZWYgaW50ICgqZnR3X2ZuKShjb25zdCBjaGFyKiwgY29uc3Qgc3RydWN0IHN0YXQqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGliY19pbml0X2NvbW1vbi5jcHAgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmNwcAppbmRleCA5NTAwNzNhLi4yYTZhMDNiIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmNwcAorKysgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmNwcApAQCAtNDksNyArNDksNyBAQAogZXh0ZXJuICJDIiBpbnQgX19zZXRfdGxzKHZvaWQqIHB0cik7CiBleHRlcm4gIkMiIGludCBfX3NldF90aWRfYWRkcmVzcyhpbnQqIHRpZF9hZGRyZXNzKTsKIAotdm9pZCBfX2xpYmNfaW5pdF92ZHNvKCk7CitfX0xJQkNfSElEREVOX18gdm9pZCBfX2xpYmNfaW5pdF92ZHNvKCk7CiAKIC8vIE5vdCBwdWJsaWMsIGJ1dCB3ZWxsLWtub3duIGluIHRoZSBCU0RzLgogY29uc3QgY2hhciogX19wcm9nbmFtZTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xpYmNfbG9nZ2luZy5jcHAgYi9saWJjL2Jpb25pYy9saWJjX2xvZ2dpbmcuY3BwCmluZGV4IDU2NTU1MjYuLjQ5YTM3NjIgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2xpYmNfbG9nZ2luZy5jcHAKKysrIGIvbGliYy9iaW9uaWMvbGliY19sb2dnaW5nLmNwcApAQCAtNzUsMTAgKzc1LDEyIEBACiAgICAgICBsZW4gPSBzdHJsZW4oZGF0YSk7CiAgICAgfQogCisgICAgdG90YWwgKz0gbGVuOworCiAgICAgd2hpbGUgKGxlbiA+IDApIHsKICAgICAgIGludCBhdmFpbCA9IGVuZF8gLSBwb3NfOwogICAgICAgaWYgKGF2YWlsID09IDApIHsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgICAgIGlmIChhdmFpbCA+IGxlbikgewogICAgICAgICBhdmFpbCA9IGxlbjsKQEAgLTg3LDExICs4OSwxMCBAQAogICAgICAgcG9zXyArPSBhdmFpbDsKICAgICAgIHBvc19bMF0gPSAnXDAnOwogICAgICAgbGVuIC09IGF2YWlsOwotICAgICAgdG90YWwgKz0gYXZhaWw7CiAgICAgfQogICB9CiAKLSAgaW50IHRvdGFsOworICBzaXplX3QgdG90YWw7CiAKICBwcml2YXRlOgogICBjaGFyKiBidWZmZXJfOwpAQCAtMTA5LDE4ICsxMTAsMTkgQEAKICAgICAgIGxlbiA9IHN0cmxlbihkYXRhKTsKICAgICB9CiAKKyAgICB0b3RhbCArPSBsZW47CisKICAgICB3aGlsZSAobGVuID4gMCkgewogICAgICAgaW50IHJjID0gVEVNUF9GQUlMVVJFX1JFVFJZKHdyaXRlKGZkXywgZGF0YSwgbGVuKSk7CiAgICAgICBpZiAocmMgPT0gLTEpIHsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgICAgIGRhdGEgKz0gcmM7CiAgICAgICBsZW4gLT0gcmM7Ci0gICAgICB0b3RhbCArPSByYzsKICAgICB9CiAgIH0KIAotICBpbnQgdG90YWw7CisgIHNpemVfdCB0b3RhbDsKIAogIHByaXZhdGU6CiAgIGludCBmZF87CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9sb2NhbGUuY3BwIGIvbGliYy9iaW9uaWMvbG9jYWxlLmNwcAppbmRleCBkZGI0OWNlLi45MGFhN2I4IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9sb2NhbGUuY3BwCisrKyBiL2xpYmMvYmlvbmljL2xvY2FsZS5jcHAKQEAgLTI2LDkgKzI2LDE0IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxsb2NhbGUuaD4KICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgogCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmgiCiAKQEAgLTEyMyw4ICsxMjgsOCBAQAogfQogCiBsb2NhbGVfdCBuZXdsb2NhbGUoaW50IGNhdGVnb3J5X21hc2ssIGNvbnN0IGNoYXIqIGxvY2FsZV9uYW1lLCBsb2NhbGVfdCAvKmJhc2UqLykgewotICAvLyBJcyAnY2F0ZWdvcnlfbWFzaycgdmFsaWQ/Ci0gIGlmICgoY2F0ZWdvcnlfbWFzayAmIH5MQ19BTExfTUFTSykgIT0gMCkgeworICAvLyBBcmUgJ2NhdGVnb3J5X21hc2snIGFuZCAnbG9jYWxlX25hbWUnIHZhbGlkPworICBpZiAoKGNhdGVnb3J5X21hc2sgJiB+TENfQUxMX01BU0spICE9IDAgfHwgbG9jYWxlX25hbWUgPT0gTlVMTCkgewogICAgIGVycm5vID0gRUlOVkFMOwogICAgIHJldHVybiBOVUxMOwogICB9CkBAIC0xNzEsMyArMTc2LDQ3IEBACiAKICAgcmV0dXJuIG9sZF9sb2NhbGU7CiB9CisKK2ludCBzdHJjYXNlY21wX2woY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBsb2NhbGVfdCkgeworICByZXR1cm4gc3RyY2FzZWNtcChzMSwgczIpOworfQorCitpbnQgc3RyY29sbF9sKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHN0cmNvbGwoczEsIHMyKTsKK30KKworY2hhciogc3RyZXJyb3JfbChpbnQgZXJyb3IsIGxvY2FsZV90KSB7CisgIHJldHVybiBzdHJlcnJvcihlcnJvcik7Cit9CisKK3NpemVfdCBzdHJmdGltZV9sKGNoYXIqIHMsIHNpemVfdCBtYXgsIGNvbnN0IGNoYXIqIGZvcm1hdCwgY29uc3Qgc3RydWN0IHRtKiB0bSwgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHN0cmZ0aW1lKHMsIG1heCwgZm9ybWF0LCB0bSk7Cit9CisKK2ludCBzdHJuY2FzZWNtcF9sKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IG4sIGxvY2FsZV90KSB7CisgIHJldHVybiBzdHJuY2FzZWNtcChzMSwgczIsIG4pOworfQorCitsb25nIGRvdWJsZSBzdHJ0b2xkX2woY29uc3QgY2hhciogcywgY2hhcioqIGVuZF9wdHIsIGxvY2FsZV90KSB7CisgIHJldHVybiBzdHJ0b2xkKHMsIGVuZF9wdHIpOworfQorCitsb25nIGxvbmcgc3RydG9sbF9sKGNvbnN0IGNoYXIqIHMsIGNoYXIqKiBlbmRfcHRyLCBpbnQgYmFzZSwgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHN0cnRvbGwocywgZW5kX3B0ciwgYmFzZSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBzdHJ0b3VsbF9sKGNvbnN0IGNoYXIqIHMsIGNoYXIqKiBlbmRfcHRyLCBpbnQgYmFzZSwgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHN0cnRvdWxsKHMsIGVuZF9wdHIsIGJhc2UpOworfQorCitzaXplX3Qgc3RyeGZybV9sKGNoYXIqIGRzdCwgY29uc3QgY2hhciogc3JjLCBzaXplX3QgbiwgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHN0cnhmcm0oZHN0LCBzcmMsIG4pOworfQorCitpbnQgd2NzY2FzZWNtcF9sKGNvbnN0IHdjaGFyX3QqIHdzMSwgY29uc3Qgd2NoYXJfdCogd3MyLCBsb2NhbGVfdCkgeworICByZXR1cm4gd2NzY2FzZWNtcCh3czEsIHdzMik7Cit9CisKK2ludCB3Y3NuY2FzZWNtcF9sKGNvbnN0IHdjaGFyX3QqIHdzMSwgY29uc3Qgd2NoYXJfdCogd3MyLCBzaXplX3QgbiwgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHdjc25jYXNlY21wKHdzMSwgd3MyLCBuKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19jb21tb24uY3BwIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jcHAKaW5kZXggMGI2YTE0Mi4uMzhjNjU4MyAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jcHAKKysrIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jcHAKQEAgLTI5LDE0ICsyOSwxMyBAQAogLy8gQ29udGFpbnMgZGVmaW5pdGlvbiBvZiBzdHJ1Y3R1cmVzLCBnbG9iYWwgdmFyaWFibGVzLCBhbmQgaW1wbGVtZW50YXRpb24gb2YKIC8vIHJvdXRpbmVzIHRoYXQgYXJlIHVzZWQgYnkgbWFsbG9jIGxlYWsgZGV0ZWN0aW9uIGNvZGUgYW5kIG90aGVyIGNvbXBvbmVudHMgaW4KIC8vIHRoZSBzeXN0ZW0uIFRoZSB0cmljayBpcyB0aGF0IHNvbWUgY29tcG9uZW50cyBleHBlY3QgdGhlc2UgZGF0YSBhbmQKLS8vIHJvdXRpbmVzIHRvIGJlIGRlZmluZWQgLyBpbXBsZW1lbnRlZCBpbiBsaWJjLnNvIGxpYnJhcnksIHJlZ2FyZGxlc3MKLS8vIHdoZXRoZXIgb3Igbm90IE1BTExPQ19MRUFLX0NIRUNLIG1hY3JvIGlzIGRlZmluZWQuIFRvIG1ha2UgdGhpbmdzIGV2ZW4KLS8vIG1vcmUgdHJpY2t5LCBtYWxsb2MgbGVhayBkZXRlY3Rpb24gY29kZSwgaW1wbGVtZW50ZWQgaW4KLS8vIGxpYmNfbWFsbG9jX2RlYnVnLnNvIGFsc28gcmVxdWlyZXMgYWNjZXNzIHRvIHRoZXNlIHZhcmlhYmxlcyBhbmQgcm91dGluZXMKLS8vICh0byBmaWxsIGFsbG9jYXRpb24gZW50cnkgaGFzaCB0YWJsZSwgZm9yIGV4YW1wbGUpLiBTbywgYWxsIHJlbGV2YW50Ci0vLyB2YXJpYWJsZXMgYW5kIHJvdXRpbmVzIGFyZSBkZWZpbmVkIC8gaW1wbGVtZW50ZWQgaGVyZSBhbmQgZXhwb3J0ZWQKLS8vIHRvIGFsbCwgbGVhayBkZXRlY3Rpb24gY29kZSBhbmQgb3RoZXIgY29tcG9uZW50cyB2aWEgZHluYW1pYyAobGliYy5zbyksCi0vLyBvciBzdGF0aWMgKGxpYmMuYSkgbGlua2luZy4KKy8vIHJvdXRpbmVzIHRvIGJlIGRlZmluZWQgLyBpbXBsZW1lbnRlZCBpbiBsaWJjLnNvLCByZWdhcmRsZXNzIHdoZXRoZXIgb3Igbm90CisvLyBtYWxsb2MgbGVhayBkZXRlY3Rpb24gY29kZSBpcyBnb2luZyB0byBydW4uIFRvIG1ha2UgdGhpbmdzIGV2ZW4gbW9yZSB0cmlja3ksCisvLyBtYWxsb2MgbGVhayBkZXRlY3Rpb24gY29kZSwgaW1wbGVtZW50ZWQgaW4gbGliY19tYWxsb2NfZGVidWcuc28gYWxzbworLy8gcmVxdWlyZXMgYWNjZXNzIHRvIHRoZXNlIHZhcmlhYmxlcyBhbmQgcm91dGluZXMgKHRvIGZpbGwgYWxsb2NhdGlvbiBlbnRyeQorLy8gaGFzaCB0YWJsZSwgZm9yIGV4YW1wbGUpLiBTbywgYWxsIHJlbGV2YW50IHZhcmlhYmxlcyBhbmQgcm91dGluZXMgYXJlCisvLyBkZWZpbmVkIC8gaW1wbGVtZW50ZWQgaGVyZSBhbmQgZXhwb3J0ZWQgdG8gYWxsLCBsZWFrIGRldGVjdGlvbiBjb2RlIGFuZAorLy8gb3RoZXIgY29tcG9uZW50cyB2aWEgZHluYW1pYyAobGliYy5zbyksIG9yIHN0YXRpYyAobGliYy5hKSBsaW5raW5nLgogCiAjaW5jbHVkZSAibWFsbG9jX2RlYnVnX2NvbW1vbi5oIgogCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfbGVhay5jcHAgYi9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfbGVhay5jcHAKaW5kZXggZGYwZjk5Ny4uNjRmMjExMiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2xlYWsuY3BwCisrKyBiL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19sZWFrLmNwcApAQCAtNTUsMTMgKzU1LDYgQEAKICNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgogI2luY2x1ZGUgInByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgiCiAKLS8vIFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgaW50byB0aGUgYnVpbGQgb25seSB3aGVuCi0vLyBNQUxMT0NfTEVBS19DSEVDSywgb3IgTUFMTE9DX1FFTVVfSU5TVFJVTUVOVCwgb3IgYm90aAotLy8gbWFjcm9zIGFyZSBkZWZpbmVkLgotI2lmbmRlZiBNQUxMT0NfTEVBS19DSEVDSwotI2Vycm9yIE1BTExPQ19MRUFLX0NIRUNLIGlzIG5vdCBkZWZpbmVkLgotI2VuZGlmICAvLyAhTUFMTE9DX0xFQUtfQ0hFQ0sKLQogZXh0ZXJuIGludCBnTWFsbG9jTGVha1p5Z290ZUNoaWxkOwogZXh0ZXJuIEhhc2hUYWJsZSogZ19oYXNoX3RhYmxlOwogZXh0ZXJuIGNvbnN0IE1hbGxvY0RlYnVnKiBnX21hbGxvY19kaXNwYXRjaDsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19xZW11LmNwcCBiL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19xZW11LmNwcAppbmRleCBiM2I2MDRkLi4yZjQ5NDliIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfcWVtdS5jcHAKKysrIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX3FlbXUuY3BwCkBAIC02MDYsNyArNjA2LDcgQEAKICAgICAgKiB0aGUgbWVtb3J5IG1hcHBlZCBzcGFjZXMgaW50byB3cml0ZXMgdG8gYW4gSS9PIHBvcnQgdGhhdCBlbXVsYXRvcgogICAgICAqICJsaXN0ZW5zIHRvIiBvbiB0aGUgb3RoZXIgZW5kLiBOb3RlIHRoYXQgdW50aWwgd2Ugb3BlbiBhbmQgbWFwIHRoYXQKICAgICAgKiBkZXZpY2UsIGxvZ2dpbmcgdG8gZW11bGF0b3IncyBzdGRvdXQgd2lsbCBub3QgYmUgYXZhaWxhYmxlLiAqLwotICAgIGludCBmZCA9IG9wZW4oIi9kZXYvcWVtdV90cmFjZSIsIE9fUkRXUik7CisgICAgaW50IGZkID0gb3BlbigiL2Rldi9xZW11X3RyYWNlIiwgT19DTE9FWEVDIHwgT19SRFdSKTsKICAgICBpZiAoZmQgPCAwKSB7CiAgICAgICAgIGVycm9yX2xvZygiVW5hYmxlIHRvIG9wZW4gL2Rldi9xZW11X3RyYWNlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21hbGxvY19pbmZvLmNwcCBiL2xpYmMvYmlvbmljL21hbGxvY19pbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWNhZWRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbWFsbG9jX2luZm8uY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAibWFsbG9jX2luZm8uaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmgiCisKK2NsYXNzIF9fTElCQ19ISURERU5fXyBFbGVtIHsKK3B1YmxpYzoKKyAgLy8gbmFtZSBtdXN0IGJlIHZhbGlkIHRocm91Z2hvdXQgbGlmZXRpbWUgb2YgdGhlIG9iamVjdC4KKyAgZXhwbGljaXQgRWxlbShGSUxFKiBmcCwgY29uc3QgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhdHRyX2ZtdCA9IG51bGxwdHIsIC4uLikgeworICAgIHRoaXMtPmZwID0gZnA7CisgICAgdGhpcy0+bmFtZSA9IG5hbWU7CisKKyAgICBmcHJpbnRmKGZwLCAiPCVzIiwgbmFtZSk7CisgICAgaWYgKGF0dHJfZm10ICE9IG51bGxwdHIpIHsKKyAgICAgIHZhX2xpc3QgYXJnczsKKyAgICAgIHZhX3N0YXJ0KGFyZ3MsIGF0dHJfZm10KTsKKyAgICAgIGZwdXRjKCcgJywgZnApOworICAgICAgdmZwcmludGYoZnAsIGF0dHJfZm10LCBhcmdzKTsKKyAgICAgIHZhX2VuZChhcmdzKTsKKyAgICB9CisgICAgZnB1dGMoJz4nLCBmcCk7CisgIH0KKworICB+RWxlbSgpIG5vZXhjZXB0IHsKKyAgICBmcHJpbnRmKGZwLCAiPC8lcz4iLCBuYW1lKTsKKyAgfQorCisgIHZvaWQgY29udGVudHMoY29uc3QgY2hhciogZm10LCAuLi4pIHsKKyAgICAgIHZhX2xpc3QgYXJnczsKKyAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisgICAgICB2ZnByaW50ZihmcCwgZm10LCBhcmdzKTsKKyAgICAgIHZhX2VuZChhcmdzKTsKKyAgfQorCitwcml2YXRlOgorICBGSUxFKiBmcDsKKyAgY29uc3QgY2hhciogbmFtZTsKKworICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRWxlbSk7Cit9OworCitpbnQgbWFsbG9jX2luZm8oaW50IG9wdGlvbnMsIEZJTEUqIGZwKSB7CisgIGlmIChvcHRpb25zICE9IDApIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBFbGVtIHJvb3QoZnAsICJtYWxsb2MiLCAidmVyc2lvbj1cImplbWFsbG9jLTFcIiIpOworCisgIC8vIER1bXAgYWxsIG9mIHRoZSBsYXJnZSBhbGxvY2F0aW9ucyBpbiB0aGUgYXJlbmFzLgorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IF9fbWFsbGluZm9fbmFyZW5hcygpOyBpKyspIHsKKyAgICBzdHJ1Y3QgbWFsbGluZm8gbWkgPSBfX21hbGxpbmZvX2FyZW5hX2luZm8oaSk7CisgICAgaWYgKG1pLmhibGtoZCAhPSAwKSB7CisgICAgICBFbGVtIGFyZW5hX2VsZW0oZnAsICJoZWFwIiwgIm5yPVwiJWRcIiIsIGkpOworICAgICAgeworICAgICAgICBFbGVtKGZwLCAiYWxsb2NhdGVkLWxhcmdlIikuY29udGVudHMoIiV6dSIsIG1pLm9yZGJsa3MpOworICAgICAgICBFbGVtKGZwLCAiYWxsb2NhdGVkLWh1Z2UiKS5jb250ZW50cygiJXp1IiwgbWkudW9yZGJsa3MpOworICAgICAgICBFbGVtKGZwLCAiYWxsb2NhdGVkLWJpbnMiKS5jb250ZW50cygiJXp1IiwgbWkuZnNtYmxrcyk7CisKKyAgICAgICAgc2l6ZV90IHRvdGFsID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBfX21hbGxpbmZvX25iaW5zKCk7IGorKykgeworICAgICAgICAgIHN0cnVjdCBtYWxsaW5mbyBtaSA9IF9fbWFsbGluZm9fYmluX2luZm8oaSwgaik7CisgICAgICAgICAgaWYgKG1pLm9yZGJsa3MgIT0gMCkgeworICAgICAgICAgICAgRWxlbSBiaW5fZWxlbShmcCwgImJpbiIsICJucj1cIiVkXCIiLCBqKTsKKyAgICAgICAgICAgIEVsZW0oZnAsICJhbGxvY2F0ZWQiKS5jb250ZW50cygiJXp1IiwgbWkub3JkYmxrcyk7CisgICAgICAgICAgICBFbGVtKGZwLCAibm1hbGxvYyIpLmNvbnRlbnRzKCIlenUiLCBtaS51b3JkYmxrcyk7CisgICAgICAgICAgICBFbGVtKGZwLCAibmRhbGxvYyIpLmNvbnRlbnRzKCIlenUiLCBtaS5mb3JkYmxrcyk7CisgICAgICAgICAgICB0b3RhbCArPSBtaS5vcmRibGtzOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBFbGVtKGZwLCAiYmlucy10b3RhbCIpLmNvbnRlbnRzKCIlenUiLCB0b3RhbCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAgYi9saWJjL2Jpb25pYy9tYWxsb2NfaW5mby5oCnNpbWlsYXJpdHkgaW5kZXggNjAlCmNvcHkgZnJvbSB0ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAKY29weSB0byBsaWJjL2Jpb25pYy9tYWxsb2NfaW5mby5oCmluZGV4IGE0ZDc1MDQuLjVmZmZhZTkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcAorKysgYi9saWJjL2Jpb25pYy9tYWxsb2NfaW5mby5oCkBAIC0xNCwxMiArMTQsMTkgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLWV4dGVybiAiQyIgaW50IGRsb3Blbl90ZXN0X2dldF9hbnN3ZXIoKSB7Ci0gIHJldHVybiBfX0FOU1dFUjsKLX0KKyNpZm5kZWYgTElCQ19CSU9OSUNfTUFMTE9DX0lORk9fSF8KKyNkZWZpbmUgTElCQ19CSU9OSUNfTUFMTE9DX0lORk9fSF8KIAotI2lmZGVmIF9fQU5TV0VSMgotZXh0ZXJuICJDIiBpbnQgZGxvcGVuX3Rlc3RfZ2V0X2Fuc3dlcjIoKSB7Ci0gIHJldHVybiBfX0FOU1dFUjI7Ci19Ci0jZW5kaWYKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCitfX0xJQkNfSElEREVOX18gc2l6ZV90IF9fbWFsbGluZm9fbmFyZW5hcygpOworX19MSUJDX0hJRERFTl9fIHNpemVfdCBfX21hbGxpbmZvX25iaW5zKCk7CitfX0xJQkNfSElEREVOX18gc3RydWN0IG1hbGxpbmZvIF9fbWFsbGluZm9fYXJlbmFfaW5mbyhzaXplX3QpOworX19MSUJDX0hJRERFTl9fIHN0cnVjdCBtYWxsaW5mbyBfX21hbGxpbmZvX2Jpbl9pbmZvKHNpemVfdCwgc2l6ZV90KTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8vIExJQkNfQklPTklDX01BTExPQ19JTkZPX0hfCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9ta2ZpZm8uY3BwIGIvbGliYy9iaW9uaWMvbWtmaWZvLmNwcAppbmRleCAwOGZmYWQxLi5hOThiMzUwIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9ta2ZpZm8uY3BwCisrKyBiL2xpYmMvYmlvbmljL21rZmlmby5jcHAKQEAgLTI4LDYgKzI4LDEyIEBACiAKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogCisjaW5jbHVkZSA8ZmNudGwuaD4KKwogaW50IG1rZmlmbyhjb25zdCBjaGFyKiBwYXRoLCBtb2RlX3QgbW9kZSkgewotICByZXR1cm4gbWtub2QocGF0aCwgKG1vZGUgJiB+U19JRk1UKSB8IFNfSUZJRk8sIDApOworICByZXR1cm4gbWtmaWZvYXQoQVRfRkRDV0QsIHBhdGgsIG1vZGUpOworfQorCitpbnQgbWtmaWZvYXQoaW50IGZkLCBjb25zdCBjaGFyKiBwYXRoLCBtb2RlX3QgbW9kZSkgeworICByZXR1cm4gbWtub2RhdChmZCwgcGF0aCwgKG1vZGUgJiB+U19JRk1UKSB8IFNfSUZJRk8sIDApOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbW50ZW50LmNwcCBiL2xpYmMvYmlvbmljL21udGVudC5jcHAKaW5kZXggOTNiNjkxNS4uNGFmYWNkYSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbW50ZW50LmNwcAorKysgYi9saWJjL2Jpb25pYy9tbnRlbnQuY3BwCkBAIC0yNywxMiArMjcsNDQgQEAKICAqLwogCiAjaW5jbHVkZSA8bW50ZW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLW1udGVudCogZ2V0bW50ZW50KEZJTEUqKSB7Ci0gIHJldHVybiBOVUxMOworI2luY2x1ZGUgInByaXZhdGUvVGhyZWFkTG9jYWxCdWZmZXIuaCIKKworR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUihnZXRtbnRlbnRfbW50ZW50KTsKK0dMT0JBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIoZ2V0bW50ZW50X3N0cmluZ3MpOworCittbnRlbnQqIGdldG1udGVudChGSUxFKiBmcCkgeworICBMT0NBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIobW50ZW50KiwgZ2V0bW50ZW50X21udGVudCwgc2l6ZW9mKG1udGVudCkpOworICBMT0NBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIoY2hhciosIGdldG1udGVudF9zdHJpbmdzLCBCVUZTSVopOworICByZXR1cm4gZ2V0bW50ZW50X3IoZnAsIGdldG1udGVudF9tbnRlbnRfdGxzX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgIGdldG1udGVudF9zdHJpbmdzX3Rsc19idWZmZXIsIGdldG1udGVudF9zdHJpbmdzX3Rsc19idWZmZXJfc2l6ZSk7CiB9CiAKLW1udGVudCogZ2V0bW50ZW50X3IoRklMRSosIHN0cnVjdCBtbnRlbnQqLCBjaGFyKiwgaW50KSB7CittbnRlbnQqIGdldG1udGVudF9yKEZJTEUqIGZwLCBzdHJ1Y3QgbW50ZW50KiBlLCBjaGFyKiBidWYsIGludCBidWZfbGVuKSB7CisgIG1lbXNldChlLCAwLCBzaXplb2YoKmUpKTsKKyAgd2hpbGUgKGZnZXRzKGJ1ZiwgYnVmX2xlbiwgZnApICE9IE5VTEwpIHsKKyAgICAvLyBFbnRyaWVzIGxvb2sgbGlrZSAicHJvYyAvcHJvYyBwcm9jIHJ3LG5vc3VpZCxub2Rldixub2V4ZWMscmVsYXRpbWUgMCAwIi4KKyAgICAvLyBUaGF0IGlzOiBtbnRfZnNuYW1lIG1udF9kaXIgbW50X3R5cGUgbW50X29wdHMgMCAwLgorICAgIGludCBmc25hbWUwLCBmc25hbWUxLCBkaXIwLCBkaXIxLCB0eXBlMCwgdHlwZTEsIG9wdHMwLCBvcHRzMTsKKyAgICBpZiAoc3NjYW5mKGJ1ZiwgIiAlbiUqcyVuICVuJSpzJW4gJW4lKnMlbiAlbiUqcyVuICVkICVkIiwKKyAgICAgICAgICAgICAgICZmc25hbWUwLCAmZnNuYW1lMSwgJmRpcjAsICZkaXIxLCAmdHlwZTAsICZ0eXBlMSwgJm9wdHMwLCAmb3B0czEsCisgICAgICAgICAgICAgICAmZS0+bW50X2ZyZXEsICZlLT5tbnRfcGFzc25vKSA9PSAyKSB7CisgICAgICBlLT5tbnRfZnNuYW1lID0gJmJ1Zltmc25hbWUwXTsKKyAgICAgIGJ1Zltmc25hbWUxXSA9ICdcMCc7CisKKyAgICAgIGUtPm1udF9kaXIgPSAmYnVmW2RpcjBdOworICAgICAgYnVmW2RpcjFdID0gJ1wwJzsKKworICAgICAgZS0+bW50X3R5cGUgPSAmYnVmW3R5cGUwXTsKKyAgICAgIGJ1Zlt0eXBlMV0gPSAnXDAnOworCisgICAgICBlLT5tbnRfb3B0cyA9ICZidWZbb3B0czBdOworICAgICAgYnVmW29wdHMxXSA9ICdcMCc7CisKKyAgICAgIHJldHVybiBlOworICAgIH0KKyAgfQogICByZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbmRrX2NydWZ0LmNwcCBiL2xpYmMvYmlvbmljL25ka19jcnVmdC5jcHAKaW5kZXggNzYwMDgxNy4uMThhNGExNCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbmRrX2NydWZ0LmNwcAorKysgYi9saWJjL2Jpb25pYy9uZGtfY3J1ZnQuY3BwCkBAIC0zMjAsNiArMzIwLDExIEBACiAgIHJldHVybiBtYWxsb2NfdXNhYmxlX3NpemUocHRyKTsKIH0KIAorLy8gSW4gTCB3ZSBhZGRlZCBhIHB1YmxpYyBwdGhyZWFkX2dldHRpZF9ucCwgYnV0IHNvbWUgYXBwcyB3ZXJlIHVzaW5nIHRoZSBwcml2YXRlIEFQSS4KK2V4dGVybiAiQyIgcGlkX3QgX19wdGhyZWFkX2dldHRpZChwdGhyZWFkX3QgdCkgeworICByZXR1cm4gcHRocmVhZF9nZXR0aWRfbnAodCk7Cit9CisKIC8vIE9sZGVyIHZlcnNpb25zIG9mIGFwcHBvcnRhYmxlIHVzZWQgZGxtYWxsb2MgZGlyZWN0bHkgaW5zdGVhZCBvZiBtYWxsb2MsCiAvLyBzbyBleHBvcnQgdGhpcyBjb21wYXRpYmlsaXR5IHNoaW0gdGhhdCBzaW1wbHkgY2FsbHMgbWFsbG9jLgogZXh0ZXJuICJDIiB2b2lkKiBkbG1hbGxvYyhzaXplX3Qgc2l6ZSkgewpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbmV3LmNwcCBiL2xpYmMvYmlvbmljL25ldy5jcHAKaW5kZXggZmNmZDFiZC4uY2Q4NGMyZSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbmV3LmNwcAorKysgYi9saWJjL2Jpb25pYy9uZXcuY3BwCkBAIC0zOCwxMSArMzgsMTEgQEAKICAgICByZXR1cm4gcDsKIH0KIAotdm9pZCAgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0cikgewordm9pZCAgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0cikgdGhyb3coKSB7CiAgICAgZnJlZShwdHIpOwogfQogCi12b2lkICBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiBwdHIpIHsKK3ZvaWQgIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHB0cikgdGhyb3coKSB7CiAgICAgZnJlZShwdHIpOwogfQogCkBAIC01NCwxMCArNTQsMTAgQEAKICAgICByZXR1cm4gbWFsbG9jKHNpemUpOwogfQogCi12b2lkICBvcGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHsKK3ZvaWQgIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwdHIsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKSB7CiAgICAgZnJlZShwdHIpOwogfQogCi12b2lkICBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiBwdHIsIGNvbnN0IHN0ZDo6bm90aHJvd190Jikgewordm9pZCAgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogcHRyLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCkgewogICAgIGZyZWUocHRyKTsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3BhdGhjb25mLmMgYi9saWJjL2Jpb25pYy9wYXRoY29uZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjgxMjcyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3BhdGhjb25mLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8cGF0aGNvbmYuaD4KLSNpbmNsdWRlIDxzeXMvdmZzLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbWl0cy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLS8qIHRoZXNlIG1heSBub3QgYmUgZGVmaW5lZCB5ZXQgYnkgb3VyIGhlYWRlcnMgKi8KLSNpZm5kZWYgX1BPU0lYX1ZESVNBQkxFCi0jZGVmaW5lIF9QT1NJWF9WRElTQUJMRSAgLTEKLSNlbmRpZgotCi0jaWZuZGVmIF9QT1NJWF9TWU5DX0lPCi0jZGVmaW5lIF9QT1NJWF9TWU5DX0lPICAtMQotI2VuZGlmCi0KLSNpZm5kZWYgX1BPU0lYX1BSSU9fSU8KLSNkZWZpbmUgX1BPU0lYX1BSSU9fSU8gIC0xCi0jZW5kaWYKLQotI2lmbmRlZiBfUE9TSVhfQVNZTkNfSU8KLSNkZWZpbmUgX1BPU0lYX0FTWU5DX0lPICAtMQotI2VuZGlmCi0KLQotc3RhdGljIGxvbmcKLV9fZmlsZXNpemViaXRzKCBzdHJ1Y3Qgc3RhdGZzKiAgcyApCi17Ci0jZGVmaW5lICAgRU9MX01BR0lDICAgMHgwMDAwVQotCi0gICAgLyogbGlzdCBvZiBrbm93biA2NC1iaXQgYXdhcmUgZmlsZXN5c3RlbXMgKi8KLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgIGtub3duNjRbXSA9IHsKLSAgICAgICAgRVhUMl9TVVBFUl9NQUdJQywKLSAgICAgICAgVUZTX01BR0lDLAotICAgICAgICBSRUlTRVJGU19TVVBFUl9NQUdJQywKLSAgICAgICAgWEZTX1NVUEVSX01BR0lDLAotICAgICAgICBTTUJfU1VQRVJfTUFHSUMsCi0gICAgICAgIFVERl9TVVBFUl9NQUdJQywKLSAgICAgICAgSkZTX1NVUEVSX01BR0lDLAotICAgICAgICBOVEZTX1NCX01BR0lDLAotICAgICAgICBWWEZTX1NVUEVSX01BR0lDLAotICAgICAgICBFT0xfTUFHSUMKLSAgICB9OwotICAgIGludCAgbm4gPSAwOwotCi0gICAgZm9yICg7IGtub3duNjRbbm5dICE9IEVPTF9NQUdJQzsgKytubikgewotICAgICAgICBpZiAoa25vd242NFtubl0gPT0gcy0+Zl90eXBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gNjQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDMyOwotfQotCi0KLXN0YXRpYyBsb25nCi1fX2xpbmtfbWF4KCBzdHJ1Y3Qgc3RhdGZzKiAgcyApCi17Ci0gICAgLy8gVGhlc2UgY29uc3RhbnQgdmFsdWVzIHdlcmUgdGFrZW4gZnJvbSBrZXJuZWwgaGVhZGVycy4KLSAgICAvLyBUaGV5J3JlIG5vdCBhdmFpbGFibGUgaW4gdWFwaSBoZWFkZXJzLgotICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeyB1aW50MzJfdCAgdHlwZTsgaW50ICBtYXg7IH0gIGtub3duTWF4W10gPQotICAgIHsKLSAgICAgICAgeyBFWFQyX1NVUEVSX01BR0lDLCAzMjAwMCB9LAotICAgICAgICB7IEVYVDNfU1VQRVJfTUFHSUMsIDMyMDAwIH0sCi0gICAgICAgIHsgTUlOSVhfU1VQRVJfTUFHSUMsIDI1MCB9LAotICAgICAgICB7IE1JTklYMl9TVVBFUl9NQUdJQywgNjU1MzAgfSwKLSAgICAgICAgeyBSRUlTRVJGU19TVVBFUl9NQUdJQywgMHhmZmZmIC0gMTAwMCB9LAotICAgICAgICB7IFVGU19NQUdJQywgMzIwMDAgfSwKLSAgICAgICAgeyBFT0xfTUFHSUMsIDAgfQotICAgIH07Ci0gICAgaW50ICAgbm4gPSAwOwotCi0gICAgZm9yICg7IGtub3duTWF4W25uXS50eXBlICE9IEVPTF9NQUdJQzsgKytubikgewotICAgICAgICBpZiAoa25vd25NYXhbbm5dLnR5cGUgPT0gcy0+Zl90eXBlKSB7Ci0gICAgICAgICAgICByZXR1cm4ga25vd25NYXhbbm5dLm1heDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gTElOS19NQVg7Ci19Ci0KLXN0YXRpYyBsb25nCi1fXzJfc3ltbGlua3MoIHN0cnVjdCBzdGF0ZnMqICBzICkKLXsKLSAgICAvKiBsaXN0IG9mIGtub3cgZmlsZXN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHN5bWxpbmtzICovCi0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90ICBrbm93bk5vU3ltbGlua3NbXSA9IHsKLSAgICAgICAgQURGU19TVVBFUl9NQUdJQywgQkZTX01BR0lDLCBDUkFNRlNfTUFHSUMsCi0gICAgICAgIEVGU19TVVBFUl9NQUdJQywgTVNET1NfU1VQRVJfTUFHSUMsIE5URlNfU0JfTUFHSUMsCi0gICAgICAgIFFOWDRfU1VQRVJfTUFHSUMsCi0gICAgICAgIEVPTF9NQUdJQwotICAgIH07Ci0gICAgaW50ICBubiA9IDA7Ci0KLSAgICBmb3IgKDsga25vd25Ob1N5bWxpbmtzW25uXSAhPSBFT0xfTUFHSUM7ICsrbm4pIHsKLSAgICAgICAgaWYgKGtub3duTm9TeW1saW5rc1tubl0gPT0gcy0+Zl90eXBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIGxvbmcKLV9fbmFtZV9tYXgoIHN0cnVjdCBzdGF0ZnMqICBzICkKLXsKLSAgICByZXR1cm4gcy0+Zl9uYW1lbGVuOwotfQotCi1sb25nCi1wYXRoY29uZihjb25zdCBjaGFyICpwYXRoLCBpbnQgbmFtZSkKLXsKLSAgICBzdHJ1Y3Qgc3RhdGZzICBidWY7Ci0gICAgaW50ICAgICAgICAgICAgcmV0ID0gc3RhdGZzKCBwYXRoLCAmYnVmICk7Ci0KLSAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgc3dpdGNoIChuYW1lKSB7Ci0gICAgY2FzZSBfUENfRklMRVNJWkVCSVRTOgotICAgICAgICByZXR1cm4gX19maWxlc2l6ZWJpdHMoJmJ1Zik7Ci0KLSAgICBjYXNlIF9QQ19MSU5LX01BWDoKLSAgICAgICAgcmV0dXJuIF9fbGlua19tYXgoJmJ1Zik7Ci0KLSAgICBjYXNlIF9QQ19NQVhfQ0FOT046Ci0gICAgICAgIHJldHVybiBNQVhfQ0FOT047Ci0KLSAgICBjYXNlIF9QQ19NQVhfSU5QVVQ6Ci0gICAgICAgIHJldHVybiBNQVhfSU5QVVQ7Ci0KLSAgICBjYXNlIF9QQ19OQU1FX01BWDoKLSAgICAgICAgcmV0dXJuIF9fbmFtZV9tYXgoJmJ1Zik7Ci0KLSAgICBjYXNlIF9QQ19QQVRIX01BWDoKLSAgICAgICAgcmV0dXJuIFBBVEhfTUFYOwotCi0gICAgY2FzZSBfUENfUElQRV9CVUY6Ci0gICAgICAgIHJldHVybiBQSVBFX0JVRjsKLQotICAgIGNhc2UgX1BDXzJfU1lNTElOS1M6Ci0gICAgICAgIHJldHVybiBfXzJfc3ltbGlua3MoJmJ1Zik7Ci0KLSNpZiAwICAvKiBkb24ndCBrbm93IHdoYXQgdG8gZG8gdGhlcmUsIHRoZSBzcGVjcyBhcmUgcmVhbGx5IHdlaXJkICovCi0gICAgY2FzZSBfUENfQUxMT0NfU0laRV9NSU46Ci0gICAgY2FzZSBfUENfUkVDX0lOQ1JfWEZFUl9TSVpFOgotICAgIGNhc2UgX1BDX1JFQ19NQVhfWEZFUl9TSVpFOgotICAgIGNhc2UgX1BDX1JFQ19NSU5fWEZFUl9TSVpFOgotICAgIGNhc2UgX1BDX1JFQ19YRkVSX0FMSUdOOgotI2VuZGlmCi0KLSAgICBjYXNlIF9QQ19TWU1MSU5LX01BWDoKLSAgICAgICAgcmV0dXJuIC0xOyAgLyogbm8gbGltaXQgKi8KLQotICAgIGNhc2UgX1BDX0NIT1dOX1JFU1RSSUNURUQ6Ci0gICAgICAgIHJldHVybiBfUE9TSVhfQ0hPV05fUkVTVFJJQ1RFRDsKLQotICAgIGNhc2UgX1BDX05PX1RSVU5DOgotICAgICAgICByZXR1cm4gX1BPU0lYX05PX1RSVU5DOwotCi0gICAgY2FzZSBfUENfVkRJU0FCTEU6Ci0gICAgICAgIHJldHVybiBfUE9TSVhfVkRJU0FCTEU7Ci0KLSAgICBjYXNlIF9QQ19BU1lOQ19JTzoKLSAgICAgICAgcmV0dXJuIF9QT1NJWF9BU1lOQ19JTzsKLQotICAgIGNhc2UgX1BDX1BSSU9fSU86Ci0gICAgICAgIHJldHVybiBfUE9TSVhfUFJJT19JTzsKLQotICAgIGNhc2UgX1BDX1NZTkNfSU86Ci0gICAgICAgIHJldHVybiBfUE9TSVhfU1lOQ19JTzsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotfQotCi1sb25nIGZwYXRoY29uZihpbnQgZmlsZGVzLCBpbnQgbmFtZSkKLXsKLSAgICBzdHJ1Y3Qgc3RhdGZzICBidWY7Ci0gICAgaW50ICAgICAgICAgICAgcmV0ID0gZnN0YXRmcyhmaWxkZXMsICZidWYpOwotCi0gICAgaWYgKHJldCA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHN3aXRjaCAobmFtZSkgewotICAgIGNhc2UgX1BDX0ZJTEVTSVpFQklUUzoKLSAgICAgICAgcmV0dXJuIF9fZmlsZXNpemViaXRzKCZidWYpOwotCi0gICAgY2FzZSBfUENfTElOS19NQVg6Ci0gICAgICAgIHJldHVybiBfX2xpbmtfbWF4KCZidWYpOwotCi0gICAgY2FzZSBfUENfTUFYX0NBTk9OOgotICAgICAgICByZXR1cm4gTUFYX0NBTk9OOwotCi0gICAgY2FzZSBfUENfTUFYX0lOUFVUOgotICAgICAgICByZXR1cm4gTUFYX0lOUFVUOwotCi0gICAgY2FzZSBfUENfTkFNRV9NQVg6Ci0gICAgICAgIHJldHVybiBfX25hbWVfbWF4KCZidWYpOwotCi0gICAgY2FzZSBfUENfUEFUSF9NQVg6Ci0gICAgICAgIHJldHVybiBQQVRIX01BWDsKLQotICAgIGNhc2UgX1BDX1BJUEVfQlVGOgotICAgICAgICByZXR1cm4gUElQRV9CVUY7Ci0KLSAgICBjYXNlIF9QQ18yX1NZTUxJTktTOgotICAgICAgICByZXR1cm4gX18yX3N5bWxpbmtzKCZidWYpOwotCi0jaWYgMCAgLyogZG9uJ3Qga25vdyB3aGF0IHRvIGRvIHRoZXJlLCB0aGUgc3BlY3MgYXJlIHJlYWxseSB3ZWlyZCAqLwotICAgIGNhc2UgX1BDX0FMTE9DX1NJWkVfTUlOOgotICAgIGNhc2UgX1BDX1JFQ19JTkNSX1hGRVJfU0laRToKLSAgICBjYXNlIF9QQ19SRUNfTUFYX1hGRVJfU0laRToKLSAgICBjYXNlIF9QQ19SRUNfTUlOX1hGRVJfU0laRToKLSAgICBjYXNlIF9QQ19SRUNfWEZFUl9BTElHTjoKLSNlbmRpZgotCi0gICAgY2FzZSBfUENfU1lNTElOS19NQVg6Ci0gICAgICAgIHJldHVybiAtMTsgIC8qIG5vIGxpbWl0ICovCi0KLSAgICBjYXNlIF9QQ19DSE9XTl9SRVNUUklDVEVEOgotICAgICAgICByZXR1cm4gX1BPU0lYX0NIT1dOX1JFU1RSSUNURUQ7Ci0KLSAgICBjYXNlIF9QQ19OT19UUlVOQzoKLSAgICAgICAgcmV0dXJuIF9QT1NJWF9OT19UUlVOQzsKLQotICAgIGNhc2UgX1BDX1ZESVNBQkxFOgotICAgICAgICByZXR1cm4gX1BPU0lYX1ZESVNBQkxFOwotCi0gICAgY2FzZSBfUENfQVNZTkNfSU86Ci0gICAgICAgIHJldHVybiBfUE9TSVhfQVNZTkNfSU87Ci0KLSAgICBjYXNlIF9QQ19QUklPX0lPOgotICAgICAgICByZXR1cm4gX1BPU0lYX1BSSU9fSU87Ci0KLSAgICBjYXNlIF9QQ19TWU5DX0lPOgotICAgICAgICByZXR1cm4gX1BPU0lYX1NZTkNfSU87Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3BhdGhjb25mLmNwcCBiL2xpYmMvYmlvbmljL3BhdGhjb25mLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmY1NzQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcGF0aGNvbmYuY3BwCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL2xpbWl0cy5oPgorI2luY2x1ZGUgPHN5cy92ZnMuaD4KKworc3RhdGljIGxvbmcgX19maWxlc2l6ZWJpdHMoY29uc3Qgc3RydWN0IHN0YXRmcyYgcykgeworICBzd2l0Y2ggKHMuZl90eXBlKSB7CisgICAgY2FzZSBKRkZTMl9TVVBFUl9NQUdJQzoKKyAgICBjYXNlIE1TRE9TX1NVUEVSX01BR0lDOgorICAgIGNhc2UgTkNQX1NVUEVSX01BR0lDOgorICAgICAgcmV0dXJuIDMyOworICB9CisgIC8vIFRoZXJlIHdvbid0IGJlIGFueSBuZXcgMzItYml0IGZpbGUgc3lzdGVtcy4KKyAgcmV0dXJuIDY0OworfQorCitzdGF0aWMgbG9uZyBfX2xpbmtfbWF4KGNvbnN0IHN0cnVjdCBzdGF0ZnMmIHMpIHsKKyAgLy8gVGhlc2UgY29uc3RhbnQgdmFsdWVzIHdlcmUgdGFrZW4gZnJvbSBrZXJuZWwgaGVhZGVycy4KKyAgLy8gVGhleSdyZSBub3QgYXZhaWxhYmxlIGluIHVhcGkgaGVhZGVycy4KKyAgc3dpdGNoIChzLmZfdHlwZSkgeworICAgIGNhc2UgRVhUMl9TVVBFUl9NQUdJQzoKKyAgICAgIHJldHVybiAzMjAwMDsKKyAgICBjYXNlIE1JTklYX1NVUEVSX01BR0lDOgorICAgICAgcmV0dXJuIDI1MDsKKyAgICBjYXNlIE1JTklYMl9TVVBFUl9NQUdJQzoKKyAgICAgIHJldHVybiA2NTUzMDsKKyAgICBjYXNlIFJFSVNFUkZTX1NVUEVSX01BR0lDOgorICAgICAgcmV0dXJuIDB4ZmZmZiAtIDEwMDA7CisgICAgY2FzZSBVRlNfTUFHSUM6CisgICAgICByZXR1cm4gMzIwMDA7CisgIH0KKyAgcmV0dXJuIExJTktfTUFYOworfQorCitzdGF0aWMgbG9uZyBfXzJfc3ltbGlua3MoY29uc3Qgc3RydWN0IHN0YXRmcyYgcykgeworICBzd2l0Y2ggKHMuZl90eXBlKSB7CisgICAgY2FzZSBBREZTX1NVUEVSX01BR0lDOgorICAgIGNhc2UgQkZTX01BR0lDOgorICAgIGNhc2UgQ1JBTUZTX01BR0lDOgorICAgIGNhc2UgRUZTX1NVUEVSX01BR0lDOgorICAgIGNhc2UgTVNET1NfU1VQRVJfTUFHSUM6CisgICAgY2FzZSBRTlg0X1NVUEVSX01BR0lDOgorICAgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBsb25nIF9fcGF0aGNvbmYoY29uc3Qgc3RydWN0IHN0YXRmcyYgcywgaW50IG5hbWUpIHsKKyAgc3dpdGNoIChuYW1lKSB7CisgICAgY2FzZSBfUENfRklMRVNJWkVCSVRTOgorICAgICAgcmV0dXJuIF9fZmlsZXNpemViaXRzKHMpOworCisgICAgY2FzZSBfUENfTElOS19NQVg6CisgICAgICByZXR1cm4gX19saW5rX21heChzKTsKKworICAgIGNhc2UgX1BDX01BWF9DQU5PTjoKKyAgICAgIHJldHVybiBNQVhfQ0FOT047CisKKyAgICBjYXNlIF9QQ19NQVhfSU5QVVQ6CisgICAgICByZXR1cm4gTUFYX0lOUFVUOworCisgICAgY2FzZSBfUENfTkFNRV9NQVg6CisgICAgICByZXR1cm4gcy5mX25hbWVsZW47CisKKyAgICBjYXNlIF9QQ19QQVRIX01BWDoKKyAgICAgIHJldHVybiBQQVRIX01BWDsKKworICAgIGNhc2UgX1BDX1BJUEVfQlVGOgorICAgICAgcmV0dXJuIFBJUEVfQlVGOworCisgICAgY2FzZSBfUENfMl9TWU1MSU5LUzoKKyAgICAgIHJldHVybiBfXzJfc3ltbGlua3Mocyk7CisKKyAgICBjYXNlIF9QQ19BTExPQ19TSVpFX01JTjogIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgX1BDX1JFQ19YRkVSX0FMSUdOOgorICAgICAgcmV0dXJuIHMuZl9mcnNpemU7CisKKyAgICBjYXNlIF9QQ19SRUNfTUlOX1hGRVJfU0laRToKKyAgICAgIHJldHVybiBzLmZfYnNpemU7CisKKyNpZiAwCisgICAgY2FzZSBfUENfUkVDX0lOQ1JfWEZFUl9TSVpFOgorICAgIGNhc2UgX1BDX1JFQ19NQVhfWEZFUl9TSVpFOgorI2VuZGlmCisKKyAgICBjYXNlIF9QQ19TWU1MSU5LX01BWDoKKyAgICAgIHJldHVybiAtMTsgLyogbm8gbGltaXQgKi8KKworICAgIGNhc2UgX1BDX0NIT1dOX1JFU1RSSUNURUQ6CisgICAgICByZXR1cm4gX1BPU0lYX0NIT1dOX1JFU1RSSUNURUQ7CisKKyAgICBjYXNlIF9QQ19OT19UUlVOQzoKKyAgICAgIHJldHVybiBfUE9TSVhfTk9fVFJVTkM7CisKKyAgICBjYXNlIF9QQ19WRElTQUJMRToKKyAgICAgIHJldHVybiBfUE9TSVhfVkRJU0FCTEU7CisKKyAgICBjYXNlIF9QQ19BU1lOQ19JTzoKKyAgICAgIHJldHVybiAtMTsKKworICAgIGNhc2UgX1BDX1BSSU9fSU86CisgICAgICByZXR1cm4gLTE7CisKKyAgICBjYXNlIF9QQ19TWU5DX0lPOgorICAgICAgcmV0dXJuIC0xOworCisgICAgZGVmYXVsdDoKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIC0xOworICB9Cit9CisKK2xvbmcgcGF0aGNvbmYoY29uc3QgY2hhciogcGF0aCwgaW50IG5hbWUpIHsKKyAgc3RydWN0IHN0YXRmcyBzYjsKKyAgaWYgKHN0YXRmcyhwYXRoLCAmc2IpID09IC0xKSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIHJldHVybiBfX3BhdGhjb25mKHNiLCBuYW1lKTsKK30KKworbG9uZyBmcGF0aGNvbmYoaW50IGZkLCBpbnQgbmFtZSkgeworICBzdHJ1Y3Qgc3RhdGZzIHNiOworICBpZiAoZnN0YXRmcyhmZCwgJnNiKSA9PSAtMSkgeworICAgIHJldHVybiAtMTsKKyAgfQorICByZXR1cm4gX19wYXRoY29uZihzYiwgbmFtZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2F0Zm9yay5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2F0Zm9yay5jcHAKaW5kZXggYjg0NWY3ZC4uZDFjNGFkMCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9hdGZvcmsuY3BwCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfYXRmb3JrLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CiAKIHN0cnVjdCBhdGZvcmtfdCB7CiAgIGF0Zm9ya190KiBuZXh0OwpAQCAtNDMsNyArNDQsNyBAQAogICBhdGZvcmtfdCogbGFzdDsKIH07CiAKLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgZ19hdGZvcmtfbGlzdF9tdXRleCA9IFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnX2F0Zm9ya19saXN0X211dGV4ID0gUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVJfTlA7CiBzdGF0aWMgYXRmb3JrX2xpc3RfdCBnX2F0Zm9ya19saXN0ID0geyBOVUxMLCBOVUxMIH07CiAKIHZvaWQgX19iaW9uaWNfYXRmb3JrX3J1bl9wcmVwYXJlKCkgewpAQCAtNzIsNyArNzMsNyBAQAogICAgIH0KICAgfQogCi0gIGdfYXRmb3JrX2xpc3RfbXV0ZXggPSBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUjsKKyAgZ19hdGZvcmtfbGlzdF9tdXRleCA9IFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QOwogfQogCiB2b2lkIF9fYmlvbmljX2F0Zm9ya19ydW5fcGFyZW50KCkgewpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9jb25kLmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfY29uZC5jcHAKaW5kZXggZTYyM2I2Mi4uMzJmZjgxYSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9jb25kLmNwcAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2NvbmQuY3BwCkBAIC0xNjMsMTIgKzE2MywxMiBAQAogfQogCiBfX0xJQkNfSElEREVOX18KLWludCBfX3B0aHJlYWRfY29uZF90aW1lZHdhaXQocHRocmVhZF9jb25kX3QqIGNvbmQsIHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgsIGNvbnN0IHRpbWVzcGVjKiBhYnN0aW1lLCBjbG9ja2lkX3QgY2xvY2spIHsKK2ludCBfX3B0aHJlYWRfY29uZF90aW1lZHdhaXQocHRocmVhZF9jb25kX3QqIGNvbmQsIHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgsIGNvbnN0IHRpbWVzcGVjKiBhYnNfdHMsIGNsb2NraWRfdCBjbG9jaykgewogICB0aW1lc3BlYyB0czsKICAgdGltZXNwZWMqIHRzcDsKIAotICBpZiAoYWJzdGltZSAhPSBOVUxMKSB7Ci0gICAgaWYgKF9fdGltZXNwZWNfZnJvbV9hYnNvbHV0ZSgmdHMsIGFic3RpbWUsIGNsb2NrKSA8IDApIHsKKyAgaWYgKGFic190cyAhPSBOVUxMKSB7CisgICAgaWYgKCF0aW1lc3BlY19mcm9tX2Fic29sdXRlX3RpbWVzcGVjKHRzLCAqYWJzX3RzLCBjbG9jaykpIHsKICAgICAgIHJldHVybiBFVElNRURPVVQ7CiAgICAgfQogICAgIHRzcCA9ICZ0czsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfZ2V0dGlkX25wLmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfZ2V0dGlkX25wLmNwcAppbmRleCBmNDY2M2E3Li5jOTk2YTA1IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkX2dldHRpZF9ucC5jcHAKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9nZXR0aWRfbnAuY3BwCkBAIC0yNywxMyArMjcsNyBAQAogICovCiAKICNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCi0jaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfcHRocmVhZC5oIgogCiBwaWRfdCBwdGhyZWFkX2dldHRpZF9ucChwdGhyZWFkX3QgdCkgewogICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwdGhyZWFkX2ludGVybmFsX3QqPih0KS0+dGlkOwogfQotCi0vLyBUT0RPOiBtb3ZlIGNhbGxlcnMgb3ZlciB0byBwdGhyZWFkX2dldHRpZF9ucCBhbmQgcmVtb3ZlIHRoaXMuCi1waWRfdCBfX3B0aHJlYWRfZ2V0dGlkKHB0aHJlYWRfdCB0KSB7Ci0gIHJldHVybiBwdGhyZWFkX2dldHRpZF9ucCh0KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWwuaCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWwuaAppbmRleCBhNWIzMDAyLi4zOTJlNzgxIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkX2ludGVybmFsLmgKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9pbnRlcm5hbC5oCkBAIC0xMTcsOCArMTE3LDYgQEAKIF9fTElCQ19ISURERU5fXyBleHRlcm4gcHRocmVhZF9pbnRlcm5hbF90KiBnX3RocmVhZF9saXN0OwogX19MSUJDX0hJRERFTl9fIGV4dGVybiBwdGhyZWFkX211dGV4X3QgZ190aHJlYWRfbGlzdF9sb2NrOwogCi1fX0xJQkNfSElEREVOX18gaW50IF9fdGltZXNwZWNfZnJvbV9hYnNvbHV0ZSh0aW1lc3BlYyosIGNvbnN0IHRpbWVzcGVjKiwgY2xvY2tpZF90KTsKLQogLyogTmVlZGVkIGJ5IGZvcmsuICovCiBfX0xJQkNfSElEREVOX18gZXh0ZXJuIHZvaWQgX19iaW9uaWNfYXRmb3JrX3J1bl9wcmVwYXJlKCk7CiBfX0xJQkNfSElEREVOX18gZXh0ZXJuIHZvaWQgX19iaW9uaWNfYXRmb3JrX3J1bl9jaGlsZCgpOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9pbnRlcm5hbHMuY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9pbnRlcm5hbHMuY3BwCmluZGV4IDRjMDhiYTguLjIyNzBkOTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWxzLmNwcAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2ludGVybmFscy5jcHAKQEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKIAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfZnV0ZXguaCIKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY190bHMuaCIKICNpbmNsdWRlICJwcml2YXRlL1Njb3BlZFB0aHJlYWRNdXRleExvY2tlci5oIgpAQCAtNjcsMTkgKzY5LDMgQEAKIHB0aHJlYWRfaW50ZXJuYWxfdCogX19nZXRfdGhyZWFkKHZvaWQpIHsKICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cHRocmVhZF9pbnRlcm5hbF90Kj4oX19nZXRfdGxzKClbVExTX1NMT1RfVEhSRUFEX0lEXSk7CiB9Ci0KLS8vIEluaXRpYWxpemUgJ3RzJyB3aXRoIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gJ2Fic3RpbWUnIGFuZCB0aGUgY3VycmVudCB0aW1lCi0vLyBhY2NvcmRpbmcgdG8gJ2Nsb2NrJy4gUmV0dXJucyAtMSBpZiBhYnN0aW1lIGFscmVhZHkgZXhwaXJlZCwgb3IgMCBvdGhlcndpc2UuCi1pbnQgX190aW1lc3BlY19mcm9tX2Fic29sdXRlKHRpbWVzcGVjKiB0cywgY29uc3QgdGltZXNwZWMqIGFic3RpbWUsIGNsb2NraWRfdCBjbG9jaykgewotICBjbG9ja19nZXR0aW1lKGNsb2NrLCB0cyk7Ci0gIHRzLT50dl9zZWMgID0gYWJzdGltZS0+dHZfc2VjIC0gdHMtPnR2X3NlYzsKLSAgdHMtPnR2X25zZWMgPSBhYnN0aW1lLT50dl9uc2VjIC0gdHMtPnR2X25zZWM7Ci0gIGlmICh0cy0+dHZfbnNlYyA8IDApIHsKLSAgICB0cy0+dHZfc2VjLS07Ci0gICAgdHMtPnR2X25zZWMgKz0gMTAwMDAwMDAwMDsKLSAgfQotICBpZiAoKHRzLT50dl9uc2VjIDwgMCkgfHwgKHRzLT50dl9zZWMgPCAwKSkgewotICAgIHJldHVybiAtMTsKLSAgfQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfa2V5LmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfa2V5LmNwcAppbmRleCAyN2VhYjI3Li5iNDdlZjIyIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkX2tleS5jcHAKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9rZXkuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY190bHMuaCIKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfbXV0ZXguY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9tdXRleC5jcHAKaW5kZXggYWUyNTU3Zi4uNDBmMWVkMiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9tdXRleC5jcHAKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9tdXRleC5jcHAKQEAgLTM2LDkgKzM2LDEzIEBACiAjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgogCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfYXRvbWljX2lubGluZS5oIgorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2NvbnN0YW50cy5oIgogI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2Z1dGV4LmgiCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfdGltZV9jb252ZXJzaW9ucy5oIgogI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX3Rscy5oIgogCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfc3lzdHJhY2UuaCIKKwogZXh0ZXJuIHZvaWQgcHRocmVhZF9kZWJ1Z19tdXRleF9sb2NrX2NoZWNrKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpOwogZXh0ZXJuIHZvaWQgcHRocmVhZF9kZWJ1Z19tdXRleF91bmxvY2tfY2hlY2socHRocmVhZF9tdXRleF90ICptdXRleCk7CiAKQEAgLTMzMyw2ICszMzcsMTAgQEAKICAgICAgICAgICogdGhhdCB0aGUgbXV0ZXggaXMgaW4gc3RhdGUgMiB3aGVuIHdlIGdvIHRvIHNsZWVwIG9uIGl0LCB3aGljaAogICAgICAgICAgKiBndWFyYW50ZWVzIGEgd2FrZS11cCBjYWxsLgogICAgICAgICAgKi8KKworICAgICAgICAgU2NvcGVkVHJhY2UgdHJhY2UoIkNvbnRlbmRpbmcgZm9yIHB0aHJlYWQgbXV0ZXgiKTsKKworCiAgICAgICAgIHdoaWxlIChfX2Jpb25pY19zd2FwKGxvY2tlZF9jb250ZW5kZWQsICZtdXRleC0+dmFsdWUpICE9IHVubG9ja2VkKSB7CiAgICAgICAgICAgICBfX2Z1dGV4X3dhaXRfZXgoJm11dGV4LT52YWx1ZSwgc2hhcmVkLCBsb2NrZWRfY29udGVuZGVkLCBOVUxMKTsKICAgICAgICAgfQpAQCAtNDQwLDEyICs0NDgsNiBAQAogfQogCiBpbnQgcHRocmVhZF9tdXRleF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgpIHsKLSNpZiAhZGVmaW5lZChfX0xQNjRfXykKLSAgICBpZiAobXV0ZXggPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gRUlOVkFMOwotICAgIH0KLSNlbmRpZgotCiAgICAgaW50IG12YWx1ZSwgbXR5cGUsIHRpZCwgc2hhcmVkOwogCiAgICAgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOwpAQCAtNDc5LDYgKzQ4MSw4IEBACiAgICAgICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKICAgICB9CiAKKyAgICBTY29wZWRUcmFjZSB0cmFjZSgiQ29udGVuZGluZyBmb3IgcHRocmVhZCBtdXRleCIpOworCiAgICAgZm9yICg7OykgewogICAgICAgICBpbnQgbmV3dmFsOwogCkBAIC01MjIsMTIgKzUyNiw2IEBACiB9CiAKIGludCBwdGhyZWFkX211dGV4X3VubG9jayhwdGhyZWFkX211dGV4X3QqIG11dGV4KSB7Ci0jaWYgIWRlZmluZWQoX19MUDY0X18pCi0gICAgaWYgKG11dGV4ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLSAgICB9Ci0jZW5kaWYKLQogICAgIGludCBtdmFsdWUsIG10eXBlLCB0aWQsIHNoYXJlZDsKIAogICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKQEAgLTU4MCwxNSArNTc4LDEyIEBACiB9CiAKIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90KiBtdXRleCkgewotICAgIGludCBtdmFsdWUsIG10eXBlLCB0aWQsIHNoYXJlZDsKKyAgICBpbnQgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOworICAgIGludCBtdHlwZSAgPSAobXZhbHVlICYgTVVURVhfVFlQRV9NQVNLKTsKKyAgICBpbnQgc2hhcmVkID0gKG12YWx1ZSAmIE1VVEVYX1NIQVJFRF9NQVNLKTsKIAotICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKLSAgICBtdHlwZSAgPSAobXZhbHVlICYgTVVURVhfVFlQRV9NQVNLKTsKLSAgICBzaGFyZWQgPSAobXZhbHVlICYgTVVURVhfU0hBUkVEX01BU0spOwotCi0gICAgLyogSGFuZGxlIGNvbW1vbiBjYXNlIGZpcnN0ICovCi0gICAgaWYgKCBfX3ByZWRpY3RfdHJ1ZShtdHlwZSA9PSBNVVRFWF9UWVBFX0JJVFNfTk9STUFMKSApCi0gICAgeworICAgIC8vIEhhbmRsZSBjb21tb24gY2FzZSBmaXJzdC4KKyAgICBpZiAoX19wcmVkaWN0X3RydWUobXR5cGUgPT0gTVVURVhfVFlQRV9CSVRTX05PUk1BTCkpIHsKICAgICAgICAgaWYgKF9fYmlvbmljX2NtcHhjaGcoc2hhcmVkfE1VVEVYX1NUQVRFX0JJVFNfVU5MT0NLRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZHxNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9VTkNPTlRFTkRFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm11dGV4LT52YWx1ZSkgPT0gMCkgewpAQCAtNTk5LDEwICs1OTQsMTQgQEAKICAgICAgICAgcmV0dXJuIEVCVVNZOwogICAgIH0KIAotICAgIC8qIERvIHdlIGFscmVhZHkgb3duIHRoaXMgcmVjdXJzaXZlIG9yIGVycm9yLWNoZWNrIG11dGV4ID8gKi8KLSAgICB0aWQgPSBfX2dldF90aHJlYWQoKS0+dGlkOwotICAgIGlmICggdGlkID09IE1VVEVYX09XTkVSX0ZST01fQklUUyhtdmFsdWUpICkKKyAgICAvLyBEbyB3ZSBhbHJlYWR5IG93biB0aGlzIHJlY3Vyc2l2ZSBvciBlcnJvci1jaGVjayBtdXRleD8KKyAgICBwaWRfdCB0aWQgPSBfX2dldF90aHJlYWQoKS0+dGlkOworICAgIGlmICh0aWQgPT0gTVVURVhfT1dORVJfRlJPTV9CSVRTKG12YWx1ZSkpIHsKKyAgICAgICAgaWYgKG10eXBlID09IE1VVEVYX1RZUEVfQklUU19FUlJPUkNIRUNLKSB7CisgICAgICAgICAgICByZXR1cm4gRUJVU1k7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIF9yZWN1cnNpdmVfaW5jcmVtZW50KG11dGV4LCBtdmFsdWUsIG10eXBlKTsKKyAgICB9CiAKICAgICAvKiBTYW1lIGFzIHB0aHJlYWRfbXV0ZXhfbG9jaywgZXhjZXB0IHRoYXQgd2UgZG9uJ3Qgd2FudCB0byB3YWl0LCBhbmQKICAgICAgKiB0aGUgb25seSBvcGVyYXRpb24gdGhhdCBjYW4gc3VjY2VlZCBpcyBhIHNpbmdsZSBjbXB4Y2hnIHRvIGFjcXVpcmUgdGhlCkBAIC02MTksNyArNjE4LDcgQEAKICAgICByZXR1cm4gRUJVU1k7CiB9CiAKLXN0YXRpYyBpbnQgX19wdGhyZWFkX211dGV4X3RpbWVkbG9jayhwdGhyZWFkX211dGV4X3QqIG11dGV4LCBjb25zdCB0aW1lc3BlYyogYWJzX3RpbWVvdXQsIGNsb2NraWRfdCBjbG9jaykgeworc3RhdGljIGludCBfX3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgsIGNvbnN0IHRpbWVzcGVjKiBhYnNfdHMsIGNsb2NraWRfdCBjbG9jaykgewogICB0aW1lc3BlYyB0czsKIAogICBpbnQgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOwpAQCAtNjM4LDkgKzYzNywxMSBAQAogICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisgICAgU2NvcGVkVHJhY2UgdHJhY2UoIkNvbnRlbmRpbmcgZm9yIHRpbWVkIHB0aHJlYWQgbXV0ZXgiKTsKKwogICAgIC8vIExvb3Agd2hpbGUgbmVlZGVkLgogICAgIHdoaWxlIChfX2Jpb25pY19zd2FwKGxvY2tlZF9jb250ZW5kZWQsICZtdXRleC0+dmFsdWUpICE9IHVubG9ja2VkKSB7Ci0gICAgICBpZiAoX190aW1lc3BlY19mcm9tX2Fic29sdXRlKCZ0cywgYWJzX3RpbWVvdXQsIGNsb2NrKSA8IDApIHsKKyAgICAgIGlmICghdGltZXNwZWNfZnJvbV9hYnNvbHV0ZV90aW1lc3BlYyh0cywgKmFic190cywgY2xvY2spKSB7CiAgICAgICAgIHJldHVybiBFVElNRURPVVQ7CiAgICAgICB9CiAgICAgICBfX2Z1dGV4X3dhaXRfZXgoJm11dGV4LT52YWx1ZSwgc2hhcmVkLCBsb2NrZWRfY29udGVuZGVkLCAmdHMpOwpAQCAtNjcwLDYgKzY3MSw4IEBACiAgICAgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOwogICB9CiAKKyAgU2NvcGVkVHJhY2UgdHJhY2UoIkNvbnRlbmRpbmcgZm9yIHRpbWVkIHB0aHJlYWQgbXV0ZXgiKTsKKwogICB3aGlsZSAodHJ1ZSkgewogICAgIC8vIElmIHRoZSB2YWx1ZSBpcyAndW5sb2NrZWQnLCB0cnkgdG8gYWNxdWlyZSBpdCBkaXJlY3RseS4KICAgICAvLyBOT1RFOiBwdXQgc3RhdGUgdG8gMiBzaW5jZSB3ZSBrbm93IHRoZXJlIGlzIGNvbnRlbnRpb24uCkBAIC02ODEsNyArNjg0LDcgQEAKICAgICAgIH0KICAgICAgIC8vIFRoZSB2YWx1ZSBjaGFuZ2VkIGJlZm9yZSB3ZSBjb3VsZCBsb2NrIGl0LiBXZSBuZWVkIHRvIGNoZWNrCiAgICAgICAvLyB0aGUgdGltZSB0byBhdm9pZCBsaXZlbG9ja3MsIHJlbG9hZCB0aGUgdmFsdWUsIHRoZW4gbG9vcCBhZ2Fpbi4KLSAgICAgIGlmIChfX3RpbWVzcGVjX2Zyb21fYWJzb2x1dGUoJnRzLCBhYnNfdGltZW91dCwgY2xvY2spIDwgMCkgeworICAgICAgaWYgKCF0aW1lc3BlY19mcm9tX2Fic29sdXRlX3RpbWVzcGVjKHRzLCAqYWJzX3RzLCBjbG9jaykpIHsKICAgICAgICAgcmV0dXJuIEVUSU1FRE9VVDsKICAgICAgIH0KIApAQCAtNzAzLDcgKzcwNiw3IEBACiAgICAgfQogCiAgICAgLy8gQ2hlY2sgdGltZSBhbmQgdXBkYXRlICd0cycuCi0gICAgaWYgKF9fdGltZXNwZWNfZnJvbV9hYnNvbHV0ZSgmdHMsIGFic190aW1lb3V0LCBjbG9jaykgPCAwKSB7CisgICAgaWYgKHRpbWVzcGVjX2Zyb21fYWJzb2x1dGVfdGltZXNwZWModHMsICphYnNfdHMsIGNsb2NrKSkgewogICAgICAgcmV0dXJuIEVUSU1FRE9VVDsKICAgICB9CiAKQEAgLTcyNiw5ICs3MjksOSBAQAogICBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFic190aW1lb3V0KTsKICAgYWJzX3RpbWVvdXQudHZfc2VjICArPSBtcyAvIDEwMDA7CiAgIGFic190aW1lb3V0LnR2X25zZWMgKz0gKG1zICUgMTAwMCkgKiAxMDAwMDAwOwotICBpZiAoYWJzX3RpbWVvdXQudHZfbnNlYyA+PSAxMDAwMDAwMDAwKSB7CisgIGlmIChhYnNfdGltZW91dC50dl9uc2VjID49IE5TX1BFUl9TKSB7CiAgICAgYWJzX3RpbWVvdXQudHZfc2VjKys7Ci0gICAgYWJzX3RpbWVvdXQudHZfbnNlYyAtPSAxMDAwMDAwMDAwOworICAgIGFic190aW1lb3V0LnR2X25zZWMgLT0gTlNfUEVSX1M7CiAgIH0KIAogICBpbnQgZXJyb3IgPSBfX3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKG11dGV4LCAmYWJzX3RpbWVvdXQsIENMT0NLX01PTk9UT05JQyk7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX3J3bG9jay5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX3J3bG9jay5jcHAKaW5kZXggMDYzMTM3Yi4uMGQ2MzQ1NyAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9yd2xvY2suY3BwCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfcndsb2NrLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2Z1dGV4LmgiCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfdGltZV9jb252ZXJzaW9ucy5oIgogCiAvKiBUZWNobmljYWwgbm90ZToKICAqCkBAIC03MSw3ICs3Miw3IEBACiAKIHN0YXRpYyBib29sIHRpbWVzcGVjX2Zyb21fYWJzb2x1dGUodGltZXNwZWMqIHJlbF90aW1lb3V0LCBjb25zdCB0aW1lc3BlYyogYWJzX3RpbWVvdXQpIHsKICAgaWYgKGFic190aW1lb3V0ICE9IE5VTEwpIHsKLSAgICBpZiAoX190aW1lc3BlY19mcm9tX2Fic29sdXRlKHJlbF90aW1lb3V0LCBhYnNfdGltZW91dCwgQ0xPQ0tfUkVBTFRJTUUpIDwgMCkgeworICAgIGlmICghdGltZXNwZWNfZnJvbV9hYnNvbHV0ZV90aW1lc3BlYygqcmVsX3RpbWVvdXQsICphYnNfdGltZW91dCwgQ0xPQ0tfUkVBTFRJTUUpKSB7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX3NldG5hbWVfbnAuY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9zZXRuYW1lX25wLmNwcAppbmRleCAxZGRmODEwLi45M2Q0YjJmIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkX3NldG5hbWVfbnAuY3BwCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfc2V0bmFtZV9ucC5jcHAKQEAgLTYxLDEzICs2MSwxMyBAQAogICB7CiAgICAgcHRocmVhZF9hY2Nlc3NvciB0aHJlYWQodCk7CiAgICAgaWYgKHRocmVhZC5nZXQoKSA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gRVNSQ0g7CisgICAgICByZXR1cm4gRU5PRU5UOwogICAgIH0KICAgICB0aWQgPSB0aHJlYWQtPnRpZDsKICAgfQogICBjaGFyIGNvbW1fbmFtZVtzaXplb2YoVEFTS19DT01NX0ZNVCkgKyA4XTsKICAgc25wcmludGYoY29tbV9uYW1lLCBzaXplb2YoY29tbV9uYW1lKSwgVEFTS19DT01NX0ZNVCwgdGlkKTsKLSAgaW50IGZkID0gb3Blbihjb21tX25hbWUsIE9fV1JPTkxZKTsKKyAgaW50IGZkID0gb3Blbihjb21tX25hbWUsIE9fQ0xPRVhFQyB8IE9fV1JPTkxZKTsKICAgaWYgKGZkID09IC0xKSB7CiAgICAgcmV0dXJuIGVycm5vOwogICB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdXR1dGxpbmUuYyBiL2xpYmMvYmlvbmljL3B1dHV0bGluZS5jCmluZGV4IGM4NDI3ZjcuLjhjYmY0NzAgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3B1dHV0bGluZS5jCisrKyBiL2xpYmMvYmlvbmljL3B1dHV0bGluZS5jCkBAIC0zNiw3ICszNiw3IEBACiAgICAgc3RydWN0IHV0bXAgdTsKICAgICBsb25nIGk7CiAKLSAgICBpZiAoIShmID0gZm9wZW4oX1BBVEhfVVRNUCwgIncrIikpKQorICAgIGlmICghKGYgPSBmb3BlbihfUEFUSF9VVE1QLCAidytlIikpKQogICAgICAgICByZXR1cm47CiAKICAgICB3aGlsZSAoZnJlYWQoJnUsIHNpemVvZihzdHJ1Y3QgdXRtcCksIDEsIGYpID09IDEpCkBAIC01NSw3ICs1NSw3IEBACiAKICAgICBmY2xvc2UoZik7CiAKLSAgICBpZiAoIShmID0gZm9wZW4oX1BBVEhfVVRNUCwgIncrIikpKQorICAgIGlmICghKGYgPSBmb3BlbihfUEFUSF9VVE1QLCAidytlIikpKQogICAgICAgICByZXR1cm47CiAgICAgZndyaXRlKHV0bXAsIHNpemVvZihzdHJ1Y3QgdXRtcCksIDEsIGYpOwogCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9yYWlzZS5jcHAgYi9saWJjL2Jpb25pYy9yYWlzZS5jcHAKaW5kZXggZjY5ZDkwYi4uMGRkMGFkNyAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcmFpc2UuY3BwCisrKyBiL2xpYmMvYmlvbmljL3JhaXNlLmNwcApAQCAtMjcsNiArMjcsNyBAQAogICovCiAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CiAKIGludCByYWlzZShpbnQgc2lnKSB7CiAgIGludCByYyA9IHB0aHJlYWRfa2lsbChwdGhyZWFkX3NlbGYoKSwgc2lnKTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NlbWFwaG9yZS5jIGIvbGliYy9iaW9uaWMvc2VtYXBob3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYTAxOWUuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvc2VtYXBob3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLSNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19hdG9taWNfaW5saW5lLmgiCi0jaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfZnV0ZXguaCIKLQotLyogSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgYSBzZW1hcGhvcmUgY29udGFpbnMgYQotICogMzEtYml0IHNpZ25lZCB2YWx1ZSBhbmQgYSAxLWJpdCAnc2hhcmVkJyBmbGFnCi0gKiAoZm9yIHByb2Nlc3Mtc2hhcmluZyBwdXJwb3NlKS4KLSAqCi0gKiBXZSB1c2UgdGhlIHZhbHVlIC0xIHRvIGluZGljYXRlIGNvbnRlbnRpb24gb24gdGhlCi0gKiBzZW1hcGhvcmUsIDAgb3IgbW9yZSB0byBpbmRpY2F0ZSB1bmNvbnRlbmRlZCBzdGF0ZSwKLSAqIGFueSB2YWx1ZSBsb3dlciB0aGFuIC0yIGlzIGludmFsaWQgYXQgcnVudGltZS4KLSAqCi0gKiBTdGF0ZSBkaWFncmFtOgotICoKLSAqIHBvc3QoMSkgID09PiAyCi0gKiBwb3N0KDApICA9PT4gMQotICogcG9zdCgtMSkgPT0+IDEsIHRoZW4gd2FrZSBhbGwgd2FpdGVycwotICoKLSAqIHdhaXQoMikgID09PiAxCi0gKiB3YWl0KDEpICA9PT4gMAotICogd2FpdCgwKSAgPT0+IC0xIHRoZW4gd2FpdCBmb3IgYSB3YWtlIHVwICsgbG9vcAotICogd2FpdCgtMSkgPT0+IC0xIHRoZW4gd2FpdCBmb3IgYSB3YWtlIHVwICsgbG9vcAotICoKLSAqLwotCi0vKiBVc2UgdGhlIHVwcGVyIDMxLWJpdHMgZm9yIHRoZSBjb3VudGVyLCBhbmQgdGhlIGxvd2VyIG9uZQotICogZm9yIHRoZSBzaGFyZWQgZmxhZy4KLSAqLwotI2RlZmluZSBTRU1DT1VOVF9TSEFSRURfTUFTSyAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgU0VNQ09VTlRfVkFMVUVfTUFTSyAgICAgICAweGZmZmZmZmZlCi0jZGVmaW5lIFNFTUNPVU5UX1ZBTFVFX1NISUZUICAgICAgMQotCi0vKiBNYXhpbXVtIHVuc2lnbmVkIHZhbHVlIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgc2VtYXBob3JlLgotICogT25lIGJpdCBpcyB1c2VkIGZvciB0aGUgc2hhcmVkIGZsYWcsIGFub3RoZXIgb25lIGZvciB0aGUKLSAqIHNpZ24gYml0LCBsZWF2aW5nIHVzIHdpdGggb25seSAzMCBiaXRzLgotICovCi0jZGVmaW5lIFNFTV9NQVhfVkFMVUUgICAgICAgICAgICAgMHgzZmZmZmZmZgotCi0vKiBjb252ZXJ0IGEgdmFsdWUgaW50byB0aGUgY29ycmVzcG9uZGluZyBzZW0tPmNvdW50IGJpdCBwYXR0ZXJuICovCi0jZGVmaW5lIFNFTUNPVU5UX0ZST01fVkFMVUUodmFsKSAgICAoKCh2YWwpIDw8IFNFTUNPVU5UX1ZBTFVFX1NISUZUKSAmIFNFTUNPVU5UX1ZBTFVFX01BU0spCi0KLS8qIGNvbnZlcnQgYSBzZW0tPmNvdW50IGJpdCBwYXR0ZXJuIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgc2lnbmVkIHZhbHVlICovCi0jZGVmaW5lIFNFTUNPVU5UX1RPX1ZBTFVFKHN2YWwpICAoKGludCkoc3ZhbCkgPj4gU0VNQ09VTlRfVkFMVUVfU0hJRlQpCi0KLS8qIHRoZSB2YWx1ZSArMSBhcyBhIHNlbS0+Y291bnQgYml0LXBhdHRlcm4uICovCi0jZGVmaW5lIFNFTUNPVU5UX09ORSAgICAgICAgICAgICAgU0VNQ09VTlRfRlJPTV9WQUxVRSgxKQotCi0vKiB0aGUgdmFsdWUgLTEgYXMgYSBzZW0tPmNvdW50IGJpdC1wYXR0ZXJuLiAqLwotI2RlZmluZSBTRU1DT1VOVF9NSU5VU19PTkUgICAgICAgIFNFTUNPVU5UX0ZST01fVkFMVUUoLTEpCi0KLSNkZWZpbmUgU0VNQ09VTlRfREVDUkVNRU5UKHN2YWwpICAgICgoKHN2YWwpIC0gKDFVIDw8IFNFTUNPVU5UX1ZBTFVFX1NISUZUKSkgJiBTRU1DT1VOVF9WQUxVRV9NQVNLKQotI2RlZmluZSBTRU1DT1VOVF9JTkNSRU1FTlQoc3ZhbCkgICAgKCgoc3ZhbCkgKyAoMVUgPDwgU0VNQ09VTlRfVkFMVUVfU0hJRlQpKSAmIFNFTUNPVU5UX1ZBTFVFX01BU0spCi0KLS8qIHJldHVybiB0aGUgc2hhcmVkIGJpdGZsYWcgZnJvbSBhIHNlbWFwaG9yZSAqLwotI2RlZmluZSBTRU1fR0VUX1NIQVJFRChzZW0pICAgICAgICgoc2VtKS0+Y291bnQgJiBTRU1DT1VOVF9TSEFSRURfTUFTSykKLQotCi1pbnQgc2VtX2luaXQoc2VtX3QgKnNlbSwgaW50IHBzaGFyZWQsIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLSAgICBpZiAoc2VtID09IE5VTEwpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICAvKiBlbnN1cmUgdGhhdCAndmFsdWUnIGNhbiBiZSBzdG9yZWQgaW4gdGhlIHNlbWFwaG9yZSAqLwotICAgIGlmICh2YWx1ZSA+IFNFTV9NQVhfVkFMVUUpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBzZW0tPmNvdW50ID0gU0VNQ09VTlRfRlJPTV9WQUxVRSh2YWx1ZSk7Ci0gICAgaWYgKHBzaGFyZWQgIT0gMCkKLSAgICAgICAgc2VtLT5jb3VudCB8PSBTRU1DT1VOVF9TSEFSRURfTUFTSzsKLQotICAgIHJldHVybiAwOwotfQotCi0KLWludCBzZW1fZGVzdHJveShzZW1fdCAqc2VtKQotewotICAgIGludCBjb3VudDsKLQotICAgIGlmIChzZW0gPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBjb3VudCA9IFNFTUNPVU5UX1RPX1ZBTFVFKHNlbS0+Y291bnQpOwotICAgIGlmIChjb3VudCA8IDApIHsKLSAgICAgICAgZXJybm8gPSBFQlVTWTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBzZW0tPmNvdW50ID0gMDsKLSAgICByZXR1cm4gMDsKLX0KLQotCi1zZW1fdCAqc2VtX29wZW4oY29uc3QgY2hhciAqbmFtZSBfX3VudXNlZCwgaW50IG9mbGFnIF9fdW51c2VkLCAuLi4pCi17Ci0gICAgZXJybm8gPSBFTk9TWVM7Ci0gICAgcmV0dXJuIFNFTV9GQUlMRUQ7Ci19Ci0KLQotaW50IHNlbV9jbG9zZShzZW1fdCAqc2VtKQotewotICAgIGlmIChzZW0gPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBlcnJubyA9IEVOT1NZUzsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLQotaW50IHNlbV91bmxpbmsoY29uc3QgY2hhciogbmFtZSBfX3VudXNlZCkKLXsKLSAgICBlcnJubyA9IEVOT1NZUzsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLQotLyogRGVjcmVtZW50IGEgc2VtYXBob3JlJ3MgdmFsdWUgYXRvbWljYWxseSwKLSAqIGFuZCByZXR1cm4gdGhlIG9sZCBvbmUuIEFzIGEgc3BlY2lhbCBjYXNlLAotICogdGhpcyByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZSB2YWx1ZSBpcwotICogbmVnYXRpdmUgKGkuZS4gLTEpCi0gKi8KLXN0YXRpYyBpbnQKLV9fc2VtX2RlYyh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnB2YWx1ZSkKLXsKLSAgICB1bnNpZ25lZCBpbnQgc2hhcmVkID0gKCpwdmFsdWUgJiBTRU1DT1VOVF9TSEFSRURfTUFTSyk7Ci0gICAgdW5zaWduZWQgaW50IG9sZCwgbmV3OwotICAgIGludCAgICAgICAgICByZXQ7Ci0KLSAgICBkbyB7Ci0gICAgICAgIG9sZCA9ICgqcHZhbHVlICYgU0VNQ09VTlRfVkFMVUVfTUFTSyk7Ci0gICAgICAgIHJldCA9IFNFTUNPVU5UX1RPX1ZBTFVFKG9sZCk7Ci0gICAgICAgIGlmIChyZXQgPCAwKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgbmV3ID0gU0VNQ09VTlRfREVDUkVNRU5UKG9sZCk7Ci0gICAgfQotICAgIHdoaWxlIChfX2Jpb25pY19jbXB4Y2hnKChpbnQpKG9sZHxzaGFyZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKG5ld3xzaGFyZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2xhdGlsZSBpbnQgKilwdmFsdWUpICE9IDApOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLS8qIFNhbWUgYXMgX19zZW1fZGVjLCBidXQgd2lsbCBub3QgdG91Y2ggYW55dGhpbmcgaWYgdGhlCi0gKiB2YWx1ZSBpcyBhbHJlYWR5IG5lZ2F0aXZlICpvciogMC4gUmV0dXJucyB0aGUgb2xkIHZhbHVlLgotICovCi1zdGF0aWMgaW50Ci1fX3NlbV90cnlkZWModm9sYXRpbGUgdW5zaWduZWQgaW50ICpwdmFsdWUpCi17Ci0gICAgdW5zaWduZWQgaW50IHNoYXJlZCA9ICgqcHZhbHVlICYgU0VNQ09VTlRfU0hBUkVEX01BU0spOwotICAgIHVuc2lnbmVkIGludCBvbGQsIG5ldzsKLSAgICBpbnQgICAgICAgICAgcmV0OwotCi0gICAgZG8gewotICAgICAgICBvbGQgPSAoKnB2YWx1ZSAmIFNFTUNPVU5UX1ZBTFVFX01BU0spOwotICAgICAgICByZXQgPSBTRU1DT1VOVF9UT19WQUxVRShvbGQpOwotICAgICAgICBpZiAocmV0IDw9IDApCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBuZXcgPSBTRU1DT1VOVF9ERUNSRU1FTlQob2xkKTsKLSAgICB9Ci0gICAgd2hpbGUgKF9fYmlvbmljX2NtcHhjaGcoKGludCkob2xkfHNoYXJlZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkobmV3fHNoYXJlZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvbGF0aWxlIGludCAqKXB2YWx1ZSkgIT0gMCk7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi0KLS8qICJJbmNyZW1lbnQiIHRoZSB2YWx1ZSBvZiBhIHNlbWFwaG9yZSBhdG9taWNhbGx5IGFuZAotICogcmV0dXJuIGl0cyBvbGQgdmFsdWUuIE5vdGUgdGhhdCB0aGlzIGltcGxlbWVudHMKLSAqIHRoZSBzcGVjaWFsIGNhc2Ugb2YgImluY3JlbWVudGluZyIgYW55IG5lZ2F0aXZlCi0gKiB2YWx1ZSB0byArMSBkaXJlY3RseS4KLSAqCi0gKiBOT1RFOiBUaGUgdmFsdWUgd2lsbCBfbm90XyB3cmFwIGFib3ZlIFNFTV9WQUxVRV9NQVgKLSAqLwotc3RhdGljIGludAotX19zZW1faW5jKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqcHZhbHVlKQotewotICAgIHVuc2lnbmVkIGludCAgc2hhcmVkID0gKCpwdmFsdWUgJiBTRU1DT1VOVF9TSEFSRURfTUFTSyk7Ci0gICAgdW5zaWduZWQgaW50ICBvbGQsIG5ldzsKLSAgICBpbnQgICAgICAgICAgIHJldDsKLQotICAgIGRvIHsKLSAgICAgICAgb2xkID0gKCpwdmFsdWUgJiBTRU1DT1VOVF9WQUxVRV9NQVNLKTsKLSAgICAgICAgcmV0ID0gU0VNQ09VTlRfVE9fVkFMVUUob2xkKTsKLQotICAgICAgICAvKiBDYW4ndCBnbyBoaWdoZXIgdGhhbiBTRU1fTUFYX1ZBTFVFICovCi0gICAgICAgIGlmIChyZXQgPT0gU0VNX01BWF9WQUxVRSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8qIElmIHRoZSBjb3VudGVyIGlzIG5lZ2F0aXZlLCBnbyBkaXJlY3RseSB0byArMSwKLSAgICAgICAgICogb3RoZXJ3aXNlIGp1c3QgaW5jcmVtZW50ICovCi0gICAgICAgIGlmIChyZXQgPCAwKQotICAgICAgICAgICAgbmV3ID0gU0VNQ09VTlRfT05FOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXcgPSBTRU1DT1VOVF9JTkNSRU1FTlQob2xkKTsKLSAgICB9Ci0gICAgd2hpbGUgKCBfX2Jpb25pY19jbXB4Y2hnKChpbnQpKG9sZHxzaGFyZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShuZXd8c2hhcmVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvbGF0aWxlIGludCopcHZhbHVlKSAhPSAwKTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLS8qIGxvY2sgYSBzZW1hcGhvcmUgKi8KLWludCBzZW1fd2FpdChzZW1fdCAqc2VtKQotewotICAgIHVuc2lnbmVkIHNoYXJlZDsKLQotICAgIGlmIChzZW0gPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHNoYXJlZCA9IFNFTV9HRVRfU0hBUkVEKHNlbSk7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChfX3NlbV9kZWMoJnNlbS0+Y291bnQpID4gMCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIF9fZnV0ZXhfd2FpdF9leCgmc2VtLT5jb3VudCwgc2hhcmVkLCBzaGFyZWR8U0VNQ09VTlRfTUlOVVNfT05FLCBOVUxMKTsKLSAgICB9Ci0gICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgc2VtX3RpbWVkd2FpdChzZW1fdCAqc2VtLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmFic190aW1lb3V0KQotewotICAgIHVuc2lnbmVkIGludCBzaGFyZWQ7Ci0KLSAgICBpZiAoc2VtID09IE5VTEwpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICAvKiBQT1NJWCBzYXlzIHdlIG5lZWQgdG8gdHJ5IHRvIGRlY3JlbWVudCB0aGUgc2VtYXBob3JlCi0gICAgICogYmVmb3JlIGNoZWNraW5nIHRoZSB0aW1lb3V0IHZhbHVlLiBOb3RlIHRoYXQgaWYgdGhlCi0gICAgICogdmFsdWUgaXMgY3VycmVudGx5IDAsIF9fc2VtX3RyeWRlYygpIGRvZXMgbm90aGluZy4KLSAgICAgKi8KLSAgICBpZiAoX19zZW1fdHJ5ZGVjKCZzZW0tPmNvdW50KSA+IDApIHsKLSAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiBDaGVjayBpdCBhcyBwZXIgUG9zaXggKi8KLSAgICBpZiAoYWJzX3RpbWVvdXQgPT0gTlVMTCAgICB8fAotICAgICAgICBhYnNfdGltZW91dC0+dHZfc2VjIDwgMCB8fAotICAgICAgICBhYnNfdGltZW91dC0+dHZfbnNlYyA8IDAgfHwKLSAgICAgICAgYWJzX3RpbWVvdXQtPnR2X25zZWMgPj0gMTAwMDAwMDAwMCkKLSAgICB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgc2hhcmVkID0gU0VNX0dFVF9TSEFSRUQoc2VtKTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOwotICAgICAgICBpbnQgICAgICAgICAgICAgcmV0OwotCi0gICAgICAgIC8qIFBvc2l4IG1hbmRhdGVzIENMT0NLX1JFQUxUSU1FIGhlcmUgKi8KLSAgICAgICAgY2xvY2tfZ2V0dGltZSggQ0xPQ0tfUkVBTFRJTUUsICZ0cyApOwotICAgICAgICB0cy50dl9zZWMgID0gYWJzX3RpbWVvdXQtPnR2X3NlYyAtIHRzLnR2X3NlYzsKLSAgICAgICAgdHMudHZfbnNlYyA9IGFic190aW1lb3V0LT50dl9uc2VjIC0gdHMudHZfbnNlYzsKLSAgICAgICAgaWYgKHRzLnR2X25zZWMgPCAwKSB7Ci0gICAgICAgICAgICB0cy50dl9uc2VjICs9IDEwMDAwMDAwMDA7Ci0gICAgICAgICAgICB0cy50dl9zZWMgIC09IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHMudHZfc2VjIDwgMCB8fCB0cy50dl9uc2VjIDwgMCkgewotICAgICAgICAgICAgZXJybm8gPSBFVElNRURPVVQ7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBUcnkgdG8gZ3JhYiB0aGUgc2VtYXBob3JlLiBJZiB0aGUgdmFsdWUgd2FzIDAsIHRoaXMKLSAgICAgICAgICogd2lsbCBhbHNvIGNoYW5nZSBpdCB0byAtMSAqLwotICAgICAgICBpZiAoX19zZW1fZGVjKCZzZW0tPmNvdW50KSA+IDApIHsKLSAgICAgICAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogQ29udGVudGlvbiBkZXRlY3RlZC4gd2FpdCBmb3IgYSB3YWtldXAgZXZlbnQgKi8KLSAgICAgICAgcmV0ID0gX19mdXRleF93YWl0X2V4KCZzZW0tPmNvdW50LCBzaGFyZWQsIHNoYXJlZHxTRU1DT1VOVF9NSU5VU19PTkUsICZ0cyk7Ci0KLSAgICAgICAgLyogcmV0dXJuIGluIGNhc2Ugb2YgdGltZW91dCBvciBpbnRlcnJ1cHQgKi8KLSAgICAgICAgaWYgKHJldCA9PSAtRVRJTUVET1VUIHx8IHJldCA9PSAtRUlOVFIpIHsKLSAgICAgICAgICAgIGVycm5vID0gLXJldDsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyogVW5sb2NrIGEgc2VtYXBob3JlICovCi1pbnQgc2VtX3Bvc3Qoc2VtX3QgKnNlbSkKLXsKLSAgICB1bnNpZ25lZCBpbnQgc2hhcmVkOwotICAgIGludCAgICAgICAgICBvbGQ7Ci0KLSAgICBpZiAoc2VtID09IE5VTEwpCi0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0KLSAgICBzaGFyZWQgPSBTRU1fR0VUX1NIQVJFRChzZW0pOwotCi0gICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgIG9sZCA9IF9fc2VtX2luYygmc2VtLT5jb3VudCk7Ci0gICAgaWYgKG9sZCA8IDApIHsKLSAgICAgICAgLyogY29udGVudGlvbiBvbiB0aGUgc2VtYXBob3JlLCB3YWtlIHVwIGFsbCB3YWl0ZXJzICovCi0gICAgICAgIF9fZnV0ZXhfd2FrZV9leCgmc2VtLT5jb3VudCwgc2hhcmVkLCBJTlRfTUFYKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAob2xkID09IFNFTV9NQVhfVkFMVUUpIHsKLSAgICAgICAgLyogb3ZlcmZsb3cgZGV0ZWN0ZWQgKi8KLSAgICAgICAgZXJybm8gPSBFT1ZFUkZMT1c7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50ICBzZW1fdHJ5d2FpdChzZW1fdCAqc2VtKQotewotICAgIGlmIChzZW0gPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGlmIChfX3NlbV90cnlkZWMoJnNlbS0+Y291bnQpID4gMCkgewotICAgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm5vID0gRUFHQUlOOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotfQotCi0vKiBOb3RlIHRoYXQgUG9zaXggcmVxdWlyZXMgdGhhdCBzZW1fZ2V0dmFsdWUoKSByZXR1cm5zLCBpbgotICogY2FzZSBvZiBjb250ZW50aW9uLCB0aGUgbmVnYXRpdmUgb2YgdGhlIG51bWJlciBvZiB3YWl0aW5nCi0gKiB0aHJlYWRzLgotICoKLSAqIEhvd2V2ZXIsIGNvZGUgdGhhdCBkZXBlbmRzIG9uIHRoaXMgbmVnYXRpdmUgdmFsdWUgdG8gYmUKLSAqIG1lYW5pbmdmdWwgaXMgbW9zdCBwcm9iYWJseSByYWN5LiBUaGUgR0xpYmMgc2VtX2dldHZhbHVlKCkKLSAqIG9ubHkgcmV0dXJucyB0aGUgc2VtYXBob3JlIHZhbHVlLCB3aGljaCBpcyAwLCBpbiBjYXNlIG9mCi0gKiBjb250ZW50aW9uLCBzbyB3ZSB3aWxsIG1pbWljayB0aGlzIGJlaGF2aW91ciBoZXJlIGluc3RlYWQKLSAqIGZvciBiZXR0ZXIgY29tcGF0aWJpbGl0eS4KLSAqLwotaW50ICBzZW1fZ2V0dmFsdWUoc2VtX3QgKnNlbSwgaW50ICpzdmFsKQotewotICAgIGludCAgdmFsOwotCi0gICAgaWYgKHNlbSA9PSBOVUxMIHx8IHN2YWwgPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHZhbCA9IFNFTUNPVU5UX1RPX1ZBTFVFKHNlbS0+Y291bnQpOwotICAgIGlmICh2YWwgPCAwKQotICAgICAgICB2YWwgPSAwOwotCi0gICAgKnN2YWwgPSB2YWw7Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zZW1hcGhvcmUuY3BwIGIvbGliYy9iaW9uaWMvc2VtYXBob3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWJmZWEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc2VtYXBob3JlLmNwcApAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2F0b21pY19pbmxpbmUuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19jb25zdGFudHMuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19mdXRleC5oIgorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX3RpbWVfY29udmVyc2lvbnMuaCIKKworLy8gSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgYSBzZW1hcGhvcmUgY29udGFpbnMgYQorLy8gMzEtYml0IHNpZ25lZCB2YWx1ZSBhbmQgYSAxLWJpdCAnc2hhcmVkJyBmbGFnCisvLyAoZm9yIHByb2Nlc3Mtc2hhcmluZyBwdXJwb3NlKS4KKy8vCisvLyBXZSB1c2UgdGhlIHZhbHVlIC0xIHRvIGluZGljYXRlIGNvbnRlbnRpb24gb24gdGhlCisvLyBzZW1hcGhvcmUsIDAgb3IgbW9yZSB0byBpbmRpY2F0ZSB1bmNvbnRlbmRlZCBzdGF0ZSwKKy8vIGFueSB2YWx1ZSBsb3dlciB0aGFuIC0yIGlzIGludmFsaWQgYXQgcnVudGltZS4KKy8vCisvLyBTdGF0ZSBkaWFncmFtOgorLy8KKy8vIHBvc3QoMSkgID09PiAyCisvLyBwb3N0KDApICA9PT4gMQorLy8gcG9zdCgtMSkgPT0+IDEsIHRoZW4gd2FrZSBhbGwgd2FpdGVycworLy8KKy8vIHdhaXQoMikgID09PiAxCisvLyB3YWl0KDEpICA9PT4gMAorLy8gd2FpdCgwKSAgPT0+IC0xIHRoZW4gd2FpdCBmb3IgYSB3YWtlIHVwICsgbG9vcAorLy8gd2FpdCgtMSkgPT0+IC0xIHRoZW4gd2FpdCBmb3IgYSB3YWtlIHVwICsgbG9vcAorCisvLyBVc2UgdGhlIHVwcGVyIDMxLWJpdHMgZm9yIHRoZSBjb3VudGVyLCBhbmQgdGhlIGxvd2VyIG9uZQorLy8gZm9yIHRoZSBzaGFyZWQgZmxhZy4KKyNkZWZpbmUgU0VNQ09VTlRfU0hBUkVEX01BU0sgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNFTUNPVU5UX1ZBTFVFX01BU0sgICAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBTRU1DT1VOVF9WQUxVRV9TSElGVCAgICAgIDEKKworLy8gQ29udmVydCBhIHZhbHVlIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgc2VtLT5jb3VudCBiaXQgcGF0dGVybi4KKyNkZWZpbmUgU0VNQ09VTlRfRlJPTV9WQUxVRSh2YWwpICAgICgoKHZhbCkgPDwgU0VNQ09VTlRfVkFMVUVfU0hJRlQpICYgU0VNQ09VTlRfVkFMVUVfTUFTSykKKworLy8gQ29udmVydCBhIHNlbS0+Y291bnQgYml0IHBhdHRlcm4gaW50byB0aGUgY29ycmVzcG9uZGluZyBzaWduZWQgdmFsdWUuCitzdGF0aWMgaW5saW5lIGludCBTRU1DT1VOVF9UT19WQUxVRSh1aW50MzJfdCBzdmFsKSB7CisgIHJldHVybiAoc3RhdGljX2Nhc3Q8aW50PihzdmFsKSA+PiBTRU1DT1VOVF9WQUxVRV9TSElGVCk7Cit9CisKKy8vIFRoZSB2YWx1ZSArMSBhcyBhIHNlbS0+Y291bnQgYml0LXBhdHRlcm4uCisjZGVmaW5lIFNFTUNPVU5UX09ORSAgICAgICAgICAgICAgU0VNQ09VTlRfRlJPTV9WQUxVRSgxKQorCisvLyBUaGUgdmFsdWUgLTEgYXMgYSBzZW0tPmNvdW50IGJpdC1wYXR0ZXJuLgorI2RlZmluZSBTRU1DT1VOVF9NSU5VU19PTkUgICAgICAgIFNFTUNPVU5UX0ZST01fVkFMVUUoLTEpCisKKyNkZWZpbmUgU0VNQ09VTlRfREVDUkVNRU5UKHN2YWwpICAgICgoKHN2YWwpIC0gKDFVIDw8IFNFTUNPVU5UX1ZBTFVFX1NISUZUKSkgJiBTRU1DT1VOVF9WQUxVRV9NQVNLKQorI2RlZmluZSBTRU1DT1VOVF9JTkNSRU1FTlQoc3ZhbCkgICAgKCgoc3ZhbCkgKyAoMVUgPDwgU0VNQ09VTlRfVkFMVUVfU0hJRlQpKSAmIFNFTUNPVU5UX1ZBTFVFX01BU0spCisKKy8vIFJldHVybiB0aGUgc2hhcmVkIGJpdGZsYWcgZnJvbSBhIHNlbWFwaG9yZS4KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgU0VNX0dFVF9TSEFSRUQoc2VtX3QqIHNlbSkgeworICByZXR1cm4gKHNlbS0+Y291bnQgJiBTRU1DT1VOVF9TSEFSRURfTUFTSyk7Cit9CisKKworaW50IHNlbV9pbml0KHNlbV90KiBzZW0sIGludCBwc2hhcmVkLCB1bnNpZ25lZCBpbnQgdmFsdWUpIHsKKyAgLy8gRW5zdXJlIHRoYXQgJ3ZhbHVlJyBjYW4gYmUgc3RvcmVkIGluIHRoZSBzZW1hcGhvcmUuCisgIGlmICh2YWx1ZSA+IFNFTV9WQUxVRV9NQVgpIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBzZW0tPmNvdW50ID0gU0VNQ09VTlRfRlJPTV9WQUxVRSh2YWx1ZSk7CisgIGlmIChwc2hhcmVkICE9IDApIHsKKyAgICBzZW0tPmNvdW50IHw9IFNFTUNPVU5UX1NIQVJFRF9NQVNLOworICB9CisgIHJldHVybiAwOworfQorCitpbnQgc2VtX2Rlc3Ryb3koc2VtX3QqKSB7CisgIHJldHVybiAwOworfQorCitzZW1fdCogc2VtX29wZW4oY29uc3QgY2hhciosIGludCwgLi4uKSB7CisgIGVycm5vID0gRU5PU1lTOworICByZXR1cm4gU0VNX0ZBSUxFRDsKK30KKworaW50IHNlbV9jbG9zZShzZW1fdCopIHsKKyAgZXJybm8gPSBFTk9TWVM7CisgIHJldHVybiAtMTsKK30KKworaW50IHNlbV91bmxpbmsoY29uc3QgY2hhciopIHsKKyAgZXJybm8gPSBFTk9TWVM7CisgIHJldHVybiAtMTsKK30KKworLy8gRGVjcmVtZW50IGEgc2VtYXBob3JlJ3MgdmFsdWUgYXRvbWljYWxseSwKKy8vIGFuZCByZXR1cm4gdGhlIG9sZCBvbmUuIEFzIGEgc3BlY2lhbCBjYXNlLAorLy8gdGhpcyByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZSB2YWx1ZSBpcworLy8gbmVnYXRpdmUgKGkuZS4gLTEpCitzdGF0aWMgaW50IF9fc2VtX2RlYyh2b2xhdGlsZSB1aW50MzJfdCogc2VtKSB7CisgIHZvbGF0aWxlIGludDMyX3QqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9sYXRpbGUgaW50MzJfdCo+KHNlbSk7CisgIHVpbnQzMl90IHNoYXJlZCA9ICgqc2VtICYgU0VNQ09VTlRfU0hBUkVEX01BU0spOworICB1aW50MzJfdCBvbGRfdmFsdWUsIG5ld192YWx1ZTsKKyAgaW50IHJldDsKKworICBkbyB7CisgICAgb2xkX3ZhbHVlID0gKCpzZW0gJiBTRU1DT1VOVF9WQUxVRV9NQVNLKTsKKyAgICByZXQgPSBTRU1DT1VOVF9UT19WQUxVRShvbGRfdmFsdWUpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBuZXdfdmFsdWUgPSBTRU1DT1VOVF9ERUNSRU1FTlQob2xkX3ZhbHVlKTsKKyAgfSB3aGlsZSAoX19iaW9uaWNfY21weGNoZygob2xkX3ZhbHVlfHNoYXJlZCksIChuZXdfdmFsdWV8c2hhcmVkKSwgcHRyKSAhPSAwKTsKKworICByZXR1cm4gcmV0OworfQorCisvLyBTYW1lIGFzIF9fc2VtX2RlYywgYnV0IHdpbGwgbm90IHRvdWNoIGFueXRoaW5nIGlmIHRoZQorLy8gdmFsdWUgaXMgYWxyZWFkeSBuZWdhdGl2ZSAqb3IqIDAuIFJldHVybnMgdGhlIG9sZCB2YWx1ZS4KK3N0YXRpYyBpbnQgX19zZW1fdHJ5ZGVjKHZvbGF0aWxlIHVpbnQzMl90KiBzZW0pIHsKKyAgdm9sYXRpbGUgaW50MzJfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSBpbnQzMl90Kj4oc2VtKTsKKyAgdWludDMyX3Qgc2hhcmVkID0gKCpzZW0gJiBTRU1DT1VOVF9TSEFSRURfTUFTSyk7CisgIHVpbnQzMl90IG9sZF92YWx1ZSwgbmV3X3ZhbHVlOworICBpbnQgICAgICAgICAgcmV0OworCisgIGRvIHsKKyAgICBvbGRfdmFsdWUgPSAoKnNlbSAmIFNFTUNPVU5UX1ZBTFVFX01BU0spOworICAgIHJldCA9IFNFTUNPVU5UX1RPX1ZBTFVFKG9sZF92YWx1ZSk7CisgICAgaWYgKHJldCA8PSAwKSB7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBuZXdfdmFsdWUgPSBTRU1DT1VOVF9ERUNSRU1FTlQob2xkX3ZhbHVlKTsKKyAgfSB3aGlsZSAoX19iaW9uaWNfY21weGNoZygob2xkX3ZhbHVlfHNoYXJlZCksIChuZXdfdmFsdWV8c2hhcmVkKSwgcHRyKSAhPSAwKTsKKworICByZXR1cm4gcmV0OworfQorCisKKy8vICJJbmNyZW1lbnQiIHRoZSB2YWx1ZSBvZiBhIHNlbWFwaG9yZSBhdG9taWNhbGx5IGFuZAorLy8gcmV0dXJuIGl0cyBvbGQgdmFsdWUuIE5vdGUgdGhhdCB0aGlzIGltcGxlbWVudHMKKy8vIHRoZSBzcGVjaWFsIGNhc2Ugb2YgImluY3JlbWVudGluZyIgYW55IG5lZ2F0aXZlCisvLyB2YWx1ZSB0byArMSBkaXJlY3RseS4KKy8vCisvLyBOT1RFOiBUaGUgdmFsdWUgd2lsbCBfbm90XyB3cmFwIGFib3ZlIFNFTV9WQUxVRV9NQVgKK3N0YXRpYyBpbnQgX19zZW1faW5jKHZvbGF0aWxlIHVpbnQzMl90KiBzZW0pIHsKKyAgdm9sYXRpbGUgaW50MzJfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSBpbnQzMl90Kj4oc2VtKTsKKyAgdWludDMyX3Qgc2hhcmVkID0gKCpzZW0gJiBTRU1DT1VOVF9TSEFSRURfTUFTSyk7CisgIHVpbnQzMl90IG9sZF92YWx1ZSwgbmV3X3ZhbHVlOworICBpbnQgcmV0OworCisgIGRvIHsKKyAgICBvbGRfdmFsdWUgPSAoKnNlbSAmIFNFTUNPVU5UX1ZBTFVFX01BU0spOworICAgIHJldCA9IFNFTUNPVU5UX1RPX1ZBTFVFKG9sZF92YWx1ZSk7CisKKyAgICAvLyBDYW4ndCBnbyBoaWdoZXIgdGhhbiBTRU1fVkFMVUVfTUFYLgorICAgIGlmIChyZXQgPT0gU0VNX1ZBTFVFX01BWCkgeworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gSWYgdGhlIGNvdW50ZXIgaXMgbmVnYXRpdmUsIGdvIGRpcmVjdGx5IHRvICsxLCBvdGhlcndpc2UganVzdCBpbmNyZW1lbnQuCisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgbmV3X3ZhbHVlID0gU0VNQ09VTlRfT05FOworICAgIH0gZWxzZSB7CisgICAgICBuZXdfdmFsdWUgPSBTRU1DT1VOVF9JTkNSRU1FTlQob2xkX3ZhbHVlKTsKKyAgICB9CisgIH0gd2hpbGUgKF9fYmlvbmljX2NtcHhjaGcoKG9sZF92YWx1ZXxzaGFyZWQpLCAobmV3X3ZhbHVlfHNoYXJlZCksIHB0cikgIT0gMCk7CisKKyAgcmV0dXJuIHJldDsKK30KKworaW50IHNlbV93YWl0KHNlbV90KiBzZW0pIHsKKyAgdWludDMyX3Qgc2hhcmVkID0gU0VNX0dFVF9TSEFSRUQoc2VtKTsKKworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChfX3NlbV9kZWMoJnNlbS0+Y291bnQpID4gMCkgeworICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgX19mdXRleF93YWl0X2V4KCZzZW0tPmNvdW50LCBzaGFyZWQsIHNoYXJlZHxTRU1DT1VOVF9NSU5VU19PTkUsIE5VTEwpOworICB9Cit9CisKK2ludCBzZW1fdGltZWR3YWl0KHNlbV90KiBzZW0sIGNvbnN0IHRpbWVzcGVjKiBhYnNfdGltZW91dCkgeworICAvLyBQT1NJWCBzYXlzIHdlIG5lZWQgdG8gdHJ5IHRvIGRlY3JlbWVudCB0aGUgc2VtYXBob3JlCisgIC8vIGJlZm9yZSBjaGVja2luZyB0aGUgdGltZW91dCB2YWx1ZS4gTm90ZSB0aGF0IGlmIHRoZQorICAvLyB2YWx1ZSBpcyBjdXJyZW50bHkgMCwgX19zZW1fdHJ5ZGVjKCkgZG9lcyBub3RoaW5nLgorICBpZiAoX19zZW1fdHJ5ZGVjKCZzZW0tPmNvdW50KSA+IDApIHsKKyAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvLyBDaGVjayBpdCBhcyBwZXIgUE9TSVguCisgIGlmIChhYnNfdGltZW91dCA9PSBOVUxMIHx8IGFic190aW1lb3V0LT50dl9zZWMgPCAwIHx8IGFic190aW1lb3V0LT50dl9uc2VjIDwgMCB8fCBhYnNfdGltZW91dC0+dHZfbnNlYyA+PSBOU19QRVJfUykgeworICAgIGVycm5vID0gRUlOVkFMOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHVpbnQzMl90IHNoYXJlZCA9IFNFTV9HRVRfU0hBUkVEKHNlbSk7CisKKyAgd2hpbGUgKHRydWUpIHsKKyAgICAvLyBQT1NJWCBtYW5kYXRlcyBDTE9DS19SRUFMVElNRSBoZXJlLgorICAgIHRpbWVzcGVjIHRzOworICAgIGlmICghdGltZXNwZWNfZnJvbV9hYnNvbHV0ZV90aW1lc3BlYyh0cywgKmFic190aW1lb3V0LCBDTE9DS19SRUFMVElNRSkpIHsKKyAgICAgIGVycm5vID0gRVRJTUVET1VUOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8vIFRyeSB0byBncmFiIHRoZSBzZW1hcGhvcmUuIElmIHRoZSB2YWx1ZSB3YXMgMCwgdGhpcyB3aWxsIGFsc28gY2hhbmdlIGl0IHRvIC0xLgorICAgIGlmIChfX3NlbV9kZWMoJnNlbS0+Y291bnQpID4gMCkgeworICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gQ29udGVudGlvbiBkZXRlY3RlZC4gV2FpdCBmb3IgYSB3YWtldXAgZXZlbnQuCisgICAgaW50IHJldCA9IF9fZnV0ZXhfd2FpdF9leCgmc2VtLT5jb3VudCwgc2hhcmVkLCBzaGFyZWR8U0VNQ09VTlRfTUlOVVNfT05FLCAmdHMpOworCisgICAgLy8gUmV0dXJuIGluIGNhc2Ugb2YgdGltZW91dCBvciBpbnRlcnJ1cHQuCisgICAgaWYgKHJldCA9PSAtRVRJTUVET1VUIHx8IHJldCA9PSAtRUlOVFIpIHsKKyAgICAgIGVycm5vID0gLXJldDsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBzZW1fcG9zdChzZW1fdCogc2VtKSB7CisgIHVpbnQzMl90IHNoYXJlZCA9IFNFTV9HRVRfU0hBUkVEKHNlbSk7CisKKyAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICBpbnQgb2xkX3ZhbHVlID0gX19zZW1faW5jKCZzZW0tPmNvdW50KTsKKyAgaWYgKG9sZF92YWx1ZSA8IDApIHsKKyAgICAvLyBDb250ZW50aW9uIG9uIHRoZSBzZW1hcGhvcmUuIFdha2UgdXAgYWxsIHdhaXRlcnMuCisgICAgX19mdXRleF93YWtlX2V4KCZzZW0tPmNvdW50LCBzaGFyZWQsIElOVF9NQVgpOworICB9IGVsc2UgaWYgKG9sZF92YWx1ZSA9PSBTRU1fVkFMVUVfTUFYKSB7CisgICAgLy8gT3ZlcmZsb3cgZGV0ZWN0ZWQuCisgICAgZXJybm8gPSBFT1ZFUkZMT1c7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBzZW1fdHJ5d2FpdChzZW1fdCogc2VtKSB7CisgIGlmIChfX3NlbV90cnlkZWMoJnNlbS0+Y291bnQpID4gMCkgeworICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKKyAgICByZXR1cm4gMDsKKyAgfSBlbHNlIHsKKyAgICBlcnJubyA9IEVBR0FJTjsKKyAgICByZXR1cm4gLTE7CisgIH0KK30KKworaW50IHNlbV9nZXR2YWx1ZShzZW1fdCogc2VtLCBpbnQqIHN2YWwpIHsKKyAgaW50IHZhbCA9IFNFTUNPVU5UX1RPX1ZBTFVFKHNlbS0+Y291bnQpOworICBpZiAodmFsIDwgMCkgeworICAgIHZhbCA9IDA7CisgIH0KKworICAqc3ZhbCA9IHZhbDsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdHJjb2xsX2wuY3BwIGIvbGliYy9iaW9uaWMvc3RyY29sbF9sLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q3YzI4Yi4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9zdHJjb2xsX2wuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLWludCBzdHJjb2xsX2woY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBsb2NhbGVfdCkgewotICByZXR1cm4gc3RyY29sbChzMSwgczIpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RyZXJyb3Jfci5jcHAgYi9saWJjL2Jpb25pYy9zdHJlcnJvcl9yLmNwcAppbmRleCAxZTU3Y2MwLi5kNDE5ZmIxIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9zdHJlcnJvcl9yLmNwcAorKysgYi9saWJjL2Jpb25pYy9zdHJlcnJvcl9yLmNwcApAQCAtMSwxMSArMSwxNiBAQAogLyogJE9wZW5CU0Q6IHN0cmVycm9yX3IuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCiAvKiBQdWJsaWMgRG9tYWluIDxtYXJjQHNuYWZ1Lm9yZz4gKi8KIAorLy8gRysrIGF1dG9tYXRpY2FsbHkgZGVmaW5lcyBfR05VX1NPVVJDRSwgd2hpY2ggdGhlbiBtZWFucyB0aGF0IDxzdHJpbmcuaD4KKy8vIGdpdmVzIHVzIHRoZSBHTlUgdmFyaWFudC4KKyN1bmRlZiBfR05VX1NPVVJDRQorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNpbmNsdWRlICJwcml2YXRlL0Vycm5vUmVzdG9yZXIuaCIKICNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgpAQCAtNjIsNiArNjcsMTIgQEAKICAgcmV0dXJuIDA7CiB9CiAKK2V4dGVybiAiQyIgY2hhciogX19nbnVfc3RyZXJyb3JfcihpbnQgZXJyb3JfbnVtYmVyLCBjaGFyKiBidWYsIHNpemVfdCBidWZfbGVuKSB7CisgIEVycm5vUmVzdG9yZXIgZXJybm9fcmVzdG9yZXI7IC8vIFRoZSBnbGliYyBzdHJlcnJvcl9yIGRvZXNuJ3Qgc2V0IGVycm5vIGlmIGl0IHRydW5jYXRlcy4uLgorICBzdHJlcnJvcl9yKGVycm9yX251bWJlciwgYnVmLCBidWZfbGVuKTsKKyAgcmV0dXJuIGJ1ZjsgLy8gLi4uYW5kIGp1c3QgcmV0dXJucyB3aGF0ZXZlciBmaXQuCit9CisKIGV4dGVybiAiQyIgX19MSUJDX0hJRERFTl9fIGNvbnN0IGNoYXIqIF9fc3Ryc2lnbmFsKGludCBzaWduYWxfbnVtYmVyLCBjaGFyKiBidWYsIHNpemVfdCBidWZfbGVuKSB7CiAgIGNvbnN0IGNoYXIqIHNpZ25hbF9uYW1lID0gX19zdHJzaWduYWxfbG9va3VwKHNpZ25hbF9udW1iZXIpOwogICBpZiAoc2lnbmFsX25hbWUgIT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RydG9sZF9sLmNwcCBiL2xpYmMvYmlvbmljL3N0cnRvbGRfbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMjMwYjkuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvc3RydG9sZF9sLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1sb25nIGRvdWJsZSBzdHJ0b2xkX2woY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgbG9jYWxlX3QpIHsKLSAgcmV0dXJuIHN0cnRvbGQobnB0ciwgZW5kcHRyKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cnRvbGxfbC5jcHAgYi9saWJjL2Jpb25pYy9zdHJ0b2xsX2wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2IxMjZlLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3N0cnRvbGxfbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotbG9uZyBsb25nIHN0cnRvbGxfbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSwgbG9jYWxlX3QpIHsKLSAgcmV0dXJuIHN0cnRvbGwobnB0ciwgZW5kcHRyLCBiYXNlKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cnRvdWxsX2wuY3BwIGIvbGliYy9iaW9uaWMvc3RydG91bGxfbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5OGJhMGUuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvc3RydG91bGxfbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotdW5zaWduZWQgbG9uZyBsb25nIHN0cnRvdWxsX2woY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVfdCkgewotICByZXR1cm4gc3RydG91bGwobnB0ciwgZW5kcHRyLCBiYXNlKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0dWJzLmNwcCBiL2xpYmMvYmlvbmljL3N0dWJzLmNwcAppbmRleCBiMWUzOGJlLi44OGU1YWM1IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9zdHVicy5jcHAKKysrIGIvbGliYy9iaW9uaWMvc3R1YnMuY3BwCkBAIC00MCwxMCArNDAsMTAgQEAKICNpbmNsdWRlICJwcml2YXRlL2FuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaCIKICNpbmNsdWRlICJwcml2YXRlL0Vycm5vUmVzdG9yZXIuaCIKICNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgorI2luY2x1ZGUgInByaXZhdGUvVGhyZWFkTG9jYWxCdWZmZXIuaCIKIAotLy8gVGhyZWFkLXNwZWNpZmljIHN0YXRlIGZvciB0aGUgbm9uLXJlZW50cmFudCBmdW5jdGlvbnMuCi1zdGF0aWMgcHRocmVhZF9vbmNlX3Qgc3R1YnNfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOwotc3RhdGljIHB0aHJlYWRfa2V5X3Qgc3R1YnNfa2V5OworR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUihzdHVicyk7CisKIHN0cnVjdCBzdHVic19zdGF0ZV90IHsKICAgcGFzc3dkIHBhc3N3ZF87CiAgIGdyb3VwIGdyb3VwXzsKQEAgLTExMywzOSArMTEzLDE0IEBACiAgIHJldHVybiBkb19nZXRwd19yKDAsIE5VTEwsIHVpZCwgcHdkLCBidWYsIGJ5dGVfY291bnQsIHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBzdHVic19zdGF0ZV90KiBzdHVic19zdGF0ZV9hbGxvYygpIHsKLSAgc3R1YnNfc3RhdGVfdCogIHMgPSBzdGF0aWNfY2FzdDxzdHVic19zdGF0ZV90Kj4oY2FsbG9jKDEsIHNpemVvZigqcykpKTsKLSAgaWYgKHMgIT0gTlVMTCkgewotICAgIHMtPmdyb3VwXy5ncl9tZW0gPSBzLT5ncm91cF9tZW1iZXJzXzsKLSAgfQotICByZXR1cm4gczsKLX0KLQotc3RhdGljIHZvaWQgc3R1YnNfc3RhdGVfZnJlZSh2b2lkKiBwdHIpIHsKLSAgc3R1YnNfc3RhdGVfdCogc3RhdGUgPSBzdGF0aWNfY2FzdDxzdHVic19zdGF0ZV90Kj4ocHRyKTsKLSAgZnJlZShzdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fc3R1YnNfa2V5X2luaXQoKSB7Ci0gIHB0aHJlYWRfa2V5X2NyZWF0ZSgmc3R1YnNfa2V5LCBzdHVic19zdGF0ZV9mcmVlKTsKLX0KLQogc3RhdGljIHN0dWJzX3N0YXRlX3QqIF9fc3R1YnNfc3RhdGUoKSB7Ci0gIHB0aHJlYWRfb25jZSgmc3R1YnNfb25jZSwgX19zdHVic19rZXlfaW5pdCk7Ci0gIHN0dWJzX3N0YXRlX3QqIHMgPSBzdGF0aWNfY2FzdDxzdHVic19zdGF0ZV90Kj4ocHRocmVhZF9nZXRzcGVjaWZpYyhzdHVic19rZXkpKTsKLSAgaWYgKHMgPT0gTlVMTCkgewotICAgIHMgPSBzdHVic19zdGF0ZV9hbGxvYygpOwotICAgIGlmIChzID09IE5VTEwpIHsKLSAgICAgIGVycm5vID0gRU5PTUVNOyAgLy8gSnVzdCBpbiBjYXNlLgotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAocHRocmVhZF9zZXRzcGVjaWZpYyhzdHVic19rZXksIHMpICE9IDApIHsKLSAgICAgICAgc3R1YnNfc3RhdGVfZnJlZShzKTsKLSAgICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHMgPSBOVUxMOwotICAgICAgfQotICAgIH0KKyAgTE9DQUxfSU5JVF9USFJFQURfTE9DQUxfQlVGRkVSKHN0dWJzX3N0YXRlX3QqLCBzdHVicywgc2l6ZW9mKHN0dWJzX3N0YXRlX3QpKTsKKworICBpZiAoc3R1YnNfdGxzX2J1ZmZlciAhPSBOVUxMKSB7CisgICAgbWVtc2V0KHN0dWJzX3Rsc19idWZmZXIsIDAsIHNpemVvZihzdHVic19zdGF0ZV90KSk7CisgICAgc3R1YnNfdGxzX2J1ZmZlci0+Z3JvdXBfLmdyX21lbSA9IHN0dWJzX3Rsc19idWZmZXItPmdyb3VwX21lbWJlcnNfOwogICB9Ci0gIHJldHVybiBzOworICByZXR1cm4gc3R1YnNfdGxzX2J1ZmZlcjsKIH0KIAogc3RhdGljIHBhc3N3ZCogYW5kcm9pZF9paW5mb190b19wYXNzd2Qoc3R1YnNfc3RhdGVfdCogc3RhdGUsCkBAIC0xNjcsNyArMTQyLDYgQEAKICAgZ3ItPmdyX25hbWUgICA9IChjaGFyKikgaWluZm8tPm5hbWU7CiAgIGdyLT5ncl9naWQgICAgPSBpaW5mby0+YWlkOwogICBnci0+Z3JfbWVtWzBdID0gZ3ItPmdyX25hbWU7Ci0gIGdyLT5ncl9tZW1bMV0gPSBOVUxMOwogICByZXR1cm4gZ3I7CiB9CiAKQEAgLTIwOCwxOCArMTgyLDI3IEBACiB9CiAKIC8vIFRyYW5zbGF0ZSBhIHVzZXIvZ3JvdXAgbmFtZSB0byB0aGUgY29ycmVzcG9uZGluZyB1c2VyL2dyb3VwIGlkLgorLy8gYWxsX2ExMjM0IC0+IDAgKiBBSURfVVNFUiArIEFJRF9TSEFSRURfR0lEX1NUQVJUICsgMTIzNCAoZ3JvdXAgbmFtZSBvbmx5KQogLy8gdTBfYTEyMzQgLT4gMCAqIEFJRF9VU0VSICsgQUlEX0FQUCArIDEyMzQKIC8vIHUyX2kxMDAwIC0+IDIgKiBBSURfVVNFUiArIEFJRF9JU09MQVRFRF9TVEFSVCArIDEwMDAKIC8vIHUxX3N5c3RlbSAtPiAxICogQUlEX1VTRVIgKyBhbmRyb2lkX2lkc1snc3lzdGVtJ10KIC8vIHJldHVybnMgMCBhbmQgc2V0cyBlcnJubyB0byBFTk9FTlQgaW4gY2FzZSBvZiBlcnJvcgotc3RhdGljIHVuc2lnbmVkIGFwcF9pZF9mcm9tX25hbWUoY29uc3QgY2hhciogbmFtZSkgewotICBpZiAobmFtZVswXSAhPSAndScgfHwgIWlzZGlnaXQobmFtZVsxXSkpIHsKK3N0YXRpYyB1bnNpZ25lZCBhcHBfaWRfZnJvbV9uYW1lKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgaXNfZ3JvdXApIHsKKyAgY2hhciogZW5kOworICB1bnNpZ25lZCBsb25nIHVzZXJpZDsKKyAgYm9vbCBpc19zaGFyZWRfZ2lkID0gZmFsc2U7CisKKyAgaWYgKGlzX2dyb3VwICYmIG5hbWVbMF0gPT0gJ2EnICYmIG5hbWVbMV0gPT0gJ2wnICYmIG5hbWVbMl0gPT0gJ2wnKSB7CisgICAgZW5kID0gY29uc3RfY2FzdDxjaGFyKj4obmFtZSszKTsKKyAgICB1c2VyaWQgPSAwOworICAgIGlzX3NoYXJlZF9naWQgPSB0cnVlOworICB9IGVsc2UgaWYgKG5hbWVbMF0gPT0gJ3UnICYmIGlzZGlnaXQobmFtZVsxXSkpIHsKKyAgICB1c2VyaWQgPSBzdHJ0b3VsKG5hbWUrMSwgJmVuZCwgMTApOworICB9IGVsc2UgewogICAgIGVycm5vID0gRU5PRU5UOwogICAgIHJldHVybiAwOwogICB9CiAKLSAgY2hhciogZW5kOwotICB1bnNpZ25lZCBsb25nIHVzZXJpZCA9IHN0cnRvdWwobmFtZSsxLCAmZW5kLCAxMCk7CiAgIGlmIChlbmRbMF0gIT0gJ18nIHx8IGVuZFsxXSA9PSAwKSB7CiAgICAgZXJybm8gPSBFTk9FTlQ7CiAgICAgcmV0dXJuIDA7CkBAIC0yMjcsOCArMjEwLDE3IEBACiAKICAgdW5zaWduZWQgbG9uZyBhcHBpZCA9IDA7CiAgIGlmIChlbmRbMV0gPT0gJ2EnICYmIGlzZGlnaXQoZW5kWzJdKSkgewotICAgIC8vIGVuZCB3aWxsIHBvaW50IHRvIFwwIGlmIHRoZSBzdHJ0b3VsIGJlbG93IHN1Y2NlZWRzLgotICAgIGFwcGlkID0gc3RydG91bChlbmQrMiwgJmVuZCwgMTApICsgQUlEX0FQUDsKKyAgICBpZiAoaXNfc2hhcmVkX2dpZCkgeworICAgICAgLy8gZW5kIHdpbGwgcG9pbnQgdG8gXDAgaWYgdGhlIHN0cnRvdWwgYmVsb3cgc3VjY2VlZHMuCisgICAgICBhcHBpZCA9IHN0cnRvdWwoZW5kKzIsICZlbmQsIDEwKSArIEFJRF9TSEFSRURfR0lEX1NUQVJUOworICAgICAgaWYgKGFwcGlkID4gQUlEX1NIQVJFRF9HSURfRU5EKSB7CisgICAgICAgIGVycm5vID0gRU5PRU5UOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLy8gZW5kIHdpbGwgcG9pbnQgdG8gXDAgaWYgdGhlIHN0cnRvdWwgYmVsb3cgc3VjY2VlZHMuCisgICAgICBhcHBpZCA9IHN0cnRvdWwoZW5kKzIsICZlbmQsIDEwKSArIEFJRF9BUFA7CisgICAgfQogICB9IGVsc2UgaWYgKGVuZFsxXSA9PSAnaScgJiYgaXNkaWdpdChlbmRbMl0pKSB7CiAgICAgLy8gZW5kIHdpbGwgcG9pbnQgdG8gXDAgaWYgdGhlIHN0cnRvdWwgYmVsb3cgc3VjY2VlZHMuCiAgICAgYXBwaWQgPSBzdHJ0b3VsKGVuZCsyLCAmZW5kLCAxMCkgKyBBSURfSVNPTEFURURfU1RBUlQ7CkBAIC0yNjMsMTIgKzI1NSwxMSBAQAogICByZXR1cm4gKHVuc2lnbmVkKShhcHBpZCArIHVzZXJpZCpBSURfVVNFUik7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50X2FwcF9uYW1lX2Zyb21fYXBwaWRfdXNlcmlkKGNvbnN0IHVpZF90IGFwcGlkLAotICAgIGNvbnN0IHVpZF90IHVzZXJpZCwgY2hhciogYnVmZmVyLCBjb25zdCBpbnQgYnVmZmVybGVuKSB7CitzdGF0aWMgdm9pZCBwcmludF9hcHBfbmFtZV9mcm9tX3VpZChjb25zdCB1aWRfdCB1aWQsIGNoYXIqIGJ1ZmZlciwgY29uc3QgaW50IGJ1ZmZlcmxlbikgeworICBjb25zdCB1aWRfdCBhcHBpZCA9IHVpZCAlIEFJRF9VU0VSOworICBjb25zdCB1aWRfdCB1c2VyaWQgPSB1aWQgLyBBSURfVVNFUjsKICAgaWYgKGFwcGlkID49IEFJRF9JU09MQVRFRF9TVEFSVCkgewogICAgIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVybGVuLCAidSV1X2kldSIsIHVzZXJpZCwgYXBwaWQgLSBBSURfSVNPTEFURURfU1RBUlQpOwotICB9IGVsc2UgaWYgKHVzZXJpZCA9PSAwICYmIGFwcGlkID49IEFJRF9TSEFSRURfR0lEX1NUQVJUKSB7Ci0gICAgc25wcmludGYoYnVmZmVyLCBidWZmZXJsZW4sICJhbGxfYSV1IiwgYXBwaWQgLSBBSURfU0hBUkVEX0dJRF9TVEFSVCk7CiAgIH0gZWxzZSBpZiAoYXBwaWQgPCBBSURfQVBQKSB7CiAgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCBhbmRyb2lkX2lkX2NvdW50OyBuKyspIHsKICAgICAgIGlmIChhbmRyb2lkX2lkc1tuXS5haWQgPT0gYXBwaWQpIHsKQEAgLTI4MSwxMCArMjcyLDIzIEBACiAgIH0KIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfYXBwX25hbWVfZnJvbV91aWQoY29uc3QgdWlkX3QgdWlkLCBjaGFyKiBidWZmZXIsIGNvbnN0IGludCBidWZmZXJsZW4pIHsKLSAgY29uc3QgdWlkX3QgYXBwaWQgPSB1aWQgJSBBSURfVVNFUjsKLSAgY29uc3QgdWlkX3QgdXNlcmlkID0gdWlkIC8gQUlEX1VTRVI7Ci0gIHJldHVybiBwcmludF9hcHBfbmFtZV9mcm9tX2FwcGlkX3VzZXJpZChhcHBpZCwgdXNlcmlkLCBidWZmZXIsIGJ1ZmZlcmxlbik7CitzdGF0aWMgdm9pZCBwcmludF9hcHBfbmFtZV9mcm9tX2dpZChjb25zdCBnaWRfdCBnaWQsIGNoYXIqIGJ1ZmZlciwgY29uc3QgaW50IGJ1ZmZlcmxlbikgeworICBjb25zdCB1aWRfdCBhcHBpZCA9IGdpZCAlIEFJRF9VU0VSOworICBjb25zdCB1aWRfdCB1c2VyaWQgPSBnaWQgLyBBSURfVVNFUjsKKyAgaWYgKGFwcGlkID49IEFJRF9JU09MQVRFRF9TVEFSVCkgeworICAgIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVybGVuLCAidSV1X2kldSIsIHVzZXJpZCwgYXBwaWQgLSBBSURfSVNPTEFURURfU1RBUlQpOworICB9IGVsc2UgaWYgKHVzZXJpZCA9PSAwICYmIGFwcGlkID49IEFJRF9TSEFSRURfR0lEX1NUQVJUICYmIGFwcGlkIDw9IEFJRF9TSEFSRURfR0lEX0VORCkgeworICAgIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVybGVuLCAiYWxsX2EldSIsIGFwcGlkIC0gQUlEX1NIQVJFRF9HSURfU1RBUlQpOworICB9IGVsc2UgaWYgKGFwcGlkIDwgQUlEX0FQUCkgeworICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgYW5kcm9pZF9pZF9jb3VudDsgbisrKSB7CisgICAgICBpZiAoYW5kcm9pZF9pZHNbbl0uYWlkID09IGFwcGlkKSB7CisgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVybGVuLCAidSV1XyVzIiwgdXNlcmlkLCBhbmRyb2lkX2lkc1tuXS5uYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzbnByaW50ZihidWZmZXIsIGJ1ZmZlcmxlbiwgInUldV9hJXUiLCB1c2VyaWQsIGFwcGlkIC0gQUlEX0FQUCk7CisgIH0KIH0KIAogLy8gVHJhbnNsYXRlIGEgdWlkIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbmFtZS4KQEAgLTMwMSwxMiArMzA1LDkgQEAKICAgICByZXR1cm4gTlVMTDsKICAgfQogCisgIHByaW50X2FwcF9uYW1lX2Zyb21fdWlkKHVpZCwgc3RhdGUtPmFwcF9uYW1lX2J1ZmZlcl8sIHNpemVvZihzdGF0ZS0+YXBwX25hbWVfYnVmZmVyXykpOworCiAgIGNvbnN0IHVpZF90IGFwcGlkID0gdWlkICUgQUlEX1VTRVI7Ci0gIGNvbnN0IHVpZF90IHVzZXJpZCA9IHVpZCAvIEFJRF9VU0VSOwotCi0gIHByaW50X2FwcF9uYW1lX2Zyb21fYXBwaWRfdXNlcmlkKGFwcGlkLCB1c2VyaWQsIHN0YXRlLT5hcHBfbmFtZV9idWZmZXJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RhdGUtPmFwcF9uYW1lX2J1ZmZlcl8pKTsKLQogICBpZiAoYXBwaWQgPCBBSURfQVBQKSB7CiAgICAgICBzbnByaW50ZihzdGF0ZS0+ZGlyX2J1ZmZlcl8sIHNpemVvZihzdGF0ZS0+ZGlyX2J1ZmZlcl8pLCAiLyIpOwogICB9IGVsc2UgewpAQCAtMzMyLDE0ICszMzMsMTMgQEAKICAgICByZXR1cm4gTlVMTDsKICAgfQogCi0gIHByaW50X2FwcF9uYW1lX2Zyb21fdWlkKGdpZCwgc3RhdGUtPmdyb3VwX25hbWVfYnVmZmVyXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0YXRlLT5ncm91cF9uYW1lX2J1ZmZlcl8pKTsKKyAgcHJpbnRfYXBwX25hbWVfZnJvbV9naWQoZ2lkLCBzdGF0ZS0+Z3JvdXBfbmFtZV9idWZmZXJfLCBzaXplb2Yoc3RhdGUtPmdyb3VwX25hbWVfYnVmZmVyXykpOwogCiAgIGdyb3VwKiBnciA9ICZzdGF0ZS0+Z3JvdXBfOwogICBnci0+Z3JfbmFtZSAgID0gc3RhdGUtPmdyb3VwX25hbWVfYnVmZmVyXzsKICAgZ3ItPmdyX2dpZCAgICA9IGdpZDsKICAgZ3ItPmdyX21lbVswXSA9IGdyLT5ncl9uYW1lOwotICBnci0+Z3JfbWVtWzFdID0gTlVMTDsKKwogICByZXR1cm4gZ3I7CiB9CiAKQEAgLTM2Nyw3ICszNjcsNyBAQAogICBpZiAocHcgIT0gTlVMTCkgewogICAgIHJldHVybiBwdzsKICAgfQotICByZXR1cm4gYXBwX2lkX3RvX3Bhc3N3ZChhcHBfaWRfZnJvbV9uYW1lKGxvZ2luKSwgc3RhdGUpOworICByZXR1cm4gYXBwX2lkX3RvX3Bhc3N3ZChhcHBfaWRfZnJvbV9uYW1lKGxvZ2luLCBmYWxzZSksIHN0YXRlKTsKIH0KIAogLy8gQWxsIHVzZXJzIGFyZSBpbiBqdXN0IG9uZSBncm91cCwgdGhlIG9uZSBwYXNzZWQgaW4uCkBAIC0zOTUsNyArMzk1LDYgQEAKICAgaWYgKGdyICE9IE5VTEwpIHsKICAgICByZXR1cm4gZ3I7CiAgIH0KLQogICByZXR1cm4gYXBwX2lkX3RvX2dyb3VwKGdpZCwgc3RhdGUpOwogfQogCkBAIC00MDgsOCArNDA3LDcgQEAKICAgaWYgKGFuZHJvaWRfbmFtZV90b19ncm91cCgmc3RhdGUtPmdyb3VwXywgbmFtZSkgIT0gMCkgewogICAgIHJldHVybiAmc3RhdGUtPmdyb3VwXzsKICAgfQotCi0gIHJldHVybiBhcHBfaWRfdG9fZ3JvdXAoYXBwX2lkX2Zyb21fbmFtZShuYW1lKSwgc3RhdGUpOworICByZXR1cm4gYXBwX2lkX3RvX2dyb3VwKGFwcF9pZF9mcm9tX25hbWUobmFtZSwgdHJ1ZSksIHN0YXRlKTsKIH0KIAogLy8gV2UgZG9uJ3QgaGF2ZSBhbiAvZXRjL25ldHdvcmtzLCBzbyBhbGwgaW5wdXRzIHJldHVybiBOVUxMLgpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3lzY29uZi5jcHAgYi9saWJjL2Jpb25pYy9zeXNjb25mLmNwcAppbmRleCA3NzM0ZTQwLi42N2Y0OGU3IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9zeXNjb25mLmNwcAorKysgYi9saWJjL2Jpb25pYy9zeXNjb25mLmNwcApAQCAtMjYsMTIzICsyNiwxOSBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGxpbnV4L3Vpby5oPiAgLy8gRm9yIFVJT19NQVhJT1YuCiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+ICAvLyBGb3IgRk9QRU5fTUFYLgotI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9hdXh2Lmg+CiAjaW5jbHVkZSA8c3lzL3N5c2NvbmYuaD4KKyNpbmNsdWRlIDxzeXMvc3lzaW5mby5oPgogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAogI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX3Rscy5oIgotI2luY2x1ZGUgInByaXZhdGUvU2NvcGVkUmVhZGRpci5oIgotCi0vKiBzZWVtcyB0byBiZSB0aGUgZGVmYXVsdCBvbiBMaW51eCwgcGVyIHRoZSBHTGliYyBzb3VyY2VzIGFuZCBteSBvd24gZGlnZ2luZyAqLwotCi0jZGVmaW5lICBTWVNURU1fQ0xLX1RDSyAgICAgICAgIDEwMAotI2RlZmluZSAgU1lTVEVNX0lPVl9NQVggICAgICAgICAxMDI0Ci0jZGVmaW5lICBTWVNURU1fREVMQVlUSU1FUl9NQVggIDIxNDc0ODM2NDcKLSNkZWZpbmUgIFNZU1RFTV9NUV9PUEVOX01BWCAgICAgOAotI2RlZmluZSAgU1lTVEVNX01RX1BSSU9fTUFYICAgICAzMjc2OAotI2RlZmluZSAgU1lTVEVNX1NFTV9OU0VNU19NQVggICAyNTYKLSNkZWZpbmUgIFNZU1RFTV9TRU1fVkFMVUVfTUFYICAgMHgzZmZmZmZmZiAgLyogc2VlIGJpb25pYy9zZW1hcGhvcmUuYyAqLwotI2RlZmluZSAgU1lTVEVNX1NJR1FVRVVFX01BWCAgICAzMgotI2RlZmluZSAgU1lTVEVNX1RJTUVSX01BWCAgICAgICAzMgotI2RlZmluZSAgU1lTVEVNX0xPR0lOX05BTUVfTUFYICAyNTYKLSNkZWZpbmUgIFNZU1RFTV9UVFlfTkFNRV9NQVggICAgMzIKLQotLyogdGhlIGZvbGxvd2luZyBkZXBlbmRzIG9uIG91ciBpbXBsZW1lbnRhdGlvbiAqLwotI2RlZmluZSAgU1lTVEVNX0FURVhJVF9NQVggICAgICAgICAgNjU1MzYgICAgLyogb3VyIGltcGxlbWVudGF0aW9uIGlzIHVubGltaXRlZCAqLwotI2RlZmluZSAgU1lTVEVNX1RIUkVBRF9USFJFQURTX01BWCAgMjA0OCAgICAgLyogcmVhbGx5IHVubGltaXRlZCAqLwotCi0jZGVmaW5lICBTWVNURU1fMl9DX0JJTkQgICAgIF9QT1NJWF9WRVJTSU9OICAvKiBQb3NpeCBDIGJpbmRpbmcgdmVyc2lvbiAqLwotI2RlZmluZSAgU1lTVEVNXzJfQ19WRVIgICAgICBfUE9TSVgyX0NfVkVSU0lPTgotI2RlZmluZSAgU1lTVEVNXzJfQ19ERVYgICAgICAtMSAgICAgICAvKiBQb3NpeCBDIGRldmVsb3BtZW50IHRvb2xzIHVuc3VwcG9ydGVkIG9uIHRoZSBkZXZpY2UgKi8KLSNkZWZpbmUgIFNZU1RFTV8yX0ZPUlRfREVWICAgLTEgICAgICAgLyogRm9ydHJhbiBkZXZlbG9wbWVudCB1bnN1cHBvcnRlZCAqLwotI2RlZmluZSAgU1lTVEVNXzJfRk9SVF9SVU4gICAtMSAgICAgICAvKiBGb3J0cmFuIHJ1bnRpbWUgdW5zdXBwb3J0ZWQgKi8KLSNkZWZpbmUgIFNZU1RFTV8yX1NXX0RFViAgICAgLTEgICAgICAgLyogcG9zaXggc29mdHdhcmUgZGV2IHV0aWxpdGllcyB1bnN1cHBvcnRlZCAqLwotI2RlZmluZSAgU1lTVEVNXzJfTE9DQUxFREVGICAtMSAgICAgICAvKiBsb2NhbGVkZWYoKSB1bmltcGxlbWVudGVkICovCi0jZGVmaW5lICBTWVNURU1fMl9VUEUgICAgICAgIC0xICAgICAgIC8qIE5vIFVQRSBmb3IgeW91ICEgKFVzZXIgUG9ydGFiaWxpdHkgVXRpbGl0aWVzKSAqLwotI2RlZmluZSAgU1lTVEVNXzJfVkVSU0lPTiAgICAtMSAgICAgICAvKiBObyBwb3NpeCBjb21tYW5kLWxpbmUgdG9vbHMgKi8KLQotc3RhdGljIGJvb2wgX19tYXRjaGVzX2NwdU4oY29uc3QgY2hhciogcykgewotICAvLyBUaGUgJWMgdHJpY2sgaXMgdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgYW5jaG9yZWQgbWF0Y2ggIl5jcHVbMC05XSskIi4KLSAgdW5zaWduZWQgY3B1OwotICBjaGFyIGR1bW15OwotICByZXR1cm4gKHNzY2FuZihzLCAiY3B1JXUlYyIsICZjcHUsICZkdW1teSkgPT0gMSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19zeXNjb25mX25wcm9jZXNzb3JzX2NvbmYoKSB7Ci0gIC8vIE9uIHg4NiBrZXJuZWxzIHlvdSBjYW4gdXNlIC9wcm9jL2NwdWluZm8gZm9yIHRoaXMsIGJ1dCBvbiBBUk0ga2VybmVscyBvZmZsaW5lIENQVXMgZGlzYXBwZWFyCi0gIC8vIGZyb20gdGhlcmUuIFRoaXMgbWV0aG9kIHdvcmtzIG9uIGJvdGguCi0gIFNjb3BlZFJlYWRkaXIgcmVhZGVyKCIvc3lzL2RldmljZXMvc3lzdGVtL2NwdSIpOwotICBpZiAocmVhZGVyLklzQmFkKCkpIHsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIGludCByZXN1bHQgPSAwOwotICBkaXJlbnQqIGVudHJ5OwotICB3aGlsZSAoKGVudHJ5ID0gcmVhZGVyLlJlYWRFbnRyeSgpKSAhPSBOVUxMKSB7Ci0gICAgaWYgKGVudHJ5LT5kX3R5cGUgPT0gRFRfRElSICYmIF9fbWF0Y2hlc19jcHVOKGVudHJ5LT5kX25hbWUpKSB7Ci0gICAgICArK3Jlc3VsdDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBfX3N5c2NvbmZfbnByb2Nlc3NvcnNfb25sbigpIHsKLSAgRklMRSogZnAgPSBmb3BlbigiL3Byb2Mvc3RhdCIsICJyIik7Ci0gIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLQotICBpbnQgcmVzdWx0ID0gMDsKLSAgY2hhciBidWZbMjU2XTsKLSAgd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSAhPSBOVUxMKSB7Ci0gICAgLy8gRXh0cmFjdCBqdXN0IHRoZSBmaXJzdCB3b3JkIGZyb20gdGhlIGxpbmUuCi0gICAgLy8gJ2NwdTAgNzk3Njc1MSAxMzY0Mzg4IDMxMTY4NDIgNDY5NzcwMzg4IDg2Mjk0MDUgMCA0OTA0NyAwIDAgMCcKLSAgICBjaGFyKiBwID0gc3RyY2hyKGJ1ZiwgJyAnKTsKLSAgICBpZiAocCAhPSBOVUxMKSB7Ci0gICAgICAqcCA9IDA7Ci0gICAgfQotICAgIGlmIChfX21hdGNoZXNfY3B1TihidWYpKSB7Ci0gICAgICArK3Jlc3VsdDsKLSAgICB9Ci0gIH0KLSAgZmNsb3NlKGZwKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBfX2dldF9tZW1pbmZvKGNvbnN0IGNoYXIqIHBhdHRlcm4pIHsKLSAgRklMRSogZnAgPSBmb3BlbigiL3Byb2MvbWVtaW5mbyIsICJyIik7Ci0gIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50IHJlc3VsdCA9IC0xOwotICBjaGFyIGJ1ZlsyNTZdOwotICB3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApICE9IE5VTEwpIHsKLSAgICBsb25nIHRvdGFsOwotICAgIGlmIChzc2NhbmYoYnVmLCBwYXR0ZXJuLCAmdG90YWwpID09IDEpIHsKLSAgICAgIHJlc3VsdCA9IChpbnQpICh0b3RhbCAvIChQQUdFX1NJWkUvMTAyNCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIGZjbG9zZShmcCk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19zeXNjb25mX3BoeXNfcGFnZXMoKSB7Ci0gIHJldHVybiBfX2dldF9tZW1pbmZvKCJNZW1Ub3RhbDogJWxkIGtCIik7Ci19Ci0KLXN0YXRpYyBpbnQgX19zeXNjb25mX2F2cGh5c19wYWdlcygpIHsKLSAgcmV0dXJuIF9fZ2V0X21lbWluZm8oIk1lbUZyZWU6ICVsZCBrQiIpOwotfQogCiBzdGF0aWMgaW50IF9fc3lzY29uZl9tb25vdG9uaWNfY2xvY2soKSB7CiAgIHRpbWVzcGVjIHQ7CkBAIC0xNTEsMTk5ICs0NywxNDEgQEAKIH0KIAogbG9uZyBzeXNjb25mKGludCBuYW1lKSB7Ci0gICAgc3dpdGNoIChuYW1lKSB7Ci0jaWZkZWYgX1BPU0lYX0FSR19NQVgKLSAgICBjYXNlIF9TQ19BUkdfTUFYOiAgICAgICAgICAgcmV0dXJuIF9QT1NJWF9BUkdfTUFYOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYMl9CQ19CQVNFX01BWAotICAgIGNhc2UgX1NDX0JDX0JBU0VfTUFYOiAgICAgICByZXR1cm4gX1BPU0lYMl9CQ19CQVNFX01BWDsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWDJfQkNfRElNX01BWAotICAgIGNhc2UgX1NDX0JDX0RJTV9NQVg6ICAgICAgICByZXR1cm4gX1BPU0lYMl9CQ19ESU1fTUFYOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYMl9CQ19TQ0FMRV9NQVgKLSAgICBjYXNlIF9TQ19CQ19TQ0FMRV9NQVg6ICAgICAgcmV0dXJuIF9QT1NJWDJfQkNfU0NBTEVfTUFYOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYMl9CQ19TVFJJTkdfTUFYCi0gICAgY2FzZSBfU0NfQkNfU1RSSU5HX01BWDogICAgIHJldHVybiBfUE9TSVgyX0JDX1NUUklOR19NQVg7Ci0jZW5kaWYKKyAgc3dpdGNoIChuYW1lKSB7CisgICAgY2FzZSBfU0NfQVJHX01BWDogICAgICAgICAgIHJldHVybiBBUkdfTUFYOworICAgIGNhc2UgX1NDX0JDX0JBU0VfTUFYOiAgICAgICByZXR1cm4gX1BPU0lYMl9CQ19CQVNFX01BWDsgICAvLyBNaW5pbXVtIHJlcXVpcmVtZW50LgorICAgIGNhc2UgX1NDX0JDX0RJTV9NQVg6ICAgICAgICByZXR1cm4gX1BPU0lYMl9CQ19ESU1fTUFYOyAgICAvLyBNaW5pbXVtIHJlcXVpcmVtZW50LgorICAgIGNhc2UgX1NDX0JDX1NDQUxFX01BWDogICAgICByZXR1cm4gX1BPU0lYMl9CQ19TQ0FMRV9NQVg7ICAvLyBNaW5pbXVtIHJlcXVpcmVtZW50LgorICAgIGNhc2UgX1NDX0JDX1NUUklOR19NQVg6ICAgICByZXR1cm4gX1BPU0lYMl9CQ19TVFJJTkdfTUFYOyAvLyBNaW5pbXVtIHJlcXVpcmVtZW50LgogICAgIGNhc2UgX1NDX0NISUxEX01BWDogICAgICAgICByZXR1cm4gQ0hJTERfTUFYOwotICAgIGNhc2UgX1NDX0NMS19UQ0s6ICAgICAgICAgICByZXR1cm4gU1lTVEVNX0NMS19UQ0s7Ci0jaWZkZWYgX1BPU0lYMl9DT0xMX1dFSUdIVFNfTUFTSwotICAgIGNhc2UgX1NDX0NPTExfV0VJR0hUU19NQVg6ICByZXR1cm4gX1BPU0lYMl9DT0xMX1dFSUdIVFNfTUFTSzsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWDJfRVhQUl9ORVNUX01BWAotICAgIGNhc2UgX1NDX0VYUFJfTkVTVF9NQVg6ICAgIHJldHVybiBfUE9TSVgyX0VYUFJfTkVTVF9NQVg7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVgyX0xJTkVfTUFYCi0gICAgY2FzZSBfU0NfTElORV9NQVg6ICAgICAgICAgIHJldHVybiBfUE9TSVgyX0xJTkVfTUFYOwotI2VuZGlmCisgICAgY2FzZSBfU0NfQ0xLX1RDSzogICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nPihnZXRhdXh2YWwoQVRfQ0xLVENLKSk7CisgICAgY2FzZSBfU0NfQ09MTF9XRUlHSFRTX01BWDogIHJldHVybiBfUE9TSVgyX0NPTExfV0VJR0hUU19NQVg7ICAvLyBNaW5pbXVtIHJlcXVpcmVtZW50LgorICAgIGNhc2UgX1NDX0VYUFJfTkVTVF9NQVg6ICAgICByZXR1cm4gX1BPU0lYMl9FWFBSX05FU1RfTUFYOyAgICAgLy8gTWluaW11bSByZXF1aXJlbWVudC4KKyAgICBjYXNlIF9TQ19MSU5FX01BWDogICAgICAgICAgcmV0dXJuIF9QT1NJWDJfTElORV9NQVg7ICAgICAgICAgIC8vIE1pbmltdW0gcmVxdWlyZW1lbnQuCiAgICAgY2FzZSBfU0NfTkdST1VQU19NQVg6ICAgICAgIHJldHVybiBOR1JPVVBTX01BWDsKICAgICBjYXNlIF9TQ19PUEVOX01BWDogICAgICAgICAgcmV0dXJuIE9QRU5fTUFYOwotICAgIC8vY2FzZSBfU0NfUEFTU19NQVg6ICAgICAgICAgIHJldHVybiBQQVNTX01BWDsKLSAgICBjYXNlIF9TQ18yX0NfQklORDogICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX0NfQklORDsKLSAgICBjYXNlIF9TQ18yX0NfREVWOiAgICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX0NfREVWOwotICAgIGNhc2UgX1NDXzJfQ19WRVJTSU9OOiAgICAgICByZXR1cm4gU1lTVEVNXzJfQ19WRVI7Ci0gICAgLy9jYXNlIF9TQ18yX0NIQVJfVEVSTTogICAgICAgICByZXR1cm4gOwotICAgIGNhc2UgX1NDXzJfRk9SVF9ERVY6ICAgICAgICByZXR1cm4gU1lTVEVNXzJfRk9SVF9ERVY7Ci0gICAgY2FzZSBfU0NfMl9GT1JUX1JVTjogICAgICAgIHJldHVybiBTWVNURU1fMl9GT1JUX1JVTjsKLSAgICBjYXNlIF9TQ18yX0xPQ0FMRURFRjogICAgICAgcmV0dXJuIFNZU1RFTV8yX0xPQ0FMRURFRjsKLSAgICBjYXNlIF9TQ18yX1NXX0RFVjogICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX1NXX0RFVjsKLSAgICBjYXNlIF9TQ18yX1VQRTogICAgICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX1VQRTsKLSAgICBjYXNlIF9TQ18yX1ZFUlNJT046ICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX1ZFUlNJT047Ci0jaWZkZWYgX1BPU0lYX0pPQl9DT05UUk9MCisgICAgY2FzZSBfU0NfUEFTU19NQVg6ICAgICAgICAgIHJldHVybiBQQVNTX01BWDsKKyAgICBjYXNlIF9TQ18yX0NfQklORDogICAgICAgICAgcmV0dXJuIF9QT1NJWDJfQ19CSU5EOworICAgIGNhc2UgX1NDXzJfQ19ERVY6ICAgICAgICAgICByZXR1cm4gX1BPU0lYMl9DX0RFVjsKKyAgICBjYXNlIF9TQ18yX0NIQVJfVEVSTTogICAgICAgcmV0dXJuIF9QT1NJWDJfQ0hBUl9URVJNOworICAgIGNhc2UgX1NDXzJfRk9SVF9ERVY6ICAgICAgICByZXR1cm4gLTE7CisgICAgY2FzZSBfU0NfMl9GT1JUX1JVTjogICAgICAgIHJldHVybiAtMTsKKyAgICBjYXNlIF9TQ18yX0xPQ0FMRURFRjogICAgICAgcmV0dXJuIF9QT1NJWDJfTE9DQUxFREVGOworICAgIGNhc2UgX1NDXzJfU1dfREVWOiAgICAgICAgICByZXR1cm4gX1BPU0lYMl9TV19ERVY7CisgICAgY2FzZSBfU0NfMl9VUEU6ICAgICAgICAgICAgIHJldHVybiBfUE9TSVgyX1VQRTsKKyAgICBjYXNlIF9TQ18yX1ZFUlNJT046ICAgICAgICAgcmV0dXJuIF9QT1NJWDJfVkVSU0lPTjsKICAgICBjYXNlIF9TQ19KT0JfQ09OVFJPTDogICAgICAgcmV0dXJuIF9QT1NJWF9KT0JfQ09OVFJPTDsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWF9TQVZFRF9JRFMKICAgICBjYXNlIF9TQ19TQVZFRF9JRFM6ICAgICAgICAgcmV0dXJuIF9QT1NJWF9TQVZFRF9JRFM7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfVkVSU0lPTgogICAgIGNhc2UgX1NDX1ZFUlNJT046ICAgICAgICAgICByZXR1cm4gX1BPU0lYX1ZFUlNJT047Ci0jZW5kaWYKLSAgICAvL2Nhc2UgX1NDX1JFX0RVUF88QVg6ICAgICAgICByZXR1cm4gOworICAgIGNhc2UgX1NDX1JFX0RVUF9NQVg6ICAgICAgICByZXR1cm4gX1BPU0lYX1JFX0RVUF9NQVg7ICAgICAgICAgLy8gTWluaW11bSByZXF1aXJlbWVudC4KICAgICBjYXNlIF9TQ19TVFJFQU1fTUFYOiAgICAgICAgcmV0dXJuIEZPUEVOX01BWDsKLSAgICAvL2Nhc2UgX1NDX1RaTkFNRV9NQVg6ICAgICAgICByZXR1cm4gOwotI2lmIF9YT1BFTl9DUllQVAorICAgIGNhc2UgX1NDX1RaTkFNRV9NQVg6ICAgICAgICByZXR1cm4gX1BPU0lYX1RaTkFNRV9NQVg7ICAgICAgICAgLy8gTWluaW11bSByZXF1aXJlbWVudC4KICAgICBjYXNlIF9TQ19YT1BFTl9DUllQVDogICAgICAgcmV0dXJuIF9YT1BFTl9DUllQVDsKLSNlbmRpZgotI2lmZGVmIF9YT1BFTl9FTkhfSTE4TgogICAgIGNhc2UgX1NDX1hPUEVOX0VOSF9JMThOOiAgICByZXR1cm4gX1hPUEVOX0VOSF9JMThOOwotI2VuZGlmCi0jaWZkZWYgX1hPUEVOX1NITQogICAgIGNhc2UgX1NDX1hPUEVOX1NITTogICAgICAgICByZXR1cm4gX1hPUEVOX1NITTsKLSNlbmRpZgotI2lmZGVmIF9YT1BFTl9WRVJTSU9OCiAgICAgY2FzZSBfU0NfWE9QRU5fVkVSU0lPTjogICAgIHJldHVybiBfWE9QRU5fVkVSU0lPTjsKLSNlbmRpZgotI2lmZGVmIF9YT1BFTl9YQ1VfVkVSU0lPTgotICAgIGNhc2UgX1NDX1hPUEVOX1hDVV9WRVJTSU9OOiByZXR1cm4gX1hPUEVOX1hDVV9WRVJTSU9OOwotI2VuZGlmCi0jaWZkZWYgX1hPUEVOX1JFQUxUSU1FCiAgICAgY2FzZSBfU0NfWE9QRU5fUkVBTFRJTUU6ICAgIHJldHVybiBfWE9QRU5fUkVBTFRJTUU7Ci0jZW5kaWYKLSNpZmRlZiBfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUwogICAgIGNhc2UgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFM6IHJldHVybiBfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUzsKLSNlbmRpZgotI2lmZGVmIF9YT1BFTl9MRUdBQ1kKICAgICBjYXNlIF9TQ19YT1BFTl9MRUdBQ1k6ICAgICAgcmV0dXJuIF9YT1BFTl9MRUdBQ1k7Ci0jZW5kaWYKLSAgICBjYXNlIF9TQ19BVEVYSVRfTUFYOiAgICAgICAgcmV0dXJuIFNZU1RFTV9BVEVYSVRfTUFYOwotICAgIGNhc2UgX1NDX0lPVl9NQVg6ICAgICAgICAgICByZXR1cm4gU1lTVEVNX0lPVl9NQVg7CisgICAgY2FzZSBfU0NfQVRFWElUX01BWDogICAgICAgIHJldHVybiBMT05HX01BWDsgICAgLy8gVW5saW1pdGVkLgorICAgIGNhc2UgX1NDX0lPVl9NQVg6ICAgICAgICAgICByZXR1cm4gVUlPX01BWElPVjsKIAotICAgIGNhc2UgX1NDX1BBR0VTSVpFOgotICAgIGNhc2UgX1NDX1BBR0VfU0laRToKLSAgICAgICAgcmV0dXJuIFBBR0VfU0laRTsKLQotI2lmZGVmIF9YT1BFTl9VTklYCisgICAgY2FzZSBfU0NfUEFHRVNJWkU6ICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCwgUEFHRVNJWkUgYW5kIFBBR0VfU0laRSBhbHdheXMgaG9sZCB0aGUgc2FtZSB2YWx1ZS4KKyAgICBjYXNlIF9TQ19QQUdFX1NJWkU6ICAgICAgICAgcmV0dXJuIFBBR0VfU0laRTsKICAgICBjYXNlIF9TQ19YT1BFTl9VTklYOiAgICAgICAgcmV0dXJuIF9YT1BFTl9VTklYOwotI2VuZGlmCi0KLSAgICAvLyBYWFg6IFRPRE86IFhCUzUgbm9uc2Vuc2UKLQotI2lmZGVmIEFJT19MSVNUSU9fTUFYCi0gICAgY2FzZSBfU0NfQUlPX0xJU1RJT19NQVg6ICAgICAgIHJldHVybiBBSU9fTElTVElPX01BWDsKLSNlbmRpZgotI2lmZGVmIEFJT19NQVgKLSAgICBjYXNlIF9TQ19BSU9fTUFYOiAgICAgICAgICAgICAgcmV0dXJuIEFJT19NQVg7Ci0jZW5kaWYKLSNpZmRlZiBBSU9fUFJJT19ERUxUQV9NQVgKLSAgICBjYXNlIF9TQ19BSU9fUFJJT19ERUxUQV9NQVg6ICAgcmV0dXJuIEFJT19QUklPX0RFTFRBX01BWDsKLSNlbmRpZgotICAgIGNhc2UgX1NDX0RFTEFZVElNRVJfTUFYOiAgICByZXR1cm4gU1lTVEVNX0RFTEFZVElNRVJfTUFYOwotICAgIGNhc2UgX1NDX01RX09QRU5fTUFYOiAgICAgICByZXR1cm4gU1lTVEVNX01RX09QRU5fTUFYOwotICAgIGNhc2UgX1NDX01RX1BSSU9fTUFYOiAgICAgICByZXR1cm4gU1lTVEVNX01RX1BSSU9fTUFYOworICAgIGNhc2UgX1NDX0FJT19MSVNUSU9fTUFYOiAgICByZXR1cm4gX1BPU0lYX0FJT19MSVNUSU9fTUFYOyAgICAgLy8gTWluaW11bSByZXF1aXJlbWVudC4KKyAgICBjYXNlIF9TQ19BSU9fTUFYOiAgICAgICAgICAgcmV0dXJuIF9QT1NJWF9BSU9fTUFYOyAgICAgICAgICAgIC8vIE1pbmltdW0gcmVxdWlyZW1lbnQuCisgICAgY2FzZSBfU0NfQUlPX1BSSU9fREVMVEFfTUFYOnJldHVybiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaW5pbXVtIHJlcXVpcmVtZW50LgorICAgIGNhc2UgX1NDX0RFTEFZVElNRVJfTUFYOiAgICByZXR1cm4gSU5UX01BWDsKKyAgICBjYXNlIF9TQ19NUV9PUEVOX01BWDogICAgICAgcmV0dXJuIF9QT1NJWF9NUV9PUEVOX01BWDsgICAgICAgIC8vIE1pbmltdW0gcmVxdWlyZW1lbnQuCisgICAgY2FzZSBfU0NfTVFfUFJJT19NQVg6ICAgICAgIHJldHVybiBfUE9TSVhfTVFfUFJJT19NQVg7ICAgICAgICAvLyBNaW5pbXVtIHJlcXVpcmVtZW50LgogICAgIGNhc2UgX1NDX1JUU0lHX01BWDogICAgICAgICByZXR1cm4gUlRTSUdfTUFYOwotICAgIGNhc2UgX1NDX1NFTV9OU0VNU19NQVg6ICAgICByZXR1cm4gU1lTVEVNX1NFTV9OU0VNU19NQVg7Ci0gICAgY2FzZSBfU0NfU0VNX1ZBTFVFX01BWDogICAgIHJldHVybiBTWVNURU1fU0VNX1ZBTFVFX01BWDsKLSAgICBjYXNlIF9TQ19TSUdRVUVVRV9NQVg6ICAgICAgcmV0dXJuIFNZU1RFTV9TSUdRVUVVRV9NQVg7Ci0gICAgY2FzZSBfU0NfVElNRVJfTUFYOiAgICAgICAgIHJldHVybiBTWVNURU1fVElNRVJfTUFYOwotI2lmZGVmIF9QT1NJWF9BU1lOQ0hST05PVVNfSU8KKyAgICBjYXNlIF9TQ19TRU1fTlNFTVNfTUFYOiAgICAgcmV0dXJuIF9QT1NJWF9TRU1fTlNFTVNfTUFYOyAgICAgIC8vIE1pbmltdW0gcmVxdWlyZW1lbnQuCisgICAgY2FzZSBfU0NfU0VNX1ZBTFVFX01BWDogICAgIHJldHVybiBTRU1fVkFMVUVfTUFYOworICAgIGNhc2UgX1NDX1NJR1FVRVVFX01BWDogICAgICByZXR1cm4gX1BPU0lYX1NJR1FVRVVFX01BWDsgICAgICAgLy8gTWluaW11bSByZXF1aXJlbWVudC4KKyAgICBjYXNlIF9TQ19USU1FUl9NQVg6ICAgICAgICAgcmV0dXJuIF9QT1NJWF9USU1FUl9NQVg7ICAgICAgICAgIC8vIE1pbmltdW0gcmVxdWlyZW1lbnQuCiAgICAgY2FzZSBfU0NfQVNZTkNIUk9OT1VTX0lPOiAgIHJldHVybiBfUE9TSVhfQVNZTkNIUk9OT1VTX0lPOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX0ZTWU5DCiAgICAgY2FzZSBfU0NfRlNZTkM6ICAgICAgICAgICAgIHJldHVybiBfUE9TSVhfRlNZTkM7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfTUFQUEVEX0ZJTEVTCiAgICAgY2FzZSBfU0NfTUFQUEVEX0ZJTEVTOiAgICAgIHJldHVybiBfUE9TSVhfTUFQUEVEX0ZJTEVTOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX01FTUxPQ0sKICAgICBjYXNlIF9TQ19NRU1MT0NLOiAgICAgICAgICAgcmV0dXJuIF9QT1NJWF9NRU1MT0NLOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX01FTUxPQ0tfUkFOR0UKLSAgICBjYXNlIF9TQ19NRU1MT0NLX1JBTkdFOiAgICAgcmV0dXJuIF9QT1NJWF9NRU1MT0NLX1JBTkdFCi0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfTUVNT1JZX1BST1RFQ1RJT04KKyAgICBjYXNlIF9TQ19NRU1MT0NLX1JBTkdFOiAgICAgcmV0dXJuIF9QT1NJWF9NRU1MT0NLX1JBTkdFOwogICAgIGNhc2UgX1NDX01FTU9SWV9QUk9URUNUSU9OOiByZXR1cm4gX1BPU0lYX01FTU9SWV9QUk9URUNUSU9OOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX01FU1NBR0VfUEFTU0lORwogICAgIGNhc2UgX1NDX01FU1NBR0VfUEFTU0lORzogICByZXR1cm4gX1BPU0lYX01FU1NBR0VfUEFTU0lORzsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWF9QUklPUklUSVpFRF9JTwogICAgIGNhc2UgX1NDX1BSSU9SSVRJWkVEX0lPOiAgICByZXR1cm4gX1BPU0lYX1BSSU9SSVRJWkVEX0lPOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcKICAgICBjYXNlIF9TQ19QUklPUklUWV9TQ0hFRFVMSU5HOiAgcmV0dXJuIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX1JFQUxUSU1FX1NJR05BTFMKICAgICBjYXNlIF9TQ19SRUFMVElNRV9TSUdOQUxTOiAgcmV0dXJuIF9QT1NJWF9SRUFMVElNRV9TSUdOQUxTOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX1NFTUFQSE9SRVMKICAgICBjYXNlIF9TQ19TRU1BUEhPUkVTOiAgICAgICAgcmV0dXJuIF9QT1NJWF9TRU1BUEhPUkVTOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX1NIQVJFRF9NRU1PUllfT0JKRUNUUwogICAgIGNhc2UgX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUzogIHJldHVybiBfUE9TSVhfU0hBUkVEX01FTU9SWV9PQkpFQ1RTOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX1NZTkNIUk9OSVpFRF9JTwogICAgIGNhc2UgX1NDX1NZTkNIUk9OSVpFRF9JTzogICByZXR1cm4gX1BPU0lYX1NZTkNIUk9OSVpFRF9JTzsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWF9USU1FUlMKICAgICBjYXNlIF9TQ19USU1FUlM6ICAgICAgICAgICAgcmV0dXJuIF9QT1NJWF9USU1FUlM7Ci0jZW5kaWYKLQotICAgIGNhc2UgX1NDX0dFVEdSX1JfU0laRV9NQVg6IHJldHVybiAxMDI0OwotICAgIGNhc2UgX1NDX0dFVFBXX1JfU0laRV9NQVg6IHJldHVybiAxMDI0OwotCi0gICAgY2FzZSBfU0NfTE9HSU5fTkFNRV9NQVg6ICAgIHJldHVybiBTWVNURU1fTE9HSU5fTkFNRV9NQVg7Ci0KLSAgICBjYXNlIF9TQ19USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TOgotICAgICAgcmV0dXJuIF9QT1NJWF9USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TOwotCi0gICAgY2FzZSBfU0NfVEhSRUFEX0tFWVNfTUFYOgotICAgICAgcmV0dXJuIChCSU9OSUNfVExTX1NMT1RTIC0gVExTX1NMT1RfRklSU1RfVVNFUl9TTE9UIC0gQklPTklDX1RMU19SRVNFUlZFRF9TTE9UUyk7Ci0KKyAgICBjYXNlIF9TQ19HRVRHUl9SX1NJWkVfTUFYOiAgcmV0dXJuIDEwMjQ7CisgICAgY2FzZSBfU0NfR0VUUFdfUl9TSVpFX01BWDogIHJldHVybiAxMDI0OworICAgIGNhc2UgX1NDX0xPR0lOX05BTUVfTUFYOiAgICByZXR1cm4gMjU2OyAgIC8vIFNlZW1zIGRlZmF1bHQgb24gbGludXguCisgICAgY2FzZSBfU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUzogcmV0dXJuIFBUSFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TOworICAgIGNhc2UgX1NDX1RIUkVBRF9LRVlTX01BWDogICByZXR1cm4gUFRIUkVBRF9LRVlTX01BWDsKICAgICBjYXNlIF9TQ19USFJFQURfU1RBQ0tfTUlOOiAgICByZXR1cm4gUFRIUkVBRF9TVEFDS19NSU47Ci0gICAgY2FzZSBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYOiAgcmV0dXJuIFNZU1RFTV9USFJFQURfVEhSRUFEU19NQVg7Ci0gICAgY2FzZSBfU0NfVFRZX05BTUVfTUFYOiAgICAgICAgcmV0dXJuIFNZU1RFTV9UVFlfTkFNRV9NQVg7Ci0jaWZkZWYgX1BPU0lYX1RIUkVBRFMKKyAgICBjYXNlIF9TQ19USFJFQURfVEhSRUFEU19NQVg6ICByZXR1cm4gUFRIUkVBRF9USFJFQURTX01BWDsKKyAgICBjYXNlIF9TQ19UVFlfTkFNRV9NQVg6ICAgICAgICByZXR1cm4gMzI7ICAvLyBTZWVtcyBkZWZhdWx0IG9uIGxpbnV4LgogICAgIGNhc2UgX1NDX1RIUkVBRFM6ICAgICAgICAgICAgIHJldHVybiBfUE9TSVhfVEhSRUFEUzsKLSNlbmRpZgotCi0gICAgY2FzZSBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSOiAgIHJldHVybiAtMTsgLy8gUmVtb3ZlZCBpbiBQT1NJWCAyMDA4Ci0gICAgY2FzZSBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFOiAgIHJldHVybiAtMTsgLy8gUmVtb3ZlZCBpbiBQT1NJWCAyMDA4Ci0KLSNpZmRlZiBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcKKyAgICBjYXNlIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFI6ICAgcmV0dXJuIF9QT1NJWF9USFJFQURfQVRUUl9TVEFDS0FERFI7CisgICAgY2FzZSBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFOiAgIHJldHVybiBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFOwogICAgIGNhc2UgX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HOiAgcmV0dXJuIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORzsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWF9USFJFQURfUFJJT19JTkhFUklUCi0gICAgY2FzZSBfU0NfVEhSRUFEX1BSSU9fSU5IRVJJVDogICAgICAgICByZXR1cm4gX1BPU0lYX1RIUkVBRF9QUklPX0lOSEVSSVQ7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVAorICAgIGNhc2UgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQ6IHJldHVybiBfUE9TSVhfVEhSRUFEX1BSSU9fSU5IRVJJVDsKICAgICBjYXNlIF9TQ19USFJFQURfUFJJT19QUk9URUNUOiByZXR1cm4gX1BPU0lYX1RIUkVBRF9QUklPX1BST1RFQ1Q7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfVEhSRUFEX1NBRkVfRlVOQ1RJT05TCi0gICAgY2FzZSBfU0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TOiAgcmV0dXJuIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMKLSNlbmRpZgotCisgICAgY2FzZSBfU0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TOiAgcmV0dXJuIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlM7CisgICAgY2FzZSBfU0NfTlBST0NFU1NPUlNfQ09ORjogIHJldHVybiBnZXRfbnByb2NzX2NvbmYoKTsKKyAgICBjYXNlIF9TQ19OUFJPQ0VTU09SU19PTkxOOiAgcmV0dXJuIGdldF9ucHJvY3MoKTsKKyAgICBjYXNlIF9TQ19QSFlTX1BBR0VTOiAgICAgICAgcmV0dXJuIGdldF9waHlzX3BhZ2VzKCk7CisgICAgY2FzZSBfU0NfQVZQSFlTX1BBR0VTOiAgICAgIHJldHVybiBnZXRfYXZwaHlzX3BhZ2VzKCk7CiAgICAgY2FzZSBfU0NfTU9OT1RPTklDX0NMT0NLOiAgIHJldHVybiBfX3N5c2NvbmZfbW9ub3RvbmljX2Nsb2NrKCk7Ci0gICAgY2FzZSBfU0NfTlBST0NFU1NPUlNfQ09ORjogIHJldHVybiBfX3N5c2NvbmZfbnByb2Nlc3NvcnNfY29uZigpOwotICAgIGNhc2UgX1NDX05QUk9DRVNTT1JTX09OTE46ICByZXR1cm4gX19zeXNjb25mX25wcm9jZXNzb3JzX29ubG4oKTsKLSAgICBjYXNlIF9TQ19QSFlTX1BBR0VTOiAgICAgICAgcmV0dXJuIF9fc3lzY29uZl9waHlzX3BhZ2VzKCk7Ci0gICAgY2FzZSBfU0NfQVZQSFlTX1BBR0VTOiAgICAgIHJldHVybiBfX3N5c2NvbmZfYXZwaHlzX3BhZ2VzKCk7CisKKyAgICBjYXNlIF9TQ18yX1BCUzogICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgLy8gT2Jzb2xlc2NlbnQgaW4gUE9TSVguMS0yMDA4LgorICAgIGNhc2UgX1NDXzJfUEJTX0FDQ09VTlRJTkc6ICByZXR1cm4gLTE7ICAgICAvLyBPYnNvbGVzY2VudCBpbiBQT1NJWC4xLTIwMDguCisgICAgY2FzZSBfU0NfMl9QQlNfQ0hFQ0tQT0lOVDogIHJldHVybiAtMTsgICAgIC8vIE9ic29sZXNjZW50IGluIFBPU0lYLjEtMjAwOC4KKyAgICBjYXNlIF9TQ18yX1BCU19MT0NBVEU6ICAgICAgcmV0dXJuIC0xOyAgICAgLy8gT2Jzb2xlc2NlbnQgaW4gUE9TSVguMS0yMDA4LgorICAgIGNhc2UgX1NDXzJfUEJTX01FU1NBR0U6ICAgICByZXR1cm4gLTE7ICAgICAvLyBPYnNvbGVzY2VudCBpbiBQT1NJWC4xLTIwMDguCisgICAgY2FzZSBfU0NfMl9QQlNfVFJBQ0s6ICAgICAgIHJldHVybiAtMTsgICAgIC8vIE9ic29sZXNjZW50IGluIFBPU0lYLjEtMjAwOC4KKyAgICBjYXNlIF9TQ19BRFZJU09SWV9JTkZPOiAgICAgcmV0dXJuIF9QT1NJWF9BRFZJU09SWV9JTkZPOworICAgIGNhc2UgX1NDX0JBUlJJRVJTOiAgICAgICAgICByZXR1cm4gX1BPU0lYX0JBUlJJRVJTOworICAgIGNhc2UgX1NDX0NMT0NLX1NFTEVDVElPTjogICByZXR1cm4gX1BPU0lYX0NMT0NLX1NFTEVDVElPTjsKKyAgICBjYXNlIF9TQ19DUFVUSU1FOiAgICAgICAgICAgcmV0dXJuIF9QT1NJWF9DUFVUSU1FOworICAgIGNhc2UgX1NDX0hPU1RfTkFNRV9NQVg6ICAgICByZXR1cm4gX1BPU0lYX0hPU1RfTkFNRV9NQVg7ICAgIC8vIE1pbmltdW0gcmVxdWlyZW1lbnQuCisgICAgY2FzZSBfU0NfSVBWNjogICAgICAgICAgICAgIHJldHVybiBfUE9TSVhfSVBWNjsKKyAgICBjYXNlIF9TQ19SQVdfU09DS0VUUzogICAgICAgcmV0dXJuIF9QT1NJWF9SQVdfU09DS0VUUzsKKyAgICBjYXNlIF9TQ19SRUFERVJfV1JJVEVSX0xPQ0tTOiByZXR1cm4gX1BPU0lYX1JFQURFUl9XUklURVJfTE9DS1M7CisgICAgY2FzZSBfU0NfUkVHRVhQOiAgICAgICAgICAgIHJldHVybiBfUE9TSVhfUkVHRVhQOworICAgIGNhc2UgX1NDX1NIRUxMOiAgICAgICAgICAgICByZXR1cm4gX1BPU0lYX1NIRUxMOworICAgIGNhc2UgX1NDX1NQQVdOOiAgICAgICAgICAgICByZXR1cm4gX1BPU0lYX1NQQVdOOworICAgIGNhc2UgX1NDX1NQSU5fTE9DS1M6ICAgICAgICByZXR1cm4gX1BPU0lYX1NQSU5fTE9DS1M7CisgICAgY2FzZSBfU0NfU1BPUkFESUNfU0VSVkVSOiAgIHJldHVybiBfUE9TSVhfU1BPUkFESUNfU0VSVkVSOworICAgIGNhc2UgX1NDX1NTX1JFUExfTUFYOiAgICAgICByZXR1cm4gLTE7CisgICAgY2FzZSBfU0NfU1lNTE9PUF9NQVg6ICAgICAgIHJldHVybiBfUE9TSVhfU1lNTE9PUF9NQVg7ICAgICAgLy8gTWluaW11bSByZXF1aXJlbWVudC4KKyAgICBjYXNlIF9TQ19USFJFQURfQ1BVVElNRTogICAgcmV0dXJuIF9QT1NJWF9USFJFQURfQ1BVVElNRTsKKyAgICBjYXNlIF9TQ19USFJFQURfUFJPQ0VTU19TSEFSRUQ6IHJldHVybiBfUE9TSVhfVEhSRUFEX1BST0NFU1NfU0hBUkVEOworICAgIGNhc2UgX1NDX1RIUkVBRF9ST0JVU1RfUFJJT19JTkhFUklUOiAgcmV0dXJuIF9QT1NJWF9USFJFQURfUk9CVVNUX1BSSU9fSU5IRVJJVDsKKyAgICBjYXNlIF9TQ19USFJFQURfUk9CVVNUX1BSSU9fUFJPVEVDVDogIHJldHVybiBfUE9TSVhfVEhSRUFEX1JPQlVTVF9QUklPX1BST1RFQ1Q7CisgICAgY2FzZSBfU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUjogICAgICByZXR1cm4gX1BPU0lYX1RIUkVBRF9TUE9SQURJQ19TRVJWRVI7CisgICAgY2FzZSBfU0NfVElNRU9VVFM6ICAgICAgICAgIHJldHVybiBfUE9TSVhfVElNRU9VVFM7CisgICAgY2FzZSBfU0NfVFJBQ0U6ICAgICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgLy8gT2Jzb2xlc2NlbnQgaW4gUE9TSVguMS0yMDA4LgorICAgIGNhc2UgX1NDX1RSQUNFX0VWRU5UX0ZJTFRFUjogICAgICByZXR1cm4gLTE7ICAgICAgIC8vIE9ic29sZXNjZW50IGluIFBPU0lYLjEtMjAwOC4KKyAgICBjYXNlIF9TQ19UUkFDRV9FVkVOVF9OQU1FX01BWDogICAgcmV0dXJuIC0xOworICAgIGNhc2UgX1NDX1RSQUNFX0lOSEVSSVQ6ICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgIC8vIE9ic29sZXNjZW50IGluIFBPU0lYLjEtMjAwOC4KKyAgICBjYXNlIF9TQ19UUkFDRV9MT0c6ICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAvLyBPYnNvbGVzY2VudCBpbiBQT1NJWC4xLTIwMDguCisgICAgY2FzZSBfU0NfVFJBQ0VfTkFNRV9NQVg6ICAgIHJldHVybiAtMTsKKyAgICBjYXNlIF9TQ19UUkFDRV9TWVNfTUFYOiAgICAgcmV0dXJuIC0xOworICAgIGNhc2UgX1NDX1RSQUNFX1VTRVJfRVZFTlRfTUFYOiAgICByZXR1cm4gLTE7CisgICAgY2FzZSBfU0NfVFlQRURfTUVNT1JZX09CSkVDVFM6ICAgIHJldHVybiBfUE9TSVhfVFlQRURfTUVNT1JZX09CSkVDVFM7CisgICAgY2FzZSBfU0NfVjdfSUxQMzJfT0ZGMzI6ICAgIHJldHVybiBfUE9TSVhfVjdfSUxQMzJfT0ZGMzI7CisgICAgY2FzZSBfU0NfVjdfSUxQMzJfT0ZGQklHOiAgIHJldHVybiBfUE9TSVhfVjdfSUxQMzJfT0ZGQklHOworICAgIGNhc2UgX1NDX1Y3X0xQNjRfT0ZGNjQ6ICAgICByZXR1cm4gX1BPU0lYX1Y3X0xQNjRfT0ZGNjQ7CisgICAgY2FzZSBfU0NfVjdfTFBCSUdfT0ZGQklHOiAgIHJldHVybiBfUE9TSVhfVjdfTFBCSUdfT0ZGQklHOworICAgIGNhc2UgX1NDX1hPUEVOX1NUUkVBTVM6ICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgLy8gT2Jzb2xlc2NlbnQgaW4gUE9TSVguMS0yMDA4LgorICAgIGNhc2UgX1NDX1hPUEVOX1VVQ1A6ICAgICAgICByZXR1cm4gLTE7CiAKICAgICBkZWZhdWx0OgotICAgICAgIC8qIFBvc2l4IHNheXMgRUlOVkFMIGlzIHRoZSBvbmx5IGVycm9yIHRoYXQgc2hhbGwgYmUgcmV0dXJuZWQsCi0gICAgICAgICogYnV0IEdMaWJjIHVzZXMgRU5PU1lTICovCi0gICAgICAgIGVycm5vID0gRU5PU1lTOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgICAgLy8gUG9zaXggc2F5cyBFSU5WQUwgaXMgdGhlIG9ubHkgZXJyb3IgdGhhdCBzaGFsbCBiZSByZXR1cm5lZCwKKyAgICAgIC8vIGJ1dCBnbGliYyB1c2VzIEVOT1NZUy4KKyAgICAgIGVycm5vID0gRU5PU1lTOworICAgICAgcmV0dXJuIC0xOworICB9CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zeXNpbmZvLmNwcCBiL2xpYmMvYmlvbmljL3N5c2luZm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMGFmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zeXNpbmZvLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3N5c2luZm8uaD4KKworI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJwcml2YXRlL1Njb3BlZFJlYWRkaXIuaCIKKworc3RhdGljIGJvb2wgX19tYXRjaGVzX2NwdU4oY29uc3QgY2hhciogcykgeworICAvLyBUaGUgJWMgdHJpY2sgaXMgdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgYW5jaG9yZWQgbWF0Y2ggIl5jcHVbMC05XSskIi4KKyAgdW5zaWduZWQgY3B1OworICBjaGFyIGR1bW15OworICByZXR1cm4gKHNzY2FuZihzLCAiY3B1JXUlYyIsICZjcHUsICZkdW1teSkgPT0gMSk7Cit9CisKK2ludCBnZXRfbnByb2NzX2NvbmYoKSB7CisgIC8vIE9uIHg4NiBrZXJuZWxzIHlvdSBjYW4gdXNlIC9wcm9jL2NwdWluZm8gZm9yIHRoaXMsIGJ1dCBvbiBBUk0ga2VybmVscyBvZmZsaW5lIENQVXMgZGlzYXBwZWFyCisgIC8vIGZyb20gdGhlcmUuIFRoaXMgbWV0aG9kIHdvcmtzIG9uIGJvdGguCisgIFNjb3BlZFJlYWRkaXIgcmVhZGVyKCIvc3lzL2RldmljZXMvc3lzdGVtL2NwdSIpOworICBpZiAocmVhZGVyLklzQmFkKCkpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGludCByZXN1bHQgPSAwOworICBkaXJlbnQqIGVudHJ5OworICB3aGlsZSAoKGVudHJ5ID0gcmVhZGVyLlJlYWRFbnRyeSgpKSAhPSBOVUxMKSB7CisgICAgaWYgKGVudHJ5LT5kX3R5cGUgPT0gRFRfRElSICYmIF9fbWF0Y2hlc19jcHVOKGVudHJ5LT5kX25hbWUpKSB7CisgICAgICArK3Jlc3VsdDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50IGdldF9ucHJvY3MoKSB7CisgIEZJTEUqIGZwID0gZm9wZW4oIi9wcm9jL3N0YXQiLCAicmUiKTsKKyAgaWYgKGZwID09IE5VTEwpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGludCByZXN1bHQgPSAwOworICBjaGFyIGJ1ZlsyNTZdOworICB3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApICE9IE5VTEwpIHsKKyAgICAvLyBFeHRyYWN0IGp1c3QgdGhlIGZpcnN0IHdvcmQgZnJvbSB0aGUgbGluZS4KKyAgICAvLyAnY3B1MCA3OTc2NzUxIDEzNjQzODggMzExNjg0MiA0Njk3NzAzODggODYyOTQwNSAwIDQ5MDQ3IDAgMCAwJworICAgIGNoYXIqIHAgPSBzdHJjaHIoYnVmLCAnICcpOworICAgIGlmIChwICE9IE5VTEwpIHsKKyAgICAgICpwID0gMDsKKyAgICB9CisgICAgaWYgKF9fbWF0Y2hlc19jcHVOKGJ1ZikpIHsKKyAgICAgICsrcmVzdWx0OworICAgIH0KKyAgfQorICBmY2xvc2UoZnApOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IF9fZ2V0X21lbWluZm8oY29uc3QgY2hhciogcGF0dGVybikgeworICBGSUxFKiBmcCA9IGZvcGVuKCIvcHJvYy9tZW1pbmZvIiwgInJlIik7CisgIGlmIChmcCA9PSBOVUxMKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaW50IHJlc3VsdCA9IC0xOworICBjaGFyIGJ1ZlsyNTZdOworICB3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApICE9IE5VTEwpIHsKKyAgICBsb25nIHRvdGFsOworICAgIGlmIChzc2NhbmYoYnVmLCBwYXR0ZXJuLCAmdG90YWwpID09IDEpIHsKKyAgICAgIHJlc3VsdCA9IChpbnQpICh0b3RhbCAvIChQQUdFX1NJWkUvMTAyNCkpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGZjbG9zZShmcCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2xvbmcgZ2V0X3BoeXNfcGFnZXMoKSB7CisgIHJldHVybiBfX2dldF9tZW1pbmZvKCJNZW1Ub3RhbDogJWxkIGtCIik7Cit9CisKK2xvbmcgZ2V0X2F2cGh5c19wYWdlcygpIHsKKyAgcmV0dXJuIF9fZ2V0X21lbWluZm8oIk1lbUZyZWU6ICVsZCBrQiIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3lzdGVtX3Byb3BlcnRpZXMuY3BwIGIvbGliYy9iaW9uaWMvc3lzdGVtX3Byb3BlcnRpZXMuY3BwCmluZGV4IDBlMTZiZjMuLjE3MGU3YWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzLmNwcAorKysgYi9saWJjL2Jpb25pYy9zeXN0ZW1fcHJvcGVydGllcy5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAjaW5jbHVkZSA8bmV3PgorI2luY2x1ZGUgPHN0ZGF0b21pYy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC00NSw3ICs0Niw2IEBACiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNkZWZpbmUgX1JFQUxMWV9JTkNMVURFX1NZU19fU1lTVEVNX1BST1BFUlRJRVNfSF8KICNpbmNsdWRlIDxzeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmg+CkBAIC04MCw2ICs4MCwxNiBAQAogICAgIHVpbnQ4X3QgbmFtZWxlbjsKICAgICB1aW50OF90IHJlc2VydmVkWzNdOwogCisgICAgLy8gVE9ETzogVGhlIGZvbGxvd2luZyBmaWVsZHMgc2hvdWxkIGJlIGRlY2xhcmVkIGFzIGF0b21pY191aW50MzJfdC4KKyAgICAvLyBUaGV5IHNob3VsZCBiZSBhc3NpZ25lZCB0byB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzLCBpbnN0ZWFkIG9mIHVzaW5nCisgICAgLy8gZXhwbGljaXQgZmVuY2VzLiAgVW5mb3J0dW5hdGVseSwgdGhlIHJlYWQgYWNjZXNzZXMgYXJlIGdlbmVyYWxseQorICAgIC8vIGZvbGxvd2VkIGJ5IG1vcmUgZGVwZW5kZW50IHJlYWQgYWNjZXNzZXMsIGFuZCB0aGUgZGVwZW5kZW5jZQorICAgIC8vIGlzIGFzc3VtZWQgdG8gZW5mb3JjZSBtZW1vcnkgb3JkZXJpbmcuICBXaGljaCBpdCBkb2VzIG9uIHN1cHBvcnRlZAorICAgIC8vIGhhcmR3YXJlLiAgVGhpcyB0ZWNobmljYWxseSBzaG91bGQgdXNlIG1lbW9yeV9vcmRlcl9jb25zdW1lLCBpZgorICAgIC8vIHRoYXQgd29ya2VkIGFzIGludGVuZGVkLgorICAgIC8vIFdlIHNob3VsZCBhbHNvIGF2b2lkIHJlcmVhZGluZyB0aGVzZSBmaWVsZHMgcmVkdW5kYW50bHksIHNpbmNlIG5vdAorICAgIC8vIGFsbCBwcm9jZXNzb3IgaW1wbGVtZW50YXRpb25zIGVuc3VyZSB0aGF0IG11bHRpcGxlIGxvYWRzIGZyb20gdGhlCisgICAgLy8gc2FtZSBmaWVsZCBhcmUgY2FycmllZCBvdXQgaW4gdGhlIHJpZ2h0IG9yZGVyLgogICAgIHZvbGF0aWxlIHVpbnQzMl90IHByb3A7CiAKICAgICB2b2xhdGlsZSB1aW50MzJfdCBsZWZ0OwpAQCAtOTMsNyArMTAzLDggQEAKICAgICAgICAgdGhpcy0+bmFtZWxlbiA9IG5hbWVfbGVuZ3RoOwogICAgICAgICBtZW1jcHkodGhpcy0+bmFtZSwgbmFtZSwgbmFtZV9sZW5ndGgpOwogICAgICAgICB0aGlzLT5uYW1lW25hbWVfbGVuZ3RoXSA9ICdcMCc7Ci0gICAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKKyAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOyAgLy8gVE9ETzogSW5zdGVhZCB1c2UgYSByZWxlYXNlIHN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBzdWJzZXF1ZW50IHBvaW50ZXIgYXNzaWdubWVudC4KICAgICB9CiAKIHByaXZhdGU6CkBAIC0xMDIsMTQgKzExMywxNSBAQAogCiBzdHJ1Y3QgcHJvcF9hcmVhIHsKICAgICB1aW50MzJfdCBieXRlc191c2VkOwotICAgIHZvbGF0aWxlIHVpbnQzMl90IHNlcmlhbDsKKyAgICBhdG9taWNfdWludF9sZWFzdDMyX3Qgc2VyaWFsOwogICAgIHVpbnQzMl90IG1hZ2ljOwogICAgIHVpbnQzMl90IHZlcnNpb247CiAgICAgdWludDMyX3QgcmVzZXJ2ZWRbMjhdOwogICAgIGNoYXIgZGF0YVswXTsKIAogICAgIHByb3BfYXJlYShjb25zdCB1aW50MzJfdCBtYWdpYywgY29uc3QgdWludDMyX3QgdmVyc2lvbikgOgotICAgICAgICBzZXJpYWwoMCksIG1hZ2ljKG1hZ2ljKSwgdmVyc2lvbih2ZXJzaW9uKSB7CisgICAgICAgIG1hZ2ljKG1hZ2ljKSwgdmVyc2lvbih2ZXJzaW9uKSB7CisgICAgICAgIGF0b21pY19pbml0KCZzZXJpYWwsIDApOwogICAgICAgICBtZW1zZXQocmVzZXJ2ZWQsIDAsIHNpemVvZihyZXNlcnZlZCkpOwogICAgICAgICAvLyBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSByb290IG5vZGUuCiAgICAgICAgIGJ5dGVzX3VzZWQgPSBzaXplb2YocHJvcF9idCk7CkBAIC0xMjAsNyArMTMyLDcgQEAKIH07CiAKIHN0cnVjdCBwcm9wX2luZm8gewotICAgIHZvbGF0aWxlIHVpbnQzMl90IHNlcmlhbDsKKyAgICBhdG9taWNfdWludF9sZWFzdDMyX3Qgc2VyaWFsOwogICAgIGNoYXIgdmFsdWVbUFJPUF9WQUxVRV9NQVhdOwogICAgIGNoYXIgbmFtZVswXTsKIApAQCAtMTI4LDEwICsxNDAsMTEgQEAKICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCB2YWx1ZWxlbikgewogICAgICAgICBtZW1jcHkodGhpcy0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CiAgICAgICAgIHRoaXMtPm5hbWVbbmFtZWxlbl0gPSAnXDAnOwotICAgICAgICB0aGlzLT5zZXJpYWwgPSAodmFsdWVsZW4gPDwgMjQpOworICAgICAgICBhdG9taWNfaW5pdCgmdGhpcy0+c2VyaWFsLCB2YWx1ZWxlbiA8PCAyNCk7CiAgICAgICAgIG1lbWNweSh0aGlzLT52YWx1ZSwgdmFsdWUsIHZhbHVlbGVuKTsKICAgICAgICAgdGhpcy0+dmFsdWVbdmFsdWVsZW5dID0gJ1wwJzsKLSAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7ICAvLyBUT0RPOiBJbnN0ZWFkIHVzZSBhIHJlbGVhc2Ugc3RvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHN1YnNlcXVlbnQgcG9pbnQgYXNzaWdubWVudC4KICAgICB9CiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihwcm9wX2luZm8pOwpAQCAtMTg4LDE0ICsyMDEsNiBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgLy8gVE9ETzogSXMgdGhpcyByZWFsbHkgcmVxdWlyZWQgPyBEb2VzIGFuZHJvaWQgcnVuIG9uIGFueSBrZXJuZWxzIHRoYXQKLSAgICAvLyBkb24ndCBzdXBwb3J0IE9fQ0xPRVhFQyA/Ci0gICAgY29uc3QgaW50IHJldCA9IGZjbnRsKGZkLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKLSAgICBpZiAocmV0IDwgMCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KICAgICBpZiAoZnRydW5jYXRlKGZkLCBQQV9TSVpFKSA8IDApIHsKICAgICAgICAgY2xvc2UoZmQpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0yNTgsMTggKzI2Myw5IEBACiAKIHN0YXRpYyBpbnQgbWFwX3Byb3BfYXJlYSgpCiB7Ci0gICAgaW50IGZkKG9wZW4ocHJvcGVydHlfZmlsZW5hbWUsIE9fUkRPTkxZIHwgT19OT0ZPTExPVyB8IE9fQ0xPRVhFQykpOwotICAgIGlmIChmZCA+PSAwKSB7Ci0gICAgICAgIC8qIEZvciBvbGQga2VybmVscyB0aGF0IGRvbid0IHN1cHBvcnQgT19DTE9FWEVDICovCi0gICAgICAgIGNvbnN0IGludCByZXQgPSBmY250bChmZCwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7Ci0gICAgICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICB9Ci0KKyAgICBpbnQgZmQgPSBvcGVuKHByb3BlcnR5X2ZpbGVuYW1lLCBPX0NMT0VYRUMgfCBPX05PRk9MTE9XIHwgT19SRE9OTFkpOwogICAgIGJvb2wgY2xvc2VfZmQgPSB0cnVlOwotICAgIGlmICgoZmQgPCAwKSAmJiAoZXJybm8gPT0gRU5PRU5UKSkgeworICAgIGlmIChmZCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpIHsKICAgICAgICAgLyoKICAgICAgICAgICogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBpZiB0aGUgZmlsZSBkb2Vzbid0CiAgICAgICAgICAqIGV4aXN0LCB3ZSB1c2UgdGhlIGVudmlyb25tZW50IHRvIGdldCB0aGUgZmlsZSBkZXNjcmlwdG9yLgpAQCAtNTk4LDYgKzU5NCwxNCBAQAogICAgIHJldHVybiBmaW5kX3Byb3BlcnR5KHJvb3Rfbm9kZSgpLCBuYW1lLCBzdHJsZW4obmFtZSksIE5VTEwsIDAsIGZhbHNlKTsKIH0KIAorLy8gVGhlIEMxMSBzdGFuZGFyZCBkb2Vzbid0IGFsbG93IGF0b21pYyBsb2FkcyBmcm9tIGNvbnN0IGZpZWxkcywKKy8vIHRob3VnaCBDKysxMSBkb2VzLiAgRnVkZ2UgaXQgdW50aWwgc3RhbmRhcmRzIGdldCBzdHJhaWdodGVuZWQgb3V0Lgorc3RhdGljIGlubGluZSB1aW50X2xlYXN0MzJfdCBsb2FkX2NvbnN0X2F0b21pYyhjb25zdCBhdG9taWNfdWludF9sZWFzdDMyX3QqIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeV9vcmRlciBtbykgeworICAgIGF0b21pY191aW50X2xlYXN0MzJfdCogbm9uX2NvbnN0X3MgPSBjb25zdF9jYXN0PGF0b21pY191aW50X2xlYXN0MzJfdCo+KHMpOworICAgIHJldHVybiBhdG9taWNfbG9hZF9leHBsaWNpdChub25fY29uc3RfcywgbW8pOworfQorCiBpbnQgX19zeXN0ZW1fcHJvcGVydHlfcmVhZChjb25zdCBwcm9wX2luZm8gKnBpLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKIHsKICAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKGNvbXBhdF9tb2RlKSkgewpAQCAtNjA1LDExICs2MDksMjAgQEAKICAgICB9CiAKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICB1aW50MzJfdCBzZXJpYWwgPSBfX3N5c3RlbV9wcm9wZXJ0eV9zZXJpYWwocGkpOworICAgICAgICB1aW50MzJfdCBzZXJpYWwgPSBfX3N5c3RlbV9wcm9wZXJ0eV9zZXJpYWwocGkpOyAvLyBhY3F1aXJlIHNlbWFudGljcwogICAgICAgICBzaXplX3QgbGVuID0gU0VSSUFMX1ZBTFVFX0xFTihzZXJpYWwpOwogICAgICAgICBtZW1jcHkodmFsdWUsIHBpLT52YWx1ZSwgbGVuICsgMSk7Ci0gICAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKLSAgICAgICAgaWYgKHNlcmlhbCA9PSBwaS0+c2VyaWFsKSB7CisgICAgICAgIC8vIFRPRE86IEZpeCB0aGUgc3luY2hyb25pemF0aW9uIHNjaGVtZSBoZXJlLgorICAgICAgICAvLyBUaGVyZSBpcyBubyBmdWxseSBzdXBwb3J0ZWQgd2F5IHRvIGltcGxlbWVudCB0aGlzIGtpbmQKKyAgICAgICAgLy8gb2Ygc3luY2hyb25pemF0aW9uIGluIEMrKzExLCBzaW5jZSB0aGUgbWVtY3B5IHJhY2VzIHdpdGgKKyAgICAgICAgLy8gdXBkYXRlcyB0byBwaSwgYW5kIHRoZSBkYXRhIGJlaW5nIGFjY2Vzc2VkIGlzIG5vdCBhdG9taWMuCisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgZmVuY2UgaXMgdW5pbnR1aXRpdmUsIGJ1dCB3b3VsZCBiZSB0aGUKKyAgICAgICAgLy8gY29ycmVjdCBvbmUgaWYgbWVtY3B5IHVzZWQgbWVtb3J5X29yZGVyX3JlbGF4ZWQgYXRvbWljIGFjY2Vzc2VzLgorICAgICAgICAvLyBJbiBwcmFjdGljZSBpdCBzZWVtcyB1bmxpa2VseSB0aGF0IHRoZSBnZW5lcmF0ZWQgY29kZSB3b3VsZAorICAgICAgICAvLyB3b3VsZCBiZSBhbnkgZGlmZmVyZW50LCBzbyB0aGlzIHNob3VsZCBiZSBPSy4KKyAgICAgICAgYXRvbWljX3RocmVhZF9mZW5jZShtZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAgICAgIGlmIChzZXJpYWwgPT0KKyAgICAgICAgICAgICAgICBsb2FkX2NvbnN0X2F0b21pYygmKHBpLT5zZXJpYWwpLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCkpIHsKICAgICAgICAgICAgIGlmIChuYW1lICE9IDApIHsKICAgICAgICAgICAgICAgICBzdHJjcHkobmFtZSwgcGktPm5hbWUpOwogICAgICAgICAgICAgfQpAQCAtNjU4LDE0ICs2NzEsMjQgQEAKICAgICBpZiAobGVuID49IFBST1BfVkFMVUVfTUFYKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBwaS0+c2VyaWFsID0gcGktPnNlcmlhbCB8IDE7Ci0gICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgIHVpbnQzMl90IHNlcmlhbCA9IGF0b21pY19sb2FkX2V4cGxpY2l0KCZwaS0+c2VyaWFsLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgc2VyaWFsIHw9IDE7CisgICAgYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZwaS0+c2VyaWFsLCBzZXJpYWwsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAvLyBUaGUgbWVtY3B5IGNhbGwgaGVyZSBhbHNvIHJhY2VzLiAgQWdhaW4gcHJldGVuZCBpdAorICAgIC8vIHVzZWQgbWVtb3J5X29yZGVyX3JlbGF4ZWQgYXRvbWljcywgYW5kIHVzZSB0aGUgYW5hbG9nb3VzCisgICAgLy8gY291bnRlcmludHVpdGl2ZSBmZW5jZS4KKyAgICBhdG9taWNfdGhyZWFkX2ZlbmNlKG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKICAgICBtZW1jcHkocGktPnZhbHVlLCB2YWx1ZSwgbGVuICsgMSk7Ci0gICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgIHBpLT5zZXJpYWwgPSAobGVuIDw8IDI0KSB8ICgocGktPnNlcmlhbCArIDEpICYgMHhmZmZmZmYpOworICAgIGF0b21pY19zdG9yZV9leHBsaWNpdCgKKyAgICAgICAgJnBpLT5zZXJpYWwsCisgICAgICAgIChsZW4gPDwgMjQpIHwgKChzZXJpYWwgKyAxKSAmIDB4ZmZmZmZmKSwKKyAgICAgICAgbWVtb3J5X29yZGVyX3JlbGVhc2UpOwogICAgIF9fZnV0ZXhfd2FrZSgmcGktPnNlcmlhbCwgSU5UMzJfTUFYKTsKIAotICAgIHBhLT5zZXJpYWwrKzsKKyAgICBhdG9taWNfc3RvcmVfZXhwbGljaXQoCisgICAgICAgICZwYS0+c2VyaWFsLAorICAgICAgICBhdG9taWNfbG9hZF9leHBsaWNpdCgmcGEtPnNlcmlhbCwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpICsgMSwKKyAgICAgICAgbWVtb3J5X29yZGVyX3JlbGVhc2UpOwogICAgIF9fZnV0ZXhfd2FrZSgmcGEtPnNlcmlhbCwgSU5UMzJfTUFYKTsKIAogICAgIHJldHVybiAwOwpAQCAtNjg4LDE3ICs3MTEsMjUgQEAKICAgICBpZiAoIXBpKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBwYS0+c2VyaWFsKys7CisgICAgLy8gVGhlcmUgaXMgb25seSBhIHNpbmdsZSBtdXRhdG9yLCBidXQgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdAorICAgIC8vIHVwZGF0ZXMgYXJlIHZpc2libGUgdG8gYSByZWFkZXIgd2FpdGluZyBmb3IgdGhlIHVwZGF0ZS4KKyAgICBhdG9taWNfc3RvcmVfZXhwbGljaXQoCisgICAgICAgICZwYS0+c2VyaWFsLAorICAgICAgICBhdG9taWNfbG9hZF9leHBsaWNpdCgmcGEtPnNlcmlhbCwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpICsgMSwKKyAgICAgICAgbWVtb3J5X29yZGVyX3JlbGVhc2UpOwogICAgIF9fZnV0ZXhfd2FrZSgmcGEtPnNlcmlhbCwgSU5UMzJfTUFYKTsKICAgICByZXR1cm4gMDsKIH0KIAorLy8gV2FpdCBmb3Igbm9uLWxvY2tlZCBzZXJpYWwsIGFuZCByZXRyaWV2ZSBpdCB3aXRoIGFjcXVpcmUgc2VtYW50aWNzLgogdW5zaWduZWQgaW50IF9fc3lzdGVtX3Byb3BlcnR5X3NlcmlhbChjb25zdCBwcm9wX2luZm8gKnBpKQogewotICAgIHVpbnQzMl90IHNlcmlhbCA9IHBpLT5zZXJpYWw7CisgICAgdWludDMyX3Qgc2VyaWFsID0gbG9hZF9jb25zdF9hdG9taWMoJnBpLT5zZXJpYWwsIG1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKICAgICB3aGlsZSAoU0VSSUFMX0RJUlRZKHNlcmlhbCkpIHsKLSAgICAgICAgX19mdXRleF93YWl0KGNvbnN0X2Nhc3Q8dm9sYXRpbGUgdWludDMyX3QqPigmcGktPnNlcmlhbCksIHNlcmlhbCwgTlVMTCk7Ci0gICAgICAgIHNlcmlhbCA9IHBpLT5zZXJpYWw7CisgICAgICAgIF9fZnV0ZXhfd2FpdChjb25zdF9jYXN0PHZvbGF0aWxlIHZvaWQgKj4oCisgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4oJnBpLT5zZXJpYWwpKSwKKyAgICAgICAgICAgICAgICAgICAgIHNlcmlhbCwgTlVMTCk7CisgICAgICAgIHNlcmlhbCA9IGxvYWRfY29uc3RfYXRvbWljKCZwaS0+c2VyaWFsLCBtZW1vcnlfb3JkZXJfYWNxdWlyZSk7CiAgICAgfQogICAgIHJldHVybiBzZXJpYWw7CiB9CkBAIC03MDYsMTIgKzczNywxNCBAQAogdW5zaWduZWQgaW50IF9fc3lzdGVtX3Byb3BlcnR5X3dhaXRfYW55KHVuc2lnbmVkIGludCBzZXJpYWwpCiB7CiAgICAgcHJvcF9hcmVhICpwYSA9IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKKyAgICB1aW50MzJfdCBteV9zZXJpYWw7CiAKICAgICBkbyB7CiAgICAgICAgIF9fZnV0ZXhfd2FpdCgmcGEtPnNlcmlhbCwgc2VyaWFsLCBOVUxMKTsKLSAgICB9IHdoaWxlIChwYS0+c2VyaWFsID09IHNlcmlhbCk7CisgICAgICAgIG15X3NlcmlhbCA9IGF0b21pY19sb2FkX2V4cGxpY2l0KCZwYS0+c2VyaWFsLCBtZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAgfSB3aGlsZSAobXlfc2VyaWFsID09IHNlcmlhbCk7CiAKLSAgICByZXR1cm4gcGEtPnNlcmlhbDsKKyAgICByZXR1cm4gbXlfc2VyaWFsOwogfQogCiBjb25zdCBwcm9wX2luZm8gKl9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfbnRoKHVuc2lnbmVkIG4pCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy90aW1lNjQuYyBiL2xpYmMvYmlvbmljL3RpbWU2NC5jCmluZGV4IDk1ZGZhYjUuLmRhMzhiZjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3RpbWU2NC5jCisrKyBiL2xpYmMvYmlvbmljL3RpbWU2NC5jCkBAIC03NDgsMTAgKzc0OCwyNCBAQAogY2hhciAqYXNjdGltZTY0X3IoIGNvbnN0IHN0cnVjdCBUTSogZGF0ZSwgY2hhciAqcmVzdWx0ICkgewogICAgIC8qIEkgZmlndXJlIGV2ZXJ5dGhpbmcgZWxzZSBjYW4gYmUgZGlzcGxheWVkLCBldmVuIGhvdXIgMjUsIGJ1dCBpZgogICAgICAgIHRoZXNlIGFyZSBvdXQgb2YgcmFuZ2Ugd2Ugd2FsayBvZmYgdGhlIG5hbWUgYXJyYXlzICovCi0gICAgaWYoICF2YWxpZF90bV93ZGF5KGRhdGUpIHx8ICF2YWxpZF90bV9tb24oZGF0ZSkgKQorICAgIGlmICghdmFsaWRfdG1fd2RheShkYXRlKSB8fCAhdmFsaWRfdG1fbW9uKGRhdGUpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIHNwcmludGYocmVzdWx0LCAiJS4zcyAlLjNzJTNkICUuMmQ6JS4yZDolLjJkICVkXG4iLAorICAgIC8qIERvY3Mgc3RhdGUgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHllYXJzIGJleW9uZCA5OTk5LiAqLworICAgIGlmICgxOTAwICsgZGF0ZS0+dG1feWVhciA+IDk5OTkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUaGUgSUJNIGRvY3MgZm9yIHRoaXMgZnVuY3Rpb24gc3RhdGUgdGhhdCB0aGUgcmVzdWx0IGJ1ZmZlciBjYW4gYmUKKyAgICAgKiBhc3N1bWVkIHRvIGJlIGF0IGxlYXN0IDI2IGJ5dGVzIHdpZGUuIFRoZSBkb2NzIGFsc28gc3RhdGUgdGhhdCB0aGlzIGlzCisgICAgICogb25seSB2YWxpZCBmb3IgeWVhcnMgPD0gOTk5OSwgc28gd2Uga25vdyB0aGlzIGZvcm1hdCBzdHJpbmcgd2lsbCBub3QKKyAgICAgKiBwcmludCBtb3JlIHRoYW4gdGhhdCBtYW55IGNoYXJhY3RlcnMuCisgICAgICoKKyAgICAgKiBodHRwOi8vd3d3LTAxLmlibS5jb20vc3VwcG9ydC9rbm93bGVkZ2VjZW50ZXIvU1NMVEJXXzIuMS4wL2NvbS5pYm0uem9zLnYycjEuYnB4YmQwMC9hc2N0aW1lci5odG0KKyAgICAgKi8KKyAgICBzbnByaW50ZihyZXN1bHQsIDI2LCAiJS4zcyAlLjNzJTNkICUuMmQ6JS4yZDolLjJkICVkXG4iLAogICAgICAgICB3ZGF5X25hbWVbZGF0ZS0+dG1fd2RheV0sCiAgICAgICAgIG1vbl9uYW1lW2RhdGUtPnRtX21vbl0sCiAgICAgICAgIGRhdGUtPnRtX21kYXksIGRhdGUtPnRtX2hvdXIsCmRpZmYgLS1naXQgYS9saWJjL2Rucy9nZXRobmFtYWRkci5jIGIvbGliYy9kbnMvZ2V0aG5hbWFkZHIuYwppbmRleCAxZDg0N2I4Li4wYmQ4MzhlIDEwMDY0NAotLS0gYS9saWJjL2Rucy9nZXRobmFtYWRkci5jCisrKyBiL2xpYmMvZG5zL2dldGhuYW1hZGRyLmMKQEAgLTg5OSw3ICs4OTksNyBAQAogICAgIHJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOwogICAgIGlmIChycyA9PSBOVUxMKSByZXR1cm47CiAJaWYgKCFycy0+aG9zdGYpCi0JCXJzLT5ob3N0ZiA9IGZvcGVuKF9QQVRIX0hPU1RTLCAiciIgKTsKKwkJcnMtPmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyZSIgKTsKIAllbHNlCiAJCXJld2luZChycy0+aG9zdGYpOwogCXJzLT5zdGF5b3BlbiA9IGY7CkBAIC05MjUsNyArOTI1LDcgQEAKIAlpbnQgYWYsIGxlbjsKIAlyZXNfc3RhdGljICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKIAotCWlmICghcnMtPmhvc3RmICYmICEocnMtPmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyIiApKSkgeworCWlmICghcnMtPmhvc3RmICYmICEocnMtPmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyZSIgKSkpIHsKIAkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOwogCQlyZXR1cm4gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9saWJjL2Rucy9pbmNsdWRlL3Jlc29sdl9wcml2YXRlLmggYi9saWJjL2Rucy9pbmNsdWRlL3Jlc29sdl9wcml2YXRlLmgKaW5kZXggYTkxYTRiOC4uNGE4MzJkMCAxMDA2NDQKLS0tIGEvbGliYy9kbnMvaW5jbHVkZS9yZXNvbHZfcHJpdmF0ZS5oCisrKyBiL2xpYmMvZG5zL2luY2x1ZGUvcmVzb2x2X3ByaXZhdGUuaApAQCAtNDI2LDcgKzQyNiw3IEBACiBpbnQJCWI2NF9wdG9uKGNoYXIgY29uc3QgKiwgdV9jaGFyICosIHNpemVfdCk7CiAjZW5kaWYKIGludAkJbG9jX2F0b24oY29uc3QgY2hhciAqLCB1X2NoYXIgKik7Ci1jb25zdCBjaGFyICoJbG9jX250b2EoY29uc3QgdV9jaGFyICosIGNoYXIgKik7Citjb25zdCBjaGFyICoJbG9jX250b2EoY29uc3QgdV9jaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKIGludAkJZG5fc2tpcG5hbWUoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqKTsKIHZvaWQJCXB1dGxvbmcodWludDMyX3QsIHVfY2hhciAqKTsKIHZvaWQJCXB1dHNob3J0KHVpbnQxNl90LCB1X2NoYXIgKik7CmRpZmYgLS1naXQgYS9saWJjL2Rucy9uYW1lc2VyL25zX25hbWUuYyBiL2xpYmMvZG5zL25hbWVzZXIvbnNfbmFtZS5jCmluZGV4IGUzNzU5YWIuLjNhMjAyYzEgMTAwNjQ0Ci0tLSBhL2xpYmMvZG5zL25hbWVzZXIvbnNfbmFtZS5jCisrKyBiL2xpYmMvZG5zL25hbWVzZXIvbnNfbmFtZS5jCkBAIC00MywxMiArNDMsNiBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCi0jaWZkZWYgU1BSSU5URl9DSEFSCi0jIGRlZmluZSBTUFJJTlRGKHgpICgoaW50KXN0cmxlbihzcHJpbnRmLyoqL3gpKQotI2Vsc2UKLSMgZGVmaW5lIFNQUklOVEYoeCkgKHNwcmludGYgeCkKLSNlbmRpZgotCiAjZGVmaW5lIE5TX1RZUEVfRUxUCQkJMHg0MCAvKiBFRE5TMCBleHRlbmRlZCBsYWJlbCB0eXBlICovCiAjZGVmaW5lIEROU19MQUJFTFRZUEVfQklUU1RSSU5HCQkweDQxCiAKQEAgLTEwMTIsMzEgKzEwMDYsMzEgQEAKIAkJcmV0dXJuKC0xKTsKIAogCWNwKys7Ci0JaSA9IFNQUklOVEYoKGRuLCAiXFxbeCIpKTsKKwlpID0gc25wcmludGYoZG4sIGVvbSAtIGRuLCAiXFxbeCIpOwogCWlmIChpIDwgMCkKIAkJcmV0dXJuICgtMSk7CiAJZG4gKz0gaTsKIAlmb3IgKGIgPSBibGVuOyBiID4gNzsgYiAtPSA4LCBjcCsrKSB7Ci0JCWkgPSBTUFJJTlRGKChkbiwgIiUwMngiLCAqY3AgJiAweGZmKSk7CisJCWkgPSBzbnByaW50ZihkbiwgZW9tIC0gZG4sICIlMDJ4IiwgKmNwICYgMHhmZik7CiAJCWlmIChpIDwgMCkKIAkJCXJldHVybiAoLTEpOwogCQlkbiArPSBpOwogCX0KIAlpZiAoYiA+IDQpIHsKIAkJdGMgPSAqY3ArKzsKLQkJaSA9IFNQUklOVEYoKGRuLCAiJTAyeCIsIHRjICYgKDB4ZmYgPDwgKDggLSBiKSkpKTsKKwkJaSA9IHNucHJpbnRmKGRuLCBlb20gLSBkbiwgIiUwMngiLCB0YyAmICgweGZmIDw8ICg4IC0gYikpKTsKIAkJaWYgKGkgPCAwKQogCQkJcmV0dXJuICgtMSk7CiAJCWRuICs9IGk7CiAJfSBlbHNlIGlmIChiID4gMCkgewogCQl0YyA9ICpjcCsrOwotCQlpID0gU1BSSU5URigoZG4sICIlMXgiLAotCQkJICAgICAgICgoKHVfaW50MzJfdCl0YyA+PiA0KSAmIDB4MGYpICYgKDB4MGYgPDwgKDQgLSBiKSkpKTsKKwkJaSA9IHNucHJpbnRmKGRuLCBlb20gLSBkbiwgIiUxeCIsCisJCQkgICAgICAgKCgodV9pbnQzMl90KXRjID4+IDQpICYgMHgwZikgJiAoMHgwZiA8PCAoNCAtIGIpKSk7CiAJCWlmIChpIDwgMCkKIAkJCXJldHVybiAoLTEpOwogCQlkbiArPSBpOwogCX0KLQlpID0gU1BSSU5URigoZG4sICIvJWRdIiwgYmxlbikpOworCWkgPSBzbnByaW50ZihkbiwgZW9tIC0gZG4sICIvJWRdIiwgYmxlbik7CiAJaWYgKGkgPCAwKQogCQlyZXR1cm4gKC0xKTsKIAlkbiArPSBpOwpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvbmFtZXNlci9uc19wcmludC5jIGIvbGliYy9kbnMvbmFtZXNlci9uc19wcmludC5jCmluZGV4IDBhNmExZDYuLjMyYzg3MTUgMTAwNjQ0Ci0tLSBhL2xpYmMvZG5zL25hbWVzZXIvbnNfcHJpbnQuYworKysgYi9saWJjL2Rucy9uYW1lc2VyL25zX3ByaW50LmMKQEAgLTQ4LDEyICs0OCw2IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAotI2lmZGVmIFNQUklOVEZfQ0hBUgotIyBkZWZpbmUgU1BSSU5URih4KSAoKGludClzdHJsZW4oc3ByaW50Zi8qKi94KSkKLSNlbHNlCi0jIGRlZmluZSBTUFJJTlRGKHgpIChzcHJpbnRmIHgpCi0jZW5kaWYKLQogI2lmbmRlZiBNSU4KICNkZWZpbmUJTUlOKHgseSkJKCh4KTwoeSk/KHgpOih5KSkKICNlbmRpZgpAQCAtMTU1LDcgKzE0OSw3IEBACiAJICovCiAJVCh4ID0gbnNfZm9ybWF0X3R0bCh0dGwsIGJ1ZiwgYnVmbGVuKSk7CiAJYWRkbGVuKChzaXplX3QpeCwgJmJ1ZiwgJmJ1Zmxlbik7Ci0JbGVuID0gU1BSSU5URigodG1wLCAiICVzICVzIiwgcF9jbGFzcyhjbGFzcyksIHBfdHlwZSh0eXBlKSkpOworCWxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIgJXMgJXMiLCBwX2NsYXNzKGNsYXNzKSwgcF90eXBlKHR5cGUpKTsKIAlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAJVChzcGFjZWQgPSBhZGR0YWIoKHNpemVfdCkoeCArIGxlbiksIChzaXplX3QpMTYsIHNwYWNlZCwgJmJ1ZiwgJmJ1ZmxlbikpOwogCkBAIC0yMTgsNyArMjEyLDcgQEAKIAkJLyogU2VyaWFsIG51bWJlci4gKi8KIAkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CiAJCVQoYWRkc3RyKCJcdFx0XHRcdFx0IiwgKHNpemVfdCk1LCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVsdSIsIHQpKTsKKwkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVsdSIsIHQpOwogCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAJCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKIAkJVChhZGRzdHIoIjsgc2VyaWFsXG4iLCAoc2l6ZV90KTksICZidWYsICZidWZsZW4pKTsKQEAgLTI3NSw3ICsyNjksNyBAQAogCQkvKiBQcmlvcml0eS4gKi8KIAkJdCA9IG5zX2dldDE2KHJkYXRhKTsKIAkJcmRhdGEgKz0gTlNfSU5UMTZTWjsKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgdCkpOworCQlsZW4gPSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiJXUgIiwgdCk7CiAJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAogCQkvKiBUYXJnZXQuICovCkBAIC0yOTMsNyArMjg3LDcgQEAKIAkJLyogUHJpb3JpdHkuICovCiAJCXQgPSBuc19nZXQxNihyZGF0YSk7CiAJCXJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsIHQpKTsKKwkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiV1ICIsIHQpOwogCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAKIAkJLyogTmFtZTEuICovCkBAIC0zNDQsNyArMzM4LDcgQEAKIAkJY2hhciB0WzI1NV07CiAKIAkJLyogWFhYIHByb3RvY29sIGZvcm1hdCBjaGVja2luZz8gKi8KLQkJKHZvaWQpIGxvY19udG9hKHJkYXRhLCB0KTsKKwkJKHZvaWQpIGxvY19udG9hKHJkYXRhLCB0LCBzaXplb2YodCkpOwogCQlUKGFkZHN0cih0LCBzdHJsZW4odCksICZidWYsICZidWZsZW4pKTsKIAkJYnJlYWs7CiAJICAgIH0KQEAgLTM1OSw3ICszNTMsNyBAQAogCQkvKiBPcmRlciwgUHJlY2VkZW5jZS4gKi8KIAkJb3JkZXIgPSBuc19nZXQxNihyZGF0YSk7CXJkYXRhICs9IE5TX0lOVDE2U1o7CiAJCXByZWZlcmVuY2UgPSBuc19nZXQxNihyZGF0YSk7CXJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCWxlbiA9IFNQUklOVEYoKHQsICIldSAldSAiLCBvcmRlciwgcHJlZmVyZW5jZSkpOworCQlsZW4gPSBzbnByaW50Zih0LCBzaXplb2YodCksICIldSAldSAiLCBvcmRlciwgcHJlZmVyZW5jZSk7CiAJCVQoYWRkc3RyKHQsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAKIAkJLyogRmxhZ3MuICovCkBAIC00MDEsNyArMzk1LDcgQEAKIAkJcHJpb3JpdHkgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOwogCQl3ZWlnaHQgICA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CiAJCXBvcnQgICAgID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKLQkJbGVuID0gU1BSSU5URigodCwgIiV1ICV1ICV1ICIsIHByaW9yaXR5LCB3ZWlnaHQsIHBvcnQpKTsKKwkJbGVuID0gc25wcmludGYodCwgc2l6ZW9mKHQpLCAiJXUgJXUgJXUgIiwgcHJpb3JpdHksIHdlaWdodCwgcG9ydCk7CiAJCVQoYWRkc3RyKHQsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAKIAkJLyogU2VydmVyLiAqLwpAQCAtNDMyLDcgKzQyNiw3IEBACiAJCXJkYXRhICs9IE5TX0lOQUREUlNaOwogCiAJCS8qIFByb3RvY29sLiAqLwotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIgJXUgKCAiLCAqcmRhdGEpKTsKKwkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiAldSAoICIsICpyZGF0YSk7CiAJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAkJcmRhdGEgKz0gTlNfSU5UOFNaOwogCkBAIC00NDksNyArNDQzLDcgQEAKIAkJCQkJCWxjbnQgPSAxMDsKIAkJCQkJCXNwYWNlZCA9IDA7CiAJCQkJCX0KLQkJCQkJbGVuID0gU1BSSU5URigodG1wLCAiJWQgIiwgbikpOworCQkJCQlsZW4gPSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiJWQgIiwgbik7CiAJCQkJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAkJCQkJbGNudC0tOwogCQkJCX0KQEAgLTQ4MCw4ICs0NzQsOCBAQAogCQlrZXlmbGFncyA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CiAJCXByb3RvY29sID0gKnJkYXRhKys7CiAJCWFsZ29yaXRobSA9ICpyZGF0YSsrOwotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIweCUwNHggJXUgJXUiLAotCQkJICAgICAgIGtleWZsYWdzLCBwcm90b2NvbCwgYWxnb3JpdGhtKSk7CisJCWxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIweCUwNHggJXUgJXUiLAorCQkJICAgICAgIGtleWZsYWdzLCBwcm90b2NvbCwgYWxnb3JpdGhtKTsKIAkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwogCiAJCS8qIFB1YmxpYyBrZXkgZGF0YS4gKi8KQEAgLTUwMiw3ICs0OTYsNyBAQAogCQl9CiAJCWlmIChsZW4gPiAxNSkKIAkJCVQoYWRkc3RyKCIgKSIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQluID0gU1BSSU5URigodG1wLCAiIDsga2V5X3RhZz0gJXUiLCBrZXlfaWQpKTsKKwkJbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIgOyBrZXlfdGFnPSAldSIsIGtleV9pZCk7CiAJCVQoYWRkc3RyKHRtcCwgKHNpemVfdCluLCAmYnVmLCAmYnVmbGVuKSk7CiAKIAkJYnJlYWs7CkBAIC01MjQsMjUgKzUxOCwyNSBAQAogCQlhbGdvcml0aG0gPSAqcmRhdGErKzsKIAkJbGFiZWxzID0gKnJkYXRhKys7CiAJCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOwotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlcyAlZCAlZCAlbHUgIiwKLQkJCSAgICAgICBwX3R5cGUoKGludCl0eXApLCBhbGdvcml0aG0sIGxhYmVscywgdCkpOworCQlsZW4gPSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiJXMgJWQgJWQgJWx1ICIsCisJCQkgICAgICAgcF90eXBlKChpbnQpdHlwKSwgYWxnb3JpdGhtLCBsYWJlbHMsIHQpOwogCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAJCWlmIChsYWJlbHMgPiAodV9pbnQpZG5fY291bnRfbGFiZWxzKG5hbWUpKQogCQkJZ290byBmb3JtZXJyOwogCiAJCS8qIFNpZ25hdHVyZSBleHBpcnkuICovCiAJCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOwotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlcyAiLCBwX3NlY3N0b2RhdGUodCkpKTsKKwkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVzICIsIHBfc2Vjc3RvZGF0ZSh0KSk7CiAJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAogCQkvKiBUaW1lIHNpZ25lZC4gKi8KIAkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVzICIsIHBfc2Vjc3RvZGF0ZSh0KSkpOworCQlsZW4gPSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiJXMgIiwgcF9zZWNzdG9kYXRlKHQpKTsKIAkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwogCiAJCS8qIFNpZ25hdHVyZSBGb290cHJpbnQuICovCiAJCWZvb3RwcmludCA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsIGZvb3RwcmludCkpOworCQlsZW4gPSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiJXUgIiwgZm9vdHByaW50KTsKIAkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwogCiAJCS8qIFNpZ25lcidzIG5hbWUuICovCkBAIC01NzksNyArNTczLDcgQEAKIAkJbiA9IGVkYXRhIC0gcmRhdGE7CiAJCWZvciAoYyA9IDA7IGMgPCBuKjg7IGMrKykKIAkJCWlmIChOU19OWFRfQklUX0lTU0VUKGMsIHJkYXRhKSkgewotCQkJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiAlcyIsIHBfdHlwZSgoaW50KWMpKSk7CisJCQkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiAlcyIsIHBfdHlwZSgoaW50KWMpKTsKIAkJCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAJCQl9CiAJCWJyZWFrOwpAQCAtNTk2LDcgKzU5MCw3IEBACiAJCWtleV90YWcgPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IE5TX0lOVDE2U1o7CiAJCWFsZyA9ICh1X2ludCkgKnJkYXRhKys7CiAKLQkJbGVuID0gU1BSSU5URigodG1wMSwgIiVkICVkICVkICIsIGNfdHlwZSwga2V5X3RhZywgYWxnKSk7CisJCWxlbiA9IHNucHJpbnRmKHRtcDEsIHNpemVvZih0bXAxKSwgIiVkICVkICVkICIsIGNfdHlwZSwga2V5X3RhZywgYWxnKTsKIAkJVChhZGRzdHIodG1wMSwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAkJc2l6ID0gKGVkYXRhLXJkYXRhKSo0LzMgKyA0OyAvKiAiKzQiIGFjY291bnRzIGZvciB0cmFpbGluZyBcMCAqLwogCQlpZiAoc2l6ID4gc2l6ZW9mKGJhc2U2NF9jZXJ0KSAqIDMvNCkgewpAQCAtNjQwLDEyICs2MzQsMTIgQEAKIAogCQkvKiBJbmNlcHRpb24uICovCiAJCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOwotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlcyAiLCBwX3NlY3N0b2RhdGUodCkpKTsKKwkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVzICIsIHBfc2Vjc3RvZGF0ZSh0KSk7CiAJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAogCQkvKiBFeHBlcmF0aW9uLiAqLwogCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJXMgIiwgcF9zZWNzdG9kYXRlKHQpKSk7CisJCWxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlcyAiLCBwX3NlY3N0b2RhdGUodCkpOwogCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAKIAkJLyogTW9kZSAsIEVycm9yLCBLZXkgU2l6ZS4gKi8KQEAgLTY1Myw3ICs2NDcsNyBAQAogCQltb2RlID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKIAkJZXJyICA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CiAJCWtleXNpemUgID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgJXUgJXUgIiwgbW9kZSwgZXJyLCBrZXlzaXplKSk7CisJCWxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIldSAldSAldSAiLCBtb2RlLCBlcnIsIGtleXNpemUpOwogCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAKIAkJLyogWFhYIG5lZWQgdG8gZHVtcCBrZXksIHByaW50IG90aGVyZGF0YSBsZW5ndGggJiBvdGhlciBkYXRhICovCkBAIC02NzAsNyArNjY0LDcgQEAKIAkJbiA9IG5zX2dldDE2KHJkYXRhKTsgcmRhdGEgKz0gSU5UMTZTWjsKIAkJcmRhdGEgKz0gbjsgLyogc2lnICovCiAJCW4gPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IElOVDE2U1o7IC8qIG9yaWdpbmFsIGlkICovCi0JCXNwcmludGYoYnVmLCAiJWQiLCBuc19nZXQxNihyZGF0YSkpOworCQlzbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVkIiwgbnNfZ2V0MTYocmRhdGEpKTsKIAkJcmRhdGEgKz0gSU5UMTZTWjsKIAkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKIAkJYnJlYWs7CkBAIC02ODIsNyArNjc2LDcgQEAKIAogCQkvKiBwcmVmaXggbGVuZ3RoICovCiAJCWlmIChyZGxlbiA9PSAwVSkgZ290byBmb3JtZXJyOwotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlZCAiLCAqcmRhdGEpKTsKKwkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVkICIsICpyZGF0YSk7CiAJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAkJcGJpdCA9ICpyZGF0YTsKIAkJaWYgKHBiaXQgPiAxMjgpIGdvdG8gZm9ybWVycjsKQEAgLTcxMCw3ICs3MDQsNyBAQAogCSAgICB9CiAKIAljYXNlIG5zX3Rfb3B0OiB7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1IGJ5dGVzIiwgY2xhc3MpKTsKKwkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiV1IGJ5dGVzIiwgY2xhc3MpOwogCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAJCWJyZWFrOwogCSAgICB9CkBAIC03MjQsMjEgKzcxOCwyMSBAQAogCQkJaWYgKHJkbGVuIDwgNFUpIGdvdG8gZm9ybWVycjsKIAkJCXQgPSBuc19nZXQxNihyZGF0YSk7CiAJCQlyZGF0YSArPSBOU19JTlQxNlNaOwotCQkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgdCkpOworCQkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiV1ICIsIHQpOwogCQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwogCQl9IGVsc2UKIAkJCWlmIChyZGxlbiA8IDJVKSBnb3RvIGZvcm1lcnI7CiAKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgKnJkYXRhKSk7CisJCWxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIldSAiLCAqcmRhdGEpOwogCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAJCXJkYXRhKys7CiAKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgKnJkYXRhKSk7CisJCWxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIldSAiLCAqcmRhdGEpOwogCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAJCXJkYXRhKys7CiAKIAkJd2hpbGUgKHJkYXRhIDwgZWRhdGEpIHsKLQkJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiUwMlgiLCAqcmRhdGEpKTsKKwkJCWxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlMDJYIiwgKnJkYXRhKTsKIAkJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAkJCXJkYXRhKys7CiAJCX0KQEAgLTc0OSwxNyArNzQzLDE3IEBACiAJY2FzZSBuc190X25zZWMzcGFyYW06IHsKIAkJdV9pbnQgdCwgdywgbCwgaiwgaywgYzsKIAotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCAqcmRhdGEpKTsKKwkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiV1ICIsICpyZGF0YSk7CiAJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAkJcmRhdGErKzsKIAotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCAqcmRhdGEpKTsKKwkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiV1ICIsICpyZGF0YSk7CiAJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAkJcmRhdGErKzsKIAogCQl0ID0gbnNfZ2V0MTYocmRhdGEpOwogCQlyZGF0YSArPSBOU19JTlQxNlNaOwotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCB0KSk7CisJCWxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIldSAiLCB0KTsKIAkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwogCiAJCXQgPSAqcmRhdGErKzsKQEAgLTc2Nyw3ICs3NjEsNyBAQAogCQkJVChhZGRzdHIoIi0iLCAxLCAmYnVmLCAmYnVmbGVuKSk7CiAJCX0gZWxzZSB7CiAJCQl3aGlsZSAodC0tID4gMCkgewotCQkJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiUwMlgiLCAqcmRhdGEpKTsKKwkJCQlsZW4gPSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiJTAyWCIsICpyZGF0YSk7CiAJCQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwogCQkJCXJkYXRhKys7CiAJCQl9CkBAIC04NTEsNyArODQ1LDcgQEAKIAkJCQkJaWYgKChyZGF0YVtqXSAmICgweDgwID4+IGspKSA9PSAwKQogCQkJCQkJY29udGludWU7CiAJCQkJCWMgPSB3ICogMjU2ICsgaiAqIDggKyBrOwotCQkJCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIgJXMiLCBwX3R5cGUoKG5zX3R5cGUpYykpKTsKKwkJCQkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiAlcyIsIHBfdHlwZSgobnNfdHlwZSljKSk7CiAJCQkJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAkJCQl9CiAJCQl9CkBAIC04NzUsNyArODY5LDcgQEAKIAkJCQkJaWYgKChyZGF0YVtqXSAmICgweDgwID4+IGspKSA9PSAwKQogCQkJCQkJY29udGludWU7CiAJCQkJCWMgPSB3ICogMjU2ICsgaiAqIDggKyBrOwotCQkJCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIgJXMiLCBwX3R5cGUoKG5zX3R5cGUpYykpKTsKKwkJCQkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiAlcyIsIHBfdHlwZSgobnNfdHlwZSljKSk7CiAJCQkJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAkJCQl9CiAJCQl9CkBAIC05NDksMTUgKzk0MywxNSBAQAogCQkJZ290byBoZXhpZnk7CiAJCX0KIAotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCAqcmRhdGEpKTsKKwkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiV1ICIsICpyZGF0YSk7CiAJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAkJcmRhdGErKzsKIAotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCAqcmRhdGEpKTsKKwkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiV1ICIsICpyZGF0YSk7CiAJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAkJcmRhdGErKzsKIAotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCAqcmRhdGEpKTsKKwkJbGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiV1ICIsICpyZGF0YSk7CiAJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAkJcmRhdGErKzsKIApAQCAtMTAzMCwxMSArMTAyNCwxMSBAQAogCQkJY29uc3QgY2hhciAqc3RyID0gInJlY29yZCB0b28gbG9uZyB0byBwcmludCI7CiAJCQlUKGFkZHN0cihzdHIsIHN0cmxlbihzdHIpLCAmYnVmLCAmYnVmbGVuKSk7CiAJCX0gZWxzZSB7Ci0JCQlsZW4gPSBzcHJpbnRmKHRtcCwgIiggJXUgIiwgYWxnb3JpdGhtKTsKKwkJCWxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIoICV1ICIsIGFsZ29yaXRobSk7CiAJCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAKIAkJCWZvciAoaSA9IDA7IGkgPCBoaXBfbGVuOyBpKyspIHsKLQkJCQlsZW4gPSBzcHJpbnRmKHRtcCwgIiUwMlgiLCAqcmRhdGEpOworCQkJCWxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlMDJYIiwgKnJkYXRhKTsKIAkJCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CiAJCQkJcmRhdGErKzsKIAkJCX0KQEAgLTEwNjksMjMgKzEwNjMsMjMgQEAKIAlpbnQgbiwgbTsKIAljaGFyICpwOwogCi0JbGVuID0gU1BSSU5URigodG1wLCAiXFwjICV1JXNcdDsgJXMiLCAodW5zaWduZWQpKGVkYXRhIC0gcmRhdGEpLAotCQkgICAgICAgcmRsZW4gIT0gMFUgPyAiICgiIDogIiIsIGNvbW1lbnQpKTsKKwlsZW4gPSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiXFwjICV1JXNcdDsgJXMiLCAodW5zaWduZWQpKGVkYXRhIC0gcmRhdGEpLAorCQkgICAgICAgcmRsZW4gIT0gMFUgPyAiICgiIDogIiIsIGNvbW1lbnQpOwogCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKIAl3aGlsZSAocmRhdGEgPCBlZGF0YSkgewogCQlwID0gdG1wOwotCQlwICs9IFNQUklOVEYoKHAsICJcblx0IikpOworCQlwICs9IHNucHJpbnRmKHAsIHNpemVvZih0bXApLCAiXG5cdCIpOwogCQlzcGFjZWQgPSAwOwogCQluID0gTUlOKDE2LCAoaW50KShlZGF0YSAtIHJkYXRhKSk7CiAJCWZvciAobSA9IDA7IG0gPCBuOyBtKyspCi0JCQlwICs9IFNQUklOVEYoKHAsICIlMDJ4ICIsIHJkYXRhW21dKSk7CisJCQlwICs9IHNucHJpbnRmKHAsIHNpemVvZih0bXApIC0gKHAgLSB0bXApLCAiJTAyeCAiLCByZGF0YVttXSk7CiAJCVQoYWRkc3RyKHRtcCwgKHNpemVfdCkocCAtIHRtcCksICZidWYsICZidWZsZW4pKTsKIAkJaWYgKG4gPCAxNikgewogCQkJVChhZGRzdHIoIikiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKIAkJCVQoYWRkdGFiKChzaXplX3QpKHAgLSB0bXAgKyAxKSwgKHNpemVfdCk0OCwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CiAJCX0KIAkJcCA9IHRtcDsKLQkJcCArPSBTUFJJTlRGKChwLCAiOyAiKSk7CisJCXAgKz0gc25wcmludGYocCwgc2l6ZW9mKHRtcCksICI7ICIpOwogCQlmb3IgKG0gPSAwOyBtIDwgbjsgbSsrKQogCQkJKnArKyA9IChpc2FzY2lpKHJkYXRhW21dKSAmJiBpc3ByaW50KHJkYXRhW21dKSkKIAkJCQk/IHJkYXRhW21dCmRpZmYgLS1naXQgYS9saWJjL2Rucy9uYW1lc2VyL25zX3R0bC5jIGIvbGliYy9kbnMvbmFtZXNlci9uc190dGwuYwppbmRleCAyMzk1Yjk5Li5kZTA3M2I4IDEwMDY0NAotLS0gYS9saWJjL2Rucy9uYW1lc2VyL25zX3R0bC5jCisrKyBiL2xpYmMvZG5zL25hbWVzZXIvbnNfdHRsLmMKQEAgLTM2LDEyICszNiw2IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2lmZGVmIFNQUklOVEZfQ0hBUgotIyBkZWZpbmUgU1BSSU5URih4KSBzdHJsZW4oc3ByaW50Zi8qKi94KQotI2Vsc2UKLSMgZGVmaW5lIFNQUklOVEYoeCkgKChzaXplX3Qpc3ByaW50ZiB4KQotI2VuZGlmCi0KIC8qIEZvcndhcmQuICovCiAKIHN0YXRpYyBpbnQJZm10MShpbnQgdCwgY2hhciBzLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7CkBAIC0xNTcsOCArMTUxLDggQEAKIAljaGFyIHRtcFs1MF07CiAJc2l6ZV90IGxlbjsKIAotCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVkJWMiLCB0LCBzKSk7Ci0JaWYgKGxlbiArIDEgPiAqYnVmbGVuKQorCWxlbiA9IChzaXplX3Qpc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVkJWMiLCB0LCBzKTsKKwlpZiAoKGludClsZW4gPCAwIHx8IGxlbiArIDEgPiAqYnVmbGVuKQogCQlyZXR1cm4gKC0xKTsKIAlzdHJjcHkoKmJ1ZiwgdG1wKTsKIAkqYnVmICs9IGxlbjsKZGlmZiAtLWdpdCBhL2xpYmMvZG5zL25ldC9nZXRhZGRyaW5mby5jIGIvbGliYy9kbnMvbmV0L2dldGFkZHJpbmZvLmMKaW5kZXggMjYxMmQ2YS4uMWViZDIyMiAxMDA2NDQKLS0tIGEvbGliYy9kbnMvbmV0L2dldGFkZHJpbmZvLmMKKysrIGIvbGliYy9kbnMvbmV0L2dldGFkZHJpbmZvLmMKQEAgLTQwOCw2ICs0MDgsMTUgQEAKIAlyZXR1cm4gX3Rlc3RfY29ubmVjdChQRl9JTkVULCAmYWRkci5nZW5lcmljLCBzaXplb2YoYWRkci5pbiksIG1hcmspOwogfQogCitib29sIHJlYWRCRTMyKEZJTEUqIGZwLCBpbnQzMl90KiByZXN1bHQpIHsKKyAgaW50MzJfdCB0bXA7CisgIGlmIChmcmVhZCgmdG1wLCBzaXplb2YodG1wKSwgMSwgZnApICE9IDEpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgKnJlc3VsdCA9IG50b2hsKHRtcCk7CisgIHJldHVybiB0cnVlOworfQorCiAvLyBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSByZXR1cm5zIG9uIGVycm9yLgogc3RhdGljIGludAogYW5kcm9pZF9nZXRhZGRyaW5mb19wcm94eSgKQEAgLTQ1NCw2ICs0NjMsMTUgQEAKIAogCS8vIFNlbmQgdGhlIHJlcXVlc3QuCiAJcHJveHkgPSBmZG9wZW4oc29jaywgInIrIik7CisJaWYgKHByb3h5ID09IE5VTEwpIHsKKwkJLy8gRmFpbGVkIHRvIG1hcCBzb2NrIHRvIEZJTEUqLiBDaGVjayBlcnJubyBmb3IgdGhlIGNhdXNlLgorCQkvLyBAc29ueW1vYmlsZS5jb20gc2F3IGZhaWx1cmVzIGluIGF1dG9tYXRlZCB0ZXN0aW5nLCBidXQKKwkJLy8gY291bGRuJ3QgcmVwcm9kdWNlIGl0IGZvciBkZWJ1Z2dpbmcuCisJCS8vIEZhaWwgd2l0aCBFQUlfU1lTVEVNIGFuZCBsZXQgY2FsbGVycyBoYW5kbGUgdGhlIGZhaWx1cmUuCisJCWNsb3NlKHNvY2spOworCQlyZXR1cm4gRUFJX1NZU1RFTTsKKwl9CisKIAlpZiAoZnByaW50Zihwcm94eSwgImdldGFkZHJpbmZvICVzICVzICVkICVkICVkICVkICV1IiwKIAkJICAgIGhvc3RuYW1lID09IE5VTEwgPyAiXiIgOiBob3N0bmFtZSwKIAkJICAgIHNlcnZuYW1lID09IE5VTEwgPyAiXiIgOiBzZXJ2bmFtZSwKQEAgLTQ4Niw2MSArNTA0LDYyIEBACiAJc3RydWN0IGFkZHJpbmZvKiBhaSA9IE5VTEw7CiAJc3RydWN0IGFkZHJpbmZvKiogbmV4dHJlcyA9IHJlczsKIAl3aGlsZSAoMSkgewotCQl1aW50MzJfdCBhZGRyaW5mb19sZW47Ci0JCWlmIChmcmVhZCgmYWRkcmluZm9fbGVuLCBzaXplb2YoYWRkcmluZm9fbGVuKSwKLQkJCSAgMSwgcHJveHkpICE9IDEpIHsKKwkJaW50MzJfdCBoYXZlX21vcmU7CisJCWlmICghcmVhZEJFMzIocHJveHksICZoYXZlX21vcmUpKSB7CiAJCQlicmVhazsKIAkJfQotCQlhZGRyaW5mb19sZW4gPSBudG9obChhZGRyaW5mb19sZW4pOwotCQlpZiAoYWRkcmluZm9fbGVuID09IDApIHsKKwkJaWYgKGhhdmVfbW9yZSA9PSAwKSB7CiAJCQlzdWNjZXNzID0gMTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGFkZHJpbmZvX2xlbiA8IHNpemVvZihzdHJ1Y3QgYWRkcmluZm8pKSB7Ci0JCQlicmVhazsKLQkJfQotCQlzdHJ1Y3QgYWRkcmluZm8qIGFpID0gY2FsbG9jKDEsIGFkZHJpbmZvX2xlbiArCi0JCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKSk7CisJCXN0cnVjdCBhZGRyaW5mbyogYWkgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBhZGRyaW5mbykgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpKTsKIAkJaWYgKGFpID09IE5VTEwpIHsKIAkJCWJyZWFrOwogCQl9CisJCWFpLT5haV9hZGRyID0gKHN0cnVjdCBzb2NrYWRkciopKGFpICsgMSk7CiAKLQkJaWYgKGZyZWFkKGFpLCBhZGRyaW5mb19sZW4sIDEsIHByb3h5KSAhPSAxKSB7Ci0JCQkvLyBFcnJvcjsgZmFsbCB0aHJvdWdoLgorCQkvLyBzdHJ1Y3QgYWRkcmluZm8geworCQkvLwlpbnQJYWlfZmxhZ3M7CS8qIEFJX1BBU1NJVkUsIEFJX0NBTk9OTkFNRSwgQUlfTlVNRVJJQ0hPU1QgKi8KKwkJLy8JaW50CWFpX2ZhbWlseTsJLyogUEZfeHh4ICovCisJCS8vCWludAlhaV9zb2NrdHlwZTsJLyogU09DS194eHggKi8KKwkJLy8JaW50CWFpX3Byb3RvY29sOwkvKiAwIG9yIElQUFJPVE9feHh4IGZvciBJUHY0IGFuZCBJUHY2ICovCisJCS8vCXNvY2tsZW5fdCBhaV9hZGRybGVuOwkvKiBsZW5ndGggb2YgYWlfYWRkciAqLworCQkvLwljaGFyCSphaV9jYW5vbm5hbWU7CS8qIGNhbm9uaWNhbCBuYW1lIGZvciBob3N0bmFtZSAqLworCQkvLwlzdHJ1Y3QJc29ja2FkZHIgKmFpX2FkZHI7CS8qIGJpbmFyeSBhZGRyZXNzICovCisJCS8vCXN0cnVjdAlhZGRyaW5mbyAqYWlfbmV4dDsJLyogbmV4dCBzdHJ1Y3R1cmUgaW4gbGlua2VkIGxpc3QgKi8KKwkJLy8gfTsKKworCQkvLyBSZWFkIHRoZSBzdHJ1Y3QgcGllY2UgYnkgcGllY2UgYmVjYXVzZSB3ZSBtaWdodCBiZSBhIDMyLWJpdCBwcm9jZXNzCisJCS8vIHRhbGtpbmcgdG8gYSA2NC1iaXQgbmV0ZC4KKwkJaW50MzJfdCBhZGRyX2xlbjsKKwkJYm9vbCBzdWNjZXNzID0KKwkJCQlyZWFkQkUzMihwcm94eSwgJmFpLT5haV9mbGFncykgJiYKKwkJCQlyZWFkQkUzMihwcm94eSwgJmFpLT5haV9mYW1pbHkpICYmCisJCQkJcmVhZEJFMzIocHJveHksICZhaS0+YWlfc29ja3R5cGUpICYmCisJCQkJcmVhZEJFMzIocHJveHksICZhaS0+YWlfcHJvdG9jb2wpICYmCisJCQkJcmVhZEJFMzIocHJveHksICZhZGRyX2xlbik7CisJCWlmICghc3VjY2VzcykgewogCQkJYnJlYWs7CiAJCX0KIAotCQkvLyBaZXJvIG91dCB0aGUgcG9pbnRlciBmaWVsZHMgd2UgY29waWVkIHdoaWNoIGFyZW4ndAotCQkvLyB2YWxpZCBpbiB0aGlzIGFkZHJlc3Mgc3BhY2UuCi0JCWFpLT5haV9hZGRyID0gTlVMTDsKLQkJYWktPmFpX2Nhbm9ubmFtZSA9IE5VTEw7Ci0JCWFpLT5haV9uZXh0ID0gTlVMTDsKLQotCQkvLyBzdHJ1Y3Qgc29ja2FkZHIKLQkJdWludDMyX3QgYWRkcl9sZW47Ci0JCWlmIChmcmVhZCgmYWRkcl9sZW4sIHNpemVvZihhZGRyX2xlbiksIDEsIHByb3h5KSAhPSAxKSB7Ci0JCQlicmVhazsKLQkJfQotCQlhZGRyX2xlbiA9IG50b2hsKGFkZHJfbGVuKTsKKwkJLy8gU2V0IGFpX2FkZHJsZW4gYW5kIHJlYWQgdGhlIGFpX2FkZHIgZGF0YS4KKwkJYWktPmFpX2FkZHJsZW4gPSBhZGRyX2xlbjsKIAkJaWYgKGFkZHJfbGVuICE9IDApIHsKLQkJCWlmIChhZGRyX2xlbiA+IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSkpIHsKKwkJCWlmICgoc2l6ZV90KSBhZGRyX2xlbiA+IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSkpIHsKIAkJCQkvLyBCb2d1czsgdG9vIGJpZy4KIAkJCQlicmVhazsKIAkJCX0KLQkJCXN0cnVjdCBzb2NrYWRkciogYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIqKShhaSArIDEpOwotCQkJaWYgKGZyZWFkKGFkZHIsIGFkZHJfbGVuLCAxLCBwcm94eSkgIT0gMSkgeworCQkJaWYgKGZyZWFkKGFpLT5haV9hZGRyLCBhZGRyX2xlbiwgMSwgcHJveHkpICE9IDEpIHsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWFpLT5haV9hZGRyID0gYWRkcjsKIAkJfQogCi0JCS8vIGNhbm5vbm5hbWUKLQkJdWludDMyX3QgbmFtZV9sZW47Ci0JCWlmIChmcmVhZCgmbmFtZV9sZW4sIHNpemVvZihuYW1lX2xlbiksIDEsIHByb3h5KSAhPSAxKSB7CisJCS8vIFRoZSBzdHJpbmcgZm9yIGFpX2Nhbm5vbm5hbWUuCisJCWludDMyX3QgbmFtZV9sZW47CisJCWlmICghcmVhZEJFMzIocHJveHksICZuYW1lX2xlbikpIHsKIAkJCWJyZWFrOwogCQl9Ci0JCW5hbWVfbGVuID0gbnRvaGwobmFtZV9sZW4pOwogCQlpZiAobmFtZV9sZW4gIT0gMCkgewogCQkJYWktPmFpX2Nhbm9ubmFtZSA9IChjaGFyKikgbWFsbG9jKG5hbWVfbGVuKTsKIAkJCWlmIChmcmVhZChhaS0+YWlfY2Fub25uYW1lLCBuYW1lX2xlbiwgMSwgcHJveHkpICE9IDEpIHsKQEAgLTIwMTcsNyArMjAzNiw3IEBACiB7CiAKIAlpZiAoISpob3N0ZikKLQkJKmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyIiApOworCQkqaG9zdGYgPSBmb3BlbihfUEFUSF9IT1NUUywgInJlIik7CiAJZWxzZQogCQlyZXdpbmQoKmhvc3RmKTsKIH0KQEAgLTIwNDYsNyArMjA2NSw3IEBACiAJYXNzZXJ0KG5hbWUgIT0gTlVMTCk7CiAJYXNzZXJ0KHBhaSAhPSBOVUxMKTsKIAotCWlmICghKmhvc3RmICYmICEoKmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyIiApKSkKKwlpZiAoISpob3N0ZiAmJiAhKCpob3N0ZiA9IGZvcGVuKF9QQVRIX0hPU1RTLCAicmUiKSkpCiAJCXJldHVybiAoTlVMTCk7CiAgYWdhaW46CiAJaWYgKCEocCA9IGZnZXRzKGhvc3RidWYsIHNpemVvZiBob3N0YnVmLCAqaG9zdGYpKSkKZGlmZiAtLWdpdCBhL2xpYmMvZG5zL25ldC9nZXRzZXJ2YnluYW1lLmMgYi9saWJjL2Rucy9uZXQvZ2V0c2VydmJ5bmFtZS5jCmluZGV4IGM5NWM5YjAuLmMzMjQxNmMgMTAwNjQ0Ci0tLSBhL2xpYmMvZG5zL25ldC9nZXRzZXJ2YnluYW1lLmMKKysrIGIvbGliYy9kbnMvbmV0L2dldHNlcnZieW5hbWUuYwpAQCAtMjUsMjkgKzI1LDE5IEBACiAgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKICNpbmNsdWRlIDxuZXRkYi5oPgorCiAjaW5jbHVkZSAic2VydmVudC5oIgogCi1zdHJ1Y3Qgc2VydmVudCAqCi1nZXRzZXJ2YnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByb3RvKQotewotICAgIHJlc19zdGF0aWMgICAgICAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7Ci0KLSAgICBpZiAocnMgPT0gTlVMTCB8fCBwcm90byA9PSBOVUxMIHx8IG5hbWUgPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIE5VTEw7CitzdHJ1Y3Qgc2VydmVudCogZ2V0c2VydmJ5bmFtZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBwcm90bykgeworICByZXNfc3RhdGljIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworICBycy0+c2VydmVudF9wdHIgPSBOVUxMOworICBzdHJ1Y3Qgc2VydmVudCogczsKKyAgd2hpbGUgKChzID0gZ2V0c2VydmVudF9yKHJzKSkgIT0gTlVMTCkgeworICAgIGlmIChzdHJjbXAocy0+c19uYW1lLCBuYW1lKSA9PSAwICYmIChwcm90byA9PSBOVUxMIHx8IHN0cmNtcChzLT5zX3Byb3RvLCBwcm90bykgPT0gMCkpIHsKKyAgICAgIHJldHVybiBzOwogICAgIH0KLQotICAgIHJzLT5zZXJ2ZW50X3B0ciA9IE5VTEw7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgc3RydWN0IHNlcnZlbnQqICBzID0gZ2V0c2VydmVudF9yKHJzKTsKLSAgICAgICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoICFzdHJjbXAoIHMtPnNfbmFtZSwgbmFtZSApICYmICFzdHJjbXAoIHMtPnNfcHJvdG8sIHByb3RvICkgKQotICAgICAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Rucy9uZXQvc2VydmljZXMuaCBiL2xpYmMvZG5zL25ldC9zZXJ2aWNlcy5oCmluZGV4IGZhMTk5ZDAuLjdmNzQ4ZjcgMTAwNjQ0Ci0tLSBhL2xpYmMvZG5zL25ldC9zZXJ2aWNlcy5oCisrKyBiL2xpYmMvZG5zL25ldC9zZXJ2aWNlcy5oCkBAIC0zMCw4ICszMCw4IEBACiBcNnRhY2Fjc1wwXDYxdVwwXAogXDEycmUtbWFpbC1ja1wwXDYydFwwXAogXDEycmUtbWFpbC1ja1wwXDYydVwwXAotXDZkb21haW5cMFw2NXRcMVwxMm5hbWVzZXJ2ZXJcCi1cNmRvbWFpblwwXDY1dVwxXDEybmFtZXNlcnZlclwKK1w2ZG9tYWluXDBcNjV0XDBcCitcNmRvbWFpblwwXDY1dVwwXAogXDNtdHBcMFw3MXRcMFwKIFwxMXRhY2Fjcy1kc1wwXDEwMXRcMFwKIFwxMXRhY2Fjcy1kc1wwXDEwMXVcMFwKQEAgLTQ0LDggKzQ0LDggQEAKIFw2Z29waGVyXDBcMTA2dVwwXAogXDNyamVcMFwxMTV0XDFcNm5ldHJqc1wKIFw2ZmluZ2VyXDBcMTE3dFwwXAotXDN3d3dcMFwxMjB0XDFcNGh0dHBcCi1cM3d3d1wwXDEyMHVcMFwKK1w0aHR0cFwwXDEyMHRcMVwzd3d3XAorXDRodHRwXDBcMTIwdVwwXAogXDRsaW5rXDBcMTI3dFwxXDd0dHlsaW5rXAogXDEwa2VyYmVyb3NcMFwxMzB0XDNcMTFrZXJiZXJvczVcNGtyYjVcMTRrZXJiZXJvcy1zZWNcCiBcMTBrZXJiZXJvc1wwXDEzMHVcM1wxMWtlcmJlcm9zNVw0a3JiNVwxNGtlcmJlcm9zLXNlY1wKQEAgLTEzOCwxMiArMTM4LDE2IEBACiBcNGxkYXBcMVwyMDV1XDBcCiBcNGltc3BcMVwyMjZ0XDBcCiBcNGltc3BcMVwyMjZ1XDBcCitcNnN2cmxvY1wxXDI1M3RcMFwKK1w2c3ZybG9jXDFcMjUzdVwwXAogXDVodHRwc1wxXDI3M3RcMFwKIFw1aHR0cHNcMVwyNzN1XDBcCiBcNHNucHBcMVwyNzR0XDBcCiBcNHNucHBcMVwyNzR1XDBcCiBcMTRtaWNyb3NvZnQtZHNcMVwyNzV0XDBcCiBcMTRtaWNyb3NvZnQtZHNcMVwyNzV1XDBcCitcN2twYXNzd2RcMVwzMjB0XDBcCitcN2twYXNzd2RcMVwzMjB1XDBcCiBcNHNhZnRcMVwzNDd0XDBcCiBcNHNhZnRcMVwzNDd1XDBcCiBcNmlzYWttcFwxXDM2NHRcMFwKQEAgLTE1OCw2ICsxNjIsOCBAQAogXDEwbnBtcC1ndWlcMlwxNDN1XDFcMTRkcXMzMTNfZXhlY2RcCiBcMTBobW1wLWluZFwyXDE0NHRcMVwyMGRxczMxM19pbnRlcmNlbGxcCiBcMTBobW1wLWluZFwyXDE0NHVcMVwyMGRxczMxM19pbnRlcmNlbGxcCitcNHFtcXBcMlwxNjR0XDBcCitcNHFtcXBcMlwxNjR1XDBcCiBcM2lwcFwyXDE2N3RcMFwKIFwzaXBwXDJcMTY3dVwwXAogXDRleGVjXDJcMHRcMFwKQEAgLTE4MSw4ICsxODcsMTQgQEAKIFw0dXVjcFwyXDM0dFwxXDV1dWNwZFwKIFw2a2xvZ2luXDJcMzd0XDBcCiBcNmtzaGVsbFwyXDQwdFwxXDVrcmNtZFwKK1wxNWRoY3B2Ni1jbGllbnRcMlw0MnRcMFwKK1wxNWRoY3B2Ni1jbGllbnRcMlw0MnVcMFwKK1wxNWRoY3B2Ni1zZXJ2ZXJcMlw0M3RcMFwKK1wxNWRoY3B2Ni1zZXJ2ZXJcMlw0M3VcMFwKIFwxMmFmcG92ZXJ0Y3BcMlw0NHRcMFwKIFwxMmFmcG92ZXJ0Y3BcMlw0NHVcMFwKK1w0aWRmcFwyXDQ1dFwwXAorXDRpZGZwXDJcNDV1XDBcCiBcMTByZW1vdGVmc1wyXDU0dFwyXDEycmZzX3NlcnZlclwzcmZzXAogXDVubnRwc1wyXDYzdFwxXDVzbm50cFwKIFw1bm50cHNcMlw2M3VcMVw1c25udHBcCkBAIC0yMzksMTkgKzI1MSwzMyBAQAogXDEzc2EtbXNnLXBvcnRcNlwxNTZ1XDFcMTNvbGQtcmFkYWNjdFwKIFw2a2VybWl0XDZcMTYxdFwwXAogXDZrZXJtaXRcNlwxNjF1XDBcCitcMTFncm91cHdpc2VcNlwyMTV0XDBcCitcMTFncm91cHdpc2VcNlwyMTV1XDBcCiBcM2wyZlw2XDI0NXRcMVw0bDJ0cFwKIFwzbDJmXDZcMjQ1dVwxXDRsMnRwXAogXDZyYWRpdXNcN1wyNHRcMFwKIFw2cmFkaXVzXDdcMjR1XDBcCiBcMTNyYWRpdXMtYWNjdFw3XDI1dFwxXDdyYWRhY2N0XAogXDEzcmFkaXVzLWFjY3RcN1wyNXVcMVw3cmFkYWNjdFwKK1w0bXNucFw3XDEwN3RcMFwKK1w0bXNucFw3XDEwN3VcMFwKIFwxM3VuaXgtc3RhdHVzXDdcMjQ1dFwwXAogXDEybG9nLXNlcnZlclw3XDI0NnRcMFwKIFwxMnJlbW90ZXBpbmdcN1wyNDd0XDBcCitcMTJjaXNjby1zY2NwXDdcMzIwdFwwXAorXDEyY2lzY28tc2NjcFw3XDMyMHVcMFwKK1w2c2VhcmNoXDdcMzMydFwxXDRuZHRwXAorXDEzcGlwZS1zZXJ2ZXJcN1wzMzJ0XDFcMTNwaXBlX3NlcnZlclwKIFwzbmZzXDEwXDF0XDBcCiBcM25mc1wxMFwxdVwwXAorXDZnbnVuZXRcMTBcNDZ0XDBcCitcNmdudW5ldFwxMFw0NnVcMFwKIFwxMnJ0Y20tc2MxMDRcMTBcNjV0XDBcCiBcMTJydGNtLXNjMTA0XDEwXDY1dVwwXAorXDE1Z3NpZ2F0ZWtlZXBlclwxMFwxMDd0XDBcCitcMTVnc2lnYXRla2VlcGVyXDEwXDEwN3VcMFwKK1w0Z3Jpc1wxMFwxMjd0XDBcCitcNGdyaXNcMTBcMTI3dVwwXAogXDEyY3ZzcHNlcnZlclwxMVwxNDF0XDBcCiBcMTJjdnNwc2VydmVyXDExXDE0MXVcMFwKIFw1dmVudXNcMTFcMTc2dFwwXApAQCAtMjY2LDEwICsyOTIsMTQgQEAKIFwzbW9uXDEyXDI3dVwwXAogXDRkaWN0XDEyXDEwNHRcMFwKIFw0ZGljdFwxMlwxMDR1XDBcCitcMTVmNS1nbG9iYWxzaXRlXDEyXDM1MHRcMFwKK1wxNWY1LWdsb2JhbHNpdGVcMTJcMzUwdVwwXAorXDZnc2lmdHBcMTJcMzczdFwwXAorXDZnc2lmdHBcMTJcMzczdVwwXAogXDRncHNkXDEzXDIwM3RcMFwKIFw0Z3BzZFwxM1wyMDN1XDBcCi1cNmdkc19kYlwxM1wzNTJ0XDBcCi1cNmdkc19kYlwxM1wzNTJ1XDBcCitcNmdkcy1kYlwxM1wzNTJ0XDFcNmdkc19kYlwKK1w2Z2RzLWRiXDEzXDM1MnVcMVw2Z2RzX2RiXAogXDVpY3B2MlwxNFw3MnRcMVwzaWNwXAogXDVpY3B2MlwxNFw3MnVcMVwzaWNwXAogXDVteXNxbFwxNFwzNTJ0XDBcCkBAIC0yODIsMjQgKzMxMiw0OSBAQAogXDRkYWFwXDE2XDE1MXVcMFwKIFwzc3ZuXDE2XDE1MnRcMVwxMnN1YnZlcnNpb25cCiBcM3N2blwxNlwxNTJ1XDFcMTJzdWJ2ZXJzaW9uXAorXDVzdXVjcFwxN1wyNzd0XDBcCitcNXN1dWNwXDE3XDI3N3VcMFwKK1w2c3lzcnFkXDE3XDM3NnRcMFwKK1w2c3lzcnFkXDE3XDM3NnVcMFwKK1w1c2lldmVcMjBcMTM2dFwwXAorXDRlcG1kXDIxXDIxdFwwXAorXDRlcG1kXDIxXDIxdVwwXAorXDZyZW1jdGxcMjFcMjV0XDBcCitcNnJlbWN0bFwyMVwyNXVcMFwKK1wxMWY1LWlxdWVyeVwyMVwxdFwwXAorXDExZjUtaXF1ZXJ5XDIxXDF1XDBcCiBcM2lheFwyMVwzMzF0XDBcCiBcM2lheFwyMVwzMzF1XDBcCitcM210blwyMlwxMjN0XDBcCitcM210blwyMlwxMjN1XDBcCiBcMTNyYWRtaW4tcG9ydFwyM1w0M3RcMFwKIFwxM3JhZG1pbi1wb3J0XDIzXDQzdVwwXAogXDNyZmVcMjNcMjEydVwwXAogXDNyZmVcMjNcMjEydFwwXAorXDRtbWNjXDIzXDI3MnRcMFwKK1w0bW1jY1wyM1wyNzJ1XDBcCiBcM3NpcFwyM1wzMDR0XDBcCiBcM3NpcFwyM1wzMDR1XDBcCiBcN3NpcC10bHNcMjNcMzA1dFwwXAogXDdzaXAtdGxzXDIzXDMwNXVcMFwKK1wzYW9sXDI0XDEwNnRcMFwKK1wzYW9sXDI0XDEwNnVcMFwKIFwxM3htcHAtY2xpZW50XDI0XDE0NnRcMVwxNWphYmJlci1jbGllbnRcCiBcMTN4bXBwLWNsaWVudFwyNFwxNDZ1XDFcMTVqYWJiZXItY2xpZW50XAogXDEzeG1wcC1zZXJ2ZXJcMjRcMjI1dFwxXDE1amFiYmVyLXNlcnZlclwKIFwxM3htcHAtc2VydmVyXDI0XDIyNXVcMVwxNWphYmJlci1zZXJ2ZXJcCiBcMTBjZmVuZ2luZVwyNFwyNzR0XDBcCiBcMTBjZmVuZ2luZVwyNFwyNzR1XDBcCitcNG1kbnNcMjRcMzUxdFwwXAorXDRtZG5zXDI0XDM1MXVcMFwKIFwxMnBvc3RncmVzcWxcMjVcNzB0XDFcMTBwb3N0Z3Jlc1wKIFwxMnBvc3RncmVzcWxcMjVcNzB1XDFcMTBwb3N0Z3Jlc1wKK1w3ZnJlZWNpdlwyNVwyNjR0XDFcNHJwdHBcCitcN2ZyZWVjaXZcMjVcMjY0dVwwXAorXDRhbXFwXDI2XDUwdFwwXAorXDRhbXFwXDI2XDUwdVwwXAorXDNnZ3pcMjZcNzB0XDBcCitcM2dnelwyNlw3MHVcMFwKIFwzeDExXDI3XDE2MHRcMVw1eDExLTBcCiBcM3gxMVwyN1wxNjB1XDFcNXgxMS0wXAogXDV4MTEtMVwyN1wxNjF0XDBcCkBAIC0zMjAsNiArMzc1LDEyIEBACiBcMTRnbnV0ZWxsYS1zdmNcMzBcMzEydVwwXAogXDE0Z251dGVsbGEtcnRyXDMwXDMxM3RcMFwKIFwxNGdudXRlbGxhLXJ0clwzMFwzMTN1XDBcCitcMTNzZ2UtcW1hc3RlclwzMVw1NHRcMVwxM3NnZV9xbWFzdGVyXAorXDEzc2dlLXFtYXN0ZXJcMzFcNTR1XDFcMTNzZ2VfcW1hc3RlclwKK1wxMXNnZS1leGVjZFwzMVw1NXRcMVwxMXNnZV9leGVjZFwKK1wxMXNnZS1leGVjZFwzMVw1NXVcMVwxMXNnZV9leGVjZFwKK1wxM215c3FsLXByb3h5XDMxXDU2dFwwXAorXDEzbXlzcWwtcHJveHlcMzFcNTZ1XDBcCiBcMTdhZnMzLWZpbGVzZXJ2ZXJcMzNcMTMwdFwxXDNiYnNcCiBcMTdhZnMzLWZpbGVzZXJ2ZXJcMzNcMTMwdVwxXDNiYnNcCiBcMTVhZnMzLWNhbGxiYWNrXDMzXDEzMXRcMFwKQEAgLTM0MiwxMiArNDAzLDIxIEBACiBcMTNhZnMzLXJtdHN5c1wzM1wxNDF1XDBcCiBcMTRmb250LXNlcnZpY2VcMzNcMjc0dFwxXDN4ZnNcCiBcMTRmb250LXNlcnZpY2VcMzNcMjc0dVwxXDN4ZnNcCitcMTBodHRwLWFsdFwzN1wyMjB0XDFcMTB3ZWJjYWNoZVwKK1wxMGh0dHAtYWx0XDM3XDIyMHVcMFwKIFwxMmJhY3VsYS1kaXJcNDNcMjE1dFwwXAogXDEyYmFjdWxhLWRpclw0M1wyMTV1XDBcCiBcMTFiYWN1bGEtZmRcNDNcMjE2dFwwXAogXDExYmFjdWxhLWZkXDQzXDIxNnVcMFwKIFwxMWJhY3VsYS1zZFw0M1wyMTd0XDBcCiBcMTFiYWN1bGEtc2RcNDNcMjE3dVwwXAorXDV4bW1zMlw0NVwzMDN0XDBcCitcNXhtbXMyXDQ1XDMwM3VcMFwKK1wzbmJkXDUyXDcxdFwwXAorXDE0emFiYml4LWFnZW50XDQ3XDEwMnRcMFwKK1wxNHphYmJpeC1hZ2VudFw0N1wxMDJ1XDBcCitcMTZ6YWJiaXgtdHJhcHBlclw0N1wxMDN0XDBcCitcMTZ6YWJiaXgtdHJhcHBlclw0N1wxMDN1XDBcCiBcNmFtYW5kYVw0N1wxNDB0XDBcCiBcNmFtYW5kYVw0N1wxNDB1XDBcCiBcM2hrcFw1NFwxNTN0XDBcCkBAIC0zNjQsMTYgKzQzNCwxNyBAQAogXDRicGNkXDY1XDMyNnVcMFwKIFw2dm9waWVkXDY1XDMyN3RcMFwKIFw2dm9waWVkXDY1XDMyN3VcMFwKK1w0ZGNhcFwxMjZcMTU1dFwwXAorXDdnc2lkY2FwXDEyNlwxNjB0XDBcCiBcNHdubjZcMTI3XDF0XDBcCiBcNHdubjZcMTI3XDF1XDBcCiBcMTFrZXJiZXJvczRcMlwzNTZ1XDJcMTNrZXJiZXJvcy1pdlwza2RjXAogXDExa2VyYmVyb3M0XDJcMzU2dFwyXDEza2VyYmVyb3MtaXZcM2tkY1wKLVwxN2tlcmJlcm9zX21hc3RlclwyXDM1N3VcMFwKLVwxN2tlcmJlcm9zX21hc3RlclwyXDM1N3RcMFwKLVwxNXBhc3N3ZF9zZXJ2ZXJcMlwzNjB1XDBcCi1cMTBrcmJfcHJvcFwyXDM2MnRcMlwxMWtyYjVfcHJvcFw1aHByb3BcCitcMTdrZXJiZXJvcy1tYXN0ZXJcMlwzNTd1XDFcMTdrZXJiZXJvc19tYXN0ZXJcCitcMTdrZXJiZXJvcy1tYXN0ZXJcMlwzNTd0XDBcCitcMTVwYXNzd2Qtc2VydmVyXDJcMzYwdVwxXDE1cGFzc3dkX3NlcnZlclwKK1wxMGtyYi1wcm9wXDJcMzYydFwzXDEwa3JiX3Byb3BcMTFrcmI1X3Byb3BcNWhwcm9wXAogXDExa3JidXBkYXRlXDJcMzcwdFwxXDRrcmVnXAotXDdrcGFzc3dkXDJcMzcxdFwxXDRrcHdkXAogXDRzd2F0XDNcMjA1dFwwXAogXDRrcG9wXDRcMTI1dFwwXAogXDVrbmV0ZFwxMFw1dFwwXApAQCAtMzg5LDkgKzQ2MCw5IEBACiBcMTBwb3BwYXNzZFwwXDE1MnRcMFwKIFwxMHBvcHBhc3NkXDBcMTUydVwwXAogXDVzc210cFwxXDMyMXRcMVw1c210cHNcCi1cMTBtb2lyYV9kYlwzXDd0XDBcCi1cMTRtb2lyYV91cGRhdGVcM1wxMXRcMFwKLVwxMm1vaXJhX3VyZWdcM1wxM3VcMFwKK1wxMG1vaXJhLWRiXDNcN3RcMVwxMG1vaXJhX2RiXAorXDE0bW9pcmEtdXBkYXRlXDNcMTF0XDFcMTRtb2lyYV91cGRhdGVcCitcMTJtb2lyYS11cmVnXDNcMTN1XDFcMTJtb2lyYV91cmVnXAogXDVzcGFtZFwzXDE3dFwwXAogXDVvbWlyclwzXDUwdFwxXDZvbWlycmRcCiBcNW9taXJyXDNcNTB1XDFcNm9taXJyZFwKQEAgLTQwNCw5ICs0NzUsNyBAQAogXDR4dGVsXDVcNDF0XDBcCiBcNXh0ZWx3XDVcNDJ0XDBcCiBcN3N1cHBvcnRcNVwzNzF0XDBcCi1cNXNpZXZlXDdcMzIwdFwwXAogXDdjZmluZ2VyXDdcMzIzdFwwXAotXDRuZHRwXDdcMzMydFwwXAogXDRmcm94XDEwXDExMXRcMFwKIFwxMG5pbnN0YWxsXDEwXDE0NnRcMFwKIFwxMG5pbnN0YWxsXDEwXDE0NnVcMFwKQEAgLTQzNiw5ICs1MDUsNyBAQAogXDdob3N0bW9uXDI0XDM1M3RcMFwKIFw3aG9zdG1vblwyNFwzNTN1XDBcCiBcNXJwbGF5XDI1XDI2M3VcMFwKLVw1cnBsYXlcMjVcMjYzdFwwXAotXDRycHRwXDI1XDI2NHVcMFwKLVw0cnB0cFwyNVwyNjR0XDBcCitcNG5ycGVcMjZcNDJ0XDBcCiBcNG5zY2FcMjZcNDN0XDBcCiBcNG1ydGRcMjZcNTJ0XDBcCiBcNmJncHNpbVwyNlw1M3RcMFwKQEAgLTQ0NiwxNCArNTEzLDE1IEBACiBcMTFzYW5lLXBvcnRcMzFcMjQ2dFwyXDRzYW5lXDVzYW5lZFwKIFw0aXJjZFwzMlwxM3RcMFwKIFwxMHpvcGUtZnRwXDM3XDEyNXRcMFwKLVwxMHdlYmNhY2hlXDM3XDIyMHRcMFwKIFw2dHByb3h5XDM3XDIyMXRcMFwKIFw3b21uaW9yYlwzN1wyMzB0XDBcCiBcN29tbmlvcmJcMzdcMjMwdVwwXAogXDIwY2xjLWJ1aWxkLWRhZW1vblw0M1wzNnRcMFwKIFw2eGluZXRkXDQzXDIxMnRcMFwKIFwxM21hbmRlbHNwYXduXDQ0XDIxN3VcMVwxMm1hbmRlbGJyb3RcCitcM2dpdFw0NFwzMTJ0XDBcCiBcNHpvcGVcNDVcMzExdFwwXAorXDZ3ZWJtaW5cNDdcMjB0XDBcCiBcN2thbWFuZGFcNDdcMTQxdFwwXAogXDdrYW1hbmRhXDQ3XDE0MXVcMFwKIFwxMWFtYW5kYWlkeFw0N1wxNDJ0XDBcCkBAIC00NzMsNiArNTQxLDcgQEAKIFw1Ymlua3BcMTM3XDM1MnRcMFwKIFwzYXNwXDE1MlwzNTZ0XDBcCiBcM2FzcFwxNTJcMzU2dVwwXAorXDZjc3luYzJcMTcwXDIyMXRcMFwKIFwxMWRpcmNwcm94eVwzMzZcMjUwdFwwXAogXDV0Zmlkb1wzNTNcMjF0XDBcCiBcNGZpZG9cMzUzXDIzdFwwXApkaWZmIC0tZ2l0IGEvbGliYy9kbnMvcmVzb2x2L3Jlc19jYWNoZS5jIGIvbGliYy9kbnMvcmVzb2x2L3Jlc19jYWNoZS5jCmluZGV4IGQ2OGVjM2IuLjE1ZDA0YzIgMTAwNjQ0Ci0tLSBhL2xpYmMvZG5zL3Jlc29sdi9yZXNfY2FjaGUuYworKysgYi9saWJjL2Rucy9yZXNvbHYvcmVzX2NhY2hlLmMKQEAgLTE0NTMsNyArMTQ1Myw3IEBACiAgICAgY2hhciogYnVmOwogICAgIGludCBmaWxlTGVuOwogCi0gICAgZnAgPSBmb3BlbigiL2RhdGEvcmVzbG9nLnR4dCIsICJ3KyIpOworICAgIGZwID0gZm9wZW4oIi9kYXRhL3Jlc2xvZy50eHQiLCAidytlIik7CiAgICAgaWYgKGZwICE9IE5VTEwpIHsKICAgICAgICAgc3RhdGVwID0gX19yZXNfZ2V0X3N0YXRlKCk7CiAKQEAgLTE5NDksNyArMTk0OSw3IEBACiAgICAgICAgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKICAgICAgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX0RHUkFNOyAvKmR1bW15Ki8KICAgICAgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKLSAgICAgICAgc3ByaW50ZihzYnVmLCAiJXUiLCBOQU1FU0VSVkVSX1BPUlQpOworICAgICAgICBzbnByaW50ZihzYnVmLCBzaXplb2Yoc2J1ZiksICIldSIsIE5BTUVTRVJWRVJfUE9SVCk7CiAKICAgICAgICAgaW5kZXggPSAwOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtc2VydmVycyAmJiBpIDwgTUFYTlM7IGkrKykgewpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvcmVzb2x2L3Jlc19kZWJ1Zy5jIGIvbGliYy9kbnMvcmVzb2x2L3Jlc19kZWJ1Zy5jCmluZGV4IDdhMDVhNWYuLjVmODg5Y2IgMTAwNjQ0Ci0tLSBhL2xpYmMvZG5zL3Jlc29sdi9yZXNfZGVidWcuYworKysgYi9saWJjL2Rucy9yZXNvbHYvcmVzX2RlYnVnLmMKQEAgLTEyNiwxNCArMTI2LDYgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCi0KLQotI2lmZGVmIFNQUklOVEZfQ0hBUgotIyBkZWZpbmUgU1BSSU5URih4KSBzdHJsZW4oc3ByaW50Zi8qKi94KQotI2Vsc2UKLSMgZGVmaW5lIFNQUklOVEYoeCkgc3ByaW50ZiB4Ci0jZW5kaWYKLQogZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBfcmVzX29wY29kZXNbXTsKIGV4dGVybiBjb25zdCBjaGFyICogY29uc3QgX3Jlc19zZWN0aW9uY29kZXNbXTsKIApAQCAtNTg4LDcgKzU4MCw3IEBACiAJCX0KIAl9CiAKLQlzcHJpbnRmKHVubmFtZSwgIiVkIiwgbnVtYmVyKTsJCS8qIFhYWCBub25yZWVudHJhbnQgKi8KKwlzbnByaW50Zih1bm5hbWUsIHNpemVvZih1bm5hbWUpLCAiJWQiLCBudW1iZXIpOwkJLyogWFhYIG5vbnJlZW50cmFudCAqLwogCWlmIChzdWNjZXNzKQogCQkqc3VjY2VzcyA9IDA7CiAJcmV0dXJuICh1bm5hbWUpOwpAQCAtNjA1LDcgKzU5Nyw3IEBACiAJCQlyZXR1cm4gKHN5bXMtPmh1bWFubmFtZSk7CiAJCX0KIAl9Ci0Jc3ByaW50Zih1bm5hbWUsICIlZCIsIG51bWJlcik7CQkvKiBYWFggbm9ucmVlbnRyYW50ICovCisJc25wcmludGYodW5uYW1lLCBzaXplb2YodW5uYW1lKSwgIiVkIiwgbnVtYmVyKTsJCS8qIFhYWCBub25yZWVudHJhbnQgKi8KIAlpZiAoc3VjY2VzcykKIAkJKnN1Y2Nlc3MgPSAwOwogCXJldHVybiAodW5uYW1lKTsKQEAgLTYyNSw3ICs2MTcsNyBAQAogCQlyZXR1cm4gKHJlc3VsdCk7CiAJaWYgKHR5cGUgPCAwIHx8IHR5cGUgPiAweGZmZmYpCiAJCXJldHVybiAoIkJBRFRZUEUiKTsKLQlzcHJpbnRmKHR5cGVidWYsICJUWVBFJWQiLCB0eXBlKTsKKwlzbnByaW50Zih0eXBlYnVmLCBzaXplb2YodHlwZWJ1ZiksICJUWVBFJWQiLCB0eXBlKTsKIAlyZXR1cm4gKHR5cGVidWYpOwogfQogCkBAIC02NjEsNyArNjUzLDcgQEAKIAkJcmV0dXJuIChyZXN1bHQpOwogCWlmIChjbGFzcyA8IDAgfHwgY2xhc3MgPiAweGZmZmYpCiAJCXJldHVybiAoIkJBRENMQVNTIik7Ci0Jc3ByaW50ZihjbGFzc2J1ZiwgIkNMQVNTJWQiLCBjbGFzcyk7CisJc25wcmludGYoY2xhc3NidWYsIHNpemVvZihjbGFzc2J1ZiksICJDTEFTUyVkIiwgY2xhc3MpOwogCXJldHVybiAoY2xhc3NidWYpOwogfQogCkBAIC03MDMsNyArNjk1LDcgQEAKIAljYXNlIFJFU19OT19OSUJCTEUyOglyZXR1cm4gIm5vLW5pYmJsZTIiOwogI2VuZGlmCiAJCQkJLyogWFhYIG5vbnJlZW50cmFudCAqLwotCWRlZmF1bHQ6CQlzcHJpbnRmKG5idWYsICI/MHglbHg/IiwgKHVfbG9uZylvcHRpb24pOworCWRlZmF1bHQ6CQlzbnByaW50ZihuYnVmLCBzaXplb2YobmJ1ZiksICI/MHglbHg/IiwgKHVfbG9uZylvcHRpb24pOwogCQkJCXJldHVybiAobmJ1Zik7CiAJfQogfQpAQCAtNzE2LDcgKzcwOCw3IEBACiAJc3RhdGljIGNoYXIgbmJ1Zls0MF07CQkvKiBYWFggbm9ucmVlbnRyYW50ICovCiAKIAlpZiAobnNfZm9ybWF0X3R0bCgodV9sb25nKXZhbHVlLCBuYnVmLCBzaXplb2YgbmJ1ZikgPCAwKQotCQlzcHJpbnRmKG5idWYsICIldSIsIHZhbHVlKTsKKwkJc25wcmludGYobmJ1Ziwgc2l6ZW9mKG5idWYpLCAiJXUiLCB2YWx1ZSk7CiAJcmV0dXJuIChuYnVmKTsKIH0KIApAQCAtNzQ1LDcgKzczNyw3IEBACiAJCWJyZWFrOwogI2VuZGlmCiAJZGVmYXVsdDoKLQkJc3ByaW50ZihyZXQsICJbYWYlZF0iLCB1LnNpbi5zaW5fZmFtaWx5KTsKKwkJc25wcmludGYocmV0LCBzaXplb2YocmV0KSwgIlthZiVkXSIsIHUuc2luLnNpbl9mYW1pbHkpOwogCQlicmVhazsKIAl9CiAJaWYgKHNpemUgPiAwVSkgewpAQCAtNzc3LDcgKzc2OSw3IEBACiAKIAl2YWwgPSBtYW50aXNzYSAqIHBvd2Vyb2Z0ZW5bZXhwb25lbnRdOwogCi0JKHZvaWQpIHNwcmludGYocmV0YnVmLCAiJWx1LiUuMmx1IiwgdmFsLzEwMCwgdmFsJTEwMCk7CisJKHZvaWQpIHNucHJpbnRmKHJldGJ1Ziwgc2l6ZW9mKHJldGJ1ZiksICIlbHUuJS4ybHUiLCB2YWwvMTAwLCB2YWwlMTAwKTsKIAlyZXR1cm4gKHJldGJ1Zik7CiB9CiAKQEAgLTEwMjgsNyArMTAyMCw3IEBACiAKIC8qIHRha2VzIGFuIG9uLXRoZS13aXJlIExPQyBSUiBhbmQgZm9ybWF0cyBpdCBpbiBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdC4gKi8KIGNvbnN0IGNoYXIgKgotbG9jX250b2EoY29uc3QgdV9jaGFyICpiaW5hcnksIGNoYXIgKmFzY2lpKQorbG9jX250b2EoY29uc3QgdV9jaGFyICpiaW5hcnksIGNoYXIgKmFzY2lpLCBzaXplX3QgYnVmc2l6KQogewogCXN0YXRpYyBjb25zdCBjaGFyICplcnJvciA9ICI/IjsKIAlzdGF0aWMgY2hhciB0bXBidWZbc2l6ZW9mCkBAIC0xMDU1LDcgKzEwNDcsNyBAQAogCQlhc2NpaSA9IHRtcGJ1ZjsKIAogCWlmICh2ZXJzaW9udmFsKSB7Ci0JCSh2b2lkKSBzcHJpbnRmKGFzY2lpLCAiOyBlcnJvcjogdW5rbm93biBMT0MgUlIgdmVyc2lvbiIpOworCQkodm9pZCkgc25wcmludGYoYXNjaWksIGJ1ZnNpeiwgIjsgZXJyb3I6IHVua25vd24gTE9DIFJSIHZlcnNpb24iKTsKIAkJcmV0dXJuIChhc2NpaSk7CiAJfQogCkBAIC0xMTE0LDcgKzExMDYsNyBAQAogCWhwc3RyID0gc3RyZHVwKHByZWNzaXplX250b2EoKHVfaW50MzJfdClocHZhbCkpOwogCXZwc3RyID0gc3RyZHVwKHByZWNzaXplX250b2EoKHVfaW50MzJfdCl2cHZhbCkpOwogCi0Jc3ByaW50Zihhc2NpaSwKKwlzbnByaW50Zihhc2NpaSwgYnVmc2l6LAogCSAgICAiJWQgJS4yZCAlLjJkLiUuM2QgJWMgJWQgJS4yZCAlLjJkLiUuM2QgJWMgJXMlZC4lLjJkbSAlc20gJXNtICVzbSIsCiAJCWxhdGRlZywgbGF0bWluLCBsYXRzZWMsIGxhdHNlY2ZyYWMsIG5vcnRoc291dGgsCiAJCWxvbmdkZWcsIGxvbmdtaW4sIGxvbmdzZWMsIGxvbmdzZWNmcmFjLCBlYXN0d2VzdCwKQEAgLTExODAsNyArMTE3Miw3IEBACiAjZW5kaWYKIAlteXRpbWUtPnRtX3llYXIgKz0gMTkwMDsKIAlteXRpbWUtPnRtX21vbiArPSAxOwotCXNwcmludGYob3V0cHV0LCAiJTA0ZCUwMmQlMDJkJTAyZCUwMmQlMDJkIiwKKwlzbnByaW50ZihvdXRwdXQsIHNpemVvZihvdXRwdXQpLCAiJTA0ZCUwMmQlMDJkJTAyZCUwMmQlMDJkIiwKIAkJbXl0aW1lLT50bV95ZWFyLCBteXRpbWUtPnRtX21vbiwgbXl0aW1lLT50bV9tZGF5LAogCQlteXRpbWUtPnRtX2hvdXIsIG15dGltZS0+dG1fbWluLCBteXRpbWUtPnRtX3NlYyk7CiAJcmV0dXJuIChvdXRwdXQpOwpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvcmVzb2x2L3Jlc19pbml0LmMgYi9saWJjL2Rucy9yZXNvbHYvcmVzX2luaXQuYwppbmRleCBmMWNiZWQ4Li43MTNiNmUwIDEwMDY0NAotLS0gYS9saWJjL2Rucy9yZXNvbHYvcmVzX2luaXQuYworKysgYi9saWJjL2Rucy9yZXNvbHYvcmVzX2luaXQuYwpAQCAtMjg5LDcgKzI4OSw3IEBACiAJIGxpbmVbc2l6ZW9mKG5hbWUpIC0gMV0gPT0gJ1x0JykpCiAKIAluc2VydiA9IDA7Ci0JaWYgKChmcCA9IGZvcGVuKF9QQVRIX1JFU0NPTkYsICJyIikpICE9IE5VTEwpIHsKKwlpZiAoKGZwID0gZm9wZW4oX1BBVEhfUkVTQ09ORiwgInJlIikpICE9IE5VTEwpIHsKIAkgICAgLyogcmVhZCB0aGUgY29uZmlnIGZpbGUgKi8KIAkgICAgd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSAhPSBOVUxMKSB7CiAJCS8qIHNraXAgY29tbWVudHMgKi8KQEAgLTYxNiw0NyArNjE2LDYgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQU5EUk9JRF9DSEFOR0VTCi1zdGF0aWMgaW50Ci1yZWFsX3JhbmRvbWlkKHVfaW50ICpyYW5kb21fdmFsdWUpIHsKLQkvKiBvcGVuIHRoZSBub25ibG9ja2luZyByYW5kb20gZGV2aWNlLCByZXR1cm5pbmcgLTEgb24gZmFpbHVyZSAqLwotCWludCByYW5kb21fZGV2aWNlID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkgfCBPX0NMT0VYRUMpOwotCWlmIChyYW5kb21fZGV2aWNlIDwgMCkgewotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogcmVhZCBmcm9tIHRoZSByYW5kb20gZGV2aWNlLCByZXR1cm5pbmcgLTEgb24gZmFpbHVyZSAob3IgdG9vIG1hbnkgcmV0cmllcykqLwotCWZvciAodV9pbnQgcmV0cnkgPSA1OyByZXRyeSA+IDA7IHJldHJ5LS0pIHsKLQkJaW50IHJldHZhbCA9IHJlYWQocmFuZG9tX2RldmljZSwgcmFuZG9tX3ZhbHVlLCBzaXplb2YodV9pbnQpKTsKLQkJaWYgKHJldHZhbCA9PSBzaXplb2YodV9pbnQpKSB7Ci0JCQkqcmFuZG9tX3ZhbHVlICY9IDB4ZmZmZjsKLQkJCWNsb3NlKHJhbmRvbV9kZXZpY2UpOwotCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSBpZiAoKHJldHZhbCA8IDApICYmIChlcnJubyAhPSBFSU5UUikpIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JY2xvc2UocmFuZG9tX2RldmljZSk7Ci0JcmV0dXJuIC0xOwotfQotI2VuZGlmIC8qIEFORFJPSURfQ0hBTkdFUyAqLwotCi11X2ludAotcmVzX3JhbmRvbWlkKHZvaWQpIHsKLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLQlpbnQgc3RhdHVzID0gMDsKLQl1X2ludCBvdXRwdXQgPSAwOwotCXN0YXR1cyA9IHJlYWxfcmFuZG9taWQoJm91dHB1dCk7Ci0JaWYgKHN0YXR1cyAhPSAtMSkgewotCQlyZXR1cm4gb3V0cHV0OwotCX0KLSNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KLQlzdHJ1Y3QgdGltZXZhbCBub3c7Ci0JZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOwotCXJldHVybiAoMHhmZmZmICYgKG5vdy50dl9zZWMgXiBub3cudHZfdXNlYyBeIGdldHBpZCgpKSk7Ci19Ci0KIC8qJQogICogVGhpcyByb3V0aW5lIGlzIGZvciBjbG9zaW5nIHRoZSBzb2NrZXQgaWYgYSB2aXJ0dWFsIGNpcmN1aXQgaXMgdXNlZCBhbmQKICAqIHRoZSBwcm9ncmFtIHdhbnRzIHRvIGNsb3NlIGl0LiAgVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvciBlbmRob3N0ZW50KCkKZGlmZiAtLWdpdCBhL2xpYmMvZG5zL3Jlc29sdi9yZXNfcXVlcnkuYyBiL2xpYmMvZG5zL3Jlc29sdi9yZXNfcXVlcnkuYwppbmRleCA2Y2Q5YjE1Li4wOWJlOGI0IDEwMDY0NAotLS0gYS9saWJjL2Rucy9yZXNvbHYvcmVzX3F1ZXJ5LmMKKysrIGIvbGliYy9kbnMvcmVzb2x2L3Jlc19xdWVyeS5jCkBAIC00MTQsNyArNDE0LDcgQEAKIAkJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgTk9fUkVDT1ZFUlkpOwogCQkJcmV0dXJuICgtMSk7CiAJCX0KLQkJc3ByaW50ZihuYnVmLCAiJXMuJXMiLCBuYW1lLCBkb21haW4pOworCQlzbnByaW50ZihuYnVmLCBzaXplb2YobmJ1ZiksICIlcy4lcyIsIG5hbWUsIGRvbWFpbik7CiAJfQogCXJldHVybiAocmVzX25xdWVyeShzdGF0cCwgbG9uZ25hbWUsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2FuZHJvaWQvZGxleHQuaCBiL2xpYmMvaW5jbHVkZS9hbmRyb2lkL2RsZXh0LmgKaW5kZXggZjI3ZTRlNS4uOTBkYWYzMCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2FuZHJvaWQvZGxleHQuaAorKysgYi9saWJjL2luY2x1ZGUvYW5kcm9pZC9kbGV4dC5oCkBAIC0xOCw3ICsxOCw5IEBACiAjZGVmaW5lIF9fQU5EUk9JRF9ETEVYVF9IX18KIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgLyogZm9yIG9mZjY0X3QgKi8KIAogX19CRUdJTl9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZGlyZW50LmggYi9saWJjL2luY2x1ZGUvZGlyZW50LmgKaW5kZXggYTg0OWE2MS4uNjM3MTZhNCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2RpcmVudC5oCisrKyBiL2xpYmMvaW5jbHVkZS9kaXJlbnQuaApAQCAtNTgsNiArNTgsMTIgQEAKIAogI3VuZGVmIF9fRElSRU5UNjRfQk9EWQogCisvKiBnbGliYyBjb21wYXRpYmlsaXR5LiAqLworI3VuZGVmIF9ESVJFTlRfSEFWRV9EX05BTUxFTiAvKiBMaW51eCBkb2Vzbid0IGhhdmUgYSBkX25hbWxlbiBmaWVsZC4gKi8KKyNkZWZpbmUgX0RJUkVOVF9IQVZFX0RfUkVDTEVOCisjZGVmaW5lIF9ESVJFTlRfSEFWRV9EX09GRgorI2RlZmluZSBfRElSRU5UX0hBVkVfRF9UWVBFCisKICNkZWZpbmUgZF9maWxlbm8gZF9pbm8KIAogdHlwZWRlZiBzdHJ1Y3QgRElSIERJUjsKQEAgLTcwLDYgKzc2LDggQEAKIGV4dGVybiBpbnQgcmVhZGRpcjY0X3IoRElSKiwgc3RydWN0IGRpcmVudDY0Kiwgc3RydWN0IGRpcmVudDY0KiopOwogZXh0ZXJuIGludCBjbG9zZWRpcihESVIqKTsKIGV4dGVybiB2b2lkIHJld2luZGRpcihESVIqKTsKK2V4dGVybiB2b2lkIHNlZWtkaXIoRElSKiwgbG9uZyk7CitleHRlcm4gbG9uZyB0ZWxsZGlyKERJUiopOwogZXh0ZXJuIGludCBkaXJmZChESVIqKTsKIGV4dGVybiBpbnQgYWxwaGFzb3J0KGNvbnN0IHN0cnVjdCBkaXJlbnQqKiwgY29uc3Qgc3RydWN0IGRpcmVudCoqKTsKIGV4dGVybiBpbnQgYWxwaGFzb3J0NjQoY29uc3Qgc3RydWN0IGRpcmVudDY0KiosIGNvbnN0IHN0cnVjdCBkaXJlbnQ2NCoqKTsKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9kbGZjbi5oIGIvbGliYy9pbmNsdWRlL2RsZmNuLmgKaW5kZXggOGRkZTA4Yy4uYWZhNzY4NyAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2RsZmNuLmgKKysrIGIvbGliYy9pbmNsdWRlL2RsZmNuLmgKQEAgLTY0LDYgKzY0LDcgQEAKICAgUlRMRF9HTE9CQUwgPSAyLAogI2VuZGlmCiAgIFJUTERfTk9MT0FEID0gNCwKKyAgUlRMRF9OT0RFTEVURSA9IDB4MDEwMDAsCiB9OwogCiAjaWYgZGVmaW5lZCAoX19MUDY0X18pCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZWxmLmggYi9saWJjL2luY2x1ZGUvZWxmLmgKaW5kZXggN2RlNDY0ZS4uMjAzOWNjMCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2VsZi5oCisrKyBiL2xpYmMvaW5jbHVkZS9lbGYuaApAQCAtNTQsMjkgKzU0LDI5IEBACiAjZGVmaW5lIERGX0JJTkRfTk9XICAgMHgwMDAwMDAwOAogI2RlZmluZSBERl9TVEFUSUNfVExTIDB4MDAwMDAwMTAKIAotI2RlZmluZSBERl8xX05PVyAgICAgICAgMHgwMDAwMDAwMSAvLyBQZXJmb3JtIGNvbXBsZXRlIHJlbG9jYXRpb24gcHJvY2Vzc2luZy4KLSNkZWZpbmUgREZfMV9HTE9CQUwgICAgIDB4MDAwMDAwMDIgLy8gaW1wbGllcyBSVExEX0dMT0JBTAorI2RlZmluZSBERl8xX05PVyAgICAgICAgMHgwMDAwMDAwMSAvKiBQZXJmb3JtIGNvbXBsZXRlIHJlbG9jYXRpb24gcHJvY2Vzc2luZy4gKi8KKyNkZWZpbmUgREZfMV9HTE9CQUwgICAgIDB4MDAwMDAwMDIgLyogaW1wbGllcyBSVExEX0dMT0JBTCAqLwogI2RlZmluZSBERl8xX0dST1VQICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBERl8xX05PREVMRVRFICAgMHgwMDAwMDAwOCAvLyBpbXBsaWVzIFJUTERfTk9ERUxFVEUKKyNkZWZpbmUgREZfMV9OT0RFTEVURSAgIDB4MDAwMDAwMDggLyogaW1wbGllcyBSVExEX05PREVMRVRFICovCiAjZGVmaW5lIERGXzFfTE9BREZMVFIgICAweDAwMDAwMDEwCiAjZGVmaW5lIERGXzFfSU5JVEZJUlNUICAweDAwMDAwMDIwCi0jZGVmaW5lIERGXzFfTk9PUEVOICAgICAweDAwMDAwMDQwIC8vIE9iamVjdCBjYW4gbm90IGJlIHVzZWQgd2l0aCBkbG9wZW4oMykKKyNkZWZpbmUgREZfMV9OT09QRU4gICAgIDB4MDAwMDAwNDAgLyogT2JqZWN0IGNhbiBub3QgYmUgdXNlZCB3aXRoIGRsb3BlbigzKSAqLwogI2RlZmluZSBERl8xX09SSUdJTiAgICAgMHgwMDAwMDA4MAogI2RlZmluZSBERl8xX0RJUkVDVCAgICAgMHgwMDAwMDEwMAogI2RlZmluZSBERl8xX1RSQU5TICAgICAgMHgwMDAwMDIwMAogI2RlZmluZSBERl8xX0lOVEVSUE9TRSAgMHgwMDAwMDQwMAogI2RlZmluZSBERl8xX05PREVGTElCICAgMHgwMDAwMDgwMAotI2RlZmluZSBERl8xX05PRFVNUCAgICAgMHgwMDAwMTAwMCAvLyBPYmplY3QgY2Fubm90IGJlIGR1bXBlZCB3aXRoIGRsZHVtcCgzKQorI2RlZmluZSBERl8xX05PRFVNUCAgICAgMHgwMDAwMTAwMCAvKiBPYmplY3QgY2Fubm90IGJlIGR1bXBlZCB3aXRoIGRsZHVtcCgzKSAqLwogI2RlZmluZSBERl8xX0NPTkZBTFQgICAgMHgwMDAwMjAwMAogI2RlZmluZSBERl8xX0VOREZJTFRFRSAgMHgwMDAwNDAwMAogI2RlZmluZSBERl8xX0RJU1BSRUxETkUgMHgwMDAwODAwMAogI2RlZmluZSBERl8xX0RJU1BSRUxQTkQgMHgwMDAxMDAwMAogI2RlZmluZSBERl8xX05PRElSRUNUICAgMHgwMDAyMDAwMAotI2RlZmluZSBERl8xX0lHTk1VTERFRiAgMHgwMDA0MDAwMCAvLyBJbnRlcm5hbCB1c2UKLSNkZWZpbmUgREZfMV9OT0tTWU1TICAgIDB4MDAwODAwMDAgLy8gSW50ZXJuYWwgdXNlCi0jZGVmaW5lIERGXzFfTk9IRFIgICAgICAweDAwMTAwMDAwIC8vIEludGVybmFsIHVzZQorI2RlZmluZSBERl8xX0lHTk1VTERFRiAgMHgwMDA0MDAwMCAvKiBJbnRlcm5hbCB1c2UgKi8KKyNkZWZpbmUgREZfMV9OT0tTWU1TICAgIDB4MDAwODAwMDAgLyogSW50ZXJuYWwgdXNlICovCisjZGVmaW5lIERGXzFfTk9IRFIgICAgICAweDAwMTAwMDAwIC8qIEludGVybmFsIHVzZSAqLwogI2RlZmluZSBERl8xX0VESVRFRCAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBERl8xX05PUkVMT0MgICAgMHgwMDQwMDAwMCAvLyBJbnRlcm5hbCB1c2UKKyNkZWZpbmUgREZfMV9OT1JFTE9DICAgIDB4MDA0MDAwMDAgLyogSW50ZXJuYWwgdXNlICovCiAjZGVmaW5lIERGXzFfU1lNSU5UUE9TRSAweDAwODAwMDAwCiAjZGVmaW5lIERGXzFfR0xPQkFVRElUICAweDAxMDAwMDAwCiAjZGVmaW5lIERGXzFfU0lOR0xFVE9OICAweDAyMDAwMDAwCkBAIC05NCw2ICs5NCw5IEBACiAjZGVmaW5lIERUX1BSRUlOSVRfQVJSQVkgMzIKICNkZWZpbmUgRFRfUFJFSU5JVF9BUlJBWVNaIDMzCiAKKy8qIGdudSBoYXNoIGVudHJ5ICovCisjZGVmaW5lIERUX0dOVV9IQVNIIDB4NmZmZmZlZjUKKwogI2RlZmluZSBFTEZPU0FCSV9TWVNWIDAgLyogU3lub255bSBmb3IgRUxGT1NBQklfTk9ORSB1c2VkIGJ5IHZhbGdyaW5kLiAqLwogCiAjZGVmaW5lIFBUX0dOVV9SRUxSTyAweDY0NzRlNTUyCkBAIC0xMDksNCArMTEyLDcgQEAKICNkZWZpbmUgU1RUX0xPUFJPQyAgICAxMwogI2RlZmluZSBTVFRfSElQUk9DICAgIDE1CiAKKy8qIFRoZSBrZXJuZWwgdXNlcyBOVF9QUkZQUkVHIGJ1dCBnbGliYyBhbHNvIG9mZmVycyBOVF9GUFJFR1NFVCAqLworI2RlZmluZSBOVF9GUFJFR1NFVCBOVF9QUkZQUkVHCisKICNlbmRpZiAvKiBfRUxGX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9mY250bC5oIGIvbGliYy9pbmNsdWRlL2ZjbnRsLmgKaW5kZXggNzk0ZTYyYy4uMTA4OTc4OCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2ZjbnRsLmgKKysrIGIvbGliYy9pbmNsdWRlL2ZjbnRsLmgKQEAgLTM5LDIwICszOSwxNCBAQAogX19CRUdJTl9ERUNMUwogCiAjaWZkZWYgX19MUDY0X18KLS8qIExQNjQga2VybmVscyBkb24ndCBoYXZlIGZsb2NrNjQgYmVjYXVzZSB0aGVpciBmbG9jayBpcyA2NC1iaXQuICovCi1zdHJ1Y3QgZmxvY2s2NCB7Ci0gIHNob3J0IGxfdHlwZTsKLSAgc2hvcnQgbF93aGVuY2U7Ci0gIG9mZjY0X3QgbF9zdGFydDsKLSAgb2ZmNjRfdCBsX2xlbjsKLSAgcGlkX3QgbF9waWQ7Ci19OworLyogTFA2NCBrZXJuZWxzIGRvbid0IGhhdmUgRl8qNjQgZGVmaW5lcyBiZWNhdXNlIHRoZWlyIGZsb2NrIGlzIDY0LWJpdC4gKi8KICNkZWZpbmUgRl9HRVRMSzY0ICBGX0dFVExLCiAjZGVmaW5lIEZfU0VUTEs2NCAgRl9TRVRMSwogI2RlZmluZSBGX1NFVExLVzY0IEZfU0VUTEtXCiAjZW5kaWYKIAogI2RlZmluZSBPX0FTWU5DIEZBU1lOQworI2RlZmluZSBPX1JTWU5DIE9fU1lOQwogCiAjZGVmaW5lIFNQTElDRV9GX01PVkUgMQogI2RlZmluZSBTUExJQ0VfRl9OT05CTE9DSyAyCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZmVhdHVyZXMuaCBiL2xpYmMvaW5jbHVkZS9mZWF0dXJlcy5oCmluZGV4IDM0M2M4NGQuLmEyNzljN2YgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9mZWF0dXJlcy5oCisrKyBiL2xpYmMvaW5jbHVkZS9mZWF0dXJlcy5oCkBAIC0yNSwzNCArMjUsMTEgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBfRkVBVFVSRVNfSF8KICNkZWZpbmUgX0ZFQVRVUkVTX0hfCiAKLS8qIGNlcnRhaW4gTGludXgtc3BlY2lmaWMgcHJvZ3JhbXMgZXhwZWN0IGEgPGZlYXR1cmVzLmg+IGhlYWRlciBmaWxlCi0gKiB0aGF0IGRlZmluZXMgdmFyaW91cyBmZWF0dXJlcyBtYWNyb3MKLSAqLwotCi0vKiB3ZSBkbyBpbmNsdWRlIGEgbnVtYmVyIG9mIEJTRCBleHRlbnNpb25zICovCi0jZGVmaW5lICBfQlNEX1NPVVJDRSAgMQotCi0vKiB3ZSBkbyBpbmNsdWRlIGEgbnVtYmVyIG9mIEdOVSBleHRlbnNpb25zICovCi0jZGVmaW5lICBfR05VX1NPVVJDRSAgMQotCi0vKiBDOTUgc3VwcG9ydCAqLwotI3VuZGVmIF9fVVNFX0lTT0M5NQotI2lmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTQwOUwKLSMgZGVmaW5lIF9fVVNFX0lTT0M5NSAgIDEKLSNlbmRpZgotCi0vKiBDOTkgc3VwcG9ydCAqLwotI3VuZGVmIF9fVVNFX0lTT0M5OQotI2lmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLSMgZGVmaW5lIF9fVVNFX0lTT0M5OSAgIDEKLSNlbmRpZgotCi0vKiBQb3NpeCBzdXBwb3J0ICovCi0jZGVmaW5lICBfX1VTRV9QT1NJWCAgIDEKLSNkZWZpbmUgIF9fVVNFX1BPU0lYMiAgMQotI2RlZmluZSAgX19VU0VfWFBHICAgICAxCisvKiBPdXIgPGZlYXR1cmVzLmg+IG1hY3JvIGZ1biBpcyBhbGwgaW4gPHN5cy9jZGVmcy5oPi4gKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KIAogI2VuZGlmIC8qIF9GRUFUVVJFU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2Z0cy5oIGIvbGliYy9pbmNsdWRlL2Z0cy5oCmluZGV4IGRhMjZhODguLmNkZTAzNDkgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9mdHMuaAorKysgYi9saWJjL2luY2x1ZGUvZnRzLmgKQEAgLTM1LDYgKzM1LDggQEAKICNpZm5kZWYJX0ZUU19IXwogI2RlZmluZQlfRlRTX0hfCiAKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwogdHlwZWRlZiBzdHJ1Y3QgewogCXN0cnVjdCBfZnRzZW50ICpmdHNfY3VyOwkvKiBjdXJyZW50IG5vZGUgKi8KIAlzdHJ1Y3QgX2Z0c2VudCAqZnRzX2NoaWxkOwkvKiBsaW5rZWQgbGlzdCBvZiBjaGlsZHJlbiAqLwpAQCAtMTExLDggKzExMyw2IEBACiAJY2hhciBmdHNfbmFtZVsxXTsJCS8qIGZpbGUgbmFtZSAqLwogfSBGVFNFTlQ7CiAKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQogX19CRUdJTl9ERUNMUwogRlRTRU5UCSpmdHNfY2hpbGRyZW4oRlRTICosIGludCk7CiBpbnQJIGZ0c19jbG9zZShGVFMgKik7CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbGliZ2VuLmggYi9saWJjL2luY2x1ZGUvbGliZ2VuLmgKaW5kZXggOWRjZWM3NS4uZTg5MzI4ZSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2xpYmdlbi5oCisrKyBiL2xpYmMvaW5jbHVkZS9saWJnZW4uaApAQCAtMjUsNiArMjUsNyBAQAogICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqLworCiAjaWZuZGVmIF9MSUJHRU5fSAogI2RlZmluZSBfTElCR0VOX0gKIApAQCAtMzMsOCArMzQsMTggQEAKIAogX19CRUdJTl9ERUNMUwogCi0vKiBPbiBBbmRyb2lkIHRoZXNlIGRvbid0IG1vZGlmeSB0aGVpciBpbnB1dCwgYW5kIHVzZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBmb3IgdGhlaXIgcmVzdWx0cy4gKi8KKyNpZiAhZGVmaW5lZChfX2Jpb25pY191c2luZ19nbnVfYmFzZW5hbWUpCisvKgorICogPHN0cmluZy5oPiBnZXRzIHlvdSB0aGUgR05VIGJhc2VuYW1lLgorICogPGxpYmdlbi5oPiB0aGUgUE9TSVggb25lLgorICogTm90ZSB0aGF0IG91ciAiUE9TSVgiIG9uZSBoYXMgdGhlIHdyb25nIGFyZ3VtZW50IGN2LXF1YWxpZmllcnMsIGJ1dCBkb2Vzbid0CisgKiBtb2RpZnkgaXRzIGlucHV0IGFuZCB1c2VzIHRocmVhZC1sb2NhbCBzdG9yYWdlIGZvciB0aGUgcmVzdWx0IGlmIG5lY2Vzc2FyeS4KKyAqLwogZXh0ZXJuIGNoYXIqIGJhc2VuYW1lKGNvbnN0IGNoYXIqKTsKKyNkZWZpbmUgX19iaW9uaWNfdXNpbmdfcG9zaXhfYmFzZW5hbWUKKyNlbmRpZgorCisvKiBUaGlzIGhhcyB0aGUgd3JvbmcgYXJndW1lbnQgY3YtcXVhbGlmaWVycywgYnV0IGRvZXNuJ3QgbW9kaWZ5IGl0cyBpbnB1dCBhbmQgdXNlcyB0aHJlYWQtbG9jYWwgc3RvcmFnZSBmb3IgdGhlIHJlc3VsdCBpZiBuZWNlc3NhcnkuICovCiBleHRlcm4gY2hhciogZGlybmFtZShjb25zdCBjaGFyKik7CiAKICNpZiAhZGVmaW5lZChfX0xQNjRfXykKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9saW1pdHMuaCBiL2xpYmMvaW5jbHVkZS9saW1pdHMuaAppbmRleCBmYjA5NjU3Li42YWU2MjliIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvbGltaXRzLmgKKysrIGIvbGliYy9pbmNsdWRlL2xpbWl0cy5oCkBAIC0zNywzOSArMzcsNiBAQAogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAKLSNpZiBfX1BPU0lYX1ZJU0lCTEUKLSNkZWZpbmUJX1BPU0lYX0FSR19NQVgJCTQwOTYKLSNkZWZpbmUJX1BPU0lYX0NISUxEX01BWAkyNQotI2RlZmluZQlfUE9TSVhfTElOS19NQVgJCTgKLSNkZWZpbmUJX1BPU0lYX01BWF9DQU5PTgkyNTUKLSNkZWZpbmUJX1BPU0lYX01BWF9JTlBVVAkyNTUKLSNkZWZpbmUJX1BPU0lYX05BTUVfTUFYCQkxNAotI2RlZmluZQlfUE9TSVhfTkdST1VQU19NQVgJMAotI2RlZmluZQlfUE9TSVhfT1BFTl9NQVgJCTE2Ci0jZGVmaW5lCV9QT1NJWF9QQVRIX01BWAkJMjU2Ci0jZGVmaW5lIF9QT1NJWF9QSVBFX0JVRgkJNTEyCi0jZGVmaW5lCV9QT1NJWF9SRV9EVVBfTUFYCTI1NQotI2RlZmluZSBfUE9TSVhfU1NJWkVfTUFYCTMyNzY3Ci0jZGVmaW5lIF9QT1NJWF9TVFJFQU1fTUFYCTgKLSNkZWZpbmUgX1BPU0lYX1NZTUxJTktfTUFYCTI1NQotI2RlZmluZSBfUE9TSVhfU1lNTE9PUF9NQVgJOAotI2RlZmluZSBfUE9TSVhfVFpOQU1FX01BWAkzCi0KLSNkZWZpbmUJX1BPU0lYMl9CQ19CQVNFX01BWAk5OQotI2RlZmluZQlfUE9TSVgyX0JDX0RJTV9NQVgJMjA0OAotI2RlZmluZQlfUE9TSVgyX0JDX1NDQUxFX01BWAk5OQotI2RlZmluZQlfUE9TSVgyX0JDX1NUUklOR19NQVgJMTAwMAotI2RlZmluZQlfUE9TSVgyX0NPTExfV0VJR0hUU19NQVgJMgotI2RlZmluZQlfUE9TSVgyX0VYUFJfTkVTVF9NQVgJMzIKLSNkZWZpbmUJX1BPU0lYMl9MSU5FX01BWAkyMDQ4Ci0jZGVmaW5lCV9QT1NJWDJfUkVfRFVQX01BWAlfUE9TSVhfUkVfRFVQX01BWAotCi0jaWYgX19QT1NJWF9WSVNJQkxFID49IDIwMDExMgotI2RlZmluZSBfUE9TSVhfVFRZX05BTUVfTUFYCTkJLyogaW5jbHVkZXMgdHJhaWxpbmcgTlVMICovCi0jZGVmaW5lIF9QT1NJWF9MT0dJTl9OQU1FX01BWAk5CS8qIGluY2x1ZGVzIHRyYWlsaW5nIE5VTCAqLwotI2VuZGlmIC8qIF9fUE9TSVhfVklTSUJMRSA+PSAyMDAxMTIgKi8KLSNlbmRpZiAvKiBfX1BPU0lYX1ZJU0lCTEUgKi8KLQogI2lmIF9fWFBHX1ZJU0lCTEUKICNkZWZpbmUgUEFTU19NQVgJCTEyOAkvKiBfUEFTU1dPUkRfTEVOIGZyb20gPHB3ZC5oPiAqLwogCkBAIC0xMjUsNCArOTIsMTAgQEAKIC8qIGdsaWJjJ3MgUEFHRV9NQVNLIGlzIHRoZSBiaXR3aXNlIG5lZ2F0aW9uIG9mIEJTRCdzISBUT0RPOiByZW1vdmU/ICovCiAjZGVmaW5lIFBBR0VfTUFTSyAofihQQUdFX1NJWkUgLSAxKSkKIAorI2RlZmluZSBTRU1fVkFMVUVfTUFYIDB4M2ZmZmZmZmYKKworLyogUE9TSVggc2F5cyB0aGVzZSBiZWxvbmcgaW4gPHVuaXN0ZC5oPiBidXQgQlNEIGhhcyBzb21lIGluIDxsaW1pdHMuaD4uICovCisjaW5jbHVkZSA8bWFjaGluZS9wb3NpeF9saW1pdHMuaD4KKworI2RlZmluZSBIT1NUX05BTUVfTUFYIF9QT1NJWF9IT1NUX05BTUVfTUFYCiAjZW5kaWYgLyogIV9MSU1JVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9tYWNoaW5lL3Bvc2l4X2xpbWl0cy5oIGIvbGliYy9pbmNsdWRlL21hY2hpbmUvcG9zaXhfbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5YTFkZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9tYWNoaW5lL3Bvc2l4X2xpbWl0cy5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX1BPU0lYX0xJTUlUU19IXworI2RlZmluZSBfUE9TSVhfTElNSVRTX0hfCisKKworLyogQW55IGNvbnN0YW50IHZhbHVlcyBoZXJlIG90aGVyIHRoYW4gLTEgb3IgMjAwODA5TCBhcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgYnkgUE9TSVguMS0yMDA4LiAqLworLyogS2VlcCBpdCBzb3J0ZWQuICovCisjZGVmaW5lIF9QT1NJWF9BRFZJU09SWV9JTkZPICAgICAgICAtMSAgLyogcG9zaXhfbWFkdmlzZSgpIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfUE9TSVhfQUlPX0xJU1RJT19NQVggICAgICAgMgorI2RlZmluZSBfUE9TSVhfQUlPX01BWCAgICAgICAgICAgICAgMQorI2RlZmluZSBfUE9TSVhfQVJHX01BWCAgICAgICAgICAgICAgNDA5NgorI2RlZmluZSBfUE9TSVhfQVNZTkNIUk9OT1VTX0lPICAgICAgLTEgIC8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfUE9TSVhfQkFSUklFUlMgICAgICAgICAgICAgLTEgIC8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfUE9TSVhfQ0hJTERfTUFYICAgICAgICAgICAgMjUKKyNkZWZpbmUgX1BPU0lYX0NIT1dOX1JFU1RSSUNURUQgICAgIDEgIC8qIHllcywgY2hvd24gcmVxdWlyZXMgYXBwcm9wcmlhdGUgcHJpdmlsZWdlcyAqLworI2RlZmluZSBfUE9TSVhfQ0xPQ0tfU0VMRUNUSU9OICAgICAgMjAwODA5TAorI2RlZmluZSBfUE9TSVhfQ1BVVElNRSAgICAgICAgICAgICAgMjAwODA5TAorI2RlZmluZSBfUE9TSVhfREVMQVlUSU1FUl9NQVggICAgICAgMzIKKyNkZWZpbmUgX1BPU0lYX0ZTWU5DICAgICAgICAgICAgICAgIDIwMDgwOUwgIC8qIGZkYXRhc3luYygpIHN1cHBvcnRlZCAqLworI2RlZmluZSBfUE9TSVhfSE9TVF9OQU1FX01BWCAgICAgICAgMjU1CisjZGVmaW5lIF9QT1NJWF9JUFY2ICAgICAgICAgICAgICAgICAyMDA4MDlMCisjZGVmaW5lIF9QT1NJWF9KT0JfQ09OVFJPTCAgICAgICAgICAxICAvKiBqb2IgY29udHJvbCBpcyBhIExpbnV4IGZlYXR1cmUgKi8KKyNkZWZpbmUgX1BPU0lYX0xJTktfTUFYICAgICAgICAgICAgIDgKKyNkZWZpbmUgX1BPU0lYX0xPR0lOX05BTUVfTUFYICAgICAgIDkgIC8qIGluY2x1ZGVzIHRyYWlsaW5nIE5VTCAqLworI2RlZmluZSBfUE9TSVhfTUFQUEVEX0ZJTEVTICAgICAgICAgMjAwODA5TCAgLyogbW1hcC1lZCBmaWxlcyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgX1BPU0lYX01BWF9DQU5PTiAgICAgICAgICAgIDI1NQorI2RlZmluZSBfUE9TSVhfTUFYX0lOUFVUICAgICAgICAgICAgMjU1CisjZGVmaW5lIF9QT1NJWF9NRU1MT0NLICAgICAgICAgICAgICAyMDA4MDlMCisjZGVmaW5lIF9QT1NJWF9NRU1MT0NLX1JBTkdFICAgICAgICAyMDA4MDlMCisjZGVmaW5lIF9QT1NJWF9NRU1PUllfUFJPVEVDVElPTiAgICAyMDA4MDlMCisjZGVmaW5lIF9QT1NJWF9NRVNTQUdFX1BBU1NJTkcgICAgICAtMSAgLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9QT1NJWF9NT05PVE9OSUNfQ0xPQ0sgICAgICAwICAvKiB0aGUgbW9ub3RvbmljIGNsb2NrIG1heSBiZSBhdmFpbGFibGU7IGFzayBzeXNjb25mICovCisjZGVmaW5lIF9QT1NJWF9NUV9PUEVOX01BWCAgICAgICAgICA4CisjZGVmaW5lIF9QT1NJWF9NUV9QUklPX01BWCAgICAgICAgICAzMgorI2RlZmluZSBfUE9TSVhfTkFNRV9NQVggICAgICAgICAgICAgMTQKKyNkZWZpbmUgX1BPU0lYX05HUk9VUFNfTUFYICAgICAgICAgIDgKKyNkZWZpbmUgX1BPU0lYX05PX1RSVU5DICAgICAgICAgICAgIDEgIC8qIHZlcnkgbG9uZyBwYXRobmFtZXMgZ2VuZXJhdGUgYW4gZXJyb3IgKi8KKyNkZWZpbmUgX1BPU0lYX09QRU5fTUFYICAgICAgICAgICAgIDIwCisjZGVmaW5lIF9QT1NJWF9QQVRIX01BWCAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgX1BPU0lYX1BJUEVfQlVGICAgICAgICAgICAgIDUxMgorI2RlZmluZSBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORyAgMjAwODA5TCAgLyogcHJpb3JpdHkgc2NoZWR1bGluZyBpcyBhIExpbnV4IGZlYXR1cmUgKi8KKyNkZWZpbmUgX1BPU0lYX1BSSU9SSVRJWkVEX0lPICAgICAgIC0xICAvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX1BPU0lYX1JBV19TT0NLRVRTICAgICAgICAgIDIwMDgwOUwKKyNkZWZpbmUgX1BPU0lYX1JFQURFUl9XUklURVJfTE9DS1MgIDIwMDgwOUwKKyNkZWZpbmUgX1BPU0lYX1JFQUxUSU1FX1NJR05BTFMgICAgIC0xIC8qIGZvciBub3csIHRoaXMgaXMgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSBfUE9TSVhfUkVHRVhQICAgICAgICAgICAgICAgMQorI2RlZmluZSBfUE9TSVhfUkVfRFVQX01BWCAgICAgICAgICAgMjU1CisjZGVmaW5lIF9QT1NJWF9TQVZFRF9JRFMgICAgICAgICAgICAxICAvKiBzYXZlZCB1c2VyIGlkcyBpcyBhIExpbnV4IGZlYXR1cmUgKi8KKyNkZWZpbmUgX1BPU0lYX1NFTUFQSE9SRVMgICAgICAgICAgIDIwMDgwOUwKKyNkZWZpbmUgX1BPU0lYX1NFTV9OU0VNU19NQVggICAgICAgIDI1NgorI2RlZmluZSBfUE9TSVhfU0VNX1ZBTFVFX01BWCAgICAgICAgMzI3NjcKKyNkZWZpbmUgX1BPU0lYX1NIQVJFRF9NRU1PUllfT0JKRUNUUyAgLTEgIC8qIHNobV9vcGVuKCkvc2htX3VubGluaygpIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfUE9TSVhfU0hFTEwgICAgICAgICAgICAgICAgMSAgIC8qIHN5c3RlbSgpIHN1cHBvcnRlZCAqLworI2RlZmluZSBfUE9TSVhfU0lHUVVFVUVfTUFYICAgICAgICAgMzIKKyNkZWZpbmUgX1BPU0lYX1NQQVdOICAgICAgICAgICAgICAgIC0xICAvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX1BPU0lYX1NQSU5fTE9DS1MgICAgICAgICAgIC0xICAvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX1BPU0lYX1NQT1JBRElDX1NFUlZFUiAgICAgIC0xICAvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX1BPU0lYX1NTSVpFX01BWCAgICAgICAgICAgIDMyNzY3CisjZGVmaW5lIF9QT1NJWF9TVFJFQU1fTUFYICAgICAgICAgICA4CisjZGVmaW5lIF9QT1NJWF9TWU1MSU5LX01BWCAgICAgICAgICAyNTUKKyNkZWZpbmUgX1BPU0lYX1NZTUxPT1BfTUFYICAgICAgICAgIDgKKyNkZWZpbmUgX1BPU0lYX1NZTkNIUk9OSVpFRF9JTyAgICAgIDIwMDgwOUwgIC8qIHN5bmNocm9uaXplZCBpL28gc3VwcG9ydGVkICovCisjZGVmaW5lIF9QT1NJWF9USFJFQURTICAgICAgICAgICAgICAyMDA4MDlMICAvKiB3ZSBzdXBwb3J0IHRocmVhZHMgKi8KKyNkZWZpbmUgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLQUREUiAgMjAwODA5TAorI2RlZmluZSBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFICAyMDA4MDlMCisjZGVmaW5lIF9QT1NJWF9USFJFQURfQ1BVVElNRSAgICAgICAyMDA4MDlMCisjZGVmaW5lIF9QT1NJWF9USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TIDQKKyNkZWZpbmUgX1BPU0lYX1RIUkVBRF9LRVlTX01BWCAgICAgIDEyOAorI2RlZmluZSBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcgMjAwODA5TAorI2RlZmluZSBfUE9TSVhfVEhSRUFEX1BSSU9fSU5IRVJJVCAgMjAwODA5TCAgLyogbGludXggZmVhdHVyZSAqLworI2RlZmluZSBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVCAgMjAwODA5TCAgLyogbGludXggZmVhdHVyZSAqLworI2RlZmluZSBfUE9TSVhfVEhSRUFEX1BST0NFU1NfU0hBUkVEICAtMSAgLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9QT1NJWF9USFJFQURfUk9CVVNUX1BSSU9fSU5IRVJJVCAtMSAgLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9QT1NJWF9USFJFQURfUk9CVVNUX1BSSU9fUFJPVEVDVCAtMSAgLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMgMjAwODA5TAorI2RlZmluZSBfUE9TSVhfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiAtMSAgLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9QT1NJWF9USFJFQURfVEhSRUFEU19NQVggICA2NAorI2RlZmluZSBfUE9TSVhfVElNRU9VVFMgICAgICAgICAgICAgMjAwODA5TAorI2RlZmluZSBfUE9TSVhfVElNRVJTICAgICAgICAgICAgICAgMjAwODA5TCAgLyogUG9zaXggdGltZXJzIGFyZSBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgX1BPU0lYX1RJTUVSX01BWCAgICAgICAgICAgIDMyCisjZGVmaW5lIF9QT1NJWF9UUkFDRSAgICAgICAgICAgICAgICAtMSAgLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9QT1NJWF9UUkFDRV9FVkVOVF9GSUxURVIgICAtMSAgLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9QT1NJWF9UUkFDRV9JTkhFUklUICAgICAgICAtMSAgLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9QT1NJWF9UUkFDRV9MT0cgICAgICAgICAgICAtMSAgLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9QT1NJWF9UUkFDRV9OQU1FX01BWCAgICAgICA4CisjZGVmaW5lIF9QT1NJWF9UUkFDRV9TWVNfTUFYICAgICAgICA4CisjZGVmaW5lIF9QT1NJWF9UUkFDRV9VU0VSX0VWRU5UX01BWCAzMgorI2RlZmluZSBfUE9TSVhfVFRZX05BTUVfTUFYICAgICAgICAgOSAgLyogaW5jbHVkZXMgdHJhaWxpbmcgTlVMICovCisjZGVmaW5lIF9QT1NJWF9UWVBFRF9NRU1PUllfT0JKRUNUUyAtMSAgLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9QT1NJWF9UWk5BTUVfTUFYICAgICAgICAgICA2CisjZGVmaW5lIF9QT1NJWF9WRElTQUJMRSAgICAgICAgICAgICAnXDAnCisKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorI2RlZmluZSBfUE9TSVhfVjdfSUxQMzJfT0ZGMzIgICAgICAgLTEKKyNkZWZpbmUgX1BPU0lYX1Y3X0lMUDMyX09GRkJJRyAgICAgIC0xCisjZGVmaW5lIF9QT1NJWF9WN19MUDY0X09GRjY0ICAgICAgICAgMQorI2RlZmluZSBfUE9TSVhfVjdfTFBCSUdfT0ZGQklHICAgICAgIDEKKyNlbHNlCisjZGVmaW5lIF9QT1NJWF9WN19JTFAzMl9PRkYzMiAgICAgICAgMQorI2RlZmluZSBfUE9TSVhfVjdfSUxQMzJfT0ZGQklHICAgICAgLTEKKyNkZWZpbmUgX1BPU0lYX1Y3X0xQNjRfT0ZGNjQgICAgICAgIC0xCisjZGVmaW5lIF9QT1NJWF9WN19MUEJJR19PRkZCSUcgICAgICAtMQorI2VuZGlmCisKKyNkZWZpbmUgX1BPU0lYMl9CQ19CQVNFX01BWCAgICAgICAgIDk5CisjZGVmaW5lIF9QT1NJWDJfQkNfRElNX01BWCAgICAgICAgICAyMDQ4CisjZGVmaW5lIF9QT1NJWDJfQkNfU0NBTEVfTUFYICAgICAgICA5OQorI2RlZmluZSBfUE9TSVgyX0JDX1NUUklOR19NQVggICAgICAgMTAwMAorI2RlZmluZSBfUE9TSVgyX0NIQVJDTEFTU19OQU1FX01BWCAgMTQKKyNkZWZpbmUgX1BPU0lYMl9DSEFSX1RFUk0gICAgICAgICAgIC0xICAvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX1BPU0lYMl9DT0xMX1dFSUdIVFNfTUFYICAgIDIKKyNkZWZpbmUgX1BPU0lYMl9DX0JJTkQgICAgICAgICAgICAgIF9QT1NJWF9WRVJTSU9OCisjZGVmaW5lIF9QT1NJWDJfQ19ERVYgICAgICAgICAgICAgICAtMSAgLyogYyBkZXYgdXRpbGl0aWVzIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfUE9TSVgyX0VYUFJfTkVTVF9NQVggICAgICAgMzIKKyNkZWZpbmUgX1BPU0lYMl9MSU5FX01BWCAgICAgICAgICAgIDIwNDgKKyNkZWZpbmUgX1BPU0lYMl9MT0NBTEVERUYgICAgICAgICAgIC0xICAvKiBsb2NhbGVkZWYgdXRpbGl0aXkgbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9QT1NJWDJfUkVfRFVQX01BWCAgICAgICAgICBfUE9TSVhfUkVfRFVQX01BWAorI2RlZmluZSBfUE9TSVgyX1NXX0RFViAgICAgICAgICAgICAgLTEgIC8qIHNvZnR3YXJlIGRldiB1dGlsaXRpZXMgbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9QT1NJWDJfVVBFICAgICAgICAgICAgICAgICAtMSAgLyogdXNlciBwb3J0YWJpbGl0eSB1dGlsaXRpZXMgbm90IGltcGxlbWVudGVkICovCisKKyNkZWZpbmUgX1hPUEVOX0VOSF9JMThOICAgICAgICAgICAgIC0xICAvKiB3ZSBkb24ndCBzdXBwb3J0IGludGVybmF0aW9uYWxpemF0aW9uIGluIHRoZSBDIGxpYnJhcnkgKi8KKyNkZWZpbmUgX1hPUEVOX0NSWVBUICAgICAgICAgICAgICAgIC0xICAvKiBkb24ndCBzdXBwb3J0IFgvT3BlbiBFbmNyeXB0aW9uICovCisjZGVmaW5lIF9YT1BFTl9JT1ZfTUFYICAgICAgICAgICAgICAxNgorI2RlZmluZSBfWE9QRU5fTEVHQUNZICAgICAgICAgICAgICAgLTEgIC8qIG5vdCBzdXBwb3J0IGFsbCAqLworI2RlZmluZSBfWE9QRU5fUkVBTFRJTUUgICAgICAgICAgICAgLTEgLyogd2UgZG9uJ3Qgc3VwcG9ydCBhbGwgdGhlc2UgZnVuY3Rpb25zICovCisjZGVmaW5lIF9YT1BFTl9SRUFMVElNRV9USFJFQURTICAgICAtMSAgLyogc2FtZSBoZXJlICovCisjZGVmaW5lIF9YT1BFTl9TSE0gICAgICAgICAgICAgICAgICAtMQorI2RlZmluZSBfWE9QRU5fVU5JWCAgICAgICAgICAgICAgICAgMQorCisjZW5kaWYgLyogX1BPU0lYX0xJTUlUU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL2NydGJlZ2luX3NvLmMgYi9saWJjL2luY2x1ZGUvbWFjaGluZS9wdGhyZWFkX3R5cGVzLmgKc2ltaWxhcml0eSBpbmRleCA3NSUKcmVuYW1lIGZyb20gbGliYy9hcmNoLW1pcHMvYmlvbmljL2NydGJlZ2luX3NvLmMKcmVuYW1lIHRvIGxpYmMvaW5jbHVkZS9tYWNoaW5lL3B0aHJlYWRfdHlwZXMuaAppbmRleCBkNjY0Y2U2Li45MDA1NDFjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvY3J0YmVnaW5fc28uYworKysgYi9saWJjL2luY2x1ZGUvbWFjaGluZS9wdGhyZWFkX3R5cGVzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjYsMTMgKzI2LDIzIEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi1leHRlcm4gdm9pZCBfX2N4YV9maW5hbGl6ZSh2b2lkICopOwotZXh0ZXJuIHZvaWQgKl9fZHNvX2hhbmRsZTsKKyNpZm5kZWYgX01BQ0hJTkVfUFRIUkVBRF9UWVBFU19IXworI2RlZmluZSBfTUFDSElORV9QVEhSRUFEX1RZUEVTX0hfCiAKLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpLGRlc3RydWN0b3IpKQotdm9pZCBfX29uX2RsY2xvc2UoKSB7Ci0gIF9fY3hhX2ZpbmFsaXplKCZfX2Rzb19oYW5kbGUpOwotfQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCi0jaW5jbHVkZSAiLi4vLi4vYXJjaC1jb21tb24vYmlvbmljL19fZHNvX2hhbmRsZV9zby5oIgotI2luY2x1ZGUgImF0ZXhpdC5oIgordHlwZWRlZiBsb25nIHB0aHJlYWRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50MzJfdCBmbGFnczsKKyAgdm9pZCogc3RhY2tfYmFzZTsKKyAgc2l6ZV90IHN0YWNrX3NpemU7CisgIHNpemVfdCBndWFyZF9zaXplOworICBpbnQzMl90IHNjaGVkX3BvbGljeTsKKyAgaW50MzJfdCBzY2hlZF9wcmlvcml0eTsKKyNpZmRlZiBfX0xQNjRfXworICBjaGFyIF9fcmVzZXJ2ZWRbMTZdOworI2VuZGlmCit9IHB0aHJlYWRfYXR0cl90OworCisjZW5kaWYgLyogX01BQ0hJTkVfUFRIUkVBRF9UWVBFU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL21hbGxvYy5oIGIvbGliYy9pbmNsdWRlL21hbGxvYy5oCmluZGV4IGU2ZWEyNzYuLmNiMWRkM2IgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9tYWxsb2MuaAorKysgYi9saWJjL2luY2x1ZGUvbWFsbG9jLmgKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIF9fQkVHSU5fREVDTFMKIApAQCAtNTMsNiArNTQsMjcgQEAKIAogZXh0ZXJuIHN0cnVjdCBtYWxsaW5mbyBtYWxsaW5mbyh2b2lkKTsKIAorLyoKKyAqIFhNTCBzdHJ1Y3R1cmUgZm9yIG1hbGxvY19pbmZvKDMpIGlzIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICoKKyAqIDxtYWxsb2MgdmVyc2lvbj0iamVtYWxsb2MtMSI+CisgKiAgIDxoZWFwIG5yPSJJTlQiPgorICogICAgIDxhbGxvY2F0ZWQtbGFyZ2U+SU5UPC9hbGxvY2F0ZWQtbGFyZ2U+CisgKiAgICAgPGFsbG9jYXRlZC1odWdlPklOVDwvYWxsb2NhdGVkLWh1Z2U+CisgKiAgICAgPGFsbG9jYXRlZC1iaW5zPklOVDwvYWxsb2NhdGVkLWJpbnM+CisgKiAgICAgPGJpbnMtdG90YWw+SU5UPC9iaW5zLXRvdGFsPgorICogICAgIDxiaW4gbnI9IklOVCI+CisgKiAgICAgICA8YWxsb2NhdGVkPklOVDwvYWxsb2NhdGVkPgorICogICAgICAgPG5tYWxsb2M+SU5UPC9ubWFsbG9jPgorICogICAgICAgPG5kYWxsb2M+SU5UPC9uZGFsbG9jPgorICogICAgIDwvYmluPgorICogICAgIDwhLS0gbW9yZSBiaW5zIC0tPgorICogICA8L2hlYXA+CisgKiAgIDwhLS0gbW9yZSBoZWFwcyAtLT4KKyAqIDwvbWFsbG9jPgorICovCitleHRlcm4gaW50IG1hbGxvY19pbmZvKGludCwgRklMRSAqKTsKKwogX19FTkRfREVDTFMKIAogI2VuZGlmICAvKiBMSUJDX0lOQ0xVREVfTUFMTE9DX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvcGF0aGNvbmYuaCBiL2xpYmMvaW5jbHVkZS9wYXRoY29uZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGY5Nzg3Li4wMDAwMDAwCi0tLSBhL2xpYmMvaW5jbHVkZS9wYXRoY29uZi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBfUEFUSENPTkZfSF8KLSNkZWZpbmUgX1BBVEhDT05GX0hfCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotX19CRUdJTl9ERUNMUwotCi0vKiBjb25zdGFudHMgdG8gYmUgdXNlZCBmb3IgdGhlICduYW1lJyBwYXJlbWV0ZXIgb2YgcGF0aGNvbmYvZnBhdGhjb25mICovCi0KLSNkZWZpbmUgIF9QQ19GSUxFU0laRUJJVFMgICAgICAgMHgwMDAwCi0jZGVmaW5lICBfUENfTElOS19NQVggICAgICAgICAgIDB4MDAwMQotI2RlZmluZSAgX1BDX01BWF9DQU5PTiAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgIF9QQ19NQVhfSU5QVVQgICAgICAgICAgMHgwMDAzCi0jZGVmaW5lICBfUENfTkFNRV9NQVggICAgICAgICAgIDB4MDAwNAotI2RlZmluZSAgX1BDX1BBVEhfTUFYICAgICAgICAgICAweDAwMDUKLSNkZWZpbmUgIF9QQ19QSVBFX0JVRiAgICAgICAgICAgMHgwMDA2Ci0jZGVmaW5lICBfUENfMl9TWU1MSU5LUyAgICAgICAgIDB4MDAwNwotI2RlZmluZSAgX1BDX0FMTE9DX1NJWkVfTUlOICAgICAweDAwMDgKLSNkZWZpbmUgIF9QQ19SRUNfSU5DUl9YRkVSX1NJWkUgMHgwMDA5Ci0jZGVmaW5lICBfUENfUkVDX01BWF9YRkVSX1NJWkUgIDB4MDAwYQotI2RlZmluZSAgX1BDX1JFQ19NSU5fWEZFUl9TSVpFICAweDAwMGIKLSNkZWZpbmUgIF9QQ19SRUNfWEZFUl9BTElHTiAgICAgMHgwMDBjCi0jZGVmaW5lICBfUENfU1lNTElOS19NQVggICAgICAgIDB4MDAwZAotI2RlZmluZSAgX1BDX0NIT1dOX1JFU1RSSUNURUQgICAweDAwMGUKLSNkZWZpbmUgIF9QQ19OT19UUlVOQyAgICAgICAgICAgMHgwMDBmCi0jZGVmaW5lICBfUENfVkRJU0FCTEUgICAgICAgICAgIDB4MDAxMAotI2RlZmluZSAgX1BDX0FTWU5DX0lPICAgICAgICAgICAweDAwMTEKLSNkZWZpbmUgIF9QQ19QUklPX0lPICAgICAgICAgICAgMHgwMDEyCi0jZGVmaW5lICBfUENfU1lOQ19JTyAgICAgICAgICAgIDB4MDAxMwotCi1leHRlcm4gbG9uZyBmcGF0aGNvbmYoaW50IGZpbGRlcywgaW50IG5hbWUpOwotZXh0ZXJuIGxvbmcgcGF0aGNvbmYoY29uc3QgY2hhciAqcGF0aCwgaW50IG5hbWUpOwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX1BBVEhDT05GX0hfICovCi0KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9wdGhyZWFkLmggYi9saWJjL2luY2x1ZGUvcHRocmVhZC5oCmluZGV4IGMzMjg5MGIuLjIxNzg3ODkgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9wdGhyZWFkLmgKKysrIGIvbGliYy9pbmNsdWRlL3B0aHJlYWQuaApAQCAtMjksMTEgKzI5LDEyIEBACiAjaWZuZGVmIF9QVEhSRUFEX0hfCiAjZGVmaW5lIF9QVEhSRUFEX0hfCiAKLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8c2NoZWQuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3B0aHJlYWRfdHlwZXMuaD4KKyNpbmNsdWRlIDxzY2hlZC5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KIAogI2lmIGRlZmluZWQoX19MUDY0X18pCiAgICNkZWZpbmUgX19SRVNFUlZFRF9JTklUSUFMSVpFUiAsIHswfQpAQCAtNTIsOSArNTMsMTMgQEAKICNkZWZpbmUgIF9fUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVF9WQUxVRSAgMHg0MDAwCiAjZGVmaW5lICBfX1BUSFJFQURfRVJST1JDSEVDS19NVVRFWF9JTklUX1ZBTFVFIDB4ODAwMAogCi0jZGVmaW5lICBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSICAgICAgICAgICAgIHtfX1BUSFJFQURfTVVURVhfSU5JVF9WQUxVRSBfX1JFU0VSVkVEX0lOSVRJQUxJWkVSfQotI2RlZmluZSAgUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVIgICB7X19QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUX1ZBTFVFIF9fUkVTRVJWRURfSU5JVElBTElaRVJ9Ci0jZGVmaW5lICBQVEhSRUFEX0VSUk9SQ0hFQ0tfTVVURVhfSU5JVElBTElaRVIgIHtfX1BUSFJFQURfRVJST1JDSEVDS19NVVRFWF9JTklUX1ZBTFVFIF9fUkVTRVJWRURfSU5JVElBTElaRVJ9CisjZGVmaW5lIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIge19fUFRIUkVBRF9NVVRFWF9JTklUX1ZBTFVFIF9fUkVTRVJWRURfSU5JVElBTElaRVJ9CisjZGVmaW5lIFBUSFJFQURfRVJST1JDSEVDS19NVVRFWF9JTklUSUFMSVpFUl9OUCB7X19QVEhSRUFEX0VSUk9SQ0hFQ0tfTVVURVhfSU5JVF9WQUxVRSBfX1JFU0VSVkVEX0lOSVRJQUxJWkVSfQorI2RlZmluZSBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUl9OUCB7X19QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUX1ZBTFVFIF9fUkVTRVJWRURfSU5JVElBTElaRVJ9CisKKy8qIFRPRE86IHJlbW92ZSB0aGlzIG5hbWVzcGFjZSBwb2xsdXRpb24uICovCisjZGVmaW5lIFBUSFJFQURfRVJST1JDSEVDS19NVVRFWF9JTklUSUFMSVpFUiBQVEhSRUFEX0VSUk9SQ0hFQ0tfTVVURVhfSU5JVElBTElaRVJfTlAKKyNkZWZpbmUgUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVIgUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVJfTlAKIAogZW51bSB7CiAgICAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSAwLApAQCAtNzYsMTggKzgxLDYgQEAKIAogI2RlZmluZSBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVIgIHswIF9fUkVTRVJWRURfSU5JVElBTElaRVJ9CiAKLXR5cGVkZWYgc3RydWN0IHsKLSAgdWludDMyX3QgZmxhZ3M7Ci0gIHZvaWQqIHN0YWNrX2Jhc2U7Ci0gIHNpemVfdCBzdGFja19zaXplOwotICBzaXplX3QgZ3VhcmRfc2l6ZTsKLSAgaW50MzJfdCBzY2hlZF9wb2xpY3k7Ci0gIGludDMyX3Qgc2NoZWRfcHJpb3JpdHk7Ci0jaWZkZWYgX19MUDY0X18KLSAgY2hhciBfX3Jlc2VydmVkWzE2XTsKLSNlbmRpZgotfSBwdGhyZWFkX2F0dHJfdDsKLQogdHlwZWRlZiBsb25nIHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CiB0eXBlZGVmIGxvbmcgcHRocmVhZF9jb25kYXR0cl90OwogCkBAIC0xMTgsNyArMTExLDYgQEAKICNlbmRpZgogCiB0eXBlZGVmIGludCBwdGhyZWFkX2tleV90OwotdHlwZWRlZiBsb25nIHB0aHJlYWRfdDsKIAogdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9vbmNlX3Q7CiAKQEAgLTE5NSw4ICsxODcsNiBAQAogaW50IHB0aHJlYWRfa2V5X2NyZWF0ZShwdGhyZWFkX2tleV90Kiwgdm9pZCAoKikodm9pZCopKSBfX25vbm51bGwoKDEpKTsKIGludCBwdGhyZWFkX2tleV9kZWxldGUocHRocmVhZF9rZXlfdCk7CiAKLWludCBwdGhyZWFkX2tpbGwocHRocmVhZF90LCBpbnQpOwotCiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveShwdGhyZWFkX211dGV4YXR0cl90KikgX19ub25udWxsKCgxKSk7CiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZChjb25zdCBwdGhyZWFkX211dGV4YXR0cl90KiwgaW50KikgX19ub25udWxsKCgxLCAyKSk7CiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZShjb25zdCBwdGhyZWFkX211dGV4YXR0cl90KiwgaW50KikgX19ub25udWxsKCgxLCAyKSk7CkBAIC0yMDYsMTAgKzE5NiwxMCBAQAogCiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95KHB0aHJlYWRfbXV0ZXhfdCopIF9fbm9ubnVsbCgoMSkpOwogaW50IHB0aHJlYWRfbXV0ZXhfaW5pdChwdGhyZWFkX211dGV4X3QqLCBjb25zdCBwdGhyZWFkX211dGV4YXR0cl90KikgX19ub25udWxsKCgxKSk7Ci1pbnQgcHRocmVhZF9tdXRleF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCopIC8qIF9fbm9ubnVsbCgoMSkpICovOworaW50IHB0aHJlYWRfbXV0ZXhfbG9jayhwdGhyZWFkX211dGV4X3QqKSBfX25vbm51bGwoKDEpKTsKIGludCBwdGhyZWFkX211dGV4X3RpbWVkbG9jayhwdGhyZWFkX211dGV4X3QqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqKSBfX25vbm51bGwoKDEsIDIpKTsKIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90KikgX19ub25udWxsKCgxKSk7Ci1pbnQgcHRocmVhZF9tdXRleF91bmxvY2socHRocmVhZF9tdXRleF90KikgLyogX19ub25udWxsKCgxKSkgKi87CitpbnQgcHRocmVhZF9tdXRleF91bmxvY2socHRocmVhZF9tdXRleF90KikgX19ub25udWxsKCgxKSk7CiAKIGludCBwdGhyZWFkX29uY2UocHRocmVhZF9vbmNlX3QqLCB2b2lkICgqKSh2b2lkKSkgX19ub25udWxsKCgxLCAyKSk7CiAKQEAgLTIzNiw4ICsyMjYsNiBAQAogCiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90LCBjb25zdCB2b2lkKik7CiAKLWludCBwdGhyZWFkX3NpZ21hc2soaW50LCBjb25zdCBzaWdzZXRfdCosIHNpZ3NldF90Kik7Ci0KIHR5cGVkZWYgdm9pZCAoKl9fcHRocmVhZF9jbGVhbnVwX2Z1bmNfdCkodm9pZCopOwogCiB0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfY2xlYW51cF90IHsKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zY2hlZC5oIGIvbGliYy9pbmNsdWRlL3NjaGVkLmgKaW5kZXggZTQzYjZjYy4uNGY5ZTJhNiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3NjaGVkLmgKKysrIGIvbGliYy9pbmNsdWRlL3NjaGVkLmgKQEAgLTM5LDkgKzM5LDggQEAKICNkZWZpbmUgU0NIRURfT1RIRVIgU0NIRURfTk9STUFMCiAKIHN0cnVjdCBzY2hlZF9wYXJhbSB7Ci0gIGludCBfX3NjaGVkX3ByaW9yaXR5OworICBpbnQgc2NoZWRfcHJpb3JpdHk7CiB9OwotI2RlZmluZSBzY2hlZF9wcmlvcml0eSBfX3NjaGVkX3ByaW9yaXR5CiAKIGV4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyKHBpZF90LCBpbnQsIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSopOwogZXh0ZXJuIGludCBzY2hlZF9nZXRzY2hlZHVsZXIocGlkX3QpOwpAQCAtNTIsNyArNTEsNyBAQAogZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbShwaWRfdCwgc3RydWN0IHNjaGVkX3BhcmFtKik7CiBleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbChwaWRfdCwgc3RydWN0IHRpbWVzcGVjKik7CiAKLSNpZmRlZiBfR05VX1NPVVJDRQorI2lmIGRlZmluZWQoX19VU0VfR05VKQogCiBleHRlcm4gaW50IGNsb25lKGludCAoKikodm9pZCopLCB2b2lkKiwgaW50LCB2b2lkKiwgLi4uKTsKIGV4dGVybiBpbnQgdW5zaGFyZShpbnQpOwpAQCAtMTQ2LDcgKzE0NSw3IEBACiAKIGV4dGVybiBpbnQgX19zY2hlZF9jcHVjb3VudChzaXplX3Qgc2V0c2l6ZSwgY3B1X3NldF90KiBzZXQpOwogCi0jZW5kaWYgLyogX0dOVV9TT1VSQ0UgKi8KKyNlbmRpZiAvKiBfX1VTRV9HTlUgKi8KIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3NlbWFwaG9yZS5oIGIvbGliYy9pbmNsdWRlL3NlbWFwaG9yZS5oCmluZGV4IDdhZTNjM2EuLjU4Mjc4NzAgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zZW1hcGhvcmUuaAorKysgYi9saWJjL2luY2x1ZGUvc2VtYXBob3JlLmgKQEAgLTI1LDYgKzI1LDcgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBfU0VNQVBIT1JFX0gKICNkZWZpbmUgX1NFTUFQSE9SRV9ICiAKQEAgLTMyLDYgKzMzLDggQEAKIAogX19CRUdJTl9ERUNMUwogCitzdHJ1Y3QgdGltZXNwZWM7CisKIHR5cGVkZWYgc3RydWN0IHsKICAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvdW50OwogI2lmZGVmIF9fTFA2NF9fCkBAIC00MSwyMCArNDQsMTggQEAKIAogI2RlZmluZSBTRU1fRkFJTEVEIE5VTEwKIAotZXh0ZXJuIGludCBzZW1faW5pdChzZW1fdCAqc2VtLCBpbnQgcHNoYXJlZCwgdW5zaWduZWQgaW50IHZhbHVlKTsKK2ludCBzZW1fZGVzdHJveShzZW1fdCopOworaW50IHNlbV9nZXR2YWx1ZShzZW1fdCosIGludCopOworaW50IHNlbV9pbml0KHNlbV90KiwgaW50LCB1bnNpZ25lZCBpbnQpOworaW50IHNlbV9wb3N0KHNlbV90Kik7CitpbnQgc2VtX3RpbWVkd2FpdChzZW1fdCosIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyopOworaW50IHNlbV90cnl3YWl0KHNlbV90Kik7CitpbnQgc2VtX3dhaXQoc2VtX3QqKTsKIAotZXh0ZXJuIGludCAgICBzZW1fY2xvc2Uoc2VtX3QgKik7Ci1leHRlcm4gaW50ICAgIHNlbV9kZXN0cm95KHNlbV90ICopOwotZXh0ZXJuIGludCAgICBzZW1fZ2V0dmFsdWUoc2VtX3QgKiwgaW50ICopOwotZXh0ZXJuIGludCAgICBzZW1faW5pdChzZW1fdCAqLCBpbnQsIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gc2VtX3QgKnNlbV9vcGVuKGNvbnN0IGNoYXIgKiwgaW50LCAuLi4pOwotZXh0ZXJuIGludCAgICBzZW1fcG9zdChzZW1fdCAqKTsKLWV4dGVybiBpbnQgICAgc2VtX3RyeXdhaXQoc2VtX3QgKik7Ci1leHRlcm4gaW50ICAgIHNlbV91bmxpbmsoY29uc3QgY2hhciAqKTsKLWV4dGVybiBpbnQgICAgc2VtX3dhaXQoc2VtX3QgKik7Ci0KLXN0cnVjdCB0aW1lc3BlYzsKLWV4dGVybiBpbnQgICAgc2VtX3RpbWVkd2FpdChzZW1fdCAqc2VtLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmFic190aW1lb3V0KTsKKy8qIFRoZXNlIGFyZW4ndCBhY3R1YWxseSBpbXBsZW1lbnRlZC4gKi8KK3NlbV90KiBzZW1fb3Blbihjb25zdCBjaGFyKiwgaW50LCAuLi4pOworaW50IHNlbV9jbG9zZShzZW1fdCopOworaW50IHNlbV91bmxpbmsoY29uc3QgY2hhciopOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc2lnbmFsLmggYi9saWJjL2luY2x1ZGUvc2lnbmFsLmgKaW5kZXggZTIzZTY1Yi4uNmQ4OWVmNyAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3NpZ25hbC5oCisrKyBiL2xpYmMvaW5jbHVkZS9zaWduYWwuaApAQCAtMjksMTIgKzI5LDEzIEBACiAjaWZuZGVmIF9TSUdOQUxfSF8KICNkZWZpbmUgX1NJR05BTF9IXwogCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4JCS8qIEZvciBMT05HX0JJVCAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgkJLyogRm9yIG1lbXNldCgpICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcHRocmVhZF90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCiAjaWYgZGVmaW5lZChfX0xQNjRfXykgfHwgZGVmaW5lZChfX21pcHNfXykKIC8qIEZvciA2NC1iaXQgKGFuZCBtaXBzKSwgdGhlIGtlcm5lbCdzIHN0cnVjdCBzaWdhY3Rpb24gZG9lc24ndCBtYXRjaCB0aGUgUE9TSVggb25lLApAQCAtMTI5LDYgKzEzMCw5IEBACiBleHRlcm4gdm9pZCBwc2lnaW5mbyhjb25zdCBzaWdpbmZvX3QqLCBjb25zdCBjaGFyKik7CiBleHRlcm4gdm9pZCBwc2lnbmFsKGludCwgY29uc3QgY2hhciopOwogCitleHRlcm4gaW50IHB0aHJlYWRfa2lsbChwdGhyZWFkX3QsIGludCk7CitleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayhpbnQsIGNvbnN0IHNpZ3NldF90Kiwgc2lnc2V0X3QqKTsKKwogX19FTkRfREVDTFMKIAogI2VuZGlmIC8qIF9TSUdOQUxfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdGRhdG9taWMuaCBiL2xpYmMvaW5jbHVkZS9zdGRhdG9taWMuaAppbmRleCA1OGNiMWJjLi4yYzRmMWNlIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3RkYXRvbWljLmgKKysrIGIvbGliYy9pbmNsdWRlL3N0ZGF0b21pYy5oCkBAIC0zMiw2ICszMiwxMiBAQAogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0dOVUNfUFJFUkVRKQorLyogRHVwbGljYXRlIGRlZmluaXRpb24gaGVyZSwgc2luY2UgdGhlIG1pbmd3IHN5cy9jZGVmcy5oIG9taXRzIHRoZSAgKi8KKy8qIGRlZmluaXRpb24sIGFuZCB0aGlzIG5lZWRzIHRvIGJlIHVzYWJsZSB0aGVyZS4gICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCV9fR05VQ19QUkVSRVEoeCwgeSkgICAgXAorCSgoX19HTlVDX18gPT0gKHgpICYmIF9fR05VQ19NSU5PUl9fID49ICh5KSkgfHwgKF9fR05VQ19fID4gKHgpKSkKKyNlbmRpZiAvKiBfX0dOVUNfXyAmJiAuLi4gKi8KIAogI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpICYmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wgJiYgZGVmaW5lZChfVVNJTkdfTElCQ1hYKQogIyBpZmRlZiBfX2NsYW5nX18KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdGRpby5oIGIvbGliYy9pbmNsdWRlL3N0ZGlvLmgKaW5kZXggYTAxNjFkZS4uYzBkYWMxYSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N0ZGlvLmgKKysrIGIvbGliYy9pbmNsdWRlL3N0ZGlvLmgKQEAgLTM4LDYgKzM4LDE0IEBACiAjaWZuZGVmCV9TVERJT19IXwogI2RlZmluZQlfU1RESU9fSF8KIAorLyoKKyAqIFRoaXMgZmlsZSBtdXN0IGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gX19nbnVjX3ZhX2xpc3Qgc28gdGhhdCBHQ0MncworICogZml4aW5jbHVkZXMga25vd3MgdGhhdCB0aGF0J3Mgd2hhdCdzIGJlaW5nIHVzZWQgZm9yIHZhX2xpc3QsIGFuZCBzbworICogdG8gbGVhdmUgb3VyIDxzdGRpby5oPiBhbG9uZS4gKGZpeGluY2x1ZGVzIGdldHMgaW4gdGhlIHdheSBvZiBwb2ludGluZworICogb25lIHRvb2xjaGFpbiBhdCB2YXJpb3VzIGRpZmZlcmVudCBzZXRzIG9mIHBsYXRmb3JtIGhlYWRlcnMuKQorICogSWYgeW91IGFsdGVyIHRoaXMgY29tbWVudCwgYmUgc3VyZSB0byBrZWVwICJfX2dudWNfdmFfbGlzdCIgaW4gaXQhCisgKi8KKwogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCkBAIC0xMzgsNyArMTQ2LDE2IEBACiAJZnBvc190CV9vZmZzZXQ7CS8qIGN1cnJlbnQgbHNlZWsgb2Zmc2V0ICovCiB9IEZJTEU7CiAKKy8qIExlZ2FjeSBCU0QgaW1wbGVtZW50YXRpb24gb2Ygc3RkaW4vc3Rkb3V0L3N0ZGVyci4gKi8KIGV4dGVybiBGSUxFIF9fc0ZbXTsKKy8qIE1vcmUgb2J2aW91cyBpbXBsZW1lbnRhdGlvbi4gKi8KK2V4dGVybiBGSUxFKiBzdGRpbjsKK2V4dGVybiBGSUxFKiBzdGRvdXQ7CitleHRlcm4gRklMRSogc3RkZXJyOworLyogQzk5IGFuZCBlYXJsaWVyIHBsdXMgY3VycmVudCBDKysgc3RhbmRhcmRzIHNheSB0aGVzZSBtdXN0IGJlIG1hY3Jvcy4gKi8KKyNkZWZpbmUgc3RkaW4gc3RkaW4KKyNkZWZpbmUgc3Rkb3V0IHN0ZG91dAorI2RlZmluZSBzdGRlcnIgc3RkZXJyCiAKICNkZWZpbmUJX19TTEJGCTB4MDAwMQkJLyogbGluZSBidWZmZXJlZCAqLwogI2RlZmluZQlfX1NOQkYJMHgwMDAyCQkvKiB1bmJ1ZmZlcmVkICovCkBAIC0yMDEsMTAgKzIxOCw2IEBACiAjZGVmaW5lCVNFRUtfRU5ECTIJLyogc2V0IGZpbGUgb2Zmc2V0IHRvIEVPRiBwbHVzIG9mZnNldCAqLwogI2VuZGlmCiAKLSNkZWZpbmUJc3RkaW4JKCZfX3NGWzBdKQotI2RlZmluZQlzdGRvdXQJKCZfX3NGWzFdKQotI2RlZmluZQlzdGRlcnIJKCZfX3NGWzJdKQotCiAvKgogICogRnVuY3Rpb25zIGRlZmluZWQgaW4gQU5TSSBDIHN0YW5kYXJkLgogICovCkBAIC0zMjQsNiArMzM3LDExIEBACiBpbnQJIHB1dGNoYXJfdW5sb2NrZWQoaW50KTsKICNlbmRpZiAvKiBfX1BPU0lYX1ZJU0lCTEUgPj0gMTk5NTA2ICovCiAKKyNpZiBfX1BPU0lYX1ZJU0lCTEUgPj0gMjAwODA5CitGSUxFKiBmbWVtb3Blbih2b2lkKiwgc2l6ZV90LCBjb25zdCBjaGFyKik7CitGSUxFKiBvcGVuX21lbXN0cmVhbShjaGFyKiosIHNpemVfdCopOworI2VuZGlmIC8qIF9fUE9TSVhfVklTSUJMRSA+PSAyMDA4MDkgKi8KKwogI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgfHwgX19QT1NJWF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUgKi8KIAogLyoKQEAgLTM0MCw2ICszNTgsMTAgQEAKICAgICBfX3ZhX2xpc3QpCiAJCV9fcHJpbnRmbGlrZSgyLCAwKTsKIAordm9pZCBjbGVhcmVycl91bmxvY2tlZChGSUxFKik7CitpbnQgZmVvZl91bmxvY2tlZChGSUxFKik7CitpbnQgZmVycm9yX3VubG9ja2VkKEZJTEUqKTsKKwogLyoKICAqIFN0ZGlvIGZ1bmN0aW9uLWFjY2VzcyBpbnRlcmZhY2UuCiAgKi8KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cnhmcm1fbC5jcHAgYi9saWJjL2luY2x1ZGUvc3RkaW9fZXh0LmgKc2ltaWxhcml0eSBpbmRleCA3NCUKY29weSBmcm9tIGxpYmMvYmlvbmljL3N0cnhmcm1fbC5jcHAKY29weSB0byBsaWJjL2luY2x1ZGUvc3RkaW9fZXh0LmgKaW5kZXggYWZlM2I5Ni4uZjI5OWU1NCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvc3RyeGZybV9sLmNwcAorKysgYi9saWJjL2luY2x1ZGUvc3RkaW9fZXh0LmgKQEAgLTI2LDggKzI2LDI5IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZuZGVmIF9TVERJT19FWFRfSAorI2RlZmluZSBfU1RESU9fRVhUX0gKIAotc2l6ZV90IHN0cnhmcm1fbChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuLCBsb2NhbGVfdCkgewotICByZXR1cm4gc3RyeGZybShkZXN0LCBzcmMsIG4pOwotfQorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNkZWZpbmUgRlNFVExPQ0tJTkdfUVVFUlkgMAorI2RlZmluZSBGU0VUTE9DS0lOR19JTlRFUk5BTCAxCisjZGVmaW5lIEZTRVRMT0NLSU5HX0JZQ0FMTEVSIDIKKworX19CRUdJTl9ERUNMUworCitzaXplX3QgX19mYnVmc2l6ZShGSUxFKik7CitpbnQgX19mcmVhZGluZyhGSUxFKik7CitpbnQgX19md3JpdGluZyhGSUxFKik7CitpbnQgX19mcmVhZGFibGUoRklMRSopOworaW50IF9fZndyaXRhYmxlKEZJTEUqKTsKK2ludCBfX2ZsYmYoRklMRSopOwordm9pZCBfX2ZwdXJnZShGSUxFKik7CitzaXplX3QgX19mcGVuZGluZyhGSUxFKik7Cit2b2lkIF9mbHVzaGxiZih2b2lkKTsKK2ludCBfX2ZzZXRsb2NraW5nKEZJTEUqLCBpbnQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NURElPX0VYVF9IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3RkbGliLmggYi9saWJjL2luY2x1ZGUvc3RkbGliLmgKaW5kZXggNTJmMzcxYi4uMzA1M2U4NSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N0ZGxpYi5oCisrKyBiL2xpYmMvaW5jbHVkZS9zdGRsaWIuaApAQCAtNTksOCArNTksMTUgQEAKIAogZXh0ZXJuIGNoYXIqIG1rZHRlbXAoY2hhciopOwogZXh0ZXJuIGNoYXIqIG1rdGVtcChjaGFyKikgX193YXJuYXR0cigibWt0ZW1wIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAiKTsKLWV4dGVybiBpbnQgbWtzdGVtcChjaGFyKik7CisKK2V4dGVybiBpbnQgbWtvc3RlbXA2NChjaGFyKiwgaW50KTsKK2V4dGVybiBpbnQgbWtvc3RlbXAoY2hhciosIGludCk7CitleHRlcm4gaW50IG1rb3N0ZW1wczY0KGNoYXIqLCBpbnQsIGludCk7CitleHRlcm4gaW50IG1rb3N0ZW1wcyhjaGFyKiwgaW50LCBpbnQpOwogZXh0ZXJuIGludCBta3N0ZW1wNjQoY2hhciopOworZXh0ZXJuIGludCBta3N0ZW1wKGNoYXIqKTsKK2V4dGVybiBpbnQgbWtzdGVtcHM2NChjaGFyKiwgaW50KTsKK2V4dGVybiBpbnQgbWtzdGVtcHMoY2hhciosIGludCk7CiAKIGV4dGVybiBsb25nIHN0cnRvbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiBleHRlcm4gbG9uZyBsb25nIHN0cnRvbGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpAQCAtOTYsMTcgKzEwMyw4IEBACiAKIGV4dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKIAotZXh0ZXJuIGxvbmcganJhbmQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKLWV4dGVybiBsb25nIG1yYW5kNDgodm9pZCk7Ci1leHRlcm4gbG9uZyBucmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwotZXh0ZXJuIGxvbmcgbHJhbmQ0OCh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBzaG9ydCAqc2VlZDQ4KHVuc2lnbmVkIHNob3J0Kik7Ci1leHRlcm4gZG91YmxlIGVyYW5kNDgodW5zaWduZWQgc2hvcnQgeHN1YmlbM10pOwotZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4KHZvaWQpOwotZXh0ZXJuIHZvaWQgc3JhbmQ0OChsb25nKTsKLQotdW5zaWduZWQgaW50IGFyYzRyYW5kb20odm9pZCk7Ci11bnNpZ25lZCBpbnQgYXJjNHJhbmRvbV91bmlmb3JtKHVuc2lnbmVkIGludCk7Cit1aW50MzJfdCBhcmM0cmFuZG9tKHZvaWQpOwordWludDMyX3QgYXJjNHJhbmRvbV91bmlmb3JtKHVpbnQzMl90KTsKIHZvaWQgYXJjNHJhbmRvbV9idWYodm9pZCosIHNpemVfdCk7CiAKICNkZWZpbmUgUkFORF9NQVggMHg3ZmZmZmZmZgpAQCAtMTE1LDYgKzExMywxNiBAQAogaW50IHJhbmRfcih1bnNpZ25lZCBpbnQqKTsKIHZvaWQgc3JhbmQodW5zaWduZWQgaW50KTsKIAorZG91YmxlIGRyYW5kNDgodm9pZCk7Citkb3VibGUgZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydFszXSk7Citsb25nIGpyYW5kNDgodW5zaWduZWQgc2hvcnRbM10pOwordm9pZCBsY29uZzQ4KHVuc2lnbmVkIHNob3J0WzddKTsKK2xvbmcgbHJhbmQ0OCh2b2lkKTsKK2xvbmcgbXJhbmQ0OCh2b2lkKTsKK2xvbmcgbnJhbmQ0OCh1bnNpZ25lZCBzaG9ydFszXSk7Cit1bnNpZ25lZCBzaG9ydCogc2VlZDQ4KHVuc2lnbmVkIHNob3J0WzNdKTsKK3ZvaWQgc3JhbmQ0OChsb25nKTsKKwogY2hhciogaW5pdHN0YXRlKHVuc2lnbmVkIGludCwgY2hhciosIHNpemVfdCk7CiBsb25nIHJhbmRvbSh2b2lkKTsKIGNoYXIqIHNldHN0YXRlKGNoYXIqKTsKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdHJpbmcuaCBiL2xpYmMvaW5jbHVkZS9zdHJpbmcuaAppbmRleCBmMmY2ZGQyLi5mMGJlZDEwIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3RyaW5nLmgKKysrIGIvbGliYy9pbmNsdWRlL3N0cmluZy5oCkBAIC0yNSw4ICsyNSw5IEBACiAgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCi0jaWZuZGVmIF9TVFJJTkdfSF8KLSNkZWZpbmUgX1NUUklOR19IXworCisjaWZuZGVmIF9TVFJJTkdfSAorI2RlZmluZSBfU1RSSU5HX0gKIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNTcsOCArNTgsMTEgQEAKIGV4dGVybiBjaGFyKiAgc3RyY3B5KGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QpOwogZXh0ZXJuIGNoYXIqICBzdHJjYXQoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCk7CiAKLWV4dGVybiBpbnQgICAgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgX19wdXJlZnVuYzsKLWV4dGVybiBpbnQgICAgc3RybmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCkgX19wdXJlZnVuYzsKK2ludCBzdHJjYXNlY21wKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikgX19wdXJlZnVuYzsKK2ludCBzdHJjYXNlY21wX2woY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBsb2NhbGVfdCkgX19wdXJlZnVuYzsKK2ludCBzdHJuY2FzZWNtcChjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCkgX19wdXJlZnVuYzsKK2ludCBzdHJuY2FzZWNtcF9sKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90LCBsb2NhbGVfdCkgX19wdXJlZnVuYzsKKwogZXh0ZXJuIGNoYXIqICBzdHJkdXAoY29uc3QgY2hhciAqKTsKIAogZXh0ZXJuIGNoYXIqICBzdHJzdHIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopIF9fcHVyZWZ1bmM7CkBAIC02Niw4ICs3MCwxMyBAQAogZXh0ZXJuIGNoYXIqICBzdHJ0b2soY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCk7CiBleHRlcm4gY2hhciogIHN0cnRva19yKGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIGNoYXIqKiBfX3Jlc3RyaWN0KTsKIAotZXh0ZXJuIGNoYXIqICBzdHJlcnJvcihpbnQpOwotZXh0ZXJuIGludCAgICBzdHJlcnJvcl9yKGludCBlcnJudW0sIGNoYXIgKmJ1Ziwgc2l6ZV90IG4pOworZXh0ZXJuIGNoYXIqIHN0cmVycm9yKGludCk7CitleHRlcm4gY2hhciogc3RyZXJyb3JfbChpbnQsIGxvY2FsZV90KTsKKyNpZiBkZWZpbmVkKF9fVVNFX0dOVSkKK2V4dGVybiBjaGFyKiBzdHJlcnJvcl9yKGludCwgY2hhciosIHNpemVfdCkgX19SRU5BTUUoX19nbnVfc3RyZXJyb3Jfcik7CisjZWxzZSAvKiBQT1NJWCAqLworZXh0ZXJuIGludCBzdHJlcnJvcl9yKGludCwgY2hhciosIHNpemVfdCk7CisjZW5kaWYKIAogZXh0ZXJuIHNpemVfdCBzdHJubGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90KSBfX3B1cmVmdW5jOwogZXh0ZXJuIGNoYXIqICBzdHJuY2F0KGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHNpemVfdCk7CkBAIC05Miw2ICsxMDEsMjAgQEAKIGV4dGVybiBpbnQgICAgc3RyY29sbF9sKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBsb2NhbGVfdCkgX19wdXJlZnVuYzsKIGV4dGVybiBzaXplX3Qgc3RyeGZybV9sKGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHNpemVfdCwgbG9jYWxlX3QpOwogCisjaWYgZGVmaW5lZChfX1VTRV9HTlUpICYmICFkZWZpbmVkKF9fYmlvbmljX3VzaW5nX3Bvc2l4X2Jhc2VuYW1lKQorLyoKKyAqIGdsaWJjIGhhcyBhIGJhc2VuYW1lIGluIDxzdHJpbmcuaD4gdGhhdCdzIGRpZmZlcmVudCB0byB0aGUgUE9TSVggb25lIGluIDxsaWJnZW4uaD4uCisgKiBJdCBkb2Vzbid0IG1vZGlmeSBpdHMgYXJndW1lbnQsIGFuZCBpbiBDKysgaXQncyBjb25zdC1jb3JyZWN0LgorICovCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQysrIiBjaGFyKiBiYXNlbmFtZShjaGFyKikgX19SRU5BTUUoX19nbnVfYmFzZW5hbWUpIF9fbm9ubnVsbCgoMSkpOworZXh0ZXJuICJDKysiIGNvbnN0IGNoYXIqIGJhc2VuYW1lKGNvbnN0IGNoYXIqKSBfX1JFTkFNRShfX2dudV9iYXNlbmFtZSkgX19ub25udWxsKCgxKSk7CisjZWxzZQorZXh0ZXJuIGNoYXIqIGJhc2VuYW1lKGNvbnN0IGNoYXIqKSBfX1JFTkFNRShfX2dudV9iYXNlbmFtZSkgX19ub25udWxsKCgxKSk7CisjZW5kaWYKKyNkZWZpbmUgX19iaW9uaWNfdXNpbmdfZ251X2Jhc2VuYW1lCisjZW5kaWYKKwogZXh0ZXJuIGNoYXIqIF9fc3RwbmNweV9jaGsyKGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHNpemVfdCwgc2l6ZV90LCBzaXplX3QpOwogZXh0ZXJuIGNoYXIqIF9fc3RybmNweV9jaGsyKGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHNpemVfdCwgc2l6ZV90LCBzaXplX3QpOwogZXh0ZXJuIHNpemVfdCBfX3N0cmxjcHlfcmVhbChjaGFyKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0LCBzaXplX3QpIF9fUkVOQU1FKHN0cmxjcHkpOwpAQCAtMjgxLDQgKzMwNCw0IEBACiAKIF9fRU5EX0RFQ0xTCiAKLSNlbmRpZiAvKiBfU1RSSU5HX0hfICovCisjZW5kaWYgLyogX1NUUklOR19IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3RyaW5ncy5oIGIvbGliYy9pbmNsdWRlL3N0cmluZ3MuaAppbmRleCBhZTI2MWNmLi4xMjUzMDA2IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3RyaW5ncy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zdHJpbmdzLmgKQEAgLTQxLDIyICs0MSwyMyBAQAogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8eGxvY2FsZS5oPgogCiBfX0JFR0lOX0RFQ0xTCiAjaWYgZGVmaW5lZChfX0JJT05JQ19GT1JUSUZZKQotI2RlZmluZSBiY29weShiMSwgYjIsIGxlbikgXAotICAodm9pZCkoX19idWlsdGluX19fbWVtbW92ZV9jaGsoKGIyKSwgKGIxKSwgKGxlbiksIF9fYm9zMChiMikpKQotI2RlZmluZSBiemVybyhiLCBsZW4pIFwKLSAgKHZvaWQpKF9fYnVpbHRpbl9fX21lbXNldF9jaGsoKGIpLCAnXDAnLCAobGVuKSwgX19ib3MwKGIpKSkKKyNkZWZpbmUgYmNvcHkoYjEsIGIyLCBsZW4pICh2b2lkKShfX2J1aWx0aW5fX19tZW1tb3ZlX2NoaygoYjIpLCAoYjEpLCAobGVuKSwgX19ib3MwKGIyKSkpCisjZGVmaW5lIGJ6ZXJvKGIsIGxlbikgKHZvaWQpKF9fYnVpbHRpbl9fX21lbXNldF9jaGsoKGIpLCAnXDAnLCAobGVuKSwgX19ib3MwKGIpKSkKICNlbHNlCiAjZGVmaW5lIGJjb3B5KGIxLCBiMiwgbGVuKSAodm9pZCkoX19idWlsdGluX21lbW1vdmUoKGIyKSwgKGIxKSwgKGxlbikpKQogI2RlZmluZSBiemVybyhiLCBsZW4pICh2b2lkKShfX2J1aWx0aW5fbWVtc2V0KChiKSwgJ1wwJywgKGxlbikpKQogI2VuZGlmCiAKK2ludCBmZnMoaW50KTsKIAotaW50CSBmZnMoaW50KTsKLWludAkgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1pbnQJIHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSBfX3B1cmVmdW5jOworaW50IHN0cmNhc2VjbXBfbChjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGxvY2FsZV90KSBfX3B1cmVmdW5jOworaW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KSBfX3B1cmVmdW5jOworaW50IHN0cm5jYXNlY21wX2woY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QsIGxvY2FsZV90KSBfX3B1cmVmdW5jOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2NhY2hlY3RsLmggYi9saWJjL2luY2x1ZGUvc3lzL2NhY2hlY3RsLmgKaW5kZXggNTdlNmFlNy4uYTMwMmZmOCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9jYWNoZWN0bC5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvY2FjaGVjdGwuaApAQCAtMzEsNiArMzEsNSBAQAogI2lmZGVmIF9fbWlwc19fCiAjaW5jbHVkZSA8YXNtL2NhY2hlY3RsLmg+CiBleHRlcm4gaW50IF9fY2FjaGVjdGwgKHZvaWQgKmFkZHIsIF9fY29uc3QgaW50IG5ieXRlcywgX19jb25zdCBpbnQgb3ApOwotZXh0ZXJuIGludCBfZmx1c2hfY2FjaGUgKGNoYXIgKmFkZHIsIF9fY29uc3QgaW50IG5ieXRlcywgX19jb25zdCBpbnQgb3ApOwogI2VuZGlmCiAjZW5kaWYgLyogc3lzL2NhY2hlY3RsLmggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnMuaAppbmRleCA1MDRlNDM5Li42ZjIzOGE5IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2NkZWZzLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9jZGVmcy5oCkBAIC0zNTgsOSArMzU4LDMyIEBACiAjZGVmaW5lIF9fUkNTSUQoX3MpIC8qIG5vdGhpbmcgKi8KICNkZWZpbmUgX19TQ0NTSUQoX3MpIC8qIG5vdGhpbmcgKi8KIAorLyoKKyAqIF9CU0RfU09VUkNFIGFuZCBfR05VX1NPVVJDRSBhcmUgZXhwZWN0ZWQgdG8gYmUgZGVmaW5lZCBieSBjYWxsZXJzIGJlZm9yZQorICogYW55IHN0YW5kYXJkIGhlYWRlciBmaWxlIGlzIGluY2x1ZGVkLiBJbiB0aG9zZSBoZWFkZXIgZmlsZXMgd2UgdGVzdAorICogYWdhaW5zdCBfX1VTRV9CU0QgYW5kIF9fVVNFX0dOVS4gZ2xpYmMgZG9lcyB0aGlzIGluIDxmZWF0dXJlcy5oPiBidXQgd2UKKyAqIGRvIGl0IGluIDxzeXMvY2RlZnMuaD4gaW5zdGVhZCBiZWNhdXNlIHRoYXQncyB3aGVyZSBvdXIgZXhpc3RpbmcKKyAqIF9QT1NJWF9DX1NPVVJDRSB0ZXN0cyB3ZXJlLCBhbmQgd2UncmUgYWxyZWFkeSBjb25maWRlbnQgdGhhdCA8c3lzL2NkZWZzLmg+CisgKiBpcyBpbmNsdWRlZCBldmVyeXdoZXJlIGl0IHNob3VsZCBiZS4KKyAqCisgKiBUaGUgX0dOVV9TT1VSQ0UgdGVzdCBuZWVkcyB0byBjb21lIGJlZm9yZSBhbnkgX0JTRF9TT1VSQ0Ugb3IgX1BPU0lYKiB0ZXN0cworICogYmVjYXVzZSBfR05VX1NPVVJDRSBpbXBsaWVzIGV2ZXJ5dGhpbmcgZWxzZS4KKyAqLworI2lmIGRlZmluZWQoX0dOVV9TT1VSQ0UpCisjIGRlZmluZSBfX1VTRV9HTlUgMQorIyB1bmRlZiBfUE9TSVhfU09VUkNFCisjIGRlZmluZSBfUE9TSVhfU09VUkNFIDEKKyMgdW5kZWYgX1BPU0lYX0NfU09VUkNFCisjIGRlZmluZSBfUE9TSVhfQ19TT1VSQ0UgMjAwODA5TAorIyB1bmRlZiBfQlNEX1NPVVJDRQorIyBkZWZpbmUgX0JTRF9TT1VSQ0UgMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9CU0RfU09VUkNFKQorIyBkZWZpbmUgX19VU0VfQlNEIDEKKyNlbmRpZgorCiAvKi0KLSAqIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJlIGFuIGV4dGVuc2lvbiBvZiB0aGUgYmVoYXZpb3Igb3JpZ2luYWxseQotICogaW1wbGVtZW50ZWQgaW4gPHN5cy9fcG9zaXguaD4sIGJ1dCB3aXRoIGEgZGlmZmVyZW50IGxldmVsIG9mIGdyYW51bGFyaXR5LgogICogUE9TSVguMSByZXF1aXJlcyB0aGF0IHRoZSBtYWNyb3Mgd2UgdGVzdCBiZSBkZWZpbmVkIGJlZm9yZSBhbnkgc3RhbmRhcmQKICAqIGhlYWRlciBmaWxlIGlzIGluY2x1ZGVkLgogICoKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnNfZWxmLmggYi9saWJjL2luY2x1ZGUvc3lzL2NkZWZzX2VsZi5oCmluZGV4IDZiYjBhNTcuLmE0MGE4NjcgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnNfZWxmLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9jZGVmc19lbGYuaApAQCAtMzQsMTAgKzM0LDYgQEAKICAgICBfX2FzbV9fKCIuZ2xvYmFsICIgI2FsaWFzICJcbiIgXAogICAgICAgICAgICAgI2FsaWFzICIgPSAiICNzeW0pOwogCi0jZGVmaW5lIF9fd2Vha19hbGlhcyhhbGlhcyxzeW0pIFwKLSAgICBfX2FzbV9fKCIud2VhayAiICNhbGlhcyAiXG4iIFwKLSAgICAgICAgICAgICNhbGlhcyAiID0gIiAjc3ltKTsKLQogLyogV2UgdXNlIF9fd2FybmF0dHIgaW5zdGVhZCBvZiBfX3dhcm5fcmVmZXJlbmNlcy4KICAqIFRPRE86IHJlbW92ZSB0aGlzIGFuZCBwdXQgYW4gZW1wdHkgZGVmaW5pdGlvbiBpbiBvbmUgb2YgdGhlIHVwc3RyZWFtLSogY29tcGF0aWJpbGl0eSBoZWFkZXJzLgogICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2dsaWJjLXN5c2NhbGxzLmggYi9saWJjL2luY2x1ZGUvc3lzL2dsaWJjLXN5c2NhbGxzLmgKaW5kZXggNDU5ZWU3OC4uYjdkOTA1NCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9nbGliYy1zeXNjYWxscy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvZ2xpYmMtc3lzY2FsbHMuaApAQCAtMjAzLDYgKzIwMyw3IEBACiAjZGVmaW5lIFNZU19yZW1vdmV4YXR0ciBfX05SX3JlbW92ZXhhdHRyCiAjZGVmaW5lIFNZU19yZW5hbWUgX19OUl9yZW5hbWUKICNkZWZpbmUgU1lTX3JlbmFtZWF0IF9fTlJfcmVuYW1lYXQKKyNkZWZpbmUgU1lTX3JlbmFtZWF0MiBfX05SX3JlbmFtZWF0MgogI2RlZmluZSBTWVNfcmVxdWVzdF9rZXkgX19OUl9yZXF1ZXN0X2tleQogI2RlZmluZSBTWVNfcmVzdGFydF9zeXNjYWxsIF9fTlJfcmVzdGFydF9zeXNjYWxsCiAjZGVmaW5lIFNZU19ybWRpciBfX05SX3JtZGlyCkBAIC01MzMsNiArNTM0LDcgQEAKICNkZWZpbmUgU1lTX3JlbW92ZXhhdHRyIF9fTlJfcmVtb3ZleGF0dHIKICNkZWZpbmUgU1lTX3JlbmFtZSBfX05SX3JlbmFtZQogI2RlZmluZSBTWVNfcmVuYW1lYXQgX19OUl9yZW5hbWVhdAorI2RlZmluZSBTWVNfcmVuYW1lYXQyIF9fTlJfcmVuYW1lYXQyCiAjZGVmaW5lIFNZU19yZXF1ZXN0X2tleSBfX05SX3JlcXVlc3Rfa2V5CiAjZGVmaW5lIFNZU19yZXN0YXJ0X3N5c2NhbGwgX19OUl9yZXN0YXJ0X3N5c2NhbGwKICNkZWZpbmUgU1lTX3JtZGlyIF9fTlJfcm1kaXIKQEAgLTg4OCw2ICs4OTAsNyBAQAogI2RlZmluZSBTWVNfcmVtb3ZleGF0dHIgX19OUl9yZW1vdmV4YXR0cgogI2RlZmluZSBTWVNfcmVuYW1lIF9fTlJfcmVuYW1lCiAjZGVmaW5lIFNZU19yZW5hbWVhdCBfX05SX3JlbmFtZWF0CisjZGVmaW5lIFNZU19yZW5hbWVhdDIgX19OUl9yZW5hbWVhdDIKICNkZWZpbmUgU1lTX3JlcXVlc3Rfa2V5IF9fTlJfcmVxdWVzdF9rZXkKICNkZWZpbmUgU1lTX3Jlc2VydmVkMTc3IF9fTlJfcmVzZXJ2ZWQxNzcKICNkZWZpbmUgU1lTX3Jlc2VydmVkMTkzIF9fTlJfcmVzZXJ2ZWQxOTMKQEAgLTEyNTAsNiArMTI1Myw3IEBACiAjZGVmaW5lIFNZU19yZW1vdmV4YXR0ciBfX05SX3JlbW92ZXhhdHRyCiAjZGVmaW5lIFNZU19yZW5hbWUgX19OUl9yZW5hbWUKICNkZWZpbmUgU1lTX3JlbmFtZWF0IF9fTlJfcmVuYW1lYXQKKyNkZWZpbmUgU1lTX3JlbmFtZWF0MiBfX05SX3JlbmFtZWF0MgogI2RlZmluZSBTWVNfcmVxdWVzdF9rZXkgX19OUl9yZXF1ZXN0X2tleQogI2RlZmluZSBTWVNfcmVzdGFydF9zeXNjYWxsIF9fTlJfcmVzdGFydF9zeXNjYWxsCiAjZGVmaW5lIFNZU19ybWRpciBfX05SX3JtZGlyCkBAIC0xNTgwLDYgKzE1ODQsNyBAQAogI2RlZmluZSBTWVNfcmVtb3ZleGF0dHIgX19OUl9yZW1vdmV4YXR0cgogI2RlZmluZSBTWVNfcmVuYW1lIF9fTlJfcmVuYW1lCiAjZGVmaW5lIFNZU19yZW5hbWVhdCBfX05SX3JlbmFtZWF0CisjZGVmaW5lIFNZU19yZW5hbWVhdDIgX19OUl9yZW5hbWVhdDIKICNkZWZpbmUgU1lTX3JlcXVlc3Rfa2V5IF9fTlJfcmVxdWVzdF9rZXkKICNkZWZpbmUgU1lTX3Jlc3RhcnRfc3lzY2FsbCBfX05SX3Jlc3RhcnRfc3lzY2FsbAogI2RlZmluZSBTWVNfcm1kaXIgX19OUl9ybWRpcgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9saW1pdHMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvbGltaXRzLmgKaW5kZXggYzUwZWIxMC4uYmU3OWNmMyAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9saW1pdHMuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2xpbWl0cy5oCkBAIC0xMTUsNTcgKzExNSwxMyBAQAogCiAvKiBCaW9uaWMtc3BlY2lmaWMgZGVmaW5pdGlvbnMgKi8KIAotI2RlZmluZSAgX1BPU0lYX1ZFUlNJT04gICAgICAgICAgICAgMjAwMTEyTCAgIC8qIFBvc2l4IEMgbGFuZ3VhZ2UgYmluZGluZ3MgdmVyc2lvbiAqLworI2RlZmluZSAgX1BPU0lYX1ZFUlNJT04gICAgICAgICAgICAgMjAwODA5TCAgIC8qIFBvc2l4IEMgbGFuZ3VhZ2UgYmluZGluZ3MgdmVyc2lvbiAqLwogI2RlZmluZSAgX1BPU0lYMl9WRVJTSU9OICAgICAgICAgICAgLTEgICAgICAgIC8qIHdlIGRvbid0IHN1cHBvcnQgUG9zaXggY29tbWFuZC1saW5lIHRvb2xzICovCi0jZGVmaW5lICBfUE9TSVgyX0NfVkVSU0lPTiAgICAgICAgICBfUE9TSVhfVkVSU0lPTgotI2RlZmluZSAgX1hPUEVOX1ZFUlNJT04gICAgICAgICAgICAgNTAwICAgICAgIC8qIGJ5IFBvc2l4IGRlZmluaXRpb24gKi8KLSNkZWZpbmUgIF9YT1BFTl9YQ1VfVkVSU0lPTiAgICAgICAgIC0xICAgICAgICAvKiB3ZSBkb24ndCBzdXBwb3J0IGNvbW1hbmQtbGluZSB1dGlsaXRpZXMgKi8KLQotLyogdGVsbCB3aGF0IHdlIGltcGxlbWVudCBsZWdhY3kgc3R1ZmYgd2hlbiBhcHByb3ByaWF0ZSAqLwotI2lmIF9QT1NJWF9WRVJTSU9OID4gMAotI2RlZmluZSAgX1hPUEVOX1hQRzIgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgX1hPUEVOX1hQRzMgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgX1hPUEVOX1hQRzQgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgX1hPUEVOX1VOSVggICAgICAgICAgICAgICAgMQotI2VuZGlmCi0KLSNkZWZpbmUgIF9YT1BFTl9FTkhfSTE4TiAgICAgICAgICAtMSAgLyogd2UgZG9uJ3Qgc3VwcG9ydCBpbnRlcm5hdGlvbmFsaXphdGlvbiBpbiB0aGUgQyBsaWJyYXJ5ICovCi0jZGVmaW5lICBfWE9QRU5fQ1JZUFQgICAgICAgICAgICAgLTEgIC8qIGRvbid0IHN1cHBvcnQgWC9PcGVuIEVuY3J5cHRpb24gKi8KLSNkZWZpbmUgIF9YT1BFTl9MRUdBQ1kgICAgICAgICAgICAtMSAgLyogZG9uJ3QgY2xhaW0gd2Ugc3VwcG9ydCB0aGVzZSwgd2UgaGF2ZSBzb21lIG9mIHRoZW0gYnV0IG5vdCBhbGwgKi8KLSNkZWZpbmUgIF9YT1BFTl9SRUFMVElNRSAgICAgICAgICAtMSAvKiB3ZSBkb24ndCBzdXBwb3J0IGFsbCB0aGVzZSBmdW5jdGlvbnMgKi8KLSNkZWZpbmUgIF9YT1BFTl9SRUFMVElNRV9USFJFQURTICAtMSAgLyogc2FtZSBoZXJlICovCi0KLSNkZWZpbmUgIF9QT1NJWF9SRUFMVElNRV9TSUdOQUxTICAgIC0xICAvKiBmb3Igbm93LCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HICAxICAvKiBwcmlvcml0eSBzY2hlZHVsaW5nIGlzIGEgTGludXggZmVhdHVyZSAqLwotI2RlZmluZSAgX1BPU0lYX1RJTUVSUyAgICAgICAgICAgICAgIDEgIC8qIFBvc2l4IHRpbWVycyBhcmUgc3VwcG9ydGVkICovCi0jdW5kZWYgICBfUE9TSVhfQVNZTkNIUk9OT1VTX0lPICAgICAgICAgLyogYWlvXyBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgIF9QT1NJWF9TWU5DSFJPTklaRURfSU8gICAgICAxICAvKiBzeW5jaHJvbml6ZWQgaS9vIHN1cHBvcnRlZCAqLwotI2RlZmluZSAgX1BPU0lYX0ZTWU5DICAgICAgICAgICAgICAgIDEgIC8qIGZkYXRhc3luYygpIHN1cHBvcnRlZCAqLwotI2RlZmluZSAgX1BPU0lYX01BUFBFRF9GSUxFUyAgICAgICAgIDEgIC8qIG1tYXAtZWQgZmlsZXMgc3VwcG9ydGVkICovCi0KLS8qIFhYWDogVE9ETzogY29tcGxldGUgYW5kIGNoZWNrIGxpc3QgaGVyZSAqLworI2RlZmluZSAgX1hPUEVOX1ZFUlNJT04gICAgICAgICAgICAgNzAwICAgICAgIC8qIGJ5IFBvc2l4IGRlZmluaXRpb24gKi8KIAogCi0jZGVmaW5lICBfUE9TSVhfVEhSRUFEUyAgICAgICAgICAgICAxICAgIC8qIHdlIHN1cHBvcnQgdGhyZWFkcyAqLwotI2RlZmluZSAgX1BPU0lYX1RIUkVBRF9TVEFDS0FERFIgICAgMSAgICAvKiB3ZSBzdXBwb3J0IHRocmVhZCBzdGFjayBhZGRyZXNzICovCi0jZGVmaW5lICBfUE9TSVhfVEhSRUFEX1NUQUNLU0laRSAgICAxICAgIC8qIHdlIHN1cHBvcnQgdGhyZWFkIHN0YWNrIHNpemUgKi8KLSNkZWZpbmUgIF9QT1NJWF9USFJFQURfUFJJT19JTkhFUklUIDIwMDExMkwgICAvKiBsaW51eCBmZWF0dXJlICovCi0jZGVmaW5lICBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVCAyMDAxMTJMICAgLyogbGludXggZmVhdHVyZSAqLwotCi0jdW5kZWYgICBfUE9TSVhfUFJPQ0VTU19TSEFSRUQgICAgICAgICAgIC8qIHdlIGRvbid0IHN1cHBvcnQgcHJvY2Vzcy1zaGFyZWQgc3luY2hyb25pemF0aW9uICovCi0jdW5kZWYgICBfUE9TSVhfVEhSRUFEX1NBRkVfRlVOQ1RJT05TICAgIC8qIG1vc3QgZnVuY3Rpb25zIGFyZSwgYnV0IG5vdCBldmVyeXRoaW5nIHlldCAqLwotI2RlZmluZSAgX1BPU0lYX0NIT1dOX1JFU1RSSUNURUQgICAgMSAgICAvKiB5ZXMsIGNob3duIHJlcXVpcmVzIGFwcHJvcHJpYXRlIHByaXZpbGVnZXMgKi8KLSNkZWZpbmUgIF9QT1NJWF9NT05PVE9OSUNfQ0xPQ0sgICAgIDAgICAgLyogdGhlIG1vbm90b25pYyBjbG9jayBtYXkgYmUgYXZhaWxhYmxlOyBhc2sgc3lzY29uZiAqLwotI2RlZmluZSAgX1BPU0lYX05PX1RSVU5DICAgICAgICAgICAgMSAgICAvKiB2ZXJ5IGxvbmcgcGF0aG5hbWVzIGdlbmVyYXRlIGFuIGVycm9yICovCi0jZGVmaW5lICBfUE9TSVhfU0FWRURfSURTICAgICAgICAgICAxICAgIC8qIHNhdmVkIHVzZXIgaWRzIGlzIGEgTGludXggZmVhdHVyZSAqLwotI2RlZmluZSAgX1BPU0lYX0pPQl9DT05UUk9MICAgICAgICAgMSAgICAvKiBqb2IgY29udHJvbCBpcyBhIExpbnV4IGZlYXR1cmUgKi8KLQotI2RlZmluZSBfUE9TSVhfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUyA0IC8qIHRoZSBtaW5pbXVtIG1hbmRhdGVkIGJ5IFBPU0lYICovCi0jZGVmaW5lIFBUSFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TIF9QT1NJWF9USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TCi0jZGVmaW5lIF9QT1NJWF9USFJFQURfS0VZU19NQVggMTI4ICAgICAgICAgICAgLyogdGhlIG1pbmltdW0gbWFuZGF0ZWQgYnkgUE9TSVggKi8KLSNkZWZpbmUgUFRIUkVBRF9LRVlTX01BWCBfUE9TSVhfVEhSRUFEX0tFWVNfTUFYCi0jZGVmaW5lIF9QT1NJWF9USFJFQURfVEhSRUFEU19NQVggNjQgICAgICAgICAgLyogdGhlIG1pbmltdW0gbWFuZGF0ZWQgYnkgUE9TSVggKi8KLSNkZWZpbmUgUFRIUkVBRF9USFJFQURTX01BWCAgICAgICAgICAgICAgICAgICAvKiBiaW9uaWMgaGFzIG5vIHNwZWNpZmljIGxpbWl0ICovCi0KKyNkZWZpbmUgUFRIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMgNCAgICAgLy8gPj0gX1BPU0lYX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMKKyNkZWZpbmUgUFRIUkVBRF9LRVlTX01BWCAgICAgICAgICAgICAgMTI4ICAgLy8gPj0gX1BPU0lYX1RIUkVBRF9LRVlTX01BWAorI2RlZmluZSBQVEhSRUFEX1RIUkVBRFNfTUFYICAgICAgICAgICAyMDQ4ICAvLyBiaW9uaWMgaGFzIG5vIHNwZWNpZmljIGxpbWl0CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zdGF0LmggYi9saWJjL2luY2x1ZGUvc3lzL3N0YXQuaAppbmRleCA5YzczNzNhLi43ZDg1ZGQxIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3N0YXQuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3N0YXQuaApAQCAtMjUsNiArMjUsNyBAQAogICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqLworCiAjaWZuZGVmIF9TWVNfU1RBVF9IXwogI2RlZmluZSBfU1lTX1NUQVRfSF8KIApAQCAtNTEsMTIgKzUyLDkgQEAKICAgaW50IHN0X2Jsa3NpemU7IFwKICAgaW50IF9fcGFkMjsgXAogICBsb25nIHN0X2Jsb2NrczsgXAotICBsb25nIHN0X2F0aW1lOyBcCi0gIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWVfbnNlYzsgXAotICBsb25nIHN0X210aW1lOyBcCi0gIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWVfbnNlYzsgXAotICBsb25nIHN0X2N0aW1lOyBcCi0gIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWVfbnNlYzsgXAorICBzdHJ1Y3QgdGltZXNwZWMgc3RfYXRpbTsgXAorICBzdHJ1Y3QgdGltZXNwZWMgc3RfbXRpbTsgXAorICBzdHJ1Y3QgdGltZXNwZWMgc3RfY3RpbTsgXAogICB1bnNpZ25lZCBpbnQgX191bnVzZWQ0OyBcCiAgIHVuc2lnbmVkIGludCBfX3VudXNlZDU7IFwKIApAQCAtNzIsMTIgKzcwLDkgQEAKICAgdW5zaWduZWQgaW50IHN0X3JkZXY7IFwKICAgdW5zaWduZWQgaW50IF9fcGFkMVszXTsgXAogICBsb25nIGxvbmcgc3Rfc2l6ZTsgXAotICB1bnNpZ25lZCBpbnQgc3RfYXRpbWU7IFwKLSAgdW5zaWduZWQgaW50IHN0X2F0aW1lX25zZWM7IFwKLSAgdW5zaWduZWQgaW50IHN0X210aW1lOyBcCi0gIHVuc2lnbmVkIGludCBzdF9tdGltZV9uc2VjOyBcCi0gIHVuc2lnbmVkIGludCBzdF9jdGltZTsgXAotICB1bnNpZ25lZCBpbnQgc3RfY3RpbWVfbnNlYzsgXAorICBzdHJ1Y3QgdGltZXNwZWMgc3RfYXRpbTsgXAorICBzdHJ1Y3QgdGltZXNwZWMgc3RfbXRpbTsgXAorICBzdHJ1Y3QgdGltZXNwZWMgc3RfY3RpbTsgXAogICB1bnNpZ25lZCBpbnQgc3RfYmxrc2l6ZTsgXAogICB1bnNpZ25lZCBpbnQgX19wYWQyOyBcCiAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9ibG9ja3M7IFwKQEAgLTk1LDEyICs5MCw5IEBACiAgIGxvbmcgc3Rfc2l6ZTsgXAogICBsb25nIHN0X2Jsa3NpemU7IFwKICAgbG9uZyBzdF9ibG9ja3M7IFwKLSAgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsgXAotICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7IFwKLSAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsgXAotICB1bnNpZ25lZCBsb25nIHN0X210aW1lX25zZWM7IFwKLSAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsgXAotICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7IFwKKyAgc3RydWN0IHRpbWVzcGVjIHN0X2F0aW07IFwKKyAgc3RydWN0IHRpbWVzcGVjIHN0X210aW07IFwKKyAgc3RydWN0IHRpbWVzcGVjIHN0X2N0aW07IFwKICAgbG9uZyBfX3BhZDNbM107IFwKIAogI2Vsc2UKQEAgLTExNywxMiArMTA5LDkgQEAKICAgbG9uZyBsb25nIHN0X3NpemU7IFwKICAgdW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOyBcCiAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9ibG9ja3M7IFwKLSAgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsgXAotICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7IFwKLSAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsgXAotICB1bnNpZ25lZCBsb25nIHN0X210aW1lX25zZWM7IFwKLSAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsgXAotICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7IFwKKyAgc3RydWN0IHRpbWVzcGVjIHN0X2F0aW07IFwKKyAgc3RydWN0IHRpbWVzcGVjIHN0X210aW07IFwKKyAgc3RydWN0IHRpbWVzcGVjIHN0X2N0aW07IFwKICAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2lubzsgXAogCiAjZW5kaWYKQEAgLTEzMiw5ICsxMjEsMTQgQEAKIAogI3VuZGVmIF9fU1RBVDY0X0JPRFkKIAotI2RlZmluZSBzdF9hdGltZW5zZWMgc3RfYXRpbWVfbnNlYwotI2RlZmluZSBzdF9tdGltZW5zZWMgc3RfbXRpbWVfbnNlYwotI2RlZmluZSBzdF9jdGltZW5zZWMgc3RfY3RpbWVfbnNlYworLyogQ29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIFBPU0lYLiAqLworI2RlZmluZSBzdF9hdGltZSBzdF9hdGltLnR2X3NlYworI2RlZmluZSBzdF9tdGltZSBzdF9tdGltLnR2X3NlYworI2RlZmluZSBzdF9jdGltZSBzdF9jdGltLnR2X3NlYworLyogQ29tcGF0aWJpbGl0eSB3aXRoIGdsaWJjLiAqLworI2RlZmluZSBzdF9hdGltZW5zZWMgc3RfYXRpbS50dl9uc2VjCisjZGVmaW5lIHN0X210aW1lbnNlYyBzdF9tdGltLnR2X25zZWMKKyNkZWZpbmUgc3RfY3RpbWVuc2VjIHN0X2N0aW0udHZfbnNlYwogCiAjaWZkZWYgX19VU0VfQlNECiAvKiBQZXJtaXNzaW9uIG1hY3JvcyBwcm92aWRlZCBieSBnbGliYyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEJTRHMuICovCkBAIC0xODAsNiArMTc0LDcgQEAKICNlbmRpZiAvKiBkZWZpbmVkKF9fQklPTklDX0ZPUlRJRlkpICovCiAKIGV4dGVybiBpbnQgbWtmaWZvKGNvbnN0IGNoYXIqLCBtb2RlX3QpOworZXh0ZXJuIGludCBta2ZpZm9hdChpbnQsIGNvbnN0IGNoYXIqLCBtb2RlX3QpOwogCiBleHRlcm4gaW50IGZjaG1vZGF0KGludCwgY29uc3QgY2hhciosIG1vZGVfdCwgaW50KTsKIGV4dGVybiBpbnQgbWtkaXJhdChpbnQsIGNvbnN0IGNoYXIqLCBtb2RlX3QpOwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zeXNjb25mLmggYi9saWJjL2luY2x1ZGUvc3lzL3N5c2NvbmYuaAppbmRleCAzZDA1OGQ3Li44YWE1MDZlIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3N5c2NvbmYuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3N5c2NvbmYuaApAQCAtNTAsNyArNTAsNyBAQAogI2RlZmluZSBfU0NfUEFTU19NQVggICAgICAgICAgICAweDAwMGMKICNkZWZpbmUgX1NDXzJfQ19CSU5EICAgICAgICAgICAgMHgwMDBkCiAjZGVmaW5lIF9TQ18yX0NfREVWICAgICAgICAgICAgIDB4MDAwZQotI2RlZmluZSBfU0NfMl9DX1ZFUlNJT04gICAgICAgICAweDAwMGYKKyNkZWZpbmUgX1NDXzJfQ19WRVJTSU9OICAgICAgICAgMHgwMDBmICAvKiBPYnNvbGVzY2VudCBpbiBQT1NJWC4xLTIwMDgsIFRPRE86IHJlbW92ZSBpdC4gKi8KICNkZWZpbmUgX1NDXzJfQ0hBUl9URVJNICAgICAgICAgMHgwMDEwCiAjZGVmaW5lIF9TQ18yX0ZPUlRfREVWICAgICAgICAgIDB4MDAxMQogI2RlZmluZSBfU0NfMl9GT1JUX1JVTiAgICAgICAgICAweDAwMTIKQEAgLTY4LDcgKzY4LDcgQEAKICNkZWZpbmUgX1NDX1hPUEVOX0VOSF9JMThOICAgICAgMHgwMDFlCiAjZGVmaW5lIF9TQ19YT1BFTl9TSE0gICAgICAgICAgIDB4MDAxZgogI2RlZmluZSBfU0NfWE9QRU5fVkVSU0lPTiAgICAgICAweDAwMjAKLSNkZWZpbmUgX1NDX1hPUEVOX1hDVV9WRVJTSU9OICAgMHgwMDIxCisjZGVmaW5lIF9TQ19YT1BFTl9YQ1VfVkVSU0lPTiAgIDB4MDAyMSAgLyogT2Jzb2xlc2NlbnQgaW4gUE9TSVguMS0yMDA4LCBUT0RPOiByZW1vdmUgaXQuICovCiAjZGVmaW5lIF9TQ19YT1BFTl9SRUFMVElNRSAgICAgIDB4MDAyMgogI2RlZmluZSBfU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUyAgMHgwMDIzCiAjZGVmaW5lIF9TQ19YT1BFTl9MRUdBQ1kgICAgICAgIDB4MDAyNApAQCAtNzcsMTAgKzc3LDEwIEBACiAjZGVmaW5lIF9TQ19QQUdFU0laRSAgICAgICAgICAgIDB4MDAyNwogI2RlZmluZSBfU0NfUEFHRV9TSVpFICAgICAgICAgICAweDAwMjgKICNkZWZpbmUgX1NDX1hPUEVOX1VOSVggICAgICAgICAgMHgwMDI5Ci0jZGVmaW5lIF9TQ19YQlM1X0lMUDMyX09GRjMyICAgIDB4MDAyYQotI2RlZmluZSBfU0NfWEJTNV9JTFAzMl9PRkZCSUcgICAweDAwMmIKLSNkZWZpbmUgX1NDX1hCUzVfTFA2NF9PRkY2NCAgICAgMHgwMDJjCi0jZGVmaW5lIF9TQ19YQlM1X0xQQklHX09GRkJJRyAgIDB4MDAyZAorI2RlZmluZSBfU0NfWEJTNV9JTFAzMl9PRkYzMiAgICAweDAwMmEgIC8qIE9ic29sZXNjZW50IGluIFBPU0lYLjEtMjAwOCwgVE9ETzogcmVtb3ZlIGl0LiAqLworI2RlZmluZSBfU0NfWEJTNV9JTFAzMl9PRkZCSUcgICAweDAwMmIgIC8qIE9ic29sZXNjZW50IGluIFBPU0lYLjEtMjAwOCwgVE9ETzogcmVtb3ZlIGl0LiAqLworI2RlZmluZSBfU0NfWEJTNV9MUDY0X09GRjY0ICAgICAweDAwMmMgIC8qIE9ic29sZXNjZW50IGluIFBPU0lYLjEtMjAwOCwgVE9ETzogcmVtb3ZlIGl0LiAqLworI2RlZmluZSBfU0NfWEJTNV9MUEJJR19PRkZCSUcgICAweDAwMmQgIC8qIE9ic29sZXNjZW50IGluIFBPU0lYLjEtMjAwOCwgVE9ETzogcmVtb3ZlIGl0LiAqLwogI2RlZmluZSBfU0NfQUlPX0xJU1RJT19NQVggICAgICAweDAwMmUKICNkZWZpbmUgX1NDX0FJT19NQVggICAgICAgICAgICAgMHgwMDJmCiAjZGVmaW5lIF9TQ19BSU9fUFJJT19ERUxUQV9NQVggIDB4MDAzMApAQCAtMTI5LDYgKzEyOSw0OSBAQAogI2RlZmluZSBfU0NfQVZQSFlTX1BBR0VTICAgICAgICAgICAgICAgIDB4MDA2MwogI2RlZmluZSBfU0NfTU9OT1RPTklDX0NMT0NLICAgICAgICAgICAgIDB4MDA2NAogCisjZGVmaW5lIF9TQ18yX1BCUyAgICAgICAgICAgICAgIDB4MDA2NQorI2RlZmluZSBfU0NfMl9QQlNfQUNDT1VOVElORyAgICAweDAwNjYKKyNkZWZpbmUgX1NDXzJfUEJTX0NIRUNLUE9JTlQgICAgMHgwMDY3CisjZGVmaW5lIF9TQ18yX1BCU19MT0NBVEUgICAgICAgIDB4MDA2OAorI2RlZmluZSBfU0NfMl9QQlNfTUVTU0FHRSAgICAgICAweDAwNjkKKyNkZWZpbmUgX1NDXzJfUEJTX1RSQUNLICAgICAgICAgMHgwMDZhCisjZGVmaW5lIF9TQ19BRFZJU09SWV9JTkZPICAgICAgIDB4MDA2YgorI2RlZmluZSBfU0NfQkFSUklFUlMgICAgICAgICAgICAweDAwNmMKKyNkZWZpbmUgX1NDX0NMT0NLX1NFTEVDVElPTiAgICAgMHgwMDZkCisjZGVmaW5lIF9TQ19DUFVUSU1FICAgICAgICAgICAgIDB4MDA2ZQorI2RlZmluZSBfU0NfSE9TVF9OQU1FX01BWCAgICAgICAweDAwNmYKKyNkZWZpbmUgX1NDX0lQVjYgICAgICAgICAgICAgICAgMHgwMDcwCisjZGVmaW5lIF9TQ19SQVdfU09DS0VUUyAgICAgICAgIDB4MDA3MQorI2RlZmluZSBfU0NfUkVBREVSX1dSSVRFUl9MT0NLUyAweDAwNzIKKyNkZWZpbmUgX1NDX1JFR0VYUCAgICAgICAgICAgICAgMHgwMDczCisjZGVmaW5lIF9TQ19TSEVMTCAgICAgICAgICAgICAgIDB4MDA3NAorI2RlZmluZSBfU0NfU1BBV04gICAgICAgICAgICAgICAweDAwNzUKKyNkZWZpbmUgX1NDX1NQSU5fTE9DS1MgICAgICAgICAgMHgwMDc2CisjZGVmaW5lIF9TQ19TUE9SQURJQ19TRVJWRVIgICAgIDB4MDA3NworI2RlZmluZSBfU0NfU1NfUkVQTF9NQVggICAgICAgICAweDAwNzgKKyNkZWZpbmUgX1NDX1NZTUxPT1BfTUFYICAgICAgICAgMHgwMDc5CisjZGVmaW5lIF9TQ19USFJFQURfQ1BVVElNRSAgICAgIDB4MDA3YQorI2RlZmluZSBfU0NfVEhSRUFEX1BST0NFU1NfU0hBUkVEICAgICAgIDB4MDA3YgorI2RlZmluZSBfU0NfVEhSRUFEX1JPQlVTVF9QUklPX0lOSEVSSVQgIDB4MDA3YworI2RlZmluZSBfU0NfVEhSRUFEX1JPQlVTVF9QUklPX1BST1RFQ1QgIDB4MDA3ZAorI2RlZmluZSBfU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiAgICAgIDB4MDA3ZQorI2RlZmluZSBfU0NfVElNRU9VVFMgICAgICAgICAgICAweDAwN2YKKyNkZWZpbmUgX1NDX1RSQUNFICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIF9TQ19UUkFDRV9FVkVOVF9GSUxURVIgIDB4MDA4MQorI2RlZmluZSBfU0NfVFJBQ0VfRVZFTlRfTkFNRV9NQVggIDB4MDA4MgorI2RlZmluZSBfU0NfVFJBQ0VfSU5IRVJJVCAgICAgICAweDAwODMKKyNkZWZpbmUgX1NDX1RSQUNFX0xPRyAgICAgICAgICAgMHgwMDg0CisjZGVmaW5lIF9TQ19UUkFDRV9OQU1FX01BWCAgICAgIDB4MDA4NQorI2RlZmluZSBfU0NfVFJBQ0VfU1lTX01BWCAgICAgICAweDAwODYKKyNkZWZpbmUgX1NDX1RSQUNFX1VTRVJfRVZFTlRfTUFYICAweDAwODcKKyNkZWZpbmUgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTICAweDAwODgKKyNkZWZpbmUgX1NDX1Y3X0lMUDMyX09GRjMyICAgICAgMHgwMDg5CisjZGVmaW5lIF9TQ19WN19JTFAzMl9PRkZCSUcgICAgIDB4MDA4YQorI2RlZmluZSBfU0NfVjdfTFA2NF9PRkY2NCAgICAgICAweDAwOGIKKyNkZWZpbmUgX1NDX1Y3X0xQQklHX09GRkJJRyAgICAgMHgwMDhjCisjZGVmaW5lIF9TQ19YT1BFTl9TVFJFQU1TICAgICAgIDB4MDA4ZAorI2RlZmluZSBfU0NfWE9QRU5fVVVDUCAgICAgICAgICAweDAwOGUKKwogbG9uZyBzeXNjb25mKGludCk7CiAKIF9fRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3N5c2luZm8uaCBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzaW5mby5oCmluZGV4IGM3ZTQ2ZTYuLmI2NmJjOGUgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvc3lzaW5mby5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzaW5mby5oCkBAIC0zMyw3ICszMywxNSBAQAogCiBfX0JFR0lOX0RFQ0xTCiAKLWV4dGVybiBpbnQgc3lzaW5mbyAoc3RydWN0IHN5c2luZm8gKmluZm8pOworaW50IHN5c2luZm8oc3RydWN0IHN5c2luZm8qIGluZm8pOworCitpbnQgZ2V0X25wcm9jc19jb25mKHZvaWQpOworCitpbnQgZ2V0X25wcm9jcyh2b2lkKTsKKworbG9uZyBnZXRfcGh5c19wYWdlcyh2b2lkKTsKKworbG9uZyBnZXRfYXZwaHlzX3BhZ2VzKHZvaWQpOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3VzZXIuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdXNlci5oCmluZGV4IDBlMzY4MjUuLmIzNzBhZGQgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvdXNlci5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdXNlci5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4gLyogRm9yIFBBR0VfU0laRS4gKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4gLyogRm9yIHNpemVfdC4gKi8KIAogX19CRUdJTl9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3Zmcy5oIGIvbGliYy9pbmNsdWRlL3N5cy92ZnMuaAppbmRleCA1MzU4ZmZiLi4xZmJjOGJlIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3Zmcy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdmZzLmgKQEAgLTI1LDYgKzI1LDcgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBfU1lTX1ZGU19IXwogI2RlZmluZSBfU1lTX1ZGU19IXwogCkBAIC0xMTQsNTAgKzExNSwyNyBAQAogI2RlZmluZSBfU1RBVEZTX0ZfRlJTSVpFCiAjZGVmaW5lIF9TVEFURlNfRl9GTEFHUwogCi0jZGVmaW5lICBBREZTX1NVUEVSX01BR0lDICAgICAgMHhhZGY1Ci0jZGVmaW5lICBBRkZTX1NVUEVSX01BR0lDICAgICAgMHhBREZGCi0jZGVmaW5lICBCRUZTX1NVUEVSX01BR0lDICAgICAgMHg0MjQ2NTMzMQotI2RlZmluZSAgQkZTX01BR0lDICAgICAgICAgICAgIDB4MUJBREZBQ0UKLSNkZWZpbmUgIENJRlNfTUFHSUNfTlVNQkVSICAgICAweEZGNTM0RDQyCi0jZGVmaW5lICBDT0RBX1NVUEVSX01BR0lDICAgICAgMHg3Mzc1NzI0NQotI2RlZmluZSAgQ09IX1NVUEVSX01BR0lDICAgICAgIDB4MDEyRkY3QjcKLSNkZWZpbmUgIENSQU1GU19NQUdJQyAgICAgICAgICAweDI4Y2QzZDQ1Ci0jZGVmaW5lICBERVZGU19TVVBFUl9NQUdJQyAgICAgMHgxMzczCi0jZGVmaW5lICBFRlNfU1VQRVJfTUFHSUMgICAgICAgMHgwMDQxNEE1MwotI2RlZmluZSAgRVhUX1NVUEVSX01BR0lDICAgICAgIDB4MTM3RAotI2RlZmluZSAgRVhUMl9PTERfU1VQRVJfTUFHSUMgIDB4RUY1MQotI2RlZmluZSAgRVhUMl9TVVBFUl9NQUdJQyAgICAgIDB4RUY1MwotI2RlZmluZSAgRVhUM19TVVBFUl9NQUdJQyAgICAgIDB4RUY1MwotI2RlZmluZSAgSEZTX1NVUEVSX01BR0lDICAgICAgIDB4NDI0NAotI2RlZmluZSAgSFBGU19TVVBFUl9NQUdJQyAgICAgIDB4Rjk5NUU4NDkKLSNkZWZpbmUgIEhVR0VUTEJGU19NQUdJQyAgICAgICAweDk1ODQ1OGY2Ci0jZGVmaW5lICBJU09GU19TVVBFUl9NQUdJQyAgICAgMHg5NjYwCi0jZGVmaW5lICBKRkZTMl9TVVBFUl9NQUdJQyAgICAgMHg3MmI2Ci0jZGVmaW5lICBKRlNfU1VQRVJfTUFHSUMgICAgICAgMHgzMTUzNDY0YQotI2RlZmluZSAgTUlOSVhfU1VQRVJfTUFHSUMgICAgIDB4MTM3RiAvKiBvcmlnLiBtaW5peCAqLwotI2RlZmluZSAgTUlOSVhfU1VQRVJfTUFHSUMyICAgIDB4MTM4RiAvKiAzMCBjaGFyIG1pbml4ICovCi0jZGVmaW5lICBNSU5JWDJfU1VQRVJfTUFHSUMgICAgMHgyNDY4IC8qIG1pbml4IFYyICovCi0jZGVmaW5lICBNSU5JWDJfU1VQRVJfTUFHSUMyICAgMHgyNDc4IC8qIG1pbml4IFYyLCAzMCBjaGFyIG5hbWVzICovCi0jZGVmaW5lICBNU0RPU19TVVBFUl9NQUdJQyAgICAgMHg0ZDQ0Ci0jZGVmaW5lICBOQ1BfU1VQRVJfTUFHSUMgICAgICAgMHg1NjRjCi0jZGVmaW5lICBORlNfU1VQRVJfTUFHSUMgICAgICAgMHg2OTY5Ci0jZGVmaW5lICBOVEZTX1NCX01BR0lDICAgICAgICAgMHg1MzQ2NTQ0ZQotI2RlZmluZSAgT1BFTlBST01fU1VQRVJfTUFHSUMgIDB4OWZhMQotI2RlZmluZSAgUFJPQ19TVVBFUl9NQUdJQyAgICAgIDB4OWZhMAotI2RlZmluZSAgUU5YNF9TVVBFUl9NQUdJQyAgICAgIDB4MDAyZgotI2RlZmluZSAgUkVJU0VSRlNfU1VQRVJfTUFHSUMgIDB4NTI2NTQ5NzMKLSNkZWZpbmUgIFJPTUZTX01BR0lDICAgICAgICAgICAweDcyNzUKLSNkZWZpbmUgIFNNQl9TVVBFUl9NQUdJQyAgICAgICAweDUxN0IKLSNkZWZpbmUgIFNZU1YyX1NVUEVSX01BR0lDICAgICAweDAxMkZGN0I2Ci0jZGVmaW5lICBTWVNWNF9TVVBFUl9NQUdJQyAgICAgMHgwMTJGRjdCNQotI2RlZmluZSAgVE1QRlNfTUFHSUMgICAgICAgICAgIDB4MDEwMjE5OTQKLSNkZWZpbmUgIFVERl9TVVBFUl9NQUdJQyAgICAgICAweDE1MDEzMzQ2Ci0jZGVmaW5lICBVRlNfTUFHSUMgICAgICAgICAgICAgMHgwMDAxMTk1NAotI2RlZmluZSAgVVNCREVWSUNFX1NVUEVSX01BR0lDIDB4OWZhMgotI2RlZmluZSAgVlhGU19TVVBFUl9NQUdJQyAgICAgIDB4YTUwMUZDRjUKLSNkZWZpbmUgIFhFTklYX1NVUEVSX01BR0lDICAgICAweDAxMkZGN0I0Ci0jZGVmaW5lICBYRlNfU1VQRVJfTUFHSUMgICAgICAgMHg1ODQ2NTM0MgotI2RlZmluZSAgX1hJQUZTX1NVUEVSX01BR0lDICAgIDB4MDEyRkQxNkQKKy8qIFB1bGwgaW4gdGhlIGtlcm5lbCBtYWdpYyBudW1iZXJzLiAqLworI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisvKiBBZGQgaW4gb25lcyB0aGF0IHdlIGhhZCBoaXN0b3JpY2FsbHkgdGhhdCBhcmVuJ3QgaW4gdGhlIHVhcGkgaGVhZGVyLiAqLworI2RlZmluZSBCRUZTX1NVUEVSX01BR0lDICAgICAgMHg0MjQ2NTMzMQorI2RlZmluZSBCRlNfTUFHSUMgICAgICAgICAgICAgMHgxQkFERkFDRQorI2RlZmluZSBDSUZTX01BR0lDX05VTUJFUiAgICAgMHhGRjUzNEQ0MgorI2RlZmluZSBDT0hfU1VQRVJfTUFHSUMgICAgICAgMHgwMTJGRjdCNworI2RlZmluZSBERVZGU19TVVBFUl9NQUdJQyAgICAgMHgxMzczCisjZGVmaW5lIEVYVF9TVVBFUl9NQUdJQyAgICAgICAweDEzN0QKKyNkZWZpbmUgRVhUMl9PTERfU1VQRVJfTUFHSUMgIDB4RUY1MQorI2RlZmluZSBIRlNfU1VQRVJfTUFHSUMgICAgICAgMHg0MjQ0CisjZGVmaW5lIEpGU19TVVBFUl9NQUdJQyAgICAgICAweDMxNTM0NjRhCisjZGVmaW5lIE5URlNfU0JfTUFHSUMgICAgICAgICAweDUzNDY1NDRlCisjZGVmaW5lIFJPTUZTX01BR0lDICAgICAgICAgICAweDcyNzUKKyNkZWZpbmUgU1lTVjJfU1VQRVJfTUFHSUMgICAgIDB4MDEyRkY3QjYKKyNkZWZpbmUgU1lTVjRfU1VQRVJfTUFHSUMgICAgIDB4MDEyRkY3QjUKKyNkZWZpbmUgVURGX1NVUEVSX01BR0lDICAgICAgIDB4MTUwMTMzNDYKKyNkZWZpbmUgVUZTX01BR0lDICAgICAgICAgICAgIDB4MDAwMTE5NTQKKyNkZWZpbmUgVlhGU19TVVBFUl9NQUdJQyAgICAgIDB4YTUwMUZDRjUKKyNkZWZpbmUgWEVOSVhfU1VQRVJfTUFHSUMgICAgIDB4MDEyRkY3QjQKKyNkZWZpbmUgWEZTX1NVUEVSX01BR0lDICAgICAgIDB4NTg0NjUzNDIKIAogZXh0ZXJuIGludCBzdGF0ZnMoY29uc3QgY2hhciosIHN0cnVjdCBzdGF0ZnMqKSBfX25vbm51bGwoKDEsIDIpKTsKIGV4dGVybiBpbnQgc3RhdGZzNjQoY29uc3QgY2hhciosIHN0cnVjdCBzdGF0ZnM2NCopIF9fbm9ubnVsbCgoMSwgMikpOwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3RpbWUuaCBiL2xpYmMvaW5jbHVkZS90aW1lLmgKaW5kZXggMzRhNTNiMi4uMWIwZjZhMSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3RpbWUuaAorKysgYi9saWJjL2luY2x1ZGUvdGltZS5oCkBAIC04NSw4ICs4NSwxMiBAQAogCiBleHRlcm4gY2xvY2tfdCBjbG9jayh2b2lkKSBfX0xJQkNfQUJJX1BVQkxJQ19fOwogCi1leHRlcm4gaW50IGNsb2NrX2dldHJlcyhpbnQsIHN0cnVjdCB0aW1lc3BlYyopIF9fTElCQ19BQklfUFVCTElDX187Ci1leHRlcm4gaW50IGNsb2NrX2dldHRpbWUoaW50LCBzdHJ1Y3QgdGltZXNwZWMqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIGludCBjbG9ja19nZXRjcHVjbG9ja2lkKHBpZF90LCBjbG9ja2lkX3QqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworCitleHRlcm4gaW50IGNsb2NrX2dldHJlcyhjbG9ja2lkX3QsIHN0cnVjdCB0aW1lc3BlYyopIF9fTElCQ19BQklfUFVCTElDX187CitleHRlcm4gaW50IGNsb2NrX2dldHRpbWUoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAoY2xvY2tpZF90LCBpbnQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyosIHN0cnVjdCB0aW1lc3BlYyopIF9fTElCQ19BQklfUFVCTElDX187CitleHRlcm4gaW50IGNsb2NrX3NldHRpbWUoY2xvY2tpZF90LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOwogCiBleHRlcm4gaW50IHRpbWVyX2NyZWF0ZShpbnQsIHN0cnVjdCBzaWdldmVudCosIHRpbWVyX3QqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOwogZXh0ZXJuIGludCB0aW1lcl9kZWxldGUodGltZXJfdCkgX19MSUJDX0FCSV9QVUJMSUNfXzsKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS91bmlzdGQuaCBiL2xpYmMvaW5jbHVkZS91bmlzdGQuaAppbmRleCAxYmZkYjBlLi5lOTRlZTY2IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvdW5pc3RkLmgKKysrIGIvbGliYy9pbmNsdWRlL3VuaXN0ZC5oCkBAIC0yNSw2ICsyNSw3IEBACiAgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYgX1VOSVNURF9IXwogI2RlZmluZSBfVU5JU1REX0hfCiAKQEAgLTMzLDcgKzM0LDYgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjaW5jbHVkZSA8c3lzL3N5c2NvbmYuaD4KLSNpbmNsdWRlIDxwYXRoY29uZi5oPgogCiBfX0JFR0lOX0RFQ0xTCiAKQEAgLTQ3LDYgKzQ3LDI5IEBACiAjZGVmaW5lIFNFRUtfQ1VSIDEKICNkZWZpbmUgU0VFS19FTkQgMgogCisjZGVmaW5lIF9QQ19GSUxFU0laRUJJVFMgMAorI2RlZmluZSBfUENfTElOS19NQVggMQorI2RlZmluZSBfUENfTUFYX0NBTk9OIDIKKyNkZWZpbmUgX1BDX01BWF9JTlBVVCAzCisjZGVmaW5lIF9QQ19OQU1FX01BWCA0CisjZGVmaW5lIF9QQ19QQVRIX01BWCA1CisjZGVmaW5lIF9QQ19QSVBFX0JVRiA2CisjZGVmaW5lIF9QQ18yX1NZTUxJTktTIDcKKyNkZWZpbmUgX1BDX0FMTE9DX1NJWkVfTUlOIDgKKyNkZWZpbmUgX1BDX1JFQ19JTkNSX1hGRVJfU0laRSA5CisjZGVmaW5lIF9QQ19SRUNfTUFYX1hGRVJfU0laRSAxMAorI2RlZmluZSBfUENfUkVDX01JTl9YRkVSX1NJWkUgMTEKKyNkZWZpbmUgX1BDX1JFQ19YRkVSX0FMSUdOIDEyCisjZGVmaW5lIF9QQ19TWU1MSU5LX01BWCAxMworI2RlZmluZSBfUENfQ0hPV05fUkVTVFJJQ1RFRCAxNAorI2RlZmluZSBfUENfTk9fVFJVTkMgMTUKKyNkZWZpbmUgX1BDX1ZESVNBQkxFIDE2CisjZGVmaW5lIF9QQ19BU1lOQ19JTyAxNworI2RlZmluZSBfUENfUFJJT19JTyAxOAorI2RlZmluZSBfUENfU1lOQ19JTyAxOQorCisjaW5jbHVkZSA8bWFjaGluZS9wb3NpeF9saW1pdHMuaD4KKwogZXh0ZXJuIGNoYXIqKiBlbnZpcm9uOwogCiBleHRlcm4gX19ub3JldHVybiB2b2lkIF9leGl0KGludCk7CkBAIC05NSw2ICsxMTgsOSBAQAogZXh0ZXJuIHZvaWQgZW5kdXNlcnNoZWxsKHZvaWQpOwogCiAKK2V4dGVybiBsb25nIGZwYXRoY29uZihpbnQsIGludCk7CitleHRlcm4gbG9uZyBwYXRoY29uZihjb25zdCBjaGFyKiwgaW50KTsKKwogCiAvKiBNYWNyb3MgZm9yIGFjY2VzcygpICovCiAjZGVmaW5lIFJfT0sgIDQgIC8qIFJlYWQgKi8KQEAgLTExMiw3ICsxMzgsNyBAQAogZXh0ZXJuIGludCBmY2hkaXIoaW50KTsKIGV4dGVybiBpbnQgcm1kaXIoY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgcGlwZShpbnQgKik7Ci0jaWZkZWYgX0dOVV9TT1VSQ0UKKyNpZiBkZWZpbmVkKF9fVVNFX0dOVSkKIGV4dGVybiBpbnQgcGlwZTIoaW50ICosIGludCk7CiAjZW5kaWYKIGV4dGVybiBpbnQgY2hyb290KGNvbnN0IGNoYXIgKik7CkBAIC0xNDMsOSArMTY5LDcgQEAKIAogZXh0ZXJuIGludCBkdXAoaW50KTsKIGV4dGVybiBpbnQgZHVwMihpbnQsIGludCk7Ci0jaWZkZWYgX0dOVV9TT1VSQ0UKIGV4dGVybiBpbnQgZHVwMyhpbnQsIGludCwgaW50KTsKLSNlbmRpZgogZXh0ZXJuIGludCBmY250bChpbnQsIGludCwgLi4uKTsKIGV4dGVybiBpbnQgaW9jdGwoaW50LCBpbnQsIC4uLik7CiBleHRlcm4gaW50IGZsb2NrKGludCwgaW50KTsKQEAgLTE1OSw3ICsxODMsOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBzbGVlcCh1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludCB1c2xlZXAodXNlY29uZHNfdCk7CiAKLWV4dGVybiBpbnQgZ2V0aG9zdG5hbWUoY2hhciAqLCBzaXplX3QpOworaW50IGdldGhvc3RuYW1lKGNoYXIqLCBzaXplX3QpOworaW50IHNldGhvc3RuYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QpOwogCiBleHRlcm4gdm9pZCAqX19icmsodm9pZCAqKTsKIGV4dGVybiBpbnQgYnJrKHZvaWQgKik7CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvd2NoYXIuaCBiL2xpYmMvaW5jbHVkZS93Y2hhci5oCmluZGV4IGUwZTVjODIuLmNmZDIyOTkgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS93Y2hhci5oCisrKyBiL2xpYmMvaW5jbHVkZS93Y2hhci5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHhsb2NhbGUuaD4KIAogI2luY2x1ZGUgPG1hY2hpbmUvd2NoYXJfbGltaXRzLmg+CiAKQEAgLTExMCw4ICsxMTEsMTEgQEAKIGV4dGVybiBpbnQgdnN3c2NhbmYoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCB2YV9saXN0KTsKIGV4dGVybiBpbnQgdndwcmludGYoY29uc3Qgd2NoYXJfdCosIHZhX2xpc3QpOwogZXh0ZXJuIGludCB2d3NjYW5mKGNvbnN0IHdjaGFyX3QqLCB2YV9saXN0KTsKK2V4dGVybiB3Y2hhcl90KiB3Y3BjcHkgKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90ICopOworZXh0ZXJuIHdjaGFyX3QqIHdjcG5jcHkgKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiBleHRlcm4gc2l6ZV90ICAgICAgICAgICAgd2NydG9tYihjaGFyICosIHdjaGFyX3QsIG1ic3RhdGVfdCAqKTsKIGV4dGVybiBpbnQgICAgICAgICAgICAgICB3Y3NjYXNlY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICB3Y3NjYXNlY21wX2woY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIGxvY2FsZV90KTsKIGV4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NjYXQod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwogZXh0ZXJuIHdjaGFyX3QgICAgICAgICAgKndjc2Nocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOwogZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdjc2NtcChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CkBAIC0xMjEsNiArMTI1LDcgQEAKIGV4dGVybiBzaXplX3QgICAgICAgICAgICB3Y3NmdGltZSh3Y2hhcl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCBjb25zdCBzdHJ1Y3QgdG0gKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKIGV4dGVybiBzaXplX3QgICAgICAgICAgICB3Y3NsZW4oY29uc3Qgd2NoYXJfdCAqKTsKIGV4dGVybiBpbnQgICAgICAgICAgICAgICB3Y3NuY2FzZWNtcChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICB3Y3NuY2FzZWNtcF9sKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QsIGxvY2FsZV90KTsKIGV4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NuY2F0KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdjc25jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiBleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2NzbmNweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKQEAgLTE2Niw2ICsxNzEsNyBAQAogZXh0ZXJuIHdjdHJhbnNfdCB3Y3RyYW5zKGNvbnN0IGNoYXIqKTsKIAogI2lmIF9fUE9TSVhfVklTSUJMRSA+PSAyMDA4MDkKK0ZJTEUqIG9wZW5fd21lbXN0cmVhbSh3Y2hhcl90KiosIHNpemVfdCopOwogd2NoYXJfdCogd2NzZHVwKGNvbnN0IHdjaGFyX3QqKTsKIHNpemVfdCB3Y3NubGVuKGNvbnN0IHdjaGFyX3QqLCBzaXplX3QpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC90b29scy9jbGVhbl9oZWFkZXIucHkgYi9saWJjL2tlcm5lbC90b29scy9jbGVhbl9oZWFkZXIucHkKaW5kZXggNjYwMTgxNy4uZWJlYmU4MCAxMDA3NTUKLS0tIGEvbGliYy9rZXJuZWwvdG9vbHMvY2xlYW5faGVhZGVyLnB5CisrKyBiL2xpYmMva2VybmVsL3Rvb2xzL2NsZWFuX2hlYWRlci5weQpAQCAtMTk5LDggKzE5OSw3IEBACiAgICAgICAgIGlmIG9wdCA9PSAnLXUnOgogICAgICAgICAgICAgbm9VcGRhdGUgPSAwCiAgICAgICAgIGVsaWYgb3B0ID09ICctdic6Ci0gICAgICAgICAgICB2ZXJib3NlID0gMQotICAgICAgICAgICAgRF9zZXRsZXZlbCgxKQorICAgICAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLkRFQlVHKQogICAgICAgICBlbGlmIG9wdCA9PSAnLWsnOgogICAgICAgICAgICAga2VybmVsX29yaWdpbmFsX3BhdGggPSBhcmcKICAgICAgICAgZWxpZiBvcHQgPT0gJy1kJzoKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3Rvb2xzL2NwcC5weSBiL2xpYmMva2VybmVsL3Rvb2xzL2NwcC5weQppbmRleCAyYmU5NTMyLi4wYzA5OGRlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC90b29scy9jcHAucHkKKysrIGIvbGliYy9rZXJuZWwvdG9vbHMvY3BwLnB5CkBAIC0xNzExLDcgKzE3MTEsNyBAQAogICAgICAgICB3aGlsZSBqIDwgbiBhbmQgbm90IGJsb2Nrc1tqXS5pc0lmKCk6CiAgICAgICAgICAgICBqICs9IDEKICAgICAgICAgaWYgaiA+IGk6Ci0gICAgICAgICAgICBEMigiYXBwZW5kaW5nIGxpbmVzICVkIHRvICVkIiAlIChibG9ja3NbaV0ubGluZW5vLCBibG9ja3Nbai0xXS5saW5lbm8pKQorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiYXBwZW5kaW5nIGxpbmVzICVkIHRvICVkIiAlIChibG9ja3NbaV0ubGluZW5vLCBibG9ja3Nbai0xXS5saW5lbm8pKQogICAgICAgICAgICAgcmVzdWx0ICs9IGJsb2Nrc1tpOmpdCiAgICAgICAgIGlmIGogPj0gbjoKICAgICAgICAgICAgIGJyZWFrCkBAIC0xNzMwLDE3ICsxNzMwLDE3IEBACiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGRpciA9IGJsb2Nrc1tqXS5kaXJlY3RpdmUKICAgICAgICAgICAgIGlmIGRpciA9PSAiZW5kaWYiOgotICAgICAgICAgICAgICAgIEQyKCJyZW1vdmUgJ2lmIDAnIC4uICdlbmRpZicgKGxpbmVzICVkIHRvICVkKSIgJSAoYmxvY2tzW2ldLmxpbmVubywgYmxvY2tzW2pdLmxpbmVubykpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygicmVtb3ZlICdpZiAwJyAuLiAnZW5kaWYnIChsaW5lcyAlZCB0byAlZCkiICUgKGJsb2Nrc1tpXS5saW5lbm8sIGJsb2Nrc1tqXS5saW5lbm8pKQogICAgICAgICAgICAgICAgIGkgPSBqICsgMQogICAgICAgICAgICAgZWxpZiBkaXIgPT0gImVsc2UiOgogICAgICAgICAgICAgICAgICMgY29udmVydCAnZWxzZScgaW50byAnaWYgMScKLSAgICAgICAgICAgICAgICBEMigiY29udmVydCAnaWYgMCcgLi4gJ2Vsc2UnIGludG8gJ2lmIDEnIChsaW5lcyAlZCB0byAlZCkiICUgKGJsb2Nrc1tpXS5saW5lbm8sIGJsb2Nrc1tqLTFdLmxpbmVubykpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiY29udmVydCAnaWYgMCcgLi4gJ2Vsc2UnIGludG8gJ2lmIDEnIChsaW5lcyAlZCB0byAlZCkiICUgKGJsb2Nrc1tpXS5saW5lbm8sIGJsb2Nrc1tqLTFdLmxpbmVubykpCiAgICAgICAgICAgICAgICAgYmxvY2tzW2pdLmRpcmVjdGl2ZSA9ICJpZiIKICAgICAgICAgICAgICAgICBibG9ja3Nbal0uZXhwciAgICAgID0gQ3BwRXhwciggQ3BwTGluZVRva2VuaXplcigiMSIpLnRvVG9rZW5MaXN0KCkgKQogICAgICAgICAgICAgICAgIGkgPSBqCiAgICAgICAgICAgICBlbGlmIGRpciA9PSAiZWxpZiI6CiAgICAgICAgICAgICAgICAgIyBjb252ZXJ0ICdlbGlmJyBpbnRvICdpZicKLSAgICAgICAgICAgICAgICBEMigiY29udmVydCAnaWYgMCcgLi4gJ2VsaWYnIGludG8gJ2lmJyIpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiY29udmVydCAnaWYgMCcgLi4gJ2VsaWYnIGludG8gJ2lmJyIpCiAgICAgICAgICAgICAgICAgYmxvY2tzW2pdLmRpcmVjdGl2ZSA9ICJpZiIKICAgICAgICAgICAgICAgICBpID0gagogICAgICAgICAgICAgY29udGludWUKQEAgLTE3NDksMjUgKzE3NDksMjUgQEAKICAgICAgICAgayA9IGZpbmRfbWF0Y2hpbmdfZW5kaWYoIGJsb2NrcywgaisxICkKICAgICAgICAgaWYgayA+PSBuOgogICAgICAgICAgICAgIyB1bnRlcm1pbmF0ZWQgI2lmIDEsIGZpbmlzaCBoZXJlCi0gICAgICAgICAgICBEMigidW50ZXJtaW5hdGVkICdpZiAxJyIpCisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJ1bnRlcm1pbmF0ZWQgJ2lmIDEnIikKICAgICAgICAgICAgIHJlc3VsdCArPSBibG9ja3NbaisxOmtdCiAgICAgICAgICAgICBicmVhawogCiAgICAgICAgIGRpciA9IGJsb2Nrc1trXS5kaXJlY3RpdmUKICAgICAgICAgaWYgZGlyID09ICJlbmRpZiI6Ci0gICAgICAgICAgICBEMigiY29udmVydCAnaWYgMScgLi4gJ2VuZGlmJyAobGluZXMgJWQgdG8gJWQpIiAgJSAoYmxvY2tzW2pdLmxpbmVubywgYmxvY2tzW2tdLmxpbmVubykpCisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJjb252ZXJ0ICdpZiAxJyAuLiAnZW5kaWYnIChsaW5lcyAlZCB0byAlZCkiICAlIChibG9ja3Nbal0ubGluZW5vLCBibG9ja3Nba10ubGluZW5vKSkKICAgICAgICAgICAgIHJlc3VsdCArPSBvcHRpbWl6ZV9pZjAxKGJsb2Nrc1tqKzE6a10pCiAgICAgICAgICAgICBpICAgICAgID0gaysxCiAgICAgICAgIGVsaWYgZGlyID09ICJlbHNlIjoKICAgICAgICAgICAgICMgY29udmVydCAnZWxzZScgaW50byAnaWYgMCcKLSAgICAgICAgICAgIEQyKCJjb252ZXJ0ICdpZiAxJyAuLiAnZWxzZScgKGxpbmVzICVkIHRvICVkKSIgICUgKGJsb2Nrc1tqXS5saW5lbm8sIGJsb2Nrc1trXS5saW5lbm8pKQorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiY29udmVydCAnaWYgMScgLi4gJ2Vsc2UnIChsaW5lcyAlZCB0byAlZCkiICAlIChibG9ja3Nbal0ubGluZW5vLCBibG9ja3Nba10ubGluZW5vKSkKICAgICAgICAgICAgIHJlc3VsdCArPSBvcHRpbWl6ZV9pZjAxKGJsb2Nrc1tqKzE6a10pCiAgICAgICAgICAgICBibG9ja3Nba10uZGlyZWN0aXZlID0gImlmIgogICAgICAgICAgICAgYmxvY2tzW2tdLmV4cHIgICAgICA9IENwcEV4cHIoIENwcExpbmVUb2tlbml6ZXIoIjAiKS50b1Rva2VuTGlzdCgpICkKICAgICAgICAgICAgIGkgPSBrCiAgICAgICAgIGVsaWYgZGlyID09ICJlbGlmIjoKICAgICAgICAgICAgICMgY29udmVydCAnZWxpZicgaW50byAnaWYgMCcKLSAgICAgICAgICAgIEQyKCJjb252ZXJ0ICdpZiAxJyAuLiAnZWxpZicgKGxpbmVzICVkIHRvICVkKSIgJSAoYmxvY2tzW2pdLmxpbmVubywgYmxvY2tzW2tdLmxpbmVubykpCisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJjb252ZXJ0ICdpZiAxJyAuLiAnZWxpZicgKGxpbmVzICVkIHRvICVkKSIgJSAoYmxvY2tzW2pdLmxpbmVubywgYmxvY2tzW2tdLmxpbmVubykpCiAgICAgICAgICAgICByZXN1bHQgKz0gb3B0aW1pemVfaWYwMShibG9ja3NbaisxOmtdKQogICAgICAgICAgICAgYmxvY2tzW2tdLmV4cHIgICAgICA9IENwcEV4cHIoIENwcExpbmVUb2tlbml6ZXIoIjAiKS50b1Rva2VuTGlzdCgpICkKICAgICAgICAgICAgIGkgPSBrCkBAIC0xODM1LDcgKzE4MzUsNiBAQAogICAgIG91dCA9IFN0cmluZ091dHB1dCgpCiAgICAgbGluZXMgPSBzdHJpbmcuc3BsaXQodGV4dCwgJ1xuJykKICAgICBsaXN0ID0gQmxvY2tQYXJzZXIoKS5wYXJzZSggQ3BwTGluZXNUb2tlbml6ZXIobGluZXMpICkKLSAgICAjRF9zZXRsZXZlbCgyKQogICAgIGxpc3QucmVwbGFjZVRva2Vucygga2VybmVsX3Rva2VuX3JlcGxhY2VtZW50cyApCiAgICAgbGlzdC5vcHRpbWl6ZUFsbCggeyJfX0tFUk5FTF9fIjprQ3BwVW5kZWZpbmVkTWFjcm99ICkKICAgICBsaXN0LndyaXRlKG91dCkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3Rvb2xzL3V0aWxzLnB5IGIvbGliYy9rZXJuZWwvdG9vbHMvdXRpbHMucHkKaW5kZXggMDQ3OGU5My4uZTVhMzEwZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdG9vbHMvdXRpbHMucHkKKysrIGIvbGliYy9rZXJuZWwvdG9vbHMvdXRpbHMucHkKQEAgLTEsNTkgKzEsMjkgQEAKICMgY29tbW9uIHB5dGhvbiB1dGlsaXR5IHJvdXRpbmVzIGZvciB0aGUgQmlvbmljIHRvb2wgc2NyaXB0cwogCi1pbXBvcnQgc3lzLCBvcywgY29tbWFuZHMsIHN0cmluZywgY29tbWFuZHMKK2ltcG9ydCBjb21tYW5kcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN0cmluZworaW1wb3J0IHN5cwogCi0jIGJhc2ljIGRlYnVnZ2luZyB0cmFjZSBzdXBwb3J0Ci0jIGNhbGwgRF9zZXRsZXZlbCB0byBzZXQgdGhlIHZlcmJvc2l0eSBsZXZlbAotIyBhbmQgRCgpLCBEMigpLCBEMygpLCBENCgpIHRvIGFkZCB0cmFjZXMKLSMKLXZlcmJvc2UgPSAwCiAKIGRlZiBwYW5pYyhtc2cpOgotICAgIHN5cy5zdGRlcnIud3JpdGUoIGZpbmRfcHJvZ3JhbV9uYW1lKCkgKyAiOiBlcnJvcjogIiApCi0gICAgc3lzLnN0ZGVyci53cml0ZSggbXNnICkKKyAgICBzeXMuc3RkZXJyLndyaXRlKG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pICsgIjogZXJyb3I6ICIpCisgICAgc3lzLnN0ZGVyci53cml0ZShtc2cpCiAgICAgc3lzLmV4aXQoMSkKIAotZGVmIEQobXNnKToKLSAgICBnbG9iYWwgdmVyYm9zZQotICAgIGlmIHZlcmJvc2UgPiAwOgotICAgICAgICBwcmludCBtc2cKLQotZGVmIEQyKG1zZyk6Ci0gICAgZ2xvYmFsIHZlcmJvc2UKLSAgICBpZiB2ZXJib3NlID49IDI6Ci0gICAgICAgIHByaW50IG1zZwotCi1kZWYgRDMobXNnKToKLSAgICBnbG9iYWwgdmVyYm9zZQotICAgIGlmIHZlcmJvc2UgPj0gMzoKLSAgICAgICAgcHJpbnQgbXNnCi0KLWRlZiBENChtc2cpOgotICAgIGdsb2JhbCB2ZXJib3NlCi0gICAgaWYgdmVyYm9zZSA+PSA0OgotICAgICAgICBwcmludCBtc2cKLQotZGVmIERfc2V0bGV2ZWwobGV2ZWwpOgotICAgIGdsb2JhbCB2ZXJib3NlCi0gICAgdmVyYm9zZSA9IGxldmVsCi0KLQotIyAgb3RoZXIgc3R1ZmYKLSMKLSMKLWRlZiBmaW5kX3Byb2dyYW1fbmFtZSgpOgotICAgIHJldHVybiBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQogCiBkZWYgZmluZF9wcm9ncmFtX2RpcigpOgogICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pCiAKKwogY2xhc3MgU3RyaW5nT3V0cHV0OgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5saW5lID0gIiIKIAogICAgIGRlZiB3cml0ZShzZWxmLG1zZyk6CiAgICAgICAgIHNlbGYubGluZSArPSBtc2cKLSAgICAgICAgRDIoIndyaXRlICclcyciICUgbXNnKQorICAgICAgICBsb2dnaW5nLmRlYnVnKCJ3cml0ZSAnJXMnIiAlIG1zZykKIAogICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmxpbmUKQEAgLTc2LDQ3ICs0Niw2IEBACiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBvcy5ta2RpcihkaXIpCiAKLWRlZiB3YWxrX3NvdXJjZV9maWxlcyhwYXRocyxjYWxsYmFjayxhcmdzLGV4Y2x1ZGVzPVtdKToKLSAgICAiIiJyZWN1cnNpdmVseSB3YWxrIGEgbGlzdCBvZiBwYXRocyBhbmQgZmlsZXMsIG9ubHkga2VlcGluZyB0aGUgc291cmNlIGZpbGVzIGluIGRpcmVjdG9yaWVzIiIiCi0gICAgZm9yIHBhdGggaW4gcGF0aHM6Ci0gICAgICAgIGlmIGxlbihwYXRoKSA+IDAgYW5kIHBhdGhbMF0gPT0gJ0AnOgotICAgICAgICAgICAgIyB0aGlzIGlzIHRoZSBuYW1lIG9mIGFub3RoZXIgZmlsZSwgaW5jbHVkZSBpdCBhbmQgcGFyc2UgaXQKLSAgICAgICAgICAgIHBhdGggPSBwYXRoWzE6XQotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6Ci0gICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3BlbihwYXRoKToKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gMCBhbmQgbGluZVstMV0gPT0gJ1xuJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KLSAgICAgICAgICAgICAgICAgICAgd2Fsa19zb3VyY2VfZmlsZXMoW2xpbmVdLGNhbGxiYWNrLGFyZ3MsZXhjbHVkZXMpCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihwYXRoKToKLSAgICAgICAgICAgIGNhbGxiYWNrKHBhdGgsYXJncykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgotICAgICAgICAgICAgICAgICNwcmludCAidy0tICVzIChleDogJXMpIiAlIChyZXByKChyb290LGRpcnMpKSwgcmVwcihleGNsdWRlcykpCi0gICAgICAgICAgICAgICAgaWYgbGVuKGV4Y2x1ZGVzKToKLSAgICAgICAgICAgICAgICAgICAgZm9yIGQgaW4gZGlyc1s6XToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguam9pbihyb290LGQpIGluIGV4Y2x1ZGVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcnMucmVtb3ZlKGQpCi0gICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6Ci0gICAgICAgICAgICAgICAgICAgIHIsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZikKLSAgICAgICAgICAgICAgICAgICAgaWYgZXh0IGluIFsgIi5oIiwgIi5jIiwgIi5jcHAiLCAiLlMiIF06Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayggIiVzLyVzIiAlIChyb290LGYpLCBhcmdzICkKLQotZGVmIGNsZWFudXBfZGlyKHBhdGgpOgotICAgICIiImNyZWF0ZSBhIGRpcmVjdG9yeSBpZiBuZWVkZWQsIGFuZCBlbnN1cmUgdGhhdCBpdCBpcyB0b3RhbGx5IGVtcHR5Ci0gICAgICAgYnkgcmVtb3ZpbmcgYW55IGV4aXN0aW5nIGNvbnRlbnQgaW4gaXQiIiIKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6Ci0gICAgICAgIG9zLm1rZGlyKHBhdGgpCi0gICAgZWxzZToKLSAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCwgdG9wZG93bj1GYWxzZSk6Ci0gICAgICAgICAgICBpZiByb290LmVuZHN3aXRoKCJrZXJuZWxfaGVhZGVycy8iKToKLSAgICAgICAgICAgICAgICAjIHNraXAgJ2tlcm5lbF9oZWFkZXJzJwotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQotICAgICAgICAgICAgZm9yIG5hbWUgaW4gZGlyczoKLSAgICAgICAgICAgICAgICBvcy5ybWRpcihvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCi0KIAogY2xhc3MgQmF0Y2hGaWxlVXBkYXRlcjoKICAgICAiIiJhIGNsYXNzIHVzZWQgdG8gZWRpdCBzZXZlcmFsIGZpbGVzIGF0IG9uY2UiIiIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vaHdjYXAuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vaHdjYXAuaAppbmRleCBlNzBmM2I4Li4yNWRjOTMwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL2h3Y2FwLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9od2NhcC5oCkBAIC00Nyw0ICs0NywxMCBAQAogI2RlZmluZSBIV0NBUF9MUEFFICgxIDw8IDIwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFdDQVBfRVZUU1RSTSAoMSA8PCAyMSkKKyNkZWZpbmUgSFdDQVAyX0FFUyAoMSA8PCAwKQorI2RlZmluZSBIV0NBUDJfUE1VTEwgKDEgPDwgMSkKKyNkZWZpbmUgSFdDQVAyX1NIQTEgKDEgPDwgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhXQ0FQMl9TSEEyICgxIDw8IDMpCisjZGVmaW5lIEhXQ0FQMl9DUkMzMiAoMSA8PCA0KQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL2t2bS5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9rdm0uaAppbmRleCAyYjVhMTdlLi4zNTk5ZmY3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL2t2bS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20va3ZtLmgKQEAgLTE5LDE2MiArMTksMTY1IEBACiAjaWZuZGVmIF9fQVJNX0tWTV9IX18KICNkZWZpbmUgX19BUk1fS1ZNX0hfXwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BzY2kuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2RlZmluZSBfX0tWTV9IQVZFX0dVRVNUX0RFQlVHCiAjZGVmaW5lIF9fS1ZNX0hBVkVfSVJRX0xJTkUKICNkZWZpbmUgS1ZNX1JFR19TSVpFKGlkKSAgICgxVSA8PCAoKChpZCkgJiBLVk1fUkVHX1NJWkVfTUFTSykgPj4gS1ZNX1JFR19TSVpFX1NISUZUKSkKLSNkZWZpbmUgS1ZNX0FSTV9TVkNfc3Agc3ZjX3JlZ3NbMF0KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BUk1fU1ZDX3NwIHN2Y19yZWdzWzBdCiAjZGVmaW5lIEtWTV9BUk1fU1ZDX2xyIHN2Y19yZWdzWzFdCiAjZGVmaW5lIEtWTV9BUk1fU1ZDX3Nwc3Igc3ZjX3JlZ3NbMl0KICNkZWZpbmUgS1ZNX0FSTV9BQlRfc3AgYWJ0X3JlZ3NbMF0KLSNkZWZpbmUgS1ZNX0FSTV9BQlRfbHIgYWJ0X3JlZ3NbMV0KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BUk1fQUJUX2xyIGFidF9yZWdzWzFdCiAjZGVmaW5lIEtWTV9BUk1fQUJUX3Nwc3IgYWJ0X3JlZ3NbMl0KICNkZWZpbmUgS1ZNX0FSTV9VTkRfc3AgdW5kX3JlZ3NbMF0KICNkZWZpbmUgS1ZNX0FSTV9VTkRfbHIgdW5kX3JlZ3NbMV0KLSNkZWZpbmUgS1ZNX0FSTV9VTkRfc3BzciB1bmRfcmVnc1syXQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0FSTV9VTkRfc3BzciB1bmRfcmVnc1syXQogI2RlZmluZSBLVk1fQVJNX0lSUV9zcCBpcnFfcmVnc1swXQogI2RlZmluZSBLVk1fQVJNX0lSUV9sciBpcnFfcmVnc1sxXQogI2RlZmluZSBLVk1fQVJNX0lSUV9zcHNyIGlycV9yZWdzWzJdCi0jZGVmaW5lIEtWTV9BUk1fRklRX3I4IGZpcV9yZWdzWzBdCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fQVJNX0ZJUV9yOCBmaXFfcmVnc1swXQogI2RlZmluZSBLVk1fQVJNX0ZJUV9yOSBmaXFfcmVnc1sxXQogI2RlZmluZSBLVk1fQVJNX0ZJUV9yMTAgZmlxX3JlZ3NbMl0KICNkZWZpbmUgS1ZNX0FSTV9GSVFfZnAgZmlxX3JlZ3NbM10KLSNkZWZpbmUgS1ZNX0FSTV9GSVFfaXAgZmlxX3JlZ3NbNF0KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BUk1fRklRX2lwIGZpcV9yZWdzWzRdCiAjZGVmaW5lIEtWTV9BUk1fRklRX3NwIGZpcV9yZWdzWzVdCiAjZGVmaW5lIEtWTV9BUk1fRklRX2xyIGZpcV9yZWdzWzZdCiAjZGVmaW5lIEtWTV9BUk1fRklRX3Nwc3IgZmlxX3JlZ3NbN10KLXN0cnVjdCBrdm1fcmVncyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGt2bV9yZWdzIHsKICBzdHJ1Y3QgcHRfcmVncyB1c3JfcmVnczsKICB1bnNpZ25lZCBsb25nIHN2Y19yZWdzWzNdOwogIHVuc2lnbmVkIGxvbmcgYWJ0X3JlZ3NbM107Ci0gdW5zaWduZWQgbG9uZyB1bmRfcmVnc1szXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgbG9uZyB1bmRfcmVnc1szXTsKICB1bnNpZ25lZCBsb25nIGlycV9yZWdzWzNdOwogIHVuc2lnbmVkIGxvbmcgZmlxX3JlZ3NbOF07CiB9OwotI2RlZmluZSBLVk1fQVJNX1RBUkdFVF9DT1JURVhfQTE1IDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BUk1fVEFSR0VUX0NPUlRFWF9BMTUgMAogI2RlZmluZSBLVk1fQVJNX1RBUkdFVF9DT1JURVhfQTcgMQogI2RlZmluZSBLVk1fQVJNX05VTV9UQVJHRVRTIDIKICNkZWZpbmUgS1ZNX0FSTV9ERVZJQ0VfVFlQRV9TSElGVCAwCi0jZGVmaW5lIEtWTV9BUk1fREVWSUNFX1RZUEVfTUFTSyAoMHhmZmZmIDw8IEtWTV9BUk1fREVWSUNFX1RZUEVfU0hJRlQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fQVJNX0RFVklDRV9UWVBFX01BU0sgKDB4ZmZmZiA8PCBLVk1fQVJNX0RFVklDRV9UWVBFX1NISUZUKQogI2RlZmluZSBLVk1fQVJNX0RFVklDRV9JRF9TSElGVCAxNgogI2RlZmluZSBLVk1fQVJNX0RFVklDRV9JRF9NQVNLICgweGZmZmYgPDwgS1ZNX0FSTV9ERVZJQ0VfSURfU0hJRlQpCiAjZGVmaW5lIEtWTV9BUk1fREVWSUNFX1ZHSUNfVjIgMAotI2RlZmluZSBLVk1fVkdJQ19WMl9BRERSX1RZUEVfRElTVCAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fVkdJQ19WMl9BRERSX1RZUEVfRElTVCAwCiAjZGVmaW5lIEtWTV9WR0lDX1YyX0FERFJfVFlQRV9DUFUgMQogI2RlZmluZSBLVk1fVkdJQ19WMl9ESVNUX1NJWkUgMHgxMDAwCiAjZGVmaW5lIEtWTV9WR0lDX1YyX0NQVV9TSVpFIDB4MjAwMAotI2RlZmluZSBLVk1fQVJNX1ZDUFVfUE9XRVJfT0ZGIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BUk1fVkNQVV9QT1dFUl9PRkYgMAorI2RlZmluZSBLVk1fQVJNX1ZDUFVfUFNDSV8wXzIgMQogc3RydWN0IGt2bV92Y3B1X2luaXQgewogIF9fdTMyIHRhcmdldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmVhdHVyZXNbN107CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1fc3JlZ3MgewogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX2ZwdSB7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGt2bV9zeW5jX3JlZ3MgewogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3QgewogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfQVJNX0NPUFJPQ19NQVNLIDB4MDAwMDAwMDAwRkZGMDAwMAogI2RlZmluZSBLVk1fUkVHX0FSTV9DT1BST0NfU0hJRlQgMTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfQVJNXzMyX09QQzJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDcKICNkZWZpbmUgS1ZNX1JFR19BUk1fMzJfT1BDMl9TSElGVCAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX0FSTV9PUEMxX01BU0sgMHgwMDAwMDAwMDAwMDAwMDc4CiAjZGVmaW5lIEtWTV9SRUdfQVJNX09QQzFfU0hJRlQgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19BUk1fQ1JNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzgwCiAjZGVmaW5lIEtWTV9SRUdfQVJNX0NSTV9TSElGVCA3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX0FSTV8zMl9DUk5fTUFTSyAweDAwMDAwMDAwMDAwMDc4MDAKICNkZWZpbmUgS1ZNX1JFR19BUk1fMzJfQ1JOX1NISUZUIDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUk1fQ1AxNV9SRUdfU0hJRlRfTUFTSyh4LG4pICAgKCgoeCkgPDwgS1ZNX1JFR19BUk1fICMjIG4gIyMgX1NISUZUKSAmIEtWTV9SRUdfQVJNXyAjIyBuICMjIF9NQVNLKQogI2RlZmluZSBfX0FSTV9DUDE1X1JFRyhvcDEsY3JuLGNybSxvcDIpICAgKEtWTV9SRUdfQVJNIHwgKDE1IDw8IEtWTV9SRUdfQVJNX0NPUFJPQ19TSElGVCkgfCAgIEFSTV9DUDE1X1JFR19TSElGVF9NQVNLKG9wMSwgT1BDMSkgfCAgIEFSTV9DUDE1X1JFR19TSElGVF9NQVNLKGNybiwgMzJfQ1JOKSB8ICAgQVJNX0NQMTVfUkVHX1NISUZUX01BU0soY3JtLCBDUk0pIHwgICBBUk1fQ1AxNV9SRUdfU0hJRlRfTUFTSyhvcDIsIDMyX09QQzIpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJNX0NQMTVfUkVHMzIoLi4uKSAoX19BUk1fQ1AxNV9SRUcoX19WQV9BUkdTX18pIHwgS1ZNX1JFR19TSVpFX1UzMikKICNkZWZpbmUgX19BUk1fQ1AxNV9SRUc2NChvcDEsY3JtKSAgIChfX0FSTV9DUDE1X1JFRyhvcDEsIDAsIGNybSwgMCkgfCBLVk1fUkVHX1NJWkVfVTY0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJNX0NQMTVfUkVHNjQoLi4uKSBfX0FSTV9DUDE1X1JFRzY0KF9fVkFfQVJHU19fKQogI2RlZmluZSBLVk1fUkVHX0FSTV9USU1FUl9DVEwgQVJNX0NQMTVfUkVHMzIoMCwgMTQsIDMsIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX0FSTV9USU1FUl9DTlQgQVJNX0NQMTVfUkVHNjQoMSwgMTQpCiAjZGVmaW5lIEtWTV9SRUdfQVJNX1RJTUVSX0NWQUwgQVJNX0NQMTVfUkVHNjQoMywgMTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX0FSTV9DT1JFICgweDAwMTAgPDwgS1ZNX1JFR19BUk1fQ09QUk9DX1NISUZUKQogI2RlZmluZSBLVk1fUkVHX0FSTV9DT1JFX1JFRyhuYW1lKSAob2Zmc2V0b2Yoc3RydWN0IGt2bV9yZWdzLCBuYW1lKSAvIDQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX0FSTV9ERU1VWCAoMHgwMDExIDw8IEtWTV9SRUdfQVJNX0NPUFJPQ19TSElGVCkKICNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVhfSURfTUFTSyAweDAwMDAwMDAwMDAwMEZGMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYX0lEX1NISUZUIDgKICNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVhfSURfQ0NTSURSICgweDAwIDw8IEtWTV9SRUdfQVJNX0RFTVVYX0lEX1NISUZUKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVhfVkFMX01BU0sgMHgwMDAwMDAwMDAwMDAwMEZGCiAjZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYX1ZBTF9TSElGVCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX0FSTV9WRlAgKDB4MDAxMiA8PCBLVk1fUkVHX0FSTV9DT1BST0NfU0hJRlQpCiAjZGVmaW5lIEtWTV9SRUdfQVJNX1ZGUF9NQVNLIDB4MDAwMDAwMDAwMDAwRkZGRgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19BUk1fVkZQX0JBU0VfUkVHIDB4MAogI2RlZmluZSBLVk1fUkVHX0FSTV9WRlBfRlBTSUQgMHgxMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX0FSTV9WRlBfRlBTQ1IgMHgxMDAxCiAjZGVmaW5lIEtWTV9SRUdfQVJNX1ZGUF9NVkZSMSAweDEwMDYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfQVJNX1ZGUF9NVkZSMCAweDEwMDcKICNkZWZpbmUgS1ZNX1JFR19BUk1fVkZQX0ZQRVhDIDB4MTAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19BUk1fVkZQX0ZQSU5TVCAweDEwMDkKICNkZWZpbmUgS1ZNX1JFR19BUk1fVkZQX0ZQSU5TVDIgMHgxMDBBCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSIDAKICNkZWZpbmUgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfRElTVF9SRUdTIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0NQVV9SRUdTIDIKICNkZWZpbmUgS1ZNX0RFVl9BUk1fVkdJQ19DUFVJRF9TSElGVCAzMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0RFVl9BUk1fVkdJQ19DUFVJRF9NQVNLICgweGZmVUxMIDw8IEtWTV9ERVZfQVJNX1ZHSUNfQ1BVSURfU0hJRlQpCiAjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfT0ZGU0VUX1NISUZUIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfT0ZGU0VUX01BU0sgKDB4ZmZmZmZmZmZVTEwgPDwgS1ZNX0RFVl9BUk1fVkdJQ19PRkZTRVRfU0hJRlQpCiAjZGVmaW5lIEtWTV9BUk1fSVJRX1RZUEVfU0hJRlQgMjQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9BUk1fSVJRX1RZUEVfTUFTSyAweGZmCiAjZGVmaW5lIEtWTV9BUk1fSVJRX1ZDUFVfU0hJRlQgMTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9BUk1fSVJRX1ZDUFVfTUFTSyAweGZmCiAjZGVmaW5lIEtWTV9BUk1fSVJRX05VTV9TSElGVCAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQVJNX0lSUV9OVU1fTUFTSyAweGZmZmYKICNkZWZpbmUgS1ZNX0FSTV9JUlFfVFlQRV9DUFUgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0FSTV9JUlFfVFlQRV9TUEkgMQogI2RlZmluZSBLVk1fQVJNX0lSUV9UWVBFX1BQSSAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQVJNX0lSUV9DUFVfSVJRIDAKICNkZWZpbmUgS1ZNX0FSTV9JUlFfQ1BVX0ZJUSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQVJNX0lSUV9HSUNfTUFYIDEyNwogI2RlZmluZSBLVk1fUFNDSV9GTl9CQVNFIDB4OTVjMWJhNWUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9QU0NJX0ZOKG4pIChLVk1fUFNDSV9GTl9CQVNFICsgKG4pKQogI2RlZmluZSBLVk1fUFNDSV9GTl9DUFVfU1VTUEVORCBLVk1fUFNDSV9GTigwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1BTQ0lfRk5fQ1BVX09GRiBLVk1fUFNDSV9GTigxKQogI2RlZmluZSBLVk1fUFNDSV9GTl9DUFVfT04gS1ZNX1BTQ0lfRk4oMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9QU0NJX0ZOX01JR1JBVEUgS1ZNX1BTQ0lfRk4oMykKLSNkZWZpbmUgS1ZNX1BTQ0lfUkVUX1NVQ0NFU1MgMAotI2RlZmluZSBLVk1fUFNDSV9SRVRfTkkgKCh1bnNpZ25lZCBsb25nKS0xKQotI2RlZmluZSBLVk1fUFNDSV9SRVRfSU5WQUwgKCh1bnNpZ25lZCBsb25nKS0yKQorI2RlZmluZSBLVk1fUFNDSV9SRVRfU1VDQ0VTUyBQU0NJX1JFVF9TVUNDRVNTCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBLVk1fUFNDSV9SRVRfREVOSUVEICgodW5zaWduZWQgbG9uZyktMykKKyNkZWZpbmUgS1ZNX1BTQ0lfUkVUX05JIFBTQ0lfUkVUX05PVF9TVVBQT1JURUQKKyNkZWZpbmUgS1ZNX1BTQ0lfUkVUX0lOVkFMIFBTQ0lfUkVUX0lOVkFMSURfUEFSQU1TCisjZGVmaW5lIEtWTV9QU0NJX1JFVF9ERU5JRUQgUFNDSV9SRVRfREVOSUVECiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3VuaXN0ZC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS91bmlzdGQuaAppbmRleCBiZTlmMzZmLi5jOTM5MzRhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3VuaXN0ZC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vdW5pc3RkLmgKQEAgLTQ1OCwyNyArNDU4LDI4IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NjaGVkX3NldGF0dHIgKF9fTlJfU1lTQ0FMTF9CQVNFKzM4MCkKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRhdHRyIChfX05SX1NZU0NBTExfQkFTRSszODEpCisjZGVmaW5lIF9fTlJfcmVuYW1lYXQyIChfX05SX1NZU0NBTExfQkFTRSszODIpCiAjZGVmaW5lIF9fQVJNX05SX0JBU0UgKF9fTlJfU1lTQ0FMTF9CQVNFKzB4MGYwMDAwKQotI2RlZmluZSBfX0FSTV9OUl9icmVha3BvaW50IChfX0FSTV9OUl9CQVNFKzEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX0FSTV9OUl9icmVha3BvaW50IChfX0FSTV9OUl9CQVNFKzEpCiAjZGVmaW5lIF9fQVJNX05SX2NhY2hlZmx1c2ggKF9fQVJNX05SX0JBU0UrMikKICNkZWZpbmUgX19BUk1fTlJfdXNyMjYgKF9fQVJNX05SX0JBU0UrMykKICNkZWZpbmUgX19BUk1fTlJfdXNyMzIgKF9fQVJNX05SX0JBU0UrNCkKLSNkZWZpbmUgX19BUk1fTlJfc2V0X3RscyAoX19BUk1fTlJfQkFTRSs1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19BUk1fTlJfc2V0X3RscyAoX19BUk1fTlJfQkFTRSs1KQogI3VuZGVmIF9fTlJfdGltZQogI3VuZGVmIF9fTlJfdW1vdW50CiAjdW5kZWYgX19OUl9zdGltZQotI3VuZGVmIF9fTlJfYWxhcm0KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjdW5kZWYgX19OUl9hbGFybQogI3VuZGVmIF9fTlJfdXRpbWUKICN1bmRlZiBfX05SX2dldHJsaW1pdAogI3VuZGVmIF9fTlJfc2VsZWN0Ci0jdW5kZWYgX19OUl9yZWFkZGlyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI3VuZGVmIF9fTlJfcmVhZGRpcgogI3VuZGVmIF9fTlJfbW1hcAogI3VuZGVmIF9fTlJfc29ja2V0Y2FsbAogI3VuZGVmIF9fTlJfc3lzY2FsbAotI3VuZGVmIF9fTlJfaXBjCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI3VuZGVmIF9fTlJfaXBjCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybTY0L2FzbS9rdm0uaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybTY0L2FzbS9rdm0uaAppbmRleCA5M2FiZDQzLi43YjgwMzMyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm02NC9hc20va3ZtLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL2t2bS5oCkBAIC0yOCwxMzEgKzI4LDEzNCBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX05SX1NQU1IgNQogI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9wc2NpLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjZGVmaW5lIF9fS1ZNX0hBVkVfR1VFU1RfREVCVUcKICNkZWZpbmUgX19LVk1fSEFWRV9JUlFfTElORQogI2RlZmluZSBLVk1fUkVHX1NJWkUoaWQpICAgKDFVIDw8ICgoKGlkKSAmIEtWTV9SRUdfU0laRV9NQVNLKSA+PiBLVk1fUkVHX1NJWkVfU0hJRlQpKQotc3RydWN0IGt2bV9yZWdzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qga3ZtX3JlZ3MgewogIHN0cnVjdCB1c2VyX3B0X3JlZ3MgcmVnczsKICBfX3U2NCBzcF9lbDE7CiAgX191NjQgZWxyX2VsMTsKLSBfX3U2NCBzcHNyW0tWTV9OUl9TUFNSXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgc3BzcltLVk1fTlJfU1BTUl07CiAgc3RydWN0IHVzZXJfZnBzaW1kX3N0YXRlIGZwX3JlZ3M7CiB9OwogI2RlZmluZSBLVk1fQVJNX1RBUkdFVF9BRU1fVjggMAotI2RlZmluZSBLVk1fQVJNX1RBUkdFVF9GT1VOREFUSU9OX1Y4IDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BUk1fVEFSR0VUX0ZPVU5EQVRJT05fVjggMQogI2RlZmluZSBLVk1fQVJNX1RBUkdFVF9DT1JURVhfQTU3IDIKICNkZWZpbmUgS1ZNX0FSTV9UQVJHRVRfWEdFTkVfUE9URU5aQSAzCi0jZGVmaW5lIEtWTV9BUk1fTlVNX1RBUkdFVFMgNAotI2RlZmluZSBLVk1fQVJNX0RFVklDRV9UWVBFX1NISUZUIDAKKyNkZWZpbmUgS1ZNX0FSTV9UQVJHRVRfQ09SVEVYX0E1MyA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fQVJNX05VTV9UQVJHRVRTIDUKKyNkZWZpbmUgS1ZNX0FSTV9ERVZJQ0VfVFlQRV9TSElGVCAwCiAjZGVmaW5lIEtWTV9BUk1fREVWSUNFX1RZUEVfTUFTSyAoMHhmZmZmIDw8IEtWTV9BUk1fREVWSUNFX1RZUEVfU0hJRlQpCiAjZGVmaW5lIEtWTV9BUk1fREVWSUNFX0lEX1NISUZUIDE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQVJNX0RFVklDRV9JRF9NQVNLICgweGZmZmYgPDwgS1ZNX0FSTV9ERVZJQ0VfSURfU0hJRlQpCiAjZGVmaW5lIEtWTV9BUk1fREVWSUNFX1ZHSUNfVjIgMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1ZHSUNfVjJfQUREUl9UWVBFX0RJU1QgMAogI2RlZmluZSBLVk1fVkdJQ19WMl9BRERSX1RZUEVfQ1BVIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9WR0lDX1YyX0RJU1RfU0laRSAweDEwMDAKICNkZWZpbmUgS1ZNX1ZHSUNfVjJfQ1BVX1NJWkUgMHgyMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQVJNX1ZDUFVfUE9XRVJfT0ZGIDAKICNkZWZpbmUgS1ZNX0FSTV9WQ1BVX0VMMV8zMkJJVCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fQVJNX1ZDUFVfUFNDSV8wXzIgMgogc3RydWN0IGt2bV92Y3B1X2luaXQgewogIF9fdTMyIHRhcmdldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmVhdHVyZXNbN107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBrdm1fc3JlZ3MgewogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX2ZwdSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGt2bV9zeW5jX3JlZ3MgewogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIEtWTV9SRUdfQVJNX0NPUFJPQ19NQVNLIDB4MDAwMDAwMDAwRkZGMDAwMAogI2RlZmluZSBLVk1fUkVHX0FSTV9DT1BST0NfU0hJRlQgMTYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfQVJNX0NPUkUgKDB4MDAxMCA8PCBLVk1fUkVHX0FSTV9DT1BST0NfU0hJRlQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX0FSTV9DT1JFX1JFRyhuYW1lKSAob2Zmc2V0b2Yoc3RydWN0IGt2bV9yZWdzLCBuYW1lKSAvIHNpemVvZihfX3UzMikpCiAjZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYICgweDAwMTEgPDwgS1ZNX1JFR19BUk1fQ09QUk9DX1NISUZUKQogI2RlZmluZSBLVk1fUkVHX0FSTV9ERU1VWF9JRF9NQVNLIDB4MDAwMDAwMDAwMDAwRkYwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVhfSURfU0hJRlQgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVhfSURfQ0NTSURSICgweDAwIDw8IEtWTV9SRUdfQVJNX0RFTVVYX0lEX1NISUZUKQogI2RlZmluZSBLVk1fUkVHX0FSTV9ERU1VWF9WQUxfTUFTSyAweDAwMDAwMDAwMDAwMDAwRkYKICNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVhfVkFMX1NISUZUIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfQVJNNjRfU1lTUkVHICgweDAwMTMgPDwgS1ZNX1JFR19BUk1fQ09QUk9DX1NISUZUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19BUk02NF9TWVNSRUdfT1AwX01BU0sgMHgwMDAwMDAwMDAwMDBjMDAwCiAjZGVmaW5lIEtWTV9SRUdfQVJNNjRfU1lTUkVHX09QMF9TSElGVCAxNAogI2RlZmluZSBLVk1fUkVHX0FSTTY0X1NZU1JFR19PUDFfTUFTSyAweDAwMDAwMDAwMDAwMDM4MDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfQVJNNjRfU1lTUkVHX09QMV9TSElGVCAxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19BUk02NF9TWVNSRUdfQ1JOX01BU0sgMHgwMDAwMDAwMDAwMDAwNzgwCiAjZGVmaW5lIEtWTV9SRUdfQVJNNjRfU1lTUkVHX0NSTl9TSElGVCA3CiAjZGVmaW5lIEtWTV9SRUdfQVJNNjRfU1lTUkVHX0NSTV9NQVNLIDB4MDAwMDAwMDAwMDAwMDA3OAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19BUk02NF9TWVNSRUdfQ1JNX1NISUZUIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfQVJNNjRfU1lTUkVHX09QMl9NQVNLIDB4MDAwMDAwMDAwMDAwMDAwNwogI2RlZmluZSBLVk1fUkVHX0FSTTY0X1NZU1JFR19PUDJfU0hJRlQgMAogI2RlZmluZSBBUk02NF9TWVNfUkVHX1NISUZUX01BU0soeCxuKSAgICgoKHgpIDw8IEtWTV9SRUdfQVJNNjRfU1lTUkVHXyAjIyBuICMjIF9TSElGVCkgJiAgIEtWTV9SRUdfQVJNNjRfU1lTUkVHXyAjIyBuICMjIF9NQVNLKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19BUk02NF9TWVNfUkVHKG9wMCxvcDEsY3JuLGNybSxvcDIpICAgKEtWTV9SRUdfQVJNNjQgfCBLVk1fUkVHX0FSTTY0X1NZU1JFRyB8ICAgQVJNNjRfU1lTX1JFR19TSElGVF9NQVNLKG9wMCwgT1AwKSB8ICAgQVJNNjRfU1lTX1JFR19TSElGVF9NQVNLKG9wMSwgT1AxKSB8ICAgQVJNNjRfU1lTX1JFR19TSElGVF9NQVNLKGNybiwgQ1JOKSB8ICAgQVJNNjRfU1lTX1JFR19TSElGVF9NQVNLKGNybSwgQ1JNKSB8ICAgQVJNNjRfU1lTX1JFR19TSElGVF9NQVNLKG9wMiwgT1AyKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSTTY0X1NZU19SRUcoLi4uKSAoX19BUk02NF9TWVNfUkVHKF9fVkFfQVJHU19fKSB8IEtWTV9SRUdfU0laRV9VNjQpCiAjZGVmaW5lIEtWTV9SRUdfQVJNX1RJTUVSX0NUTCBBUk02NF9TWVNfUkVHKDMsIDMsIDE0LCAzLCAxKQogI2RlZmluZSBLVk1fUkVHX0FSTV9USU1FUl9DTlQgQVJNNjRfU1lTX1JFRygzLCAzLCAxNCwgMywgMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfQVJNX1RJTUVSX0NWQUwgQVJNNjRfU1lTX1JFRygzLCAzLCAxNCwgMCwgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIgMAogI2RlZmluZSBLVk1fREVWX0FSTV9WR0lDX0dSUF9ESVNUX1JFR1MgMQogI2RlZmluZSBLVk1fREVWX0FSTV9WR0lDX0dSUF9DUFVfUkVHUyAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fREVWX0FSTV9WR0lDX0NQVUlEX1NISUZUIDMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fREVWX0FSTV9WR0lDX0NQVUlEX01BU0sgKDB4ZmZVTEwgPDwgS1ZNX0RFVl9BUk1fVkdJQ19DUFVJRF9TSElGVCkKICNkZWZpbmUgS1ZNX0RFVl9BUk1fVkdJQ19PRkZTRVRfU0hJRlQgMAogI2RlZmluZSBLVk1fREVWX0FSTV9WR0lDX09GRlNFVF9NQVNLICgweGZmZmZmZmZmVUxMIDw8IEtWTV9ERVZfQVJNX1ZHSUNfT0ZGU0VUX1NISUZUKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0FSTV9JUlFfVFlQRV9TSElGVCAyNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0FSTV9JUlFfVFlQRV9NQVNLIDB4ZmYKICNkZWZpbmUgS1ZNX0FSTV9JUlFfVkNQVV9TSElGVCAxNgogI2RlZmluZSBLVk1fQVJNX0lSUV9WQ1BVX01BU0sgMHhmZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0FSTV9JUlFfTlVNX1NISUZUIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9BUk1fSVJRX05VTV9NQVNLIDB4ZmZmZgogI2RlZmluZSBLVk1fQVJNX0lSUV9UWVBFX0NQVSAwCiAjZGVmaW5lIEtWTV9BUk1fSVJRX1RZUEVfU1BJIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9BUk1fSVJRX1RZUEVfUFBJIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9BUk1fSVJRX0NQVV9JUlEgMAogI2RlZmluZSBLVk1fQVJNX0lSUV9DUFVfRklRIDEKICNkZWZpbmUgS1ZNX0FSTV9JUlFfR0lDX01BWCAxMjcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9QU0NJX0ZOX0JBU0UgMHg5NWMxYmE1ZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1BTQ0lfRk4obikgKEtWTV9QU0NJX0ZOX0JBU0UgKyAobikpCiAjZGVmaW5lIEtWTV9QU0NJX0ZOX0NQVV9TVVNQRU5EIEtWTV9QU0NJX0ZOKDApCiAjZGVmaW5lIEtWTV9QU0NJX0ZOX0NQVV9PRkYgS1ZNX1BTQ0lfRk4oMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9QU0NJX0ZOX0NQVV9PTiBLVk1fUFNDSV9GTigyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1BTQ0lfRk5fTUlHUkFURSBLVk1fUFNDSV9GTigzKQotI2RlZmluZSBLVk1fUFNDSV9SRVRfU1VDQ0VTUyAwCi0jZGVmaW5lIEtWTV9QU0NJX1JFVF9OSSAoKHVuc2lnbmVkIGxvbmcpLTEpCisjZGVmaW5lIEtWTV9QU0NJX1JFVF9TVUNDRVNTIFBTQ0lfUkVUX1NVQ0NFU1MKKyNkZWZpbmUgS1ZNX1BTQ0lfUkVUX05JIFBTQ0lfUkVUX05PVF9TVVBQT1JURUQKKyNkZWZpbmUgS1ZNX1BTQ0lfUkVUX0lOVkFMIFBTQ0lfUkVUX0lOVkFMSURfUEFSQU1TCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBLVk1fUFNDSV9SRVRfSU5WQUwgKCh1bnNpZ25lZCBsb25nKS0yKQotI2RlZmluZSBLVk1fUFNDSV9SRVRfREVOSUVEICgodW5zaWduZWQgbG9uZyktMykKKyNkZWZpbmUgS1ZNX1BTQ0lfUkVUX0RFTklFRCBQU0NJX1JFVF9ERU5JRUQKICNlbmRpZgogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL3BlcmZfcmVncy5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL3BlcmZfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTA4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm02NC9hc20vcGVyZl9yZWdzLmgKQEAgLTAsMCArMSw2NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0FSTTY0X1BFUkZfUkVHU19ICisjZGVmaW5lIF9BU01fQVJNNjRfUEVSRl9SRUdTX0gKK2VudW0gcGVyZl9ldmVudF9hcm1fcmVncyB7CisgUEVSRl9SRUdfQVJNNjRfWDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFBFUkZfUkVHX0FSTTY0X1gxLAorIFBFUkZfUkVHX0FSTTY0X1gyLAorIFBFUkZfUkVHX0FSTTY0X1gzLAorIFBFUkZfUkVHX0FSTTY0X1g0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1JFR19BUk02NF9YNSwKKyBQRVJGX1JFR19BUk02NF9YNiwKKyBQRVJGX1JFR19BUk02NF9YNywKKyBQRVJGX1JFR19BUk02NF9YOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9SRUdfQVJNNjRfWDksCisgUEVSRl9SRUdfQVJNNjRfWDEwLAorIFBFUkZfUkVHX0FSTTY0X1gxMSwKKyBQRVJGX1JFR19BUk02NF9YMTIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFBFUkZfUkVHX0FSTTY0X1gxMywKKyBQRVJGX1JFR19BUk02NF9YMTQsCisgUEVSRl9SRUdfQVJNNjRfWDE1LAorIFBFUkZfUkVHX0FSTTY0X1gxNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9SRUdfQVJNNjRfWDE3LAorIFBFUkZfUkVHX0FSTTY0X1gxOCwKKyBQRVJGX1JFR19BUk02NF9YMTksCisgUEVSRl9SRUdfQVJNNjRfWDIwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1JFR19BUk02NF9YMjEsCisgUEVSRl9SRUdfQVJNNjRfWDIyLAorIFBFUkZfUkVHX0FSTTY0X1gyMywKKyBQRVJGX1JFR19BUk02NF9YMjQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFBFUkZfUkVHX0FSTTY0X1gyNSwKKyBQRVJGX1JFR19BUk02NF9YMjYsCisgUEVSRl9SRUdfQVJNNjRfWDI3LAorIFBFUkZfUkVHX0FSTTY0X1gyOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9SRUdfQVJNNjRfWDI5LAorIFBFUkZfUkVHX0FSTTY0X0xSLAorIFBFUkZfUkVHX0FSTTY0X1NQLAorIFBFUkZfUkVHX0FSTTY0X1BDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1JFR19BUk02NF9NQVgsCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm02NC9hc20vcG9zaXhfdHlwZXMuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybTY0L2FzbS9wb3NpeF90eXBlcy5oCmluZGV4IDFiODkyNTMuLjYyODliYmUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybTY0L2FzbS9wb3NpeF90eXBlcy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybTY0L2FzbS9wb3NpeF90eXBlcy5oCkBAIC0xNiw0ICsxNiwxMSBAQAogICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9fQVNNX1BPU0lYX1RZUEVTX0gKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfb2xkX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9vbGRfZ2lkX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX2tlcm5lbF9vbGRfdWlkX3QgX19rZXJuZWxfb2xkX3VpZF90CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcG9zaXhfdHlwZXMuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL3NpZ2NvbnRleHQuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybTY0L2FzbS9zaWdjb250ZXh0LmgKaW5kZXggYzU5ZjljMC4uODkxODkyNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL3NpZ2NvbnRleHQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm02NC9hc20vc2lnY29udGV4dC5oCkBAIC00Myw0ICs0MywxMSBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3VpbnQxMjhfdCB2cmVnc1szMl07CiB9OworI2RlZmluZSBFU1JfTUFHSUMgMHg0NTUzNTIwMQorc3RydWN0IGVzcl9jb250ZXh0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IF9hYXJjaDY0X2N0eCBoZWFkOworIF9fdTY0IGVzcjsKK307CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmgKaW5kZXggYTE1ODc4Zi4uOWMxODgxYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaApAQCAtMTM2LDcxICsxMzYsNzMgQEAKICNkZWZpbmUgRl9HRVRPV05FUl9VSURTIDE3CiAjZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZfT0ZEX0dFVExLIDM2CisjZGVmaW5lIEZfT0ZEX1NFVExLIDM3CisjZGVmaW5lIEZfT0ZEX1NFVExLVyAzOAogI2RlZmluZSBGX09XTkVSX1RJRCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGX09XTkVSX1BJRCAxCiAjZGVmaW5lIEZfT1dORVJfUEdSUCAyCiBzdHJ1Y3QgZl9vd25lcl9leCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2tlcm5lbF9waWRfdCBwaWQ7CiB9OwogI2RlZmluZSBGRF9DTE9FWEVDIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIEZfUkRMQ0sKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZfUkRMQ0sgMAogI2RlZmluZSBGX1dSTENLIDEKICNkZWZpbmUgRl9VTkxDSyAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBGX0VYTENLCiAjZGVmaW5lIEZfRVhMQ0sgNAogI2RlZmluZSBGX1NITENLIDgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIExPQ0tfU0ggMQogI2RlZmluZSBMT0NLX0VYIDIKICNkZWZpbmUgTE9DS19OQiA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBMT0NLX1VOIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIExPQ0tfTUFORCAzMgogI2RlZmluZSBMT0NLX1JFQUQgNjQKICNkZWZpbmUgTE9DS19XUklURSAxMjgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIExPQ0tfUlcgMTkyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGX0xJTlVYX1NQRUNJRklDX0JBU0UgMTAyNAogI2lmbmRlZiBIQVZFX0FSQ0hfU1RSVUNUX0ZMT0NLCiAjaWZuZGVmIF9fQVJDSF9GTE9DS19QQUQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJDSF9GTE9DS19QQUQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKIHN0cnVjdCBmbG9jayB7CiAgc2hvcnQgbF90eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaG9ydCBsX3doZW5jZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19rZXJuZWxfb2ZmX3QgbF9zdGFydDsKICBfX2tlcm5lbF9vZmZfdCBsX2xlbjsKICBfX2tlcm5lbF9waWRfdCBsX3BpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19BUkNIX0ZMT0NLX1BBRAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZW5kaWYKLSNpZm5kZWYgX19MUDY0X18KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIEhBVkVfQVJDSF9TVFJVQ1RfRkxPQ0s2NAogI2lmbmRlZiBfX0FSQ0hfRkxPQ0s2NF9QQUQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJDSF9GTE9DSzY0X1BBRAogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGZsb2NrNjQgewogIHNob3J0IGxfdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2hvcnQgbF93aGVuY2U7CiAgX19rZXJuZWxfbG9mZl90IGxfc3RhcnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX2xvZmZfdCBsX2xlbjsKICBfX2tlcm5lbF9waWRfdCBsX3BpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19BUkNIX0ZMT0NLNjRfUEFECiB9OworI2VuZGlmCisjZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3Jlc291cmNlLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3Jlc291cmNlLmgKaW5kZXggMjQzODE3YS4uYTJiYjE3ZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9yZXNvdXJjZS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvcmVzb3VyY2UuaApAQCAtNTYsOCArNTYsNCBAQAogI2RlZmluZSBSTElNX0lORklOSVRZICh+MFVMKQogI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2lmbmRlZiBfU1RLX0xJTV9NQVgKLSNkZWZpbmUgX1NUS19MSU1fTUFYIFJMSU1fSU5GSU5JVFkKICNlbmRpZgotI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmgKaW5kZXggYmVjYzgyZC4uNGY4N2I2YyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oCkBAIC0xMTMsNDA3ICsxMTMsNDA5IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3F1b3RhY3RsIDYwCiAjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NCA2MQorI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX0dFVERFTlRTNjQKICNkZWZpbmUgX19OUjMyNjRfbHNlZWsgNjIKLSNkZWZpbmUgX19OUl9yZWFkIDYzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3JlYWQgNjMKICNkZWZpbmUgX19OUl93cml0ZSA2NAogI2RlZmluZSBfX05SX3JlYWR2IDY1CiAjZGVmaW5lIF9fTlJfd3JpdGV2IDY2Ci0jZGVmaW5lIF9fTlJfcHJlYWQ2NCA2NwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9wcmVhZDY0IDY3CiAjZGVmaW5lIF9fTlJfcHdyaXRlNjQgNjgKICNkZWZpbmUgX19OUl9wcmVhZHYgNjkKICNkZWZpbmUgX19OUl9wd3JpdGV2IDcwCi0jZGVmaW5lIF9fTlIzMjY0X3NlbmRmaWxlIDcxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SMzI2NF9zZW5kZmlsZSA3MQogI2RlZmluZSBfX05SX3BzZWxlY3Q2IDcyCiAjZGVmaW5lIF9fTlJfcHBvbGwgNzMKICNkZWZpbmUgX19OUl9zaWduYWxmZDQgNzQKLSNkZWZpbmUgX19OUl92bXNwbGljZSA3NQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl92bXNwbGljZSA3NQogI2RlZmluZSBfX05SX3NwbGljZSA3NgogI2RlZmluZSBfX05SX3RlZSA3NwogI2RlZmluZSBfX05SX3JlYWRsaW5rYXQgNzgKLSNkZWZpbmUgX19OUjMyNjRfZnN0YXRhdCA3OQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUjMyNjRfZnN0YXRhdCA3OQogI2RlZmluZSBfX05SMzI2NF9mc3RhdCA4MAogI2RlZmluZSBfX05SX3N5bmMgODEKICNkZWZpbmUgX19OUl9mc3luYyA4MgotI2RlZmluZSBfX05SX2ZkYXRhc3luYyA4MwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9mZGF0YXN5bmMgODMKICNpZmRlZiBfX0FSQ0hfV0FOVF9TWU5DX0ZJTEVfUkFOR0UyCiAjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlMiA4NAogI2Vsc2UKLSNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UgODQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlIDg0CiAjZW5kaWYKICNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZSA4NQogI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZSA4NgotI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZSA4NwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUgODcKICNkZWZpbmUgX19OUl91dGltZW5zYXQgODgKICNkZWZpbmUgX19OUl9hY2N0IDg5CiAjZGVmaW5lIF9fTlJfY2FwZ2V0IDkwCi0jZGVmaW5lIF9fTlJfY2Fwc2V0IDkxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2NhcHNldCA5MQogI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5IDkyCiAjZGVmaW5lIF9fTlJfZXhpdCA5MwogI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAgOTQKLSNkZWZpbmUgX19OUl93YWl0aWQgOTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfd2FpdGlkIDk1CiAjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzIDk2CiAjZGVmaW5lIF9fTlJfdW5zaGFyZSA5NwogI2RlZmluZSBfX05SX2Z1dGV4IDk4Ci0jZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0IDk5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdCA5OQogI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdCAxMDAKICNkZWZpbmUgX19OUl9uYW5vc2xlZXAgMTAxCiAjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyIDEwMgotI2RlZmluZSBfX05SX3NldGl0aW1lciAxMDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyIDEwMwogI2RlZmluZSBfX05SX2tleGVjX2xvYWQgMTA0CiAjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUgMTA1CiAjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZSAxMDYKLSNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUgMTA3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZSAxMDcKICNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lIDEwOAogI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4gMTA5CiAjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZSAxMTAKLSNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUgMTExCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZSAxMTEKICNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lIDExMgogI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUgMTEzCiAjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzIDExNAotI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcCAxMTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwIDExNQogI2RlZmluZSBfX05SX3N5c2xvZyAxMTYKICNkZWZpbmUgX19OUl9wdHJhY2UgMTE3CiAjZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gMTE4Ci0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyIDExOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIgMTE5CiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyIDEyMAogI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtIDEyMQogI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5IDEyMgotI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5IDEyMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eSAxMjMKICNkZWZpbmUgX19OUl9zY2hlZF95aWVsZCAxMjQKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IDEyNQogI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4gMTI2Ci0jZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsIDEyNwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgMTI3CiAjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsIDEyOAogI2RlZmluZSBfX05SX2tpbGwgMTI5CiAjZGVmaW5lIF9fTlJfdGtpbGwgMTMwCi0jZGVmaW5lIF9fTlJfdGdraWxsIDEzMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl90Z2tpbGwgMTMxCiAjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sgMTMyCiAjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZCAxMzMKICNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24gMTM0Ci0jZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgMTM1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrIDEzNQogI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcgMTM2CiAjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0IDEzNwogI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbyAxMzgKLSNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4gMTM5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybiAxMzkKICNkZWZpbmUgX19OUl9zZXRwcmlvcml0eSAxNDAKICNkZWZpbmUgX19OUl9nZXRwcmlvcml0eSAxNDEKICNkZWZpbmUgX19OUl9yZWJvb3QgMTQyCi0jZGVmaW5lIF9fTlJfc2V0cmVnaWQgMTQzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NldHJlZ2lkIDE0MwogI2RlZmluZSBfX05SX3NldGdpZCAxNDQKICNkZWZpbmUgX19OUl9zZXRyZXVpZCAxNDUKICNkZWZpbmUgX19OUl9zZXR1aWQgMTQ2Ci0jZGVmaW5lIF9fTlJfc2V0cmVzdWlkIDE0NwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQgMTQ3CiAjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkIDE0OAogI2RlZmluZSBfX05SX3NldHJlc2dpZCAxNDkKICNkZWZpbmUgX19OUl9nZXRyZXNnaWQgMTUwCi0jZGVmaW5lIF9fTlJfc2V0ZnN1aWQgMTUxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NldGZzdWlkIDE1MQogI2RlZmluZSBfX05SX3NldGZzZ2lkIDE1MgogI2RlZmluZSBfX05SX3RpbWVzIDE1MwogI2RlZmluZSBfX05SX3NldHBnaWQgMTU0Ci0jZGVmaW5lIF9fTlJfZ2V0cGdpZCAxNTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfZ2V0cGdpZCAxNTUKICNkZWZpbmUgX19OUl9nZXRzaWQgMTU2CiAjZGVmaW5lIF9fTlJfc2V0c2lkIDE1NwogI2RlZmluZSBfX05SX2dldGdyb3VwcyAxNTgKLSNkZWZpbmUgX19OUl9zZXRncm91cHMgMTU5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NldGdyb3VwcyAxNTkKICNkZWZpbmUgX19OUl91bmFtZSAxNjAKICNkZWZpbmUgX19OUl9zZXRob3N0bmFtZSAxNjEKICNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lIDE2MgotI2RlZmluZSBfX05SX2dldHJsaW1pdCAxNjMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0IDE2MwogI2RlZmluZSBfX05SX3NldHJsaW1pdCAxNjQKICNkZWZpbmUgX19OUl9nZXRydXNhZ2UgMTY1CiAjZGVmaW5lIF9fTlJfdW1hc2sgMTY2Ci0jZGVmaW5lIF9fTlJfcHJjdGwgMTY3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3ByY3RsIDE2NwogI2RlZmluZSBfX05SX2dldGNwdSAxNjgKICNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkgMTY5CiAjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5IDE3MAotI2RlZmluZSBfX05SX2FkanRpbWV4IDE3MQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9hZGp0aW1leCAxNzEKICNkZWZpbmUgX19OUl9nZXRwaWQgMTcyCiAjZGVmaW5lIF9fTlJfZ2V0cHBpZCAxNzMKICNkZWZpbmUgX19OUl9nZXR1aWQgMTc0Ci0jZGVmaW5lIF9fTlJfZ2V0ZXVpZCAxNzUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZCAxNzUKICNkZWZpbmUgX19OUl9nZXRnaWQgMTc2CiAjZGVmaW5lIF9fTlJfZ2V0ZWdpZCAxNzcKICNkZWZpbmUgX19OUl9nZXR0aWQgMTc4Ci0jZGVmaW5lIF9fTlJfc3lzaW5mbyAxNzkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc3lzaW5mbyAxNzkKICNkZWZpbmUgX19OUl9tcV9vcGVuIDE4MAogI2RlZmluZSBfX05SX21xX3VubGluayAxODEKICNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQgMTgyCi0jZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlIDE4MwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUgMTgzCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5IDE4NAogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIgMTg1CiAjZGVmaW5lIF9fTlJfbXNnZ2V0IDE4NgotI2RlZmluZSBfX05SX21zZ2N0bCAxODcKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfbXNnY3RsIDE4NwogI2RlZmluZSBfX05SX21zZ3JjdiAxODgKICNkZWZpbmUgX19OUl9tc2dzbmQgMTg5CiAjZGVmaW5lIF9fTlJfc2VtZ2V0IDE5MAotI2RlZmluZSBfX05SX3NlbWN0bCAxOTEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc2VtY3RsIDE5MQogI2RlZmluZSBfX05SX3NlbXRpbWVkb3AgMTkyCiAjZGVmaW5lIF9fTlJfc2Vtb3AgMTkzCiAjZGVmaW5lIF9fTlJfc2htZ2V0IDE5NAotI2RlZmluZSBfX05SX3NobWN0bCAxOTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc2htY3RsIDE5NQogI2RlZmluZSBfX05SX3NobWF0IDE5NgogI2RlZmluZSBfX05SX3NobWR0IDE5NwogI2RlZmluZSBfX05SX3NvY2tldCAxOTgKLSNkZWZpbmUgX19OUl9zb2NrZXRwYWlyIDE5OQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zb2NrZXRwYWlyIDE5OQogI2RlZmluZSBfX05SX2JpbmQgMjAwCiAjZGVmaW5lIF9fTlJfbGlzdGVuIDIwMQogI2RlZmluZSBfX05SX2FjY2VwdCAyMDIKLSNkZWZpbmUgX19OUl9jb25uZWN0IDIwMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9jb25uZWN0IDIwMwogI2RlZmluZSBfX05SX2dldHNvY2tuYW1lIDIwNAogI2RlZmluZSBfX05SX2dldHBlZXJuYW1lIDIwNQogI2RlZmluZSBfX05SX3NlbmR0byAyMDYKLSNkZWZpbmUgX19OUl9yZWN2ZnJvbSAyMDcKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfcmVjdmZyb20gMjA3CiAjZGVmaW5lIF9fTlJfc2V0c29ja29wdCAyMDgKICNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0IDIwOQogI2RlZmluZSBfX05SX3NodXRkb3duIDIxMAotI2RlZmluZSBfX05SX3NlbmRtc2cgMjExCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NlbmRtc2cgMjExCiAjZGVmaW5lIF9fTlJfcmVjdm1zZyAyMTIKICNkZWZpbmUgX19OUl9yZWFkYWhlYWQgMjEzCiAjZGVmaW5lIF9fTlJfYnJrIDIxNAotI2RlZmluZSBfX05SX211bm1hcCAyMTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfbXVubWFwIDIxNQogI2RlZmluZSBfX05SX21yZW1hcCAyMTYKICNkZWZpbmUgX19OUl9hZGRfa2V5IDIxNwogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5IDIxOAotI2RlZmluZSBfX05SX2tleWN0bCAyMTkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfa2V5Y3RsIDIxOQogI2RlZmluZSBfX05SX2Nsb25lIDIyMAogI2RlZmluZSBfX05SX2V4ZWN2ZSAyMjEKICNkZWZpbmUgX19OUjMyNjRfbW1hcCAyMjIKLSNkZWZpbmUgX19OUjMyNjRfZmFkdmlzZTY0IDIyMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUjMyNjRfZmFkdmlzZTY0IDIyMwogI2lmbmRlZiBfX0FSQ0hfTk9NTVUKICNkZWZpbmUgX19OUl9zd2Fwb24gMjI0CiAjZGVmaW5lIF9fTlJfc3dhcG9mZiAyMjUKLSNkZWZpbmUgX19OUl9tcHJvdGVjdCAyMjYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfbXByb3RlY3QgMjI2CiAjZGVmaW5lIF9fTlJfbXN5bmMgMjI3CiAjZGVmaW5lIF9fTlJfbWxvY2sgMjI4CiAjZGVmaW5lIF9fTlJfbXVubG9jayAyMjkKLSNkZWZpbmUgX19OUl9tbG9ja2FsbCAyMzAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfbWxvY2thbGwgMjMwCiAjZGVmaW5lIF9fTlJfbXVubG9ja2FsbCAyMzEKICNkZWZpbmUgX19OUl9taW5jb3JlIDIzMgogI2RlZmluZSBfX05SX21hZHZpc2UgMjMzCi0jZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcyAyMzQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcyAyMzQKICNkZWZpbmUgX19OUl9tYmluZCAyMzUKICNkZWZpbmUgX19OUl9nZXRfbWVtcG9saWN5IDIzNgogI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kgMjM3Ci0jZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcyAyMzgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcyAyMzgKICNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzIDIzOQogI2VuZGlmCiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8gMjQwCi0jZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuIDI0MQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4gMjQxCiAjZGVmaW5lIF9fTlJfYWNjZXB0NCAyNDIKICNkZWZpbmUgX19OUl9yZWN2bW1zZyAyNDMKICNkZWZpbmUgX19OUl9hcmNoX3NwZWNpZmljX3N5c2NhbGwgMjQ0Ci0jZGVmaW5lIF9fTlJfd2FpdDQgMjYwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3dhaXQ0IDI2MAogI2RlZmluZSBfX05SX3BybGltaXQ2NCAyNjEKICNkZWZpbmUgX19OUl9mYW5vdGlmeV9pbml0IDI2MgogI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsgMjYzCi0jZGVmaW5lIF9fTlJfbmFtZV90b19oYW5kbGVfYXQgMjY0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX25hbWVfdG9faGFuZGxlX2F0IDI2NAogI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0IDI2NQogI2RlZmluZSBfX05SX2Nsb2NrX2FkanRpbWUgMjY2CiAjZGVmaW5lIF9fTlJfc3luY2ZzIDI2NwotI2RlZmluZSBfX05SX3NldG5zIDI2OAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zZXRucyAyNjgKICNkZWZpbmUgX19OUl9zZW5kbW1zZyAyNjkKICNkZWZpbmUgX19OUl9wcm9jZXNzX3ZtX3JlYWR2IDI3MAogI2RlZmluZSBfX05SX3Byb2Nlc3Nfdm1fd3JpdGV2IDI3MQotI2RlZmluZSBfX05SX2tjbXAgMjcyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2tjbXAgMjcyCiAjZGVmaW5lIF9fTlJfZmluaXRfbW9kdWxlIDI3MwogI2RlZmluZSBfX05SX3NjaGVkX3NldGF0dHIgMjc0CiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YXR0ciAyNzUKLSN1bmRlZiBfX05SX3N5c2NhbGxzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBfX05SX3N5c2NhbGxzIDI3NgorI2RlZmluZSBfX05SX3JlbmFtZWF0MiAyNzYKKyN1bmRlZiBfX05SX3N5c2NhbGxzCisjZGVmaW5lIF9fTlJfc3lzY2FsbHMgMjc3CiAjaWZkZWYgX19BUkNIX1dBTlRfU1lTQ0FMTF9OT19BVAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9vcGVuIDEwMjQKICNkZWZpbmUgX19OUl9saW5rIDEwMjUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdW5saW5rIDEwMjYKICNkZWZpbmUgX19OUl9ta25vZCAxMDI3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2NobW9kIDEwMjgKICNkZWZpbmUgX19OUl9jaG93biAxMDI5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21rZGlyIDEwMzAKICNkZWZpbmUgX19OUl9ybWRpciAxMDMxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xjaG93biAxMDMyCiAjZGVmaW5lIF9fTlJfYWNjZXNzIDEwMzMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVuYW1lIDEwMzQKICNkZWZpbmUgX19OUl9yZWFkbGluayAxMDM1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N5bWxpbmsgMTAzNgogI2RlZmluZSBfX05SX3V0aW1lcyAxMDM3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SMzI2NF9zdGF0IDEwMzgKICNkZWZpbmUgX19OUjMyNjRfbHN0YXQgMTAzOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICN1bmRlZiBfX05SX3N5c2NhbGxzCiAjZGVmaW5lIF9fTlJfc3lzY2FsbHMgKF9fTlIzMjY0X2xzdGF0KzEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZkZWYgX19BUkNIX1dBTlRfU1lTQ0FMTF9OT19GTEFHUworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9waXBlIDEwNDAKICNkZWZpbmUgX19OUl9kdXAyIDEwNDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlIDEwNDIKICNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQgMTA0MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ldmVudGZkIDEwNDQKICNkZWZpbmUgX19OUl9zaWduYWxmZCAxMDQ1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI3VuZGVmIF9fTlJfc3lzY2FsbHMKICNkZWZpbmUgX19OUl9zeXNjYWxscyAoX19OUl9zaWduYWxmZCsxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2lmIChfX0JJVFNfUEVSX0xPTkcgPT0gMzIgfHwgZGVmaW5lZChfX1NZU0NBTExfQ09NUEFUKSkgJiYgZGVmaW5lZChfX0FSQ0hfV0FOVF9TWVNDQUxMX09GRl9UKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZW5kZmlsZSAxMDQ2CiAjZGVmaW5lIF9fTlJfZnRydW5jYXRlIDEwNDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdHJ1bmNhdGUgMTA0OAogI2RlZmluZSBfX05SX3N0YXQgMTA0OQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9sc3RhdCAxMDUwCiAjZGVmaW5lIF9fTlJfZnN0YXQgMTA1MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mY250bCAxMDUyCiAjZGVmaW5lIF9fTlJfZmFkdmlzZTY0IDEwNTMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKICNkZWZpbmUgX19OUl9uZXdmc3RhdGF0IDEwNTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19ORVdGU1RBVEFUCiAjZGVmaW5lIF9fTlJfZnN0YXRmcyAxMDU1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N0YXRmcyAxMDU2CiAjZGVmaW5lIF9fTlJfbHNlZWsgMTA1NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tbWFwIDEwNTgKICN1bmRlZiBfX05SX3N5c2NhbGxzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N5c2NhbGxzIChfX05SX21tYXArMSkKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0FSQ0hfV0FOVF9TWVNDQUxMX0RFUFJFQ0FURUQKICNkZWZpbmUgX19OUl9hbGFybSAxMDU5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KICNkZWZpbmUgX19OUl9nZXRwZ3JwIDEwNjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCiAjZGVmaW5lIF9fTlJfcGF1c2UgMTA2MQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCiAjZGVmaW5lIF9fTlJfdGltZSAxMDYyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1RJTUUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdXRpbWUgMTA2MwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY3JlYXQgMTA2NAogI2RlZmluZSBfX05SX2dldGRlbnRzIDEwNjUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRERU5UUwogI2RlZmluZSBfX05SX2Z1dGltZXNhdCAxMDY2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NlbGVjdCAxMDY3CiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TRUxFQ1QKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcG9sbCAxMDY4CiAjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAxMDY5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3VzdGF0IDEwNzAKICNkZWZpbmUgX19OUl92Zm9yayAxMDcxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX29sZHdhaXQ0IDEwNzIKICNkZWZpbmUgX19OUl9yZWN2IDEwNzMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VuZCAxMDc0CiAjZGVmaW5lIF9fTlJfYmRmbHVzaCAxMDc1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Vtb3VudCAxMDc2CiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdXNlbGliIDEwNzcKICNkZWZpbmUgX19OUl9fc3lzY3RsIDEwNzgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZm9yayAxMDc5CiAjdW5kZWYgX19OUl9zeXNjYWxscworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zeXNjYWxscyAoX19OUl9mb3JrKzEpCiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWYgX19CSVRTX1BFUl9MT05HID09IDY0ICYmICFkZWZpbmVkKF9fU1lTQ0FMTF9DT01QQVQpCiAjZGVmaW5lIF9fTlJfZmNudGwgX19OUjMyNjRfZmNudGwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3RhdGZzIF9fTlIzMjY0X3N0YXRmcwogI2RlZmluZSBfX05SX2ZzdGF0ZnMgX19OUjMyNjRfZnN0YXRmcwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl90cnVuY2F0ZSBfX05SMzI2NF90cnVuY2F0ZQogI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSBfX05SMzI2NF9mdHJ1bmNhdGUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbHNlZWsgX19OUjMyNjRfbHNlZWsKICNkZWZpbmUgX19OUl9zZW5kZmlsZSBfX05SMzI2NF9zZW5kZmlsZQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9uZXdmc3RhdGF0IF9fTlIzMjY0X2ZzdGF0YXQKICNkZWZpbmUgX19OUl9mc3RhdCBfX05SMzI2NF9mc3RhdAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tbWFwIF9fTlIzMjY0X21tYXAKICNkZWZpbmUgX19OUl9mYWR2aXNlNjQgX19OUjMyNjRfZmFkdmlzZTY0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fTlIzMjY0X3N0YXQKICNkZWZpbmUgX19OUl9zdGF0IF9fTlIzMjY0X3N0YXQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbHN0YXQgX19OUjMyNjRfbHN0YXQKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbHNlCiAjZGVmaW5lIF9fTlJfZmNudGw2NCBfX05SMzI2NF9mY250bAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zdGF0ZnM2NCBfX05SMzI2NF9zdGF0ZnMKICNkZWZpbmUgX19OUl9mc3RhdGZzNjQgX19OUjMyNjRfZnN0YXRmcwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl90cnVuY2F0ZTY0IF9fTlIzMjY0X3RydW5jYXRlCiAjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQgX19OUjMyNjRfZnRydW5jYXRlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xsc2VlayBfX05SMzI2NF9sc2VlawogI2RlZmluZSBfX05SX3NlbmRmaWxlNjQgX19OUjMyNjRfc2VuZGZpbGUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZnN0YXRhdDY0IF9fTlIzMjY0X2ZzdGF0YXQKICNkZWZpbmUgX19OUl9mc3RhdDY0IF9fTlIzMjY0X2ZzdGF0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21tYXAyIF9fTlIzMjY0X21tYXAKICNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQgX19OUjMyNjRfZmFkdmlzZTY0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fTlIzMjY0X3N0YXQKICNkZWZpbmUgX19OUl9zdGF0NjQgX19OUjMyNjRfc3RhdAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9sc3RhdDY0IF9fTlIzMjY0X2xzdGF0CiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2JpdGZpZWxkLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9iaXRmaWVsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOGFjMTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9iaXRmaWVsZC5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19VQVBJX0FTTV9CSVRGSUVMRF9ICisjZGVmaW5lIF9fVUFQSV9BU01fQklURklFTERfSAorI2RlZmluZSBfX0JJVEZJRUxEX0ZJRUxEKGZpZWxkLCBtb3JlKSAgIG1vcmUgICBmaWVsZDsKKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2luc3QuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2luc3QuaAppbmRleCBjNDZkMDliLi4xOGI1NDY1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9pbnN0LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vaW5zdC5oCkBAIC0xOCw2NyArMTgsNzcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfVUFQSV9BU01fSU5TVF9ICiAjZGVmaW5lIF9VQVBJX0FTTV9JTlNUX0gKKyNpbmNsdWRlIDxhc20vYml0ZmllbGQuaD4KIGVudW0gbWFqb3Jfb3AgewotIHNwZWNfb3AsIGJjb25kX29wLCBqX29wLCBqYWxfb3AsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHNwZWNfb3AsIGJjb25kX29wLCBqX29wLCBqYWxfb3AsCiAgYmVxX29wLCBibmVfb3AsIGJsZXpfb3AsIGJndHpfb3AsCiAgYWRkaV9vcCwgYWRkaXVfb3AsIHNsdGlfb3AsIHNsdGl1X29wLAogIGFuZGlfb3AsIG9yaV9vcCwgeG9yaV9vcCwgbHVpX29wLAotIGNvcDBfb3AsIGNvcDFfb3AsIGNvcDJfb3AsIGNvcDF4X29wLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBjb3AwX29wLCBjb3AxX29wLCBjb3AyX29wLCBjb3AxeF9vcCwKICBiZXFsX29wLCBibmVsX29wLCBibGV6bF9vcCwgYmd0emxfb3AsCiAgZGFkZGlfb3AsIGRhZGRpdV9vcCwgbGRsX29wLCBsZHJfb3AsCiAgc3BlYzJfb3AsIGphbHhfb3AsIG1kbXhfb3AsIHNwZWMzX29wLAotIGxiX29wLCBsaF9vcCwgbHdsX29wLCBsd19vcCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbGJfb3AsIGxoX29wLCBsd2xfb3AsIGx3X29wLAogIGxidV9vcCwgbGh1X29wLCBsd3Jfb3AsIGx3dV9vcCwKICBzYl9vcCwgc2hfb3AsIHN3bF9vcCwgc3dfb3AsCiAgc2RsX29wLCBzZHJfb3AsIHN3cl9vcCwgY2FjaGVfb3AsCi0gbGxfb3AsIGx3YzFfb3AsIGx3YzJfb3AsIHByZWZfb3AsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGxsX29wLCBsd2MxX29wLCBsd2MyX29wLCBwcmVmX29wLAogIGxsZF9vcCwgbGRjMV9vcCwgbGRjMl9vcCwgbGRfb3AsCiAgc2Nfb3AsIHN3YzFfb3AsIHN3YzJfb3AsIG1ham9yXzNiX29wLAogIHNjZF9vcCwgc2RjMV9vcCwgc2RjMl9vcCwgc2Rfb3AKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gc3BlY19vcCB7CiAgc2xsX29wLCBtb3ZjX29wLCBzcmxfb3AsIHNyYV9vcCwKICBzbGx2X29wLCBwbW9uX29wLCBzcmx2X29wLCBzcmF2X29wLAotIGpyX29wLCBqYWxyX29wLCBtb3Z6X29wLCBtb3ZuX29wLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBqcl9vcCwgamFscl9vcCwgbW92el9vcCwgbW92bl9vcCwKICBzeXNjYWxsX29wLCBicmVha19vcCwgc3BpbV9vcCwgc3luY19vcCwKICBtZmhpX29wLCBtdGhpX29wLCBtZmxvX29wLCBtdGxvX29wLAogIGRzbGx2X29wLCBzcGVjMl91bnVzZWRfb3AsIGRzcmx2X29wLCBkc3Jhdl9vcCwKLSBtdWx0X29wLCBtdWx0dV9vcCwgZGl2X29wLCBkaXZ1X29wLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtdWx0X29wLCBtdWx0dV9vcCwgZGl2X29wLCBkaXZ1X29wLAogIGRtdWx0X29wLCBkbXVsdHVfb3AsIGRkaXZfb3AsIGRkaXZ1X29wLAogIGFkZF9vcCwgYWRkdV9vcCwgc3ViX29wLCBzdWJ1X29wLAogIGFuZF9vcCwgb3Jfb3AsIHhvcl9vcCwgbm9yX29wLAotIHNwZWMzX3VudXNlZF9vcCwgc3BlYzRfdW51c2VkX29wLCBzbHRfb3AsIHNsdHVfb3AsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHNwZWMzX3VudXNlZF9vcCwgc3BlYzRfdW51c2VkX29wLCBzbHRfb3AsIHNsdHVfb3AsCiAgZGFkZF9vcCwgZGFkZHVfb3AsIGRzdWJfb3AsIGRzdWJ1X29wLAogIHRnZV9vcCwgdGdldV9vcCwgdGx0X29wLCB0bHR1X29wLAogIHRlcV9vcCwgc3BlYzVfdW51c2VkX29wLCB0bmVfb3AsIHNwZWM2X3VudXNlZF9vcCwKLSBkc2xsX29wLCBzcGVjN191bnVzZWRfb3AsIGRzcmxfb3AsIGRzcmFfb3AsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGRzbGxfb3AsIHNwZWM3X3VudXNlZF9vcCwgZHNybF9vcCwgZHNyYV9vcCwKICBkc2xsMzJfb3AsIHNwZWM4X3VudXNlZF9vcCwgZHNybDMyX29wLCBkc3JhMzJfb3AKIH07CiBlbnVtIHNwZWMyX29wIHsKLSBtYWRkX29wLCBtYWRkdV9vcCwgbXVsX29wLCBzcGVjMl8zX3VudXNlZF9vcCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbWFkZF9vcCwgbWFkZHVfb3AsIG11bF9vcCwgc3BlYzJfM191bnVzZWRfb3AsCiAgbXN1Yl9vcCwgbXN1YnVfb3AsCiAgY2x6X29wID0gMHgyMCwgY2xvX29wLAogIGRjbHpfb3AgPSAweDI0LCBkY2xvX29wLAotIHNkYnBwX29wID0gMHgzZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzZGJwcF9vcCA9IDB4M2YKIH07CiBlbnVtIHNwZWMzX29wIHsKICBleHRfb3AsIGRleHRtX29wLCBkZXh0dV9vcCwgZGV4dF9vcCwKLSBpbnNfb3AsIGRpbnNtX29wLCBkaW5zdV9vcCwgZGluc19vcCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gbHhfb3AgPSAweDBhLAotIGJzaGZsX29wID0gMHgyMCwKLSBkYnNoZmxfb3AgPSAweDI0LAorIGluc19vcCwgZGluc21fb3AsIGRpbnN1X29wLCBkaW5zX29wLAorIHlpZWxkX29wID0gMHgwOSwgbHhfb3AgPSAweDBhLAorIGx3bGVfb3AgPSAweDE5LCBsd3JlX29wID0gMHgxYSwKKyBjYWNoZWVfb3AgPSAweDFiLCBzYmVfb3AgPSAweDFjLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzaGVfb3AgPSAweDFkLCBzY2Vfb3AgPSAweDFlLAorIHN3ZV9vcCA9IDB4MWYsIGJzaGZsX29wID0gMHgyMCwKKyBzd2xlX29wID0gMHgyMSwgc3dyZV9vcCA9IDB4MjIsCisgcHJlZmVfb3AgPSAweDIzLCBkYnNoZmxfb3AgPSAweDI0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBsYnVlX29wID0gMHgyOCwgbGh1ZV9vcCA9IDB4MjksCisgbGJlX29wID0gMHgyYywgbGhlX29wID0gMHgyZCwKKyBsbGVfb3AgPSAweDJlLCBsd2Vfb3AgPSAweDJmLAogIHJkaHdyX29wID0gMHgzYgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CkBAIC0xMTIsNzczICsxMjIsODA1IEBACiAgdGxicl9vcCA9IDB4MDEsIHRsYndpX29wID0gMHgwMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdGxid3Jfb3AgPSAweDA2LCB0bGJwX29wID0gMHgwOCwKLSByZmVfb3AgPSAweDEwLCBlcmV0X29wID0gMHgxOAorIHJmZV9vcCA9IDB4MTAsIGVyZXRfb3AgPSAweDE4LAorIHdhaXRfb3AgPSAweDIwLAogfTsKLWVudW0gY29wMF9jb21fZnVuYyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBjb3AwX2NvbV9mdW5jIHsKICB0bGJyMV9vcCA9IDB4MDEsIHRsYndfb3AgPSAweDAyLAogIHRsYnAxX29wID0gMHgwOCwgZGN0cl9vcCA9IDB4MDksCiAgZGN0d19vcCA9IDB4MGEKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gY29wMV9mbXQgewogIHNfZm10LCBkX2ZtdCwgZV9mbXQsIHFfZm10LAogIHdfZm10LCBsX2ZtdAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogZW51bSBjb3AxX3Nkd19mdW5jIHsKICBmYWRkX29wID0gMHgwMCwgZnN1Yl9vcCA9IDB4MDEsCiAgZm11bF9vcCA9IDB4MDIsIGZkaXZfb3AgPSAweDAzLAotIGZzcXJ0X29wID0gMHgwNCwgZmFic19vcCA9IDB4MDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGZzcXJ0X29wID0gMHgwNCwgZmFic19vcCA9IDB4MDUsCiAgZm1vdl9vcCA9IDB4MDYsIGZuZWdfb3AgPSAweDA3LAogIGZyb3VuZGxfb3AgPSAweDA4LCBmdHJ1bmNsX29wID0gMHgwOSwKICBmY2VpbGxfb3AgPSAweDBhLCBmZmxvb3JsX29wID0gMHgwYiwKLSBmcm91bmRfb3AgPSAweDBjLCBmdHJ1bmNfb3AgPSAweDBkLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBmcm91bmRfb3AgPSAweDBjLCBmdHJ1bmNfb3AgPSAweDBkLAogIGZjZWlsX29wID0gMHgwZSwgZmZsb29yX29wID0gMHgwZiwKICBmbW92Y19vcCA9IDB4MTEsIGZtb3Z6X29wID0gMHgxMiwKICBmbW92bl9vcCA9IDB4MTMsIGZyZWNpcF9vcCA9IDB4MTUsCi0gZnJzcXJ0X29wID0gMHgxNiwgZmN2dHNfb3AgPSAweDIwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBmcnNxcnRfb3AgPSAweDE2LCBmY3Z0c19vcCA9IDB4MjAsCiAgZmN2dGRfb3AgPSAweDIxLCBmY3Z0ZV9vcCA9IDB4MjIsCiAgZmN2dHdfb3AgPSAweDI0LCBmY3Z0bF9vcCA9IDB4MjUsCiAgZmNtcF9vcCA9IDB4MzAKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gY29wMXhfZnVuYyB7CiAgbHd4YzFfb3AgPSAweDAwLCBsZHhjMV9vcCA9IDB4MDEsCiAgc3d4YzFfb3AgPSAweDA4LCBzZHhjMV9vcCA9IDB4MDksCi0gcGZldGNoX29wID0gMHgwZiwgbWFkZF9zX29wID0gMHgyMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgcGZldGNoX29wID0gMHgwZiwgbWFkZF9zX29wID0gMHgyMCwKICBtYWRkX2Rfb3AgPSAweDIxLCBtYWRkX2Vfb3AgPSAweDIyLAogIG1zdWJfc19vcCA9IDB4MjgsIG1zdWJfZF9vcCA9IDB4MjksCiAgbXN1Yl9lX29wID0gMHgyYSwgbm1hZGRfc19vcCA9IDB4MzAsCi0gbm1hZGRfZF9vcCA9IDB4MzEsIG5tYWRkX2Vfb3AgPSAweDMyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBubWFkZF9kX29wID0gMHgzMSwgbm1hZGRfZV9vcCA9IDB4MzIsCiAgbm1zdWJfc19vcCA9IDB4MzgsIG5tc3ViX2Rfb3AgPSAweDM5LAogIG5tc3ViX2Vfb3AgPSAweDNhCiB9OwotZW51bSBtYWRfZnVuYyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBtYWRfZnVuYyB7CiAgbWFkZF9mcF9vcCA9IDB4MDgsIG1zdWJfZnBfb3AgPSAweDBhLAogIG5tYWRkX2ZwX29wID0gMHgwYywgbm1zdWJfZnBfb3AgPSAweDBlCiB9OwotZW51bSBseF9mdW5jIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIGx4X2Z1bmMgewogIGx3eF9vcCA9IDB4MDAsCiAgbGh4X29wID0gMHgwNCwKICBsYnV4X29wID0gMHgwNiwKLSBsZHhfb3AgPSAweDA4LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBsZHhfb3AgPSAweDA4LAogIGx3dXhfb3AgPSAweDEwLAogIGxodXhfb3AgPSAweDE0LAogIGxieF9vcCA9IDB4MTYsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitlbnVtIGJzaGZsX2Z1bmMgeworIHdzYmhfb3AgPSAweDIsCisgZHNoZF9vcCA9IDB4NSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc2ViX29wID0gMHgxMCwKKyBzZWhfb3AgPSAweDE4LAorfTsKIGVudW0gbW1fbWFqb3Jfb3AgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9wb29sMzJhX29wLCBtbV9wb29sMTZhX29wLCBtbV9sYnUxNl9vcCwgbW1fbW92ZTE2X29wLAogIG1tX2FkZGkzMl9vcCwgbW1fbGJ1MzJfb3AsIG1tX3NiMzJfb3AsIG1tX2xiMzJfb3AsCiAgbW1fcG9vbDMyYl9vcCwgbW1fcG9vbDE2Yl9vcCwgbW1fbGh1MTZfb3AsIG1tX2FuZGkxNl9vcCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fYWRkaXUzMl9vcCwgbW1fbGh1MzJfb3AsIG1tX3NoMzJfb3AsIG1tX2xoMzJfb3AsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX3Bvb2wzMmlfb3AsIG1tX3Bvb2wxNmNfb3AsIG1tX2x3c3AxNl9vcCwgbW1fcG9vbDE2ZF9vcCwKICBtbV9vcmkzMl9vcCwgbW1fcG9vbDMyZl9vcCwgbW1fcmVzZXJ2ZWQxX29wLCBtbV9yZXNlcnZlZDJfb3AsCiAgbW1fcG9vbDMyY19vcCwgbW1fbHdncDE2X29wLCBtbV9sdzE2X29wLCBtbV9wb29sMTZlX29wLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV94b3JpMzJfb3AsIG1tX2phbHMzMl9vcCwgbW1fYWRkaXVwY19vcCwgbW1fcmVzZXJ2ZWQzX29wLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9yZXNlcnZlZDRfb3AsIG1tX3Bvb2wxNmZfb3AsIG1tX3NiMTZfb3AsIG1tX2JlcXoxNl9vcCwKICBtbV9zbHRpMzJfb3AsIG1tX2JlcTMyX29wLCBtbV9zd2MxMzJfb3AsIG1tX2x3YzEzMl9vcCwKICBtbV9yZXNlcnZlZDVfb3AsIG1tX3Jlc2VydmVkNl9vcCwgbW1fc2gxNl9vcCwgbW1fYm5lejE2X29wLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9zbHRpdTMyX29wLCBtbV9ibmUzMl9vcCwgbW1fc2RjMTMyX29wLCBtbV9sZGMxMzJfb3AsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX3Jlc2VydmVkN19vcCwgbW1fcmVzZXJ2ZWQ4X29wLCBtbV9zd3NwMTZfb3AsIG1tX2IxNl9vcCwKICBtbV9hbmRpMzJfb3AsIG1tX2ozMl9vcCwgbW1fc2QzMl9vcCwgbW1fbGQzMl9vcCwKICBtbV9yZXNlcnZlZDExX29wLCBtbV9yZXNlcnZlZDEyX29wLCBtbV9zdzE2X29wLCBtbV9saTE2X29wLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9qYWx4MzJfb3AsIG1tX2phbDMyX29wLCBtbV9zdzMyX29wLCBtbV9sdzMyX29wLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIG1tXzMyaV9taW5vcl9vcCB7CiAgbW1fYmx0el9vcCwgbW1fYmx0emFsX29wLCBtbV9iZ2V6X29wLCBtbV9iZ2V6YWxfb3AsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX2JsZXpfb3AsIG1tX2JuZXpjX29wLCBtbV9iZ3R6X29wLCBtbV9iZXF6Y19vcCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fdGx0aV9vcCwgbW1fdGdlaV9vcCwgbW1fdGx0aXVfb3AsIG1tX3RnZWl1X29wLAogIG1tX3RuZWlfb3AsIG1tX2x1aV9vcCwgbW1fdGVxaV9vcCwgbW1fcmVzZXJ2ZWQxM19vcCwKICBtbV9zeW5jaV9vcCwgbW1fYmx0emFsc19vcCwgbW1fcmVzZXJ2ZWQxNF9vcCwgbW1fYmdlemFsc19vcCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fYmMyZl9vcCwgbW1fYmMydF9vcCwgbW1fcmVzZXJ2ZWQxNV9vcCwgbW1fcmVzZXJ2ZWQxNl9vcCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fcmVzZXJ2ZWQxN19vcCwgbW1fcmVzZXJ2ZWQxOF9vcCwgbW1fYnBvc2dlNjRfb3AsIG1tX2Jwb3NnZTMyX29wLAogIG1tX2JjMWZfb3AsIG1tX2JjMXRfb3AsIG1tX3Jlc2VydmVkMTlfb3AsIG1tX3Jlc2VydmVkMjBfb3AsCiAgbW1fYmMxYW55MmZfb3AsIG1tX2JjMWFueTJ0X29wLCBtbV9iYzFhbnk0Zl9vcCwgbW1fYmMxYW55NHRfb3AsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG1tXzMyYV9taW5vcl9vcCB7CiAgbW1fc2xsMzJfb3AgPSAweDAwMCwKICBtbV9pbnNfb3AgPSAweDAwYywKKyBtbV9zbGx2MzJfb3AgPSAweDAxMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fZXh0X29wID0gMHgwMmMsCiAgbW1fcG9vbDMyYXhmX29wID0gMHgwM2MsCiAgbW1fc3JsMzJfb3AgPSAweDA0MCwKICBtbV9zcmFfb3AgPSAweDA4MCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fc3JsdjMyX29wID0gMHgwOTAsCiAgbW1fcm90cl9vcCA9IDB4MGMwLAogIG1tX2x3eHNfb3AgPSAweDExOCwKICBtbV9hZGR1MzJfb3AgPSAweDE1MCwKLSBtbV9zdWJ1MzJfb3AgPSAweDFkMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fc3VidTMyX29wID0gMHgxZDAsCisgbW1fd3NiaF9vcCA9IDB4MWVjLAorIG1tX211bF9vcCA9IDB4MjEwLAogIG1tX2FuZF9vcCA9IDB4MjUwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9vcjMyX29wID0gMHgyOTAsCiAgbW1feG9yMzJfb3AgPSAweDMxMCwKLX07CisgbW1fc2x0X29wID0gMHgzNTAsCisgbW1fc2x0dV9vcCA9IDB4MzkwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBlbnVtIG1tXzMyYl9mdW5jIHsKICBtbV9sd2MyX2Z1bmMgPSAweDAsCiAgbW1fbHdwX2Z1bmMgPSAweDEsCi0gbW1fbGRjMl9mdW5jID0gMHgyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9sZGMyX2Z1bmMgPSAweDIsCiAgbW1fbGRwX2Z1bmMgPSAweDQsCiAgbW1fbHdtMzJfZnVuYyA9IDB4NSwKICBtbV9jYWNoZV9mdW5jID0gMHg2LAotIG1tX2xkbV9mdW5jID0gMHg3LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9sZG1fZnVuYyA9IDB4NywKICBtbV9zd2MyX2Z1bmMgPSAweDgsCiAgbW1fc3dwX2Z1bmMgPSAweDksCiAgbW1fc2RjMl9mdW5jID0gMHhhLAotIG1tX3NkcF9mdW5jID0gMHhjLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9zZHBfZnVuYyA9IDB4YywKICBtbV9zd20zMl9mdW5jID0gMHhkLAogIG1tX3NkbV9mdW5jID0gMHhmLAogfTsKLWVudW0gbW1fMzJjX2Z1bmMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbW1fMzJjX2Z1bmMgewogIG1tX3ByZWZfZnVuYyA9IDB4MiwKICBtbV9sbF9mdW5jID0gMHgzLAogIG1tX3N3cl9mdW5jID0gMHg5LAotIG1tX3NjX2Z1bmMgPSAweGIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX3NjX2Z1bmMgPSAweGIsCiAgbW1fbHd1X2Z1bmMgPSAweGUsCiB9OwogZW51bSBtbV8zMmF4Zl9taW5vcl9vcCB7Ci0gbW1fbWZjMF9vcCA9IDB4MDAzLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9tZmMwX29wID0gMHgwMDMsCiAgbW1fbXRjMF9vcCA9IDB4MDBiLAogIG1tX3RsYnBfb3AgPSAweDAwZCwKKyBtbV9tZmhpMzJfb3AgPSAweDAzNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1famFscl9vcCA9IDB4MDNjLAogIG1tX3RsYnJfb3AgPSAweDA0ZCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fbWZsbzMyX29wID0gMHgwNzUsCiAgbW1famFscmhiX29wID0gMHgwN2MsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX3RsYndpX29wID0gMHgwOGQsCiAgbW1fdGxid3Jfb3AgPSAweDBjZCwKICBtbV9qYWxyc19vcCA9IDB4MTNjLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9qYWxyc2hiX29wID0gMHgxN2MsCi0gbW1fc3lzY2FsbF9vcCA9IDB4MjJkLAotIG1tX2VyZXRfb3AgPSAweDNjZCwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX3N5bmNfb3AgPSAweDFhZCwKKyBtbV9zeXNjYWxsX29wID0gMHgyMmQsCisgbW1fd2FpdF9vcCA9IDB4MjRkLAorIG1tX2VyZXRfb3AgPSAweDNjZCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fZGl2dV9vcCA9IDB4NWRjLAorfTsKIGVudW0gbW1fMzJmX21pbm9yX29wIHsKICBtbV8zMmZfMDBfb3AgPSAweDAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV8zMmZfMDFfb3AgPSAweDAxLAogIG1tXzMyZl8wMl9vcCA9IDB4MDIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tXzMyZl8xMF9vcCA9IDB4MDgsCiAgbW1fMzJmXzExX29wID0gMHgwOSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fMzJmXzEyX29wID0gMHgwYSwKICBtbV8zMmZfMjBfb3AgPSAweDEwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV8zMmZfMzBfb3AgPSAweDE4LAogIG1tXzMyZl80MF9vcCA9IDB4MjAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tXzMyZl80MV9vcCA9IDB4MjEsCiAgbW1fMzJmXzQyX29wID0gMHgyMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fMzJmXzUwX29wID0gMHgyOCwKICBtbV8zMmZfNTFfb3AgPSAweDI5LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV8zMmZfNTJfb3AgPSAweDJhLAogIG1tXzMyZl82MF9vcCA9IDB4MzAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tXzMyZl83MF9vcCA9IDB4MzgsCiAgbW1fMzJmXzczX29wID0gMHgzYiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fMzJmXzc0X29wID0gMHgzYywKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBtbV8zMmZfMTBfbWlub3Jfb3AgewogIG1tX2x3eGMxX29wID0gMHgxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9zd3hjMV9vcCwKICBtbV9sZHhjMV9vcCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fc2R4YzFfb3AsCiAgbW1fbHV4YzFfb3AsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX3N1eGMxX29wLAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG1tXzMyZl9mdW5jIHsKICBtbV9sd3hjMV9mdW5jID0gMHgwNDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX3N3eGMxX2Z1bmMgPSAweDA4OCwKICBtbV9sZHhjMV9mdW5jID0gMHgwYzgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX3NkeGMxX2Z1bmMgPSAweDEwOCwKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBtbV8zMmZfNDBfbWlub3Jfb3AgewogIG1tX2Ztb3ZmX29wLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9mbW92dF9vcCwKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBtbV8zMmZfNjBfbWlub3Jfb3AgewogIG1tX2ZhZGRfb3AsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX2ZzdWJfb3AsCiAgbW1fZm11bF9vcCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fZmRpdl9vcCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBtbV8zMmZfNzBfbWlub3Jfb3AgewogIG1tX2Ztb3ZuX29wLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9mbW92el9vcCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBtbV8zMmZfNzNfbWlub3Jfb3AgewogIG1tX2Ztb3YwX29wID0gMHgwMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fZmN2dGxfb3AgPSAweDA0LAogIG1tX21vdmYwX29wID0gMHgwNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fZnJzcXJ0X29wID0gMHgwOCwKICBtbV9mZmxvb3JsX29wID0gMHgwYywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fZmFiczBfb3AgPSAweDBkLAogIG1tX2ZjdnR3X29wID0gMHgyNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fbW92dDBfb3AgPSAweDI1LAogIG1tX2ZzcXJ0X29wID0gMHgyOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fZmZsb29yd19vcCA9IDB4MmMsCiAgbW1fZm5lZzBfb3AgPSAweDJkLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9jZmMxX29wID0gMHg0MCwKICBtbV9mcmVjaXBfb3AgPSAweDQ4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9mY2VpbGxfb3AgPSAweDRjLAogIG1tX2ZjdnRkMF9vcCA9IDB4NGQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX2N0YzFfb3AgPSAweDYwLAogIG1tX2ZjZWlsd19vcCA9IDB4NmMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX2ZjdnRzMF9vcCA9IDB4NmQsCiAgbW1fbWZjMV9vcCA9IDB4ODAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX2Ztb3YxX29wID0gMHg4MSwKICBtbV9tb3ZmMV9vcCA9IDB4ODUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX2Z0cnVuY2xfb3AgPSAweDhjLAogIG1tX2ZhYnMxX29wID0gMHg4ZCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fbXRjMV9vcCA9IDB4YTAsCiAgbW1fbW92dDFfb3AgPSAweGE1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9mdHJ1bmN3X29wID0gMHhhYywKICBtbV9mbmVnMV9vcCA9IDB4YWQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX21maGMxX29wID0gMHhjMCwKICBtbV9mcm91bmRsX29wID0gMHhjYywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fZmN2dGQxX29wID0gMHhjZCwKICBtbV9tdGhjMV9vcCA9IDB4ZTAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX2Zyb3VuZHdfb3AgPSAweGVjLAogIG1tX2ZjdnRzMV9vcCA9IDB4ZWQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gbW1fMTZjX21pbm9yX29wIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fbHdtMTZfb3AgPSAweDA0LAogIG1tX3N3bTE2X29wID0gMHgwNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fanIxNl9vcCA9IDB4MGMsCiAgbW1fanJjX29wID0gMHgwZCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1famFscjE2X29wID0gMHgwZSwKICBtbV9qYWxyczE2X29wID0gMHgwZiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fanJhZGRpdXNwX29wID0gMHgxOCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBtbV8xNmRfbWlub3Jfb3AgewogIG1tX2FkZGl1czVfZnVuYywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fYWRkaXVzcF9mdW5jLAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIE1JUFMxNmVfb3BzIHsKICBNSVBTMTZlX2phbF9vcCA9IDAwMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTUlQUzE2ZV9sZF9vcCA9IDAwNywKICBNSVBTMTZlX2k4X29wID0gMDE0LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNSVBTMTZlX3NkX29wID0gMDE3LAogIE1JUFMxNmVfbGJfb3AgPSAwMjAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE1JUFMxNmVfbGhfb3AgPSAwMjEsCiAgTUlQUzE2ZV9sd3NwX29wID0gMDIyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNSVBTMTZlX2x3X29wID0gMDIzLAogIE1JUFMxNmVfbGJ1X29wID0gMDI0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNSVBTMTZlX2xodV9vcCA9IDAyNSwKICBNSVBTMTZlX2x3cGNfb3AgPSAwMjYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE1JUFMxNmVfbHd1X29wID0gMDI3LAogIE1JUFMxNmVfc2Jfb3AgPSAwMzAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE1JUFMxNmVfc2hfb3AgPSAwMzEsCiAgTUlQUzE2ZV9zd3NwX29wID0gMDMyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNSVBTMTZlX3N3X29wID0gMDMzLAogIE1JUFMxNmVfcnJfb3AgPSAwMzUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE1JUFMxNmVfZXh0ZW5kX29wID0gMDM2LAogIE1JUFMxNmVfaTY0X29wID0gMDM3LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIE1JUFMxNmVfaTY0X2Z1bmMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNSVBTMTZlX2xkc3BfZnVuYywKICBNSVBTMTZlX3Nkc3BfZnVuYywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTUlQUzE2ZV9zZHJhc3BfZnVuYywKICBNSVBTMTZlX2RhZGpzcF9mdW5jLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNSVBTMTZlX2xkcGNfZnVuYywKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBNSVBTMTZlX3JyX2Z1bmMgewogIE1JUFMxNmVfanJfZnVuYywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSBNSVBTNmVfaThfZnVuYyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE1JUFMxNmVfc3dyYXNwX2Z1bmMgPSAwMiwKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNTV9OT1AxNiAweDBjMDAKLSNkZWZpbmUgQklURklFTERfRklFTEQoZmllbGQsIG1vcmUpICAgbW9yZSAgIGZpZWxkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBqX2Zvcm1hdCB7Ci0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHRhcmdldCA6IDI2LAotIDspKQorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgdGFyZ2V0IDogMjYsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIDspKQogfTsKIHN0cnVjdCBpX2Zvcm1hdCB7Ci0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJzIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHNpZ25lZCBpbnQgc2ltbWVkaWF0ZSA6IDE2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJzIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDUsCisgX19CSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiAxNiwKICA7KSkpKQotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IHVfZm9ybWF0IHsKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnMgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBycyA6IDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCB1aW1tZWRpYXRlIDogMTYsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHVpbW1lZGlhdGUgOiAxNiwKICA7KSkpKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY19mb3JtYXQgeworIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnMgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGNfb3AgOiAzLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnMgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBjX29wIDogMywKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgY2FjaGUgOiAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgc2ltbWVkaWF0ZSA6IDE2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGNhY2hlIDogMiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBzaW1tZWRpYXRlIDogMTYsCiAgOykpKSkpCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCByX2Zvcm1hdCB7CisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBycyA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnMgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJkIDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJlIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmQgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJlIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKICA7KSkpKSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcF9mb3JtYXQgewotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBycyA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJzIDogNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJkIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmUgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmQgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJlIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKSkpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZl9mb3JtYXQgewotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCA6IDEsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDQsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmQgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByZSA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxLAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDQsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJkIDogNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJlIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKICA7KSkpKSkpKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbWFfZm9ybWF0IHsKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZyIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdCA6IDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmciA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ0IDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmZCA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDQsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZm10IDogMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZkIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDQsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDIsCiAgOykpKSkpKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGJfZm9ybWF0IHsKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgY29kZSA6IDIwLAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBjb2RlIDogMjAsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCiAgOykpKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcHNfZm9ybWF0IHsKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJzIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdCA6IDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBycyA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ0IDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAogIDspKSkpKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2X2Zvcm1hdCB7Ci0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHNlbCA6IDQsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDEsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBzZWwgOiA0LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgdnQgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCB2cyA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHZkIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZm10IDogMSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCB2dCA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgdnMgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHZkIDogNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCiAgOykpKSkpKSkKIH07CitzdHJ1Y3Qgc3BlYzNfZm9ybWF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlOjYsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnM6NSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydDo1LAorIF9fQklURklFTERfRklFTEQoc2lnbmVkIGludCBzaW1tZWRpYXRlOjksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmM6NywKKyA7KSkpKSkKK307CiBzdHJ1Y3QgZmJfZm9ybWF0IHsKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGJjIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgY2MgOiAzLAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmbGFnIDogMiwKLSBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiAxNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGJjIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBjYyA6IDMsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmxhZyA6IDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fQklURklFTERfRklFTEQoc2lnbmVkIGludCBzaW1tZWRpYXRlIDogMTYsCiAgOykpKSkpCiB9Owogc3RydWN0IGZwMF9mb3JtYXQgewotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZm10IDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnQgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZkIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnQgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZkIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKICA7KSkpKSkpCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtbV9mcDBfZm9ybWF0IHsKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ0IDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdCA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZkIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmbXQgOiAzLAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wIDogMiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDMsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wIDogMiwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCiAgOykpKSkpKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGZwMV9mb3JtYXQgewotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcCA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmZCA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZkIDogNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCiAgOykpKSkpKQogfTsKIHN0cnVjdCBtbV9mcDFfZm9ybWF0IHsKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmbXQgOiAyLAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcCA6IDgsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcCA6IDgsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCiAgOykpKSkpKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW1fZnAyX2Zvcm1hdCB7CisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmZCA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGNjIDogMywKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBjYyA6IDMsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgemVybyA6IDIsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZm10IDogMiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcCA6IDMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCB6ZXJvIDogMiwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZm10IDogMiwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3AgOiAzLAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCiAgOykpKSkpKSkpCiB9Owogc3RydWN0IG1tX2ZwM19mb3JtYXQgewotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDMsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wIDogNywKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZm10IDogMywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wIDogNywKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKICA7KSkpKSkpCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtbV9mcDRfZm9ybWF0IHsKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgY2MgOiAzLAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGNjIDogMywKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmbXQgOiAzLAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGNvbmQgOiA0LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZm10IDogMywKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgY29uZCA6IDQsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAogIDspKSkpKSkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBtbV9mcDVfZm9ybWF0IHsKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgaW5kZXggOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBiYXNlIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcCA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGluZGV4IDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBiYXNlIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmZCA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3AgOiA1LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKICA7KSkpKSkpCiB9Owogc3RydWN0IGZwNl9mb3JtYXQgewotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnIgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdCA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnIgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ0IDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmZCA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCiAgOykpKSkpKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW1fZnA2X2Zvcm1hdCB7CisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdCA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnQgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZkIDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZyIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZyIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKICA7KSkpKSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW1faV9mb3JtYXQgewotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJzIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQoc2lnbmVkIGludCBzaW1tZWRpYXRlIDogMTYsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnMgOiA1LAorIF9fQklURklFTERfRklFTEQoc2lnbmVkIGludCBzaW1tZWRpYXRlIDogMTYsCiAgOykpKSkKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG1tX21fZm9ybWF0IHsKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJkIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBiYXNlIDogNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJkIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgYmFzZSA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA0LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiAxMiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNCwKKyBfX0JJVEZJRUxEX0ZJRUxEKHNpZ25lZCBpbnQgc2ltbWVkaWF0ZSA6IDEyLAogIDspKSkpKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW1feF9mb3JtYXQgeworIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgaW5kZXggOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGJhc2UgOiA1LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgaW5kZXggOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBiYXNlIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmQgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDExLAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJkIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogMTEsCiAgOykpKSkpCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtbV9iMF9mb3JtYXQgeworIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCisgX19CSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiAxMCwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCA6IDE2LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLSBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiAxMCwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxNiwKICA7KSkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBtbV9iMV9mb3JtYXQgewotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBycyA6IDMsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQoc2lnbmVkIGludCBzaW1tZWRpYXRlIDogNywKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBycyA6IDMsCisgX19CSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiA3LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IDogMTYsCiAgOykpKSkKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBtbTE2X21fZm9ybWF0IHsKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDQsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJsaXN0IDogMiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA0LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgaW1tIDogNCwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBybGlzdCA6IDIsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgaW1tIDogNCwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCA6IDE2LAogIDspKSkpKQotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IG1tMTZfcmJfZm9ybWF0IHsKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiAzLAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBiYXNlIDogMywKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogMywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQoc2lnbmVkIGludCBzaW1tZWRpYXRlIDogNCwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBiYXNlIDogMywKKyBfX0JJVEZJRUxEX0ZJRUxEKHNpZ25lZCBpbnQgc2ltbWVkaWF0ZSA6IDQsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxNiwKICA7KSkpKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtbTE2X3IzX2Zvcm1hdCB7Ci0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogMywKLSBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiA3LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiAzLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxNiwKKyBfX0JJVEZJRUxEX0ZJRUxEKHNpZ25lZCBpbnQgc2ltbWVkaWF0ZSA6IDcsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxNiwKICA7KSkpKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW0xNl9yNV9mb3JtYXQgeworIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAorIF9fQklURklFTERfRklFTEQoc2lnbmVkIGludCBzaW1tZWRpYXRlIDogNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKLSBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCA6IDE2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCA6IDE2LAogIDspKSkpCiB9Owogc3RydWN0IG0xNmVfcnIgewotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA1LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnggOiAzLAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBuZCA6IDEsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGwgOiAxLAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByYSA6IDEsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByeCA6IDMsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgbmQgOiAxLAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGwgOiAxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmEgOiAxLAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA1LAogIDspKSkpKSkKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG0xNmVfamFsIHsKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHggOiAxLAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGltbTIwXzE2IDogNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHggOiAxLAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbW0yMF8xNiA6IDUsCi0gQklURklFTERfRklFTEQoc2lnbmVkIGludCBpbW0yNV8yMSA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fQklURklFTERfRklFTEQoc2lnbmVkIGludCBpbW0yNV8yMSA6IDUsCiAgOykpKSkKIH07CiBzdHJ1Y3QgbTE2ZV9pNjQgewotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA1LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDMsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGltbSA6IDgsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNSwKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogMywKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbW0gOiA4LAogIDspKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtMTZlX3JpNjQgewotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA1LAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogMywKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnkgOiAzLAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbW0gOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ5IDogMywKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbW0gOiA1LAogIDspKSkpCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtMTZlX3JpIHsKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA1LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ4IDogMywKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbW0gOiA4LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnggOiAzLAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbW0gOiA4LAogIDspKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IG0xNmVfcnJpIHsKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNSwKLSBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnggOiAzLAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByeSA6IDMsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGltbSA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnggOiAzLAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ5IDogMywKKyBfX0JJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbW0gOiA1LAogIDspKSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbTE2ZV9pOCB7Ci0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDUsCi0gQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiAzLAotIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbW0gOiA4LAorIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDUsCisgX19CSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGltbSA6IDgsCiAgOykpKQogfTsKIHVuaW9uIG1pcHNfaW5zdHJ1Y3Rpb24gewotIHVuc2lnbmVkIGludCB3b3JkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgd29yZDsKICB1bnNpZ25lZCBzaG9ydCBoYWxmd29yZFsyXTsKICB1bnNpZ25lZCBjaGFyIGJ5dGVbNF07CiAgc3RydWN0IGpfZm9ybWF0IGpfZm9ybWF0OwotIHN0cnVjdCBpX2Zvcm1hdCBpX2Zvcm1hdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGlfZm9ybWF0IGlfZm9ybWF0OwogIHN0cnVjdCB1X2Zvcm1hdCB1X2Zvcm1hdDsKICBzdHJ1Y3QgY19mb3JtYXQgY19mb3JtYXQ7CiAgc3RydWN0IHJfZm9ybWF0IHJfZm9ybWF0OwotIHN0cnVjdCBwX2Zvcm1hdCBwX2Zvcm1hdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHBfZm9ybWF0IHBfZm9ybWF0OwogIHN0cnVjdCBmX2Zvcm1hdCBmX2Zvcm1hdDsKICBzdHJ1Y3QgbWFfZm9ybWF0IG1hX2Zvcm1hdDsKICBzdHJ1Y3QgYl9mb3JtYXQgYl9mb3JtYXQ7Ci0gc3RydWN0IHBzX2Zvcm1hdCBwc19mb3JtYXQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBwc19mb3JtYXQgcHNfZm9ybWF0OwogIHN0cnVjdCB2X2Zvcm1hdCB2X2Zvcm1hdDsKKyBzdHJ1Y3Qgc3BlYzNfZm9ybWF0IHNwZWMzX2Zvcm1hdDsKICBzdHJ1Y3QgZmJfZm9ybWF0IGZiX2Zvcm1hdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGZwMF9mb3JtYXQgZnAwX2Zvcm1hdDsKICBzdHJ1Y3QgbW1fZnAwX2Zvcm1hdCBtbV9mcDBfZm9ybWF0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZnAxX2Zvcm1hdCBmcDFfZm9ybWF0OwogIHN0cnVjdCBtbV9mcDFfZm9ybWF0IG1tX2ZwMV9mb3JtYXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtbV9mcDJfZm9ybWF0IG1tX2ZwMl9mb3JtYXQ7CiAgc3RydWN0IG1tX2ZwM19mb3JtYXQgbW1fZnAzX2Zvcm1hdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG1tX2ZwNF9mb3JtYXQgbW1fZnA0X2Zvcm1hdDsKICBzdHJ1Y3QgbW1fZnA1X2Zvcm1hdCBtbV9mcDVfZm9ybWF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZnA2X2Zvcm1hdCBmcDZfZm9ybWF0OwogIHN0cnVjdCBtbV9mcDZfZm9ybWF0IG1tX2ZwNl9mb3JtYXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtbV9pX2Zvcm1hdCBtbV9pX2Zvcm1hdDsKICBzdHJ1Y3QgbW1fbV9mb3JtYXQgbW1fbV9mb3JtYXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtbV94X2Zvcm1hdCBtbV94X2Zvcm1hdDsKICBzdHJ1Y3QgbW1fYjBfZm9ybWF0IG1tX2IwX2Zvcm1hdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG1tX2IxX2Zvcm1hdCBtbV9iMV9mb3JtYXQ7CiAgc3RydWN0IG1tMTZfbV9mb3JtYXQgbW0xNl9tX2Zvcm1hdCA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtbTE2X3JiX2Zvcm1hdCBtbTE2X3JiX2Zvcm1hdDsKICBzdHJ1Y3QgbW0xNl9yM19mb3JtYXQgbW0xNl9yM19mb3JtYXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtbTE2X3I1X2Zvcm1hdCBtbTE2X3I1X2Zvcm1hdDsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdW5pb24gbWlwczE2ZV9pbnN0cnVjdGlvbiB7CiAgdW5zaWduZWQgaW50IGZ1bGwgOiAxNjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG0xNmVfcnIgcnI7CiAgc3RydWN0IG0xNmVfamFsIGphbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG0xNmVfaTY0IGk2NDsKICBzdHJ1Y3QgbTE2ZV9yaTY0IHJpNjQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtMTZlX3JpIHJpOwogIHN0cnVjdCBtMTZlX3JyaSBycmk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtMTZlX2k4IGk4OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2t2bS5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20va3ZtLmgKaW5kZXggNjkwODRlZS4uOTA4YWI5ZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20va3ZtLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20va3ZtLmgKQEAgLTgyLDYgKzgyLDExIEBACiAjZGVmaW5lIEtWTV9SRUdfTUlQU19MTyAoS1ZNX1JFR19NSVBTIHwgS1ZNX1JFR19TSVpFX1U2NCB8IDMzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19NSVBTX1BDIChLVk1fUkVHX01JUFMgfCBLVk1fUkVHX1NJWkVfVTY0IHwgMzQpCisjZGVmaW5lIEtWTV9SRUdfTUlQU19DT1VOVF9DVEwgKEtWTV9SRUdfTUlQUyB8IEtWTV9SRUdfU0laRV9VNjQgfCAgIDB4MjAwMDAgfCAwKQorI2RlZmluZSBLVk1fUkVHX01JUFNfQ09VTlRfQ1RMX0RDIDB4MDAwMDAwMDEKKyNkZWZpbmUgS1ZNX1JFR19NSVBTX0NPVU5UX1JFU1VNRSAoS1ZNX1JFR19NSVBTIHwgS1ZNX1JFR19TSVpFX1U2NCB8ICAgMHgyMDAwMCB8IDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUkVHX01JUFNfQ09VTlRfSFogKEtWTV9SRUdfTUlQUyB8IEtWTV9SRUdfU0laRV9VNjQgfCAgIDB4MjAwMDAgfCAyKQogc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggewogIF9fdTY0IGVwYzsKIH07CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9rdm1fcGFyYS5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20va3ZtX3BhcmEuaAppbmRleCBlMTlmN2EwLi44MjVjMTJhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9rdm1fcGFyYS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2t2bV9wYXJhLmgKQEAgLTE2LDQgKzE2LDYgQEAKICAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9rdm1fcGFyYS5oPgorI2lmbmRlZiBfVUFQSV9BU01fTUlQU19LVk1fUEFSQV9ICisjZGVmaW5lIF9VQVBJX0FTTV9NSVBTX0tWTV9QQVJBX0gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vcmVnLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWM4OWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vcmVnLmgKQEAgLTAsMCArMSwyMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19VQVBJX0FTTV9NSVBTX1JFR19ICisjZGVmaW5lIF9fVUFQSV9BU01fTUlQU19SRUdfSAorI2RlZmluZSBNSVBTMzJfRUZfUjAgNgorI2RlZmluZSBNSVBTMzJfRUZfUjEgNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUlQUzMyX0VGX1IyIDgKKyNkZWZpbmUgTUlQUzMyX0VGX1IzIDkKKyNkZWZpbmUgTUlQUzMyX0VGX1I0IDEwCisjZGVmaW5lIE1JUFMzMl9FRl9SNSAxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUlQUzMyX0VGX1I2IDEyCisjZGVmaW5lIE1JUFMzMl9FRl9SNyAxMworI2RlZmluZSBNSVBTMzJfRUZfUjggMTQKKyNkZWZpbmUgTUlQUzMyX0VGX1I5IDE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNSVBTMzJfRUZfUjEwIDE2CisjZGVmaW5lIE1JUFMzMl9FRl9SMTEgMTcKKyNkZWZpbmUgTUlQUzMyX0VGX1IxMiAxOAorI2RlZmluZSBNSVBTMzJfRUZfUjEzIDE5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNSVBTMzJfRUZfUjE0IDIwCisjZGVmaW5lIE1JUFMzMl9FRl9SMTUgMjEKKyNkZWZpbmUgTUlQUzMyX0VGX1IxNiAyMgorI2RlZmluZSBNSVBTMzJfRUZfUjE3IDIzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNSVBTMzJfRUZfUjE4IDI0CisjZGVmaW5lIE1JUFMzMl9FRl9SMTkgMjUKKyNkZWZpbmUgTUlQUzMyX0VGX1IyMCAyNgorI2RlZmluZSBNSVBTMzJfRUZfUjIxIDI3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNSVBTMzJfRUZfUjIyIDI4CisjZGVmaW5lIE1JUFMzMl9FRl9SMjMgMjkKKyNkZWZpbmUgTUlQUzMyX0VGX1IyNCAzMAorI2RlZmluZSBNSVBTMzJfRUZfUjI1IDMxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNSVBTMzJfRUZfUjI2IDMyCisjZGVmaW5lIE1JUFMzMl9FRl9SMjcgMzMKKyNkZWZpbmUgTUlQUzMyX0VGX1IyOCAzNAorI2RlZmluZSBNSVBTMzJfRUZfUjI5IDM1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNSVBTMzJfRUZfUjMwIDM2CisjZGVmaW5lIE1JUFMzMl9FRl9SMzEgMzcKKyNkZWZpbmUgTUlQUzMyX0VGX0xPIDM4CisjZGVmaW5lIE1JUFMzMl9FRl9ISSAzOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUlQUzMyX0VGX0NQMF9FUEMgNDAKKyNkZWZpbmUgTUlQUzMyX0VGX0NQMF9CQURWQUREUiA0MQorI2RlZmluZSBNSVBTMzJfRUZfQ1AwX1NUQVRVUyA0MgorI2RlZmluZSBNSVBTMzJfRUZfQ1AwX0NBVVNFIDQzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNSVBTMzJfRUZfVU5VU0VEMCA0NAorI2RlZmluZSBNSVBTMzJfRUZfU0laRSAxODAKKyNkZWZpbmUgTUlQUzY0X0VGX1IwIDAKKyNkZWZpbmUgTUlQUzY0X0VGX1IxIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1JUFM2NF9FRl9SMiAyCisjZGVmaW5lIE1JUFM2NF9FRl9SMyAzCisjZGVmaW5lIE1JUFM2NF9FRl9SNCA0CisjZGVmaW5lIE1JUFM2NF9FRl9SNSA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNSVBTNjRfRUZfUjYgNgorI2RlZmluZSBNSVBTNjRfRUZfUjcgNworI2RlZmluZSBNSVBTNjRfRUZfUjggOAorI2RlZmluZSBNSVBTNjRfRUZfUjkgOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUlQUzY0X0VGX1IxMCAxMAorI2RlZmluZSBNSVBTNjRfRUZfUjExIDExCisjZGVmaW5lIE1JUFM2NF9FRl9SMTIgMTIKKyNkZWZpbmUgTUlQUzY0X0VGX1IxMyAxMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUlQUzY0X0VGX1IxNCAxNAorI2RlZmluZSBNSVBTNjRfRUZfUjE1IDE1CisjZGVmaW5lIE1JUFM2NF9FRl9SMTYgMTYKKyNkZWZpbmUgTUlQUzY0X0VGX1IxNyAxNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUlQUzY0X0VGX1IxOCAxOAorI2RlZmluZSBNSVBTNjRfRUZfUjE5IDE5CisjZGVmaW5lIE1JUFM2NF9FRl9SMjAgMjAKKyNkZWZpbmUgTUlQUzY0X0VGX1IyMSAyMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUlQUzY0X0VGX1IyMiAyMgorI2RlZmluZSBNSVBTNjRfRUZfUjIzIDIzCisjZGVmaW5lIE1JUFM2NF9FRl9SMjQgMjQKKyNkZWZpbmUgTUlQUzY0X0VGX1IyNSAyNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUlQUzY0X0VGX1IyNiAyNgorI2RlZmluZSBNSVBTNjRfRUZfUjI3IDI3CisjZGVmaW5lIE1JUFM2NF9FRl9SMjggMjgKKyNkZWZpbmUgTUlQUzY0X0VGX1IyOSAyOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUlQUzY0X0VGX1IzMCAzMAorI2RlZmluZSBNSVBTNjRfRUZfUjMxIDMxCisjZGVmaW5lIE1JUFM2NF9FRl9MTyAzMgorI2RlZmluZSBNSVBTNjRfRUZfSEkgMzMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1JUFM2NF9FRl9DUDBfRVBDIDM0CisjZGVmaW5lIE1JUFM2NF9FRl9DUDBfQkFEVkFERFIgMzUKKyNkZWZpbmUgTUlQUzY0X0VGX0NQMF9TVEFUVVMgMzYKKyNkZWZpbmUgTUlQUzY0X0VGX0NQMF9DQVVTRSAzNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUlQUzY0X0VGX1NJWkUgMzA0CisjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMgorI2RlZmluZSBFRl9SMCBNSVBTMzJfRUZfUjAKKyNkZWZpbmUgRUZfUjEgTUlQUzMyX0VGX1IxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFRl9SMiBNSVBTMzJfRUZfUjIKKyNkZWZpbmUgRUZfUjMgTUlQUzMyX0VGX1IzCisjZGVmaW5lIEVGX1I0IE1JUFMzMl9FRl9SNAorI2RlZmluZSBFRl9SNSBNSVBTMzJfRUZfUjUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVGX1I2IE1JUFMzMl9FRl9SNgorI2RlZmluZSBFRl9SNyBNSVBTMzJfRUZfUjcKKyNkZWZpbmUgRUZfUjggTUlQUzMyX0VGX1I4CisjZGVmaW5lIEVGX1I5IE1JUFMzMl9FRl9SOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRUZfUjEwIE1JUFMzMl9FRl9SMTAKKyNkZWZpbmUgRUZfUjExIE1JUFMzMl9FRl9SMTEKKyNkZWZpbmUgRUZfUjEyIE1JUFMzMl9FRl9SMTIKKyNkZWZpbmUgRUZfUjEzIE1JUFMzMl9FRl9SMTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVGX1IxNCBNSVBTMzJfRUZfUjE0CisjZGVmaW5lIEVGX1IxNSBNSVBTMzJfRUZfUjE1CisjZGVmaW5lIEVGX1IxNiBNSVBTMzJfRUZfUjE2CisjZGVmaW5lIEVGX1IxNyBNSVBTMzJfRUZfUjE3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFRl9SMTggTUlQUzMyX0VGX1IxOAorI2RlZmluZSBFRl9SMTkgTUlQUzMyX0VGX1IxOQorI2RlZmluZSBFRl9SMjAgTUlQUzMyX0VGX1IyMAorI2RlZmluZSBFRl9SMjEgTUlQUzMyX0VGX1IyMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRUZfUjIyIE1JUFMzMl9FRl9SMjIKKyNkZWZpbmUgRUZfUjIzIE1JUFMzMl9FRl9SMjMKKyNkZWZpbmUgRUZfUjI0IE1JUFMzMl9FRl9SMjQKKyNkZWZpbmUgRUZfUjI1IE1JUFMzMl9FRl9SMjUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVGX1IyNiBNSVBTMzJfRUZfUjI2CisjZGVmaW5lIEVGX1IyNyBNSVBTMzJfRUZfUjI3CisjZGVmaW5lIEVGX1IyOCBNSVBTMzJfRUZfUjI4CisjZGVmaW5lIEVGX1IyOSBNSVBTMzJfRUZfUjI5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFRl9SMzAgTUlQUzMyX0VGX1IzMAorI2RlZmluZSBFRl9SMzEgTUlQUzMyX0VGX1IzMQorI2RlZmluZSBFRl9MTyBNSVBTMzJfRUZfTE8KKyNkZWZpbmUgRUZfSEkgTUlQUzMyX0VGX0hJCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFRl9DUDBfRVBDIE1JUFMzMl9FRl9DUDBfRVBDCisjZGVmaW5lIEVGX0NQMF9CQURWQUREUiBNSVBTMzJfRUZfQ1AwX0JBRFZBRERSCisjZGVmaW5lIEVGX0NQMF9TVEFUVVMgTUlQUzMyX0VGX0NQMF9TVEFUVVMKKyNkZWZpbmUgRUZfQ1AwX0NBVVNFIE1JUFMzMl9FRl9DUDBfQ0FVU0UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVGX1VOVVNFRDAgTUlQUzMyX0VGX1VOVVNFRDAKKyNkZWZpbmUgRUZfU0laRSBNSVBTMzJfRUZfU0laRQorI2VsaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCB8fCBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMgorI2RlZmluZSBFRl9SMCBNSVBTNjRfRUZfUjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVGX1IxIE1JUFM2NF9FRl9SMQorI2RlZmluZSBFRl9SMiBNSVBTNjRfRUZfUjIKKyNkZWZpbmUgRUZfUjMgTUlQUzY0X0VGX1IzCisjZGVmaW5lIEVGX1I0IE1JUFM2NF9FRl9SNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRUZfUjUgTUlQUzY0X0VGX1I1CisjZGVmaW5lIEVGX1I2IE1JUFM2NF9FRl9SNgorI2RlZmluZSBFRl9SNyBNSVBTNjRfRUZfUjcKKyNkZWZpbmUgRUZfUjggTUlQUzY0X0VGX1I4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFRl9SOSBNSVBTNjRfRUZfUjkKKyNkZWZpbmUgRUZfUjEwIE1JUFM2NF9FRl9SMTAKKyNkZWZpbmUgRUZfUjExIE1JUFM2NF9FRl9SMTEKKyNkZWZpbmUgRUZfUjEyIE1JUFM2NF9FRl9SMTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVGX1IxMyBNSVBTNjRfRUZfUjEzCisjZGVmaW5lIEVGX1IxNCBNSVBTNjRfRUZfUjE0CisjZGVmaW5lIEVGX1IxNSBNSVBTNjRfRUZfUjE1CisjZGVmaW5lIEVGX1IxNiBNSVBTNjRfRUZfUjE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFRl9SMTcgTUlQUzY0X0VGX1IxNworI2RlZmluZSBFRl9SMTggTUlQUzY0X0VGX1IxOAorI2RlZmluZSBFRl9SMTkgTUlQUzY0X0VGX1IxOQorI2RlZmluZSBFRl9SMjAgTUlQUzY0X0VGX1IyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRUZfUjIxIE1JUFM2NF9FRl9SMjEKKyNkZWZpbmUgRUZfUjIyIE1JUFM2NF9FRl9SMjIKKyNkZWZpbmUgRUZfUjIzIE1JUFM2NF9FRl9SMjMKKyNkZWZpbmUgRUZfUjI0IE1JUFM2NF9FRl9SMjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVGX1IyNSBNSVBTNjRfRUZfUjI1CisjZGVmaW5lIEVGX1IyNiBNSVBTNjRfRUZfUjI2CisjZGVmaW5lIEVGX1IyNyBNSVBTNjRfRUZfUjI3CisjZGVmaW5lIEVGX1IyOCBNSVBTNjRfRUZfUjI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFRl9SMjkgTUlQUzY0X0VGX1IyOQorI2RlZmluZSBFRl9SMzAgTUlQUzY0X0VGX1IzMAorI2RlZmluZSBFRl9SMzEgTUlQUzY0X0VGX1IzMQorI2RlZmluZSBFRl9MTyBNSVBTNjRfRUZfTE8KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVGX0hJIE1JUFM2NF9FRl9ISQorI2RlZmluZSBFRl9DUDBfRVBDIE1JUFM2NF9FRl9DUDBfRVBDCisjZGVmaW5lIEVGX0NQMF9CQURWQUREUiBNSVBTNjRfRUZfQ1AwX0JBRFZBRERSCisjZGVmaW5lIEVGX0NQMF9TVEFUVVMgTUlQUzY0X0VGX0NQMF9TVEFUVVMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVGX0NQMF9DQVVTRSBNSVBTNjRfRUZfQ1AwX0NBVVNFCisjZGVmaW5lIEVGX1NJWkUgTUlQUzY0X0VGX1NJWkUKKyNlbmRpZgorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vdHlwZXMuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3R5cGVzLmgKaW5kZXggNDVmZWE2Yy4uOWVmN2I3YyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vdHlwZXMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS90eXBlcy5oCkBAIC0xOCwxMSArMTgsNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9VQVBJX0FTTV9UWVBFU19ICiAjZGVmaW5lIF9VQVBJX0FTTV9UWVBFU19ICi0jaWYgX01JUFNfU1pMT05HID09IDY0Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWw2NC5oPgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNlbHNlCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KICNlbmRpZgotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vdW5pc3RkLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS91bmlzdGQuaAppbmRleCAzN2MzZGExLi45MDYwZTQ0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS91bmlzdGQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS91bmlzdGQuaApAQCAtNDU5LDgwNSArNDU5LDgwOCBAQAogI2RlZmluZSBfX05SX2Zpbml0X21vZHVsZSAoX19OUl9MaW51eCArIDM0OCkKICNkZWZpbmUgX19OUl9zY2hlZF9zZXRhdHRyIChfX05SX0xpbnV4ICsgMzQ5KQogI2RlZmluZSBfX05SX3NjaGVkX2dldGF0dHIgKF9fTlJfTGludXggKyAzNTApCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMgMzUwCisjZGVmaW5lIF9fTlJfcmVuYW1lYXQyIChfX05SX0xpbnV4ICsgMzUxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscyAzNTEKICNlbmRpZgogI2RlZmluZSBfX05SX08zMl9MaW51eCA0MDAwCi0jZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzIDM1MAotI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQKKyNkZWZpbmUgX19OUl9PMzJfTGludXhfc3lzY2FsbHMgMzUxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQKICNkZWZpbmUgX19OUl9MaW51eCA1MDAwCiAjZGVmaW5lIF9fTlJfcmVhZCAoX19OUl9MaW51eCArIDApCiAjZGVmaW5lIF9fTlJfd3JpdGUgKF9fTlJfTGludXggKyAxKQotI2RlZmluZSBfX05SX29wZW4gKF9fTlJfTGludXggKyAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9vcGVuIChfX05SX0xpbnV4ICsgMikKICNkZWZpbmUgX19OUl9jbG9zZSAoX19OUl9MaW51eCArIDMpCiAjZGVmaW5lIF9fTlJfc3RhdCAoX19OUl9MaW51eCArIDQpCiAjZGVmaW5lIF9fTlJfZnN0YXQgKF9fTlJfTGludXggKyA1KQotI2RlZmluZSBfX05SX2xzdGF0IChfX05SX0xpbnV4ICsgNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfbHN0YXQgKF9fTlJfTGludXggKyA2KQogI2RlZmluZSBfX05SX3BvbGwgKF9fTlJfTGludXggKyA3KQogI2RlZmluZSBfX05SX2xzZWVrIChfX05SX0xpbnV4ICsgOCkKICNkZWZpbmUgX19OUl9tbWFwIChfX05SX0xpbnV4ICsgOSkKLSNkZWZpbmUgX19OUl9tcHJvdGVjdCAoX19OUl9MaW51eCArIDEwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9tcHJvdGVjdCAoX19OUl9MaW51eCArIDEwKQogI2RlZmluZSBfX05SX211bm1hcCAoX19OUl9MaW51eCArIDExKQogI2RlZmluZSBfX05SX2JyayAoX19OUl9MaW51eCArIDEyKQogI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbiAoX19OUl9MaW51eCArIDEzKQotI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrIChfX05SX0xpbnV4ICsgMTQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrIChfX05SX0xpbnV4ICsgMTQpCiAjZGVmaW5lIF9fTlJfaW9jdGwgKF9fTlJfTGludXggKyAxNSkKICNkZWZpbmUgX19OUl9wcmVhZDY0IChfX05SX0xpbnV4ICsgMTYpCiAjZGVmaW5lIF9fTlJfcHdyaXRlNjQgKF9fTlJfTGludXggKyAxNykKLSNkZWZpbmUgX19OUl9yZWFkdiAoX19OUl9MaW51eCArIDE4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9yZWFkdiAoX19OUl9MaW51eCArIDE4KQogI2RlZmluZSBfX05SX3dyaXRldiAoX19OUl9MaW51eCArIDE5KQogI2RlZmluZSBfX05SX2FjY2VzcyAoX19OUl9MaW51eCArIDIwKQogI2RlZmluZSBfX05SX3BpcGUgKF9fTlJfTGludXggKyAyMSkKLSNkZWZpbmUgX19OUl9fbmV3c2VsZWN0IChfX05SX0xpbnV4ICsgMjIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX19uZXdzZWxlY3QgKF9fTlJfTGludXggKyAyMikKICNkZWZpbmUgX19OUl9zY2hlZF95aWVsZCAoX19OUl9MaW51eCArIDIzKQogI2RlZmluZSBfX05SX21yZW1hcCAoX19OUl9MaW51eCArIDI0KQogI2RlZmluZSBfX05SX21zeW5jIChfX05SX0xpbnV4ICsgMjUpCi0jZGVmaW5lIF9fTlJfbWluY29yZSAoX19OUl9MaW51eCArIDI2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9taW5jb3JlIChfX05SX0xpbnV4ICsgMjYpCiAjZGVmaW5lIF9fTlJfbWFkdmlzZSAoX19OUl9MaW51eCArIDI3KQogI2RlZmluZSBfX05SX3NobWdldCAoX19OUl9MaW51eCArIDI4KQogI2RlZmluZSBfX05SX3NobWF0IChfX05SX0xpbnV4ICsgMjkpCi0jZGVmaW5lIF9fTlJfc2htY3RsIChfX05SX0xpbnV4ICsgMzApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NobWN0bCAoX19OUl9MaW51eCArIDMwKQogI2RlZmluZSBfX05SX2R1cCAoX19OUl9MaW51eCArIDMxKQogI2RlZmluZSBfX05SX2R1cDIgKF9fTlJfTGludXggKyAzMikKICNkZWZpbmUgX19OUl9wYXVzZSAoX19OUl9MaW51eCArIDMzKQotI2RlZmluZSBfX05SX25hbm9zbGVlcCAoX19OUl9MaW51eCArIDM0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAgKF9fTlJfTGludXggKyAzNCkKICNkZWZpbmUgX19OUl9nZXRpdGltZXIgKF9fTlJfTGludXggKyAzNSkKICNkZWZpbmUgX19OUl9zZXRpdGltZXIgKF9fTlJfTGludXggKyAzNikKICNkZWZpbmUgX19OUl9hbGFybSAoX19OUl9MaW51eCArIDM3KQotI2RlZmluZSBfX05SX2dldHBpZCAoX19OUl9MaW51eCArIDM4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9nZXRwaWQgKF9fTlJfTGludXggKyAzOCkKICNkZWZpbmUgX19OUl9zZW5kZmlsZSAoX19OUl9MaW51eCArIDM5KQogI2RlZmluZSBfX05SX3NvY2tldCAoX19OUl9MaW51eCArIDQwKQogI2RlZmluZSBfX05SX2Nvbm5lY3QgKF9fTlJfTGludXggKyA0MSkKLSNkZWZpbmUgX19OUl9hY2NlcHQgKF9fTlJfTGludXggKyA0MikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfYWNjZXB0IChfX05SX0xpbnV4ICsgNDIpCiAjZGVmaW5lIF9fTlJfc2VuZHRvIChfX05SX0xpbnV4ICsgNDMpCiAjZGVmaW5lIF9fTlJfcmVjdmZyb20gKF9fTlJfTGludXggKyA0NCkKICNkZWZpbmUgX19OUl9zZW5kbXNnIChfX05SX0xpbnV4ICsgNDUpCi0jZGVmaW5lIF9fTlJfcmVjdm1zZyAoX19OUl9MaW51eCArIDQ2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9yZWN2bXNnIChfX05SX0xpbnV4ICsgNDYpCiAjZGVmaW5lIF9fTlJfc2h1dGRvd24gKF9fTlJfTGludXggKyA0NykKICNkZWZpbmUgX19OUl9iaW5kIChfX05SX0xpbnV4ICsgNDgpCiAjZGVmaW5lIF9fTlJfbGlzdGVuIChfX05SX0xpbnV4ICsgNDkpCi0jZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgKF9fTlJfTGludXggKyA1MCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgKF9fTlJfTGludXggKyA1MCkKICNkZWZpbmUgX19OUl9nZXRwZWVybmFtZSAoX19OUl9MaW51eCArIDUxKQogI2RlZmluZSBfX05SX3NvY2tldHBhaXIgKF9fTlJfTGludXggKyA1MikKICNkZWZpbmUgX19OUl9zZXRzb2Nrb3B0IChfX05SX0xpbnV4ICsgNTMpCi0jZGVmaW5lIF9fTlJfZ2V0c29ja29wdCAoX19OUl9MaW51eCArIDU0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0IChfX05SX0xpbnV4ICsgNTQpCiAjZGVmaW5lIF9fTlJfY2xvbmUgKF9fTlJfTGludXggKyA1NSkKICNkZWZpbmUgX19OUl9mb3JrIChfX05SX0xpbnV4ICsgNTYpCiAjZGVmaW5lIF9fTlJfZXhlY3ZlIChfX05SX0xpbnV4ICsgNTcpCi0jZGVmaW5lIF9fTlJfZXhpdCAoX19OUl9MaW51eCArIDU4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9leGl0IChfX05SX0xpbnV4ICsgNTgpCiAjZGVmaW5lIF9fTlJfd2FpdDQgKF9fTlJfTGludXggKyA1OSkKICNkZWZpbmUgX19OUl9raWxsIChfX05SX0xpbnV4ICsgNjApCiAjZGVmaW5lIF9fTlJfdW5hbWUgKF9fTlJfTGludXggKyA2MSkKLSNkZWZpbmUgX19OUl9zZW1nZXQgKF9fTlJfTGludXggKyA2MikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc2VtZ2V0IChfX05SX0xpbnV4ICsgNjIpCiAjZGVmaW5lIF9fTlJfc2Vtb3AgKF9fTlJfTGludXggKyA2MykKICNkZWZpbmUgX19OUl9zZW1jdGwgKF9fTlJfTGludXggKyA2NCkKICNkZWZpbmUgX19OUl9zaG1kdCAoX19OUl9MaW51eCArIDY1KQotI2RlZmluZSBfX05SX21zZ2dldCAoX19OUl9MaW51eCArIDY2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9tc2dnZXQgKF9fTlJfTGludXggKyA2NikKICNkZWZpbmUgX19OUl9tc2dzbmQgKF9fTlJfTGludXggKyA2NykKICNkZWZpbmUgX19OUl9tc2dyY3YgKF9fTlJfTGludXggKyA2OCkKICNkZWZpbmUgX19OUl9tc2djdGwgKF9fTlJfTGludXggKyA2OSkKLSNkZWZpbmUgX19OUl9mY250bCAoX19OUl9MaW51eCArIDcwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9mY250bCAoX19OUl9MaW51eCArIDcwKQogI2RlZmluZSBfX05SX2Zsb2NrIChfX05SX0xpbnV4ICsgNzEpCiAjZGVmaW5lIF9fTlJfZnN5bmMgKF9fTlJfTGludXggKyA3MikKICNkZWZpbmUgX19OUl9mZGF0YXN5bmMgKF9fTlJfTGludXggKyA3MykKLSNkZWZpbmUgX19OUl90cnVuY2F0ZSAoX19OUl9MaW51eCArIDc0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl90cnVuY2F0ZSAoX19OUl9MaW51eCArIDc0KQogI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAoX19OUl9MaW51eCArIDc1KQogI2RlZmluZSBfX05SX2dldGRlbnRzIChfX05SX0xpbnV4ICsgNzYpCiAjZGVmaW5lIF9fTlJfZ2V0Y3dkIChfX05SX0xpbnV4ICsgNzcpCi0jZGVmaW5lIF9fTlJfY2hkaXIgKF9fTlJfTGludXggKyA3OCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfY2hkaXIgKF9fTlJfTGludXggKyA3OCkKICNkZWZpbmUgX19OUl9mY2hkaXIgKF9fTlJfTGludXggKyA3OSkKICNkZWZpbmUgX19OUl9yZW5hbWUgKF9fTlJfTGludXggKyA4MCkKICNkZWZpbmUgX19OUl9ta2RpciAoX19OUl9MaW51eCArIDgxKQotI2RlZmluZSBfX05SX3JtZGlyIChfX05SX0xpbnV4ICsgODIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3JtZGlyIChfX05SX0xpbnV4ICsgODIpCiAjZGVmaW5lIF9fTlJfY3JlYXQgKF9fTlJfTGludXggKyA4MykKICNkZWZpbmUgX19OUl9saW5rIChfX05SX0xpbnV4ICsgODQpCiAjZGVmaW5lIF9fTlJfdW5saW5rIChfX05SX0xpbnV4ICsgODUpCi0jZGVmaW5lIF9fTlJfc3ltbGluayAoX19OUl9MaW51eCArIDg2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zeW1saW5rIChfX05SX0xpbnV4ICsgODYpCiAjZGVmaW5lIF9fTlJfcmVhZGxpbmsgKF9fTlJfTGludXggKyA4NykKICNkZWZpbmUgX19OUl9jaG1vZCAoX19OUl9MaW51eCArIDg4KQogI2RlZmluZSBfX05SX2ZjaG1vZCAoX19OUl9MaW51eCArIDg5KQotI2RlZmluZSBfX05SX2Nob3duIChfX05SX0xpbnV4ICsgOTApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2Nob3duIChfX05SX0xpbnV4ICsgOTApCiAjZGVmaW5lIF9fTlJfZmNob3duIChfX05SX0xpbnV4ICsgOTEpCiAjZGVmaW5lIF9fTlJfbGNob3duIChfX05SX0xpbnV4ICsgOTIpCiAjZGVmaW5lIF9fTlJfdW1hc2sgKF9fTlJfTGludXggKyA5MykKLSNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkgKF9fTlJfTGludXggKyA5NCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5IChfX05SX0xpbnV4ICsgOTQpCiAjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0IChfX05SX0xpbnV4ICsgOTUpCiAjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlIChfX05SX0xpbnV4ICsgOTYpCiAjZGVmaW5lIF9fTlJfc3lzaW5mbyAoX19OUl9MaW51eCArIDk3KQotI2RlZmluZSBfX05SX3RpbWVzIChfX05SX0xpbnV4ICsgOTgpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3RpbWVzIChfX05SX0xpbnV4ICsgOTgpCiAjZGVmaW5lIF9fTlJfcHRyYWNlIChfX05SX0xpbnV4ICsgOTkpCiAjZGVmaW5lIF9fTlJfZ2V0dWlkIChfX05SX0xpbnV4ICsgMTAwKQogI2RlZmluZSBfX05SX3N5c2xvZyAoX19OUl9MaW51eCArIDEwMSkKLSNkZWZpbmUgX19OUl9nZXRnaWQgKF9fTlJfTGludXggKyAxMDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2dldGdpZCAoX19OUl9MaW51eCArIDEwMikKICNkZWZpbmUgX19OUl9zZXR1aWQgKF9fTlJfTGludXggKyAxMDMpCiAjZGVmaW5lIF9fTlJfc2V0Z2lkIChfX05SX0xpbnV4ICsgMTA0KQogI2RlZmluZSBfX05SX2dldGV1aWQgKF9fTlJfTGludXggKyAxMDUpCi0jZGVmaW5lIF9fTlJfZ2V0ZWdpZCAoX19OUl9MaW51eCArIDEwNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZCAoX19OUl9MaW51eCArIDEwNikKICNkZWZpbmUgX19OUl9zZXRwZ2lkIChfX05SX0xpbnV4ICsgMTA3KQogI2RlZmluZSBfX05SX2dldHBwaWQgKF9fTlJfTGludXggKyAxMDgpCiAjZGVmaW5lIF9fTlJfZ2V0cGdycCAoX19OUl9MaW51eCArIDEwOSkKLSNkZWZpbmUgX19OUl9zZXRzaWQgKF9fTlJfTGludXggKyAxMTApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NldHNpZCAoX19OUl9MaW51eCArIDExMCkKICNkZWZpbmUgX19OUl9zZXRyZXVpZCAoX19OUl9MaW51eCArIDExMSkKICNkZWZpbmUgX19OUl9zZXRyZWdpZCAoX19OUl9MaW51eCArIDExMikKICNkZWZpbmUgX19OUl9nZXRncm91cHMgKF9fTlJfTGludXggKyAxMTMpCi0jZGVmaW5lIF9fTlJfc2V0Z3JvdXBzIChfX05SX0xpbnV4ICsgMTE0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zZXRncm91cHMgKF9fTlJfTGludXggKyAxMTQpCiAjZGVmaW5lIF9fTlJfc2V0cmVzdWlkIChfX05SX0xpbnV4ICsgMTE1KQogI2RlZmluZSBfX05SX2dldHJlc3VpZCAoX19OUl9MaW51eCArIDExNikKICNkZWZpbmUgX19OUl9zZXRyZXNnaWQgKF9fTlJfTGludXggKyAxMTcpCi0jZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkIChfX05SX0xpbnV4ICsgMTE4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQgKF9fTlJfTGludXggKyAxMTgpCiAjZGVmaW5lIF9fTlJfZ2V0cGdpZCAoX19OUl9MaW51eCArIDExOSkKICNkZWZpbmUgX19OUl9zZXRmc3VpZCAoX19OUl9MaW51eCArIDEyMCkKICNkZWZpbmUgX19OUl9zZXRmc2dpZCAoX19OUl9MaW51eCArIDEyMSkKLSNkZWZpbmUgX19OUl9nZXRzaWQgKF9fTlJfTGludXggKyAxMjIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2dldHNpZCAoX19OUl9MaW51eCArIDEyMikKICNkZWZpbmUgX19OUl9jYXBnZXQgKF9fTlJfTGludXggKyAxMjMpCiAjZGVmaW5lIF9fTlJfY2Fwc2V0IChfX05SX0xpbnV4ICsgMTI0KQogI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcgKF9fTlJfTGludXggKyAxMjUpCi0jZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0IChfX05SX0xpbnV4ICsgMTI2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQgKF9fTlJfTGludXggKyAxMjYpCiAjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvIChfX05SX0xpbnV4ICsgMTI3KQogI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQgKF9fTlJfTGludXggKyAxMjgpCiAjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sgKF9fTlJfTGludXggKyAxMjkpCi0jZGVmaW5lIF9fTlJfdXRpbWUgKF9fTlJfTGludXggKyAxMzApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3V0aW1lIChfX05SX0xpbnV4ICsgMTMwKQogI2RlZmluZSBfX05SX21rbm9kIChfX05SX0xpbnV4ICsgMTMxKQogI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5IChfX05SX0xpbnV4ICsgMTMyKQogI2RlZmluZSBfX05SX3VzdGF0IChfX05SX0xpbnV4ICsgMTMzKQotI2RlZmluZSBfX05SX3N0YXRmcyAoX19OUl9MaW51eCArIDEzNCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc3RhdGZzIChfX05SX0xpbnV4ICsgMTM0KQogI2RlZmluZSBfX05SX2ZzdGF0ZnMgKF9fTlJfTGludXggKyAxMzUpCiAjZGVmaW5lIF9fTlJfc3lzZnMgKF9fTlJfTGludXggKyAxMzYpCiAjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgKF9fTlJfTGludXggKyAxMzcpCi0jZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgKF9fTlJfTGludXggKyAxMzgpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NldHByaW9yaXR5IChfX05SX0xpbnV4ICsgMTM4KQogI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtIChfX05SX0xpbnV4ICsgMTM5KQogI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtIChfX05SX0xpbnV4ICsgMTQwKQogI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlciAoX19OUl9MaW51eCArIDE0MSkKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIgKF9fTlJfTGludXggKyAxNDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlciAoX19OUl9MaW51eCArIDE0MikKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChfX05SX0xpbnV4ICsgMTQzKQogI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4gKF9fTlJfTGludXggKyAxNDQpCiAjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX05SX0xpbnV4ICsgMTQ1KQotI2RlZmluZSBfX05SX21sb2NrIChfX05SX0xpbnV4ICsgMTQ2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9tbG9jayAoX19OUl9MaW51eCArIDE0NikKICNkZWZpbmUgX19OUl9tdW5sb2NrIChfX05SX0xpbnV4ICsgMTQ3KQogI2RlZmluZSBfX05SX21sb2NrYWxsIChfX05SX0xpbnV4ICsgMTQ4KQogI2RlZmluZSBfX05SX211bmxvY2thbGwgKF9fTlJfTGludXggKyAxNDkpCi0jZGVmaW5lIF9fTlJfdmhhbmd1cCAoX19OUl9MaW51eCArIDE1MCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfdmhhbmd1cCAoX19OUl9MaW51eCArIDE1MCkKICNkZWZpbmUgX19OUl9waXZvdF9yb290IChfX05SX0xpbnV4ICsgMTUxKQogI2RlZmluZSBfX05SX19zeXNjdGwgKF9fTlJfTGludXggKyAxNTIpCiAjZGVmaW5lIF9fTlJfcHJjdGwgKF9fTlJfTGludXggKyAxNTMpCi0jZGVmaW5lIF9fTlJfYWRqdGltZXggKF9fTlJfTGludXggKyAxNTQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2FkanRpbWV4IChfX05SX0xpbnV4ICsgMTU0KQogI2RlZmluZSBfX05SX3NldHJsaW1pdCAoX19OUl9MaW51eCArIDE1NSkKICNkZWZpbmUgX19OUl9jaHJvb3QgKF9fTlJfTGludXggKyAxNTYpCiAjZGVmaW5lIF9fTlJfc3luYyAoX19OUl9MaW51eCArIDE1NykKLSNkZWZpbmUgX19OUl9hY2N0IChfX05SX0xpbnV4ICsgMTU4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9hY2N0IChfX05SX0xpbnV4ICsgMTU4KQogI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSAoX19OUl9MaW51eCArIDE1OSkKICNkZWZpbmUgX19OUl9tb3VudCAoX19OUl9MaW51eCArIDE2MCkKICNkZWZpbmUgX19OUl91bW91bnQyIChfX05SX0xpbnV4ICsgMTYxKQotI2RlZmluZSBfX05SX3N3YXBvbiAoX19OUl9MaW51eCArIDE2MikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc3dhcG9uIChfX05SX0xpbnV4ICsgMTYyKQogI2RlZmluZSBfX05SX3N3YXBvZmYgKF9fTlJfTGludXggKyAxNjMpCiAjZGVmaW5lIF9fTlJfcmVib290IChfX05SX0xpbnV4ICsgMTY0KQogI2RlZmluZSBfX05SX3NldGhvc3RuYW1lIChfX05SX0xpbnV4ICsgMTY1KQotI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUgKF9fTlJfTGludXggKyAxNjYpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUgKF9fTlJfTGludXggKyAxNjYpCiAjZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZSAoX19OUl9MaW51eCArIDE2NykKICNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAoX19OUl9MaW51eCArIDE2OCkKICNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlIChfX05SX0xpbnV4ICsgMTY5KQotI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcyAoX19OUl9MaW51eCArIDE3MCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zIChfX05SX0xpbnV4ICsgMTcwKQogI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZSAoX19OUl9MaW51eCArIDE3MSkKICNkZWZpbmUgX19OUl9xdW90YWN0bCAoX19OUl9MaW51eCArIDE3MikKICNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsIChfX05SX0xpbnV4ICsgMTczKQotI2RlZmluZSBfX05SX2dldHBtc2cgKF9fTlJfTGludXggKyAxNzQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2dldHBtc2cgKF9fTlJfTGludXggKyAxNzQpCiAjZGVmaW5lIF9fTlJfcHV0cG1zZyAoX19OUl9MaW51eCArIDE3NSkKICNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbCAoX19OUl9MaW51eCArIDE3NikKICNkZWZpbmUgX19OUl9yZXNlcnZlZDE3NyAoX19OUl9MaW51eCArIDE3NykKLSNkZWZpbmUgX19OUl9nZXR0aWQgKF9fTlJfTGludXggKyAxNzgpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2dldHRpZCAoX19OUl9MaW51eCArIDE3OCkKICNkZWZpbmUgX19OUl9yZWFkYWhlYWQgKF9fTlJfTGludXggKyAxNzkpCiAjZGVmaW5lIF9fTlJfc2V0eGF0dHIgKF9fTlJfTGludXggKyAxODApCiAjZGVmaW5lIF9fTlJfbHNldHhhdHRyIChfX05SX0xpbnV4ICsgMTgxKQotI2RlZmluZSBfX05SX2ZzZXR4YXR0ciAoX19OUl9MaW51eCArIDE4MikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfZnNldHhhdHRyIChfX05SX0xpbnV4ICsgMTgyKQogI2RlZmluZSBfX05SX2dldHhhdHRyIChfX05SX0xpbnV4ICsgMTgzKQogI2RlZmluZSBfX05SX2xnZXR4YXR0ciAoX19OUl9MaW51eCArIDE4NCkKICNkZWZpbmUgX19OUl9mZ2V0eGF0dHIgKF9fTlJfTGludXggKyAxODUpCi0jZGVmaW5lIF9fTlJfbGlzdHhhdHRyIChfX05SX0xpbnV4ICsgMTg2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9saXN0eGF0dHIgKF9fTlJfTGludXggKyAxODYpCiAjZGVmaW5lIF9fTlJfbGxpc3R4YXR0ciAoX19OUl9MaW51eCArIDE4NykKICNkZWZpbmUgX19OUl9mbGlzdHhhdHRyIChfX05SX0xpbnV4ICsgMTg4KQogI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyIChfX05SX0xpbnV4ICsgMTg5KQotI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0ciAoX19OUl9MaW51eCArIDE5MCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyIChfX05SX0xpbnV4ICsgMTkwKQogI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0ciAoX19OUl9MaW51eCArIDE5MSkKICNkZWZpbmUgX19OUl90a2lsbCAoX19OUl9MaW51eCArIDE5MikKICNkZWZpbmUgX19OUl9yZXNlcnZlZDE5MyAoX19OUl9MaW51eCArIDE5MykKLSNkZWZpbmUgX19OUl9mdXRleCAoX19OUl9MaW51eCArIDE5NCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfZnV0ZXggKF9fTlJfTGludXggKyAxOTQpCiAjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkgKF9fTlJfTGludXggKyAxOTUpCiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkgKF9fTlJfTGludXggKyAxOTYpCiAjZGVmaW5lIF9fTlJfY2FjaGVmbHVzaCAoX19OUl9MaW51eCArIDE5NykKLSNkZWZpbmUgX19OUl9jYWNoZWN0bCAoX19OUl9MaW51eCArIDE5OCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfY2FjaGVjdGwgKF9fTlJfTGludXggKyAxOTgpCiAjZGVmaW5lIF9fTlJfc3lzbWlwcyAoX19OUl9MaW51eCArIDE5OSkKICNkZWZpbmUgX19OUl9pb19zZXR1cCAoX19OUl9MaW51eCArIDIwMCkKICNkZWZpbmUgX19OUl9pb19kZXN0cm95IChfX05SX0xpbnV4ICsgMjAxKQotI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cyAoX19OUl9MaW51eCArIDIwMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzIChfX05SX0xpbnV4ICsgMjAyKQogI2RlZmluZSBfX05SX2lvX3N1Ym1pdCAoX19OUl9MaW51eCArIDIwMykKICNkZWZpbmUgX19OUl9pb19jYW5jZWwgKF9fTlJfTGludXggKyAyMDQpCiAjZGVmaW5lIF9fTlJfZXhpdF9ncm91cCAoX19OUl9MaW51eCArIDIwNSkKLSNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAoX19OUl9MaW51eCArIDIwNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUgKF9fTlJfTGludXggKyAyMDYpCiAjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlIChfX05SX0xpbnV4ICsgMjA3KQogI2RlZmluZSBfX05SX2Vwb2xsX2N0bCAoX19OUl9MaW51eCArIDIwOCkKICNkZWZpbmUgX19OUl9lcG9sbF93YWl0IChfX05SX0xpbnV4ICsgMjA5KQotI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMgKF9fTlJfTGludXggKyAyMTApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMgKF9fTlJfTGludXggKyAyMTApCiAjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuIChfX05SX0xpbnV4ICsgMjExKQogI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcyAoX19OUl9MaW51eCArIDIxMikKICNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwgKF9fTlJfTGludXggKyAyMTMpCi0jZGVmaW5lIF9fTlJfc2VtdGltZWRvcCAoX19OUl9MaW51eCArIDIxNCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc2VtdGltZWRvcCAoX19OUl9MaW51eCArIDIxNCkKICNkZWZpbmUgX19OUl9mYWR2aXNlNjQgKF9fTlJfTGludXggKyAyMTUpCiAjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlIChfX05SX0xpbnV4ICsgMjE2KQogI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUgKF9fTlJfTGludXggKyAyMTcpCi0jZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZSAoX19OUl9MaW51eCArIDIxOCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZSAoX19OUl9MaW51eCArIDIxOCkKICNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuIChfX05SX0xpbnV4ICsgMjE5KQogI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZSAoX19OUl9MaW51eCArIDIyMCkKICNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lIChfX05SX0xpbnV4ICsgMjIxKQotI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUgKF9fTlJfTGludXggKyAyMjIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUgKF9fTlJfTGludXggKyAyMjIpCiAjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzIChfX05SX0xpbnV4ICsgMjIzKQogI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcCAoX19OUl9MaW51eCArIDIyNCkKICNkZWZpbmUgX19OUl90Z2tpbGwgKF9fTlJfTGludXggKyAyMjUpCi0jZGVmaW5lIF9fTlJfdXRpbWVzIChfX05SX0xpbnV4ICsgMjI2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl91dGltZXMgKF9fTlJfTGludXggKyAyMjYpCiAjZGVmaW5lIF9fTlJfbWJpbmQgKF9fTlJfTGludXggKyAyMjcpCiAjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeSAoX19OUl9MaW51eCArIDIyOCkKICNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5IChfX05SX0xpbnV4ICsgMjI5KQotI2RlZmluZSBfX05SX21xX29wZW4gKF9fTlJfTGludXggKyAyMzApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX21xX29wZW4gKF9fTlJfTGludXggKyAyMzApCiAjZGVmaW5lIF9fTlJfbXFfdW5saW5rIChfX05SX0xpbnV4ICsgMjMxKQogI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZCAoX19OUl9MaW51eCArIDIzMikKICNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUgKF9fTlJfTGludXggKyAyMzMpCi0jZGVmaW5lIF9fTlJfbXFfbm90aWZ5IChfX05SX0xpbnV4ICsgMjM0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9tcV9ub3RpZnkgKF9fTlJfTGludXggKyAyMzQpCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0ciAoX19OUl9MaW51eCArIDIzNSkKICNkZWZpbmUgX19OUl92c2VydmVyIChfX05SX0xpbnV4ICsgMjM2KQogI2RlZmluZSBfX05SX3dhaXRpZCAoX19OUl9MaW51eCArIDIzNykKLSNkZWZpbmUgX19OUl9hZGRfa2V5IChfX05SX0xpbnV4ICsgMjM5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9hZGRfa2V5IChfX05SX0xpbnV4ICsgMjM5KQogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5IChfX05SX0xpbnV4ICsgMjQwKQogI2RlZmluZSBfX05SX2tleWN0bCAoX19OUl9MaW51eCArIDI0MSkKICNkZWZpbmUgX19OUl9zZXRfdGhyZWFkX2FyZWEgKF9fTlJfTGludXggKyAyNDIpCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0IChfX05SX0xpbnV4ICsgMjQzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQgKF9fTlJfTGludXggKyAyNDMpCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggKF9fTlJfTGludXggKyAyNDQpCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaCAoX19OUl9MaW51eCArIDI0NSkKICNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzIChfX05SX0xpbnV4ICsgMjQ2KQotI2RlZmluZSBfX05SX29wZW5hdCAoX19OUl9MaW51eCArIDI0NykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfb3BlbmF0IChfX05SX0xpbnV4ICsgMjQ3KQogI2RlZmluZSBfX05SX21rZGlyYXQgKF9fTlJfTGludXggKyAyNDgpCiAjZGVmaW5lIF9fTlJfbWtub2RhdCAoX19OUl9MaW51eCArIDI0OSkKICNkZWZpbmUgX19OUl9mY2hvd25hdCAoX19OUl9MaW51eCArIDI1MCkKLSNkZWZpbmUgX19OUl9mdXRpbWVzYXQgKF9fTlJfTGludXggKyAyNTEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2Z1dGltZXNhdCAoX19OUl9MaW51eCArIDI1MSkKICNkZWZpbmUgX19OUl9uZXdmc3RhdGF0IChfX05SX0xpbnV4ICsgMjUyKQogI2RlZmluZSBfX05SX3VubGlua2F0IChfX05SX0xpbnV4ICsgMjUzKQogI2RlZmluZSBfX05SX3JlbmFtZWF0IChfX05SX0xpbnV4ICsgMjU0KQotI2RlZmluZSBfX05SX2xpbmthdCAoX19OUl9MaW51eCArIDI1NSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfbGlua2F0IChfX05SX0xpbnV4ICsgMjU1KQogI2RlZmluZSBfX05SX3N5bWxpbmthdCAoX19OUl9MaW51eCArIDI1NikKICNkZWZpbmUgX19OUl9yZWFkbGlua2F0IChfX05SX0xpbnV4ICsgMjU3KQogI2RlZmluZSBfX05SX2ZjaG1vZGF0IChfX05SX0xpbnV4ICsgMjU4KQotI2RlZmluZSBfX05SX2ZhY2Nlc3NhdCAoX19OUl9MaW51eCArIDI1OSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0IChfX05SX0xpbnV4ICsgMjU5KQogI2RlZmluZSBfX05SX3BzZWxlY3Q2IChfX05SX0xpbnV4ICsgMjYwKQogI2RlZmluZSBfX05SX3Bwb2xsIChfX05SX0xpbnV4ICsgMjYxKQogI2RlZmluZSBfX05SX3Vuc2hhcmUgKF9fTlJfTGludXggKyAyNjIpCi0jZGVmaW5lIF9fTlJfc3BsaWNlIChfX05SX0xpbnV4ICsgMjYzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zcGxpY2UgKF9fTlJfTGludXggKyAyNjMpCiAjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlIChfX05SX0xpbnV4ICsgMjY0KQogI2RlZmluZSBfX05SX3RlZSAoX19OUl9MaW51eCArIDI2NSkKICNkZWZpbmUgX19OUl92bXNwbGljZSAoX19OUl9MaW51eCArIDI2NikKLSNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzIChfX05SX0xpbnV4ICsgMjY3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzIChfX05SX0xpbnV4ICsgMjY3KQogI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdCAoX19OUl9MaW51eCArIDI2OCkKICNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QgKF9fTlJfTGludXggKyAyNjkpCiAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZCAoX19OUl9MaW51eCArIDI3MCkKLSNkZWZpbmUgX19OUl9nZXRjcHUgKF9fTlJfTGludXggKyAyNzEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2dldGNwdSAoX19OUl9MaW51eCArIDI3MSkKICNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdCAoX19OUl9MaW51eCArIDI3MikKICNkZWZpbmUgX19OUl9pb3ByaW9fc2V0IChfX05SX0xpbnV4ICsgMjczKQogI2RlZmluZSBfX05SX2lvcHJpb19nZXQgKF9fTlJfTGludXggKyAyNzQpCi0jZGVmaW5lIF9fTlJfdXRpbWVuc2F0IChfX05SX0xpbnV4ICsgMjc1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl91dGltZW5zYXQgKF9fTlJfTGludXggKyAyNzUpCiAjZGVmaW5lIF9fTlJfc2lnbmFsZmQgKF9fTlJfTGludXggKyAyNzYpCiAjZGVmaW5lIF9fTlJfdGltZXJmZCAoX19OUl9MaW51eCArIDI3NykKICNkZWZpbmUgX19OUl9ldmVudGZkIChfX05SX0xpbnV4ICsgMjc4KQotI2RlZmluZSBfX05SX2ZhbGxvY2F0ZSAoX19OUl9MaW51eCArIDI3OSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfZmFsbG9jYXRlIChfX05SX0xpbnV4ICsgMjc5KQogI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlIChfX05SX0xpbnV4ICsgMjgwKQogI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZSAoX19OUl9MaW51eCArIDI4MSkKICNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUgKF9fTlJfTGludXggKyAyODIpCi0jZGVmaW5lIF9fTlJfc2lnbmFsZmQ0IChfX05SX0xpbnV4ICsgMjgzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zaWduYWxmZDQgKF9fTlJfTGludXggKyAyODMpCiAjZGVmaW5lIF9fTlJfZXZlbnRmZDIgKF9fTlJfTGludXggKyAyODQpCiAjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlMSAoX19OUl9MaW51eCArIDI4NSkKICNkZWZpbmUgX19OUl9kdXAzIChfX05SX0xpbnV4ICsgMjg2KQotI2RlZmluZSBfX05SX3BpcGUyIChfX05SX0xpbnV4ICsgMjg3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9waXBlMiAoX19OUl9MaW51eCArIDI4NykKICNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxIChfX05SX0xpbnV4ICsgMjg4KQogI2RlZmluZSBfX05SX3ByZWFkdiAoX19OUl9MaW51eCArIDI4OSkKICNkZWZpbmUgX19OUl9wd3JpdGV2IChfX05SX0xpbnV4ICsgMjkwKQotI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvIChfX05SX0xpbnV4ICsgMjkxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbyAoX19OUl9MaW51eCArIDI5MSkKICNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4gKF9fTlJfTGludXggKyAyOTIpCiAjZGVmaW5lIF9fTlJfYWNjZXB0NCAoX19OUl9MaW51eCArIDI5MykKICNkZWZpbmUgX19OUl9yZWN2bW1zZyAoX19OUl9MaW51eCArIDI5NCkKLSNkZWZpbmUgX19OUl9mYW5vdGlmeV9pbml0IChfX05SX0xpbnV4ICsgMjk1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9mYW5vdGlmeV9pbml0IChfX05SX0xpbnV4ICsgMjk1KQogI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsgKF9fTlJfTGludXggKyAyOTYpCiAjZGVmaW5lIF9fTlJfcHJsaW1pdDY0IChfX05SX0xpbnV4ICsgMjk3KQogI2RlZmluZSBfX05SX25hbWVfdG9faGFuZGxlX2F0IChfX05SX0xpbnV4ICsgMjk4KQotI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0IChfX05SX0xpbnV4ICsgMjk5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9vcGVuX2J5X2hhbmRsZV9hdCAoX19OUl9MaW51eCArIDI5OSkKICNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lIChfX05SX0xpbnV4ICsgMzAwKQogI2RlZmluZSBfX05SX3N5bmNmcyAoX19OUl9MaW51eCArIDMwMSkKICNkZWZpbmUgX19OUl9zZW5kbW1zZyAoX19OUl9MaW51eCArIDMwMikKLSNkZWZpbmUgX19OUl9zZXRucyAoX19OUl9MaW51eCArIDMwMykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc2V0bnMgKF9fTlJfTGludXggKyAzMDMpCiAjZGVmaW5lIF9fTlJfcHJvY2Vzc192bV9yZWFkdiAoX19OUl9MaW51eCArIDMwNCkKICNkZWZpbmUgX19OUl9wcm9jZXNzX3ZtX3dyaXRldiAoX19OUl9MaW51eCArIDMwNSkKICNkZWZpbmUgX19OUl9rY21wIChfX05SX0xpbnV4ICsgMzA2KQotI2RlZmluZSBfX05SX2Zpbml0X21vZHVsZSAoX19OUl9MaW51eCArIDMwNykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfZmluaXRfbW9kdWxlIChfX05SX0xpbnV4ICsgMzA3KQogI2RlZmluZSBfX05SX2dldGRlbnRzNjQgKF9fTlJfTGludXggKyAzMDgpCiAjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YXR0ciAoX19OUl9MaW51eCArIDMwOSkKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRhdHRyIChfX05SX0xpbnV4ICsgMzEwKQotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzIDMxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9yZW5hbWVhdDIgKF9fTlJfTGludXggKyAzMTEpCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMgMzExCiAjZW5kaWYKICNkZWZpbmUgX19OUl82NF9MaW51eCA1MDAwCi0jZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMgMzEwCi0jaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMgMzExCisjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIKICNkZWZpbmUgX19OUl9MaW51eCA2MDAwCiAjZGVmaW5lIF9fTlJfcmVhZCAoX19OUl9MaW51eCArIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3dyaXRlIChfX05SX0xpbnV4ICsgMSkKICNkZWZpbmUgX19OUl9vcGVuIChfX05SX0xpbnV4ICsgMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY2xvc2UgKF9fTlJfTGludXggKyAzKQogI2RlZmluZSBfX05SX3N0YXQgKF9fTlJfTGludXggKyA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mc3RhdCAoX19OUl9MaW51eCArIDUpCiAjZGVmaW5lIF9fTlJfbHN0YXQgKF9fTlJfTGludXggKyA2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wb2xsIChfX05SX0xpbnV4ICsgNykKICNkZWZpbmUgX19OUl9sc2VlayAoX19OUl9MaW51eCArIDgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21tYXAgKF9fTlJfTGludXggKyA5KQogI2RlZmluZSBfX05SX21wcm90ZWN0IChfX05SX0xpbnV4ICsgMTApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX211bm1hcCAoX19OUl9MaW51eCArIDExKQogI2RlZmluZSBfX05SX2JyayAoX19OUl9MaW51eCArIDEyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24gKF9fTlJfTGludXggKyAxMykKICNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzayAoX19OUl9MaW51eCArIDE0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pb2N0bCAoX19OUl9MaW51eCArIDE1KQogI2RlZmluZSBfX05SX3ByZWFkNjQgKF9fTlJfTGludXggKyAxNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcHdyaXRlNjQgKF9fTlJfTGludXggKyAxNykKICNkZWZpbmUgX19OUl9yZWFkdiAoX19OUl9MaW51eCArIDE4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl93cml0ZXYgKF9fTlJfTGludXggKyAxOSkKICNkZWZpbmUgX19OUl9hY2Nlc3MgKF9fTlJfTGludXggKyAyMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcGlwZSAoX19OUl9MaW51eCArIDIxKQogI2RlZmluZSBfX05SX19uZXdzZWxlY3QgKF9fTlJfTGludXggKyAyMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQgKF9fTlJfTGludXggKyAyMykKICNkZWZpbmUgX19OUl9tcmVtYXAgKF9fTlJfTGludXggKyAyNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbXN5bmMgKF9fTlJfTGludXggKyAyNSkKICNkZWZpbmUgX19OUl9taW5jb3JlIChfX05SX0xpbnV4ICsgMjYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21hZHZpc2UgKF9fTlJfTGludXggKyAyNykKICNkZWZpbmUgX19OUl9zaG1nZXQgKF9fTlJfTGludXggKyAyOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2htYXQgKF9fTlJfTGludXggKyAyOSkKICNkZWZpbmUgX19OUl9zaG1jdGwgKF9fTlJfTGludXggKyAzMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZHVwIChfX05SX0xpbnV4ICsgMzEpCiAjZGVmaW5lIF9fTlJfZHVwMiAoX19OUl9MaW51eCArIDMyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wYXVzZSAoX19OUl9MaW51eCArIDMzKQogI2RlZmluZSBfX05SX25hbm9zbGVlcCAoX19OUl9MaW51eCArIDM0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRpdGltZXIgKF9fTlJfTGludXggKyAzNSkKICNkZWZpbmUgX19OUl9zZXRpdGltZXIgKF9fTlJfTGludXggKyAzNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfYWxhcm0gKF9fTlJfTGludXggKyAzNykKICNkZWZpbmUgX19OUl9nZXRwaWQgKF9fTlJfTGludXggKyAzOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VuZGZpbGUgKF9fTlJfTGludXggKyAzOSkKICNkZWZpbmUgX19OUl9zb2NrZXQgKF9fTlJfTGludXggKyA0MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY29ubmVjdCAoX19OUl9MaW51eCArIDQxKQogI2RlZmluZSBfX05SX2FjY2VwdCAoX19OUl9MaW51eCArIDQyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZW5kdG8gKF9fTlJfTGludXggKyA0MykKICNkZWZpbmUgX19OUl9yZWN2ZnJvbSAoX19OUl9MaW51eCArIDQ0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZW5kbXNnIChfX05SX0xpbnV4ICsgNDUpCiAjZGVmaW5lIF9fTlJfcmVjdm1zZyAoX19OUl9MaW51eCArIDQ2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zaHV0ZG93biAoX19OUl9MaW51eCArIDQ3KQogI2RlZmluZSBfX05SX2JpbmQgKF9fTlJfTGludXggKyA0OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbGlzdGVuIChfX05SX0xpbnV4ICsgNDkpCiAjZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgKF9fTlJfTGludXggKyA1MCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUgKF9fTlJfTGludXggKyA1MSkKICNkZWZpbmUgX19OUl9zb2NrZXRwYWlyIChfX05SX0xpbnV4ICsgNTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldHNvY2tvcHQgKF9fTlJfTGludXggKyA1MykKICNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0IChfX05SX0xpbnV4ICsgNTQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Nsb25lIChfX05SX0xpbnV4ICsgNTUpCiAjZGVmaW5lIF9fTlJfZm9yayAoX19OUl9MaW51eCArIDU2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9leGVjdmUgKF9fTlJfTGludXggKyA1NykKICNkZWZpbmUgX19OUl9leGl0IChfX05SX0xpbnV4ICsgNTgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3dhaXQ0IChfX05SX0xpbnV4ICsgNTkpCiAjZGVmaW5lIF9fTlJfa2lsbCAoX19OUl9MaW51eCArIDYwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91bmFtZSAoX19OUl9MaW51eCArIDYxKQogI2RlZmluZSBfX05SX3NlbWdldCAoX19OUl9MaW51eCArIDYyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZW1vcCAoX19OUl9MaW51eCArIDYzKQogI2RlZmluZSBfX05SX3NlbWN0bCAoX19OUl9MaW51eCArIDY0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zaG1kdCAoX19OUl9MaW51eCArIDY1KQogI2RlZmluZSBfX05SX21zZ2dldCAoX19OUl9MaW51eCArIDY2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tc2dzbmQgKF9fTlJfTGludXggKyA2NykKICNkZWZpbmUgX19OUl9tc2dyY3YgKF9fTlJfTGludXggKyA2OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbXNnY3RsIChfX05SX0xpbnV4ICsgNjkpCiAjZGVmaW5lIF9fTlJfZmNudGwgKF9fTlJfTGludXggKyA3MCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmxvY2sgKF9fTlJfTGludXggKyA3MSkKICNkZWZpbmUgX19OUl9mc3luYyAoX19OUl9MaW51eCArIDcyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mZGF0YXN5bmMgKF9fTlJfTGludXggKyA3MykKICNkZWZpbmUgX19OUl90cnVuY2F0ZSAoX19OUl9MaW51eCArIDc0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mdHJ1bmNhdGUgKF9fTlJfTGludXggKyA3NSkKICNkZWZpbmUgX19OUl9nZXRkZW50cyAoX19OUl9MaW51eCArIDc2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRjd2QgKF9fTlJfTGludXggKyA3NykKICNkZWZpbmUgX19OUl9jaGRpciAoX19OUl9MaW51eCArIDc4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mY2hkaXIgKF9fTlJfTGludXggKyA3OSkKICNkZWZpbmUgX19OUl9yZW5hbWUgKF9fTlJfTGludXggKyA4MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbWtkaXIgKF9fTlJfTGludXggKyA4MSkKICNkZWZpbmUgX19OUl9ybWRpciAoX19OUl9MaW51eCArIDgyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jcmVhdCAoX19OUl9MaW51eCArIDgzKQogI2RlZmluZSBfX05SX2xpbmsgKF9fTlJfTGludXggKyA4NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdW5saW5rIChfX05SX0xpbnV4ICsgODUpCiAjZGVmaW5lIF9fTlJfc3ltbGluayAoX19OUl9MaW51eCArIDg2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZWFkbGluayAoX19OUl9MaW51eCArIDg3KQogI2RlZmluZSBfX05SX2NobW9kIChfX05SX0xpbnV4ICsgODgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZjaG1vZCAoX19OUl9MaW51eCArIDg5KQogI2RlZmluZSBfX05SX2Nob3duIChfX05SX0xpbnV4ICsgOTApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZjaG93biAoX19OUl9MaW51eCArIDkxKQogI2RlZmluZSBfX05SX2xjaG93biAoX19OUl9MaW51eCArIDkyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91bWFzayAoX19OUl9MaW51eCArIDkzKQogI2RlZmluZSBfX05SX2dldHRpbWVvZmRheSAoX19OUl9MaW51eCArIDk0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRybGltaXQgKF9fTlJfTGludXggKyA5NSkKICNkZWZpbmUgX19OUl9nZXRydXNhZ2UgKF9fTlJfTGludXggKyA5NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3lzaW5mbyAoX19OUl9MaW51eCArIDk3KQogI2RlZmluZSBfX05SX3RpbWVzIChfX05SX0xpbnV4ICsgOTgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3B0cmFjZSAoX19OUl9MaW51eCArIDk5KQogI2RlZmluZSBfX05SX2dldHVpZCAoX19OUl9MaW51eCArIDEwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3lzbG9nIChfX05SX0xpbnV4ICsgMTAxKQogI2RlZmluZSBfX05SX2dldGdpZCAoX19OUl9MaW51eCArIDEwMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0dWlkIChfX05SX0xpbnV4ICsgMTAzKQogI2RlZmluZSBfX05SX3NldGdpZCAoX19OUl9MaW51eCArIDEwNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0ZXVpZCAoX19OUl9MaW51eCArIDEwNSkKICNkZWZpbmUgX19OUl9nZXRlZ2lkIChfX05SX0xpbnV4ICsgMTA2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRwZ2lkIChfX05SX0xpbnV4ICsgMTA3KQogI2RlZmluZSBfX05SX2dldHBwaWQgKF9fTlJfTGludXggKyAxMDgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldHBncnAgKF9fTlJfTGludXggKyAxMDkpCiAjZGVmaW5lIF9fTlJfc2V0c2lkIChfX05SX0xpbnV4ICsgMTEwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRyZXVpZCAoX19OUl9MaW51eCArIDExMSkKICNkZWZpbmUgX19OUl9zZXRyZWdpZCAoX19OUl9MaW51eCArIDExMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzIChfX05SX0xpbnV4ICsgMTEzKQogI2RlZmluZSBfX05SX3NldGdyb3VwcyAoX19OUl9MaW51eCArIDExNCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0cmVzdWlkIChfX05SX0xpbnV4ICsgMTE1KQogI2RlZmluZSBfX05SX2dldHJlc3VpZCAoX19OUl9MaW51eCArIDExNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkIChfX05SX0xpbnV4ICsgMTE3KQogI2RlZmluZSBfX05SX2dldHJlc2dpZCAoX19OUl9MaW51eCArIDExOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0cGdpZCAoX19OUl9MaW51eCArIDExOSkKICNkZWZpbmUgX19OUl9zZXRmc3VpZCAoX19OUl9MaW51eCArIDEyMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0ZnNnaWQgKF9fTlJfTGludXggKyAxMjEpCiAjZGVmaW5lIF9fTlJfZ2V0c2lkIChfX05SX0xpbnV4ICsgMTIyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jYXBnZXQgKF9fTlJfTGludXggKyAxMjMpCiAjZGVmaW5lIF9fTlJfY2Fwc2V0IChfX05SX0xpbnV4ICsgMTI0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nIChfX05SX0xpbnV4ICsgMTI1KQogI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdCAoX19OUl9MaW51eCArIDEyNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvIChfX05SX0xpbnV4ICsgMTI3KQogI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQgKF9fTlJfTGludXggKyAxMjgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrIChfX05SX0xpbnV4ICsgMTI5KQogI2RlZmluZSBfX05SX3V0aW1lIChfX05SX0xpbnV4ICsgMTMwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ta25vZCAoX19OUl9MaW51eCArIDEzMSkKICNkZWZpbmUgX19OUl9wZXJzb25hbGl0eSAoX19OUl9MaW51eCArIDEzMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdXN0YXQgKF9fTlJfTGludXggKyAxMzMpCiAjZGVmaW5lIF9fTlJfc3RhdGZzIChfX05SX0xpbnV4ICsgMTM0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mc3RhdGZzIChfX05SX0xpbnV4ICsgMTM1KQogI2RlZmluZSBfX05SX3N5c2ZzIChfX05SX0xpbnV4ICsgMTM2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRwcmlvcml0eSAoX19OUl9MaW51eCArIDEzNykKICNkZWZpbmUgX19OUl9zZXRwcmlvcml0eSAoX19OUl9MaW51eCArIDEzOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gKF9fTlJfTGludXggKyAxMzkpCiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0gKF9fTlJfTGludXggKyAxNDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlciAoX19OUl9MaW51eCArIDE0MSkKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIgKF9fTlJfTGludXggKyAxNDIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXggKF9fTlJfTGludXggKyAxNDMpCiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoX19OUl9MaW51eCArIDE0NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX05SX0xpbnV4ICsgMTQ1KQogI2RlZmluZSBfX05SX21sb2NrIChfX05SX0xpbnV4ICsgMTQ2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tdW5sb2NrIChfX05SX0xpbnV4ICsgMTQ3KQogI2RlZmluZSBfX05SX21sb2NrYWxsIChfX05SX0xpbnV4ICsgMTQ4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tdW5sb2NrYWxsIChfX05SX0xpbnV4ICsgMTQ5KQogI2RlZmluZSBfX05SX3ZoYW5ndXAgKF9fTlJfTGludXggKyAxNTApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QgKF9fTlJfTGludXggKyAxNTEpCiAjZGVmaW5lIF9fTlJfX3N5c2N0bCAoX19OUl9MaW51eCArIDE1MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcHJjdGwgKF9fTlJfTGludXggKyAxNTMpCiAjZGVmaW5lIF9fTlJfYWRqdGltZXggKF9fTlJfTGludXggKyAxNTQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldHJsaW1pdCAoX19OUl9MaW51eCArIDE1NSkKICNkZWZpbmUgX19OUl9jaHJvb3QgKF9fTlJfTGludXggKyAxNTYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N5bmMgKF9fTlJfTGludXggKyAxNTcpCiAjZGVmaW5lIF9fTlJfYWNjdCAoX19OUl9MaW51eCArIDE1OCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5IChfX05SX0xpbnV4ICsgMTU5KQogI2RlZmluZSBfX05SX21vdW50IChfX05SX0xpbnV4ICsgMTYwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91bW91bnQyIChfX05SX0xpbnV4ICsgMTYxKQogI2RlZmluZSBfX05SX3N3YXBvbiAoX19OUl9MaW51eCArIDE2MikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3dhcG9mZiAoX19OUl9MaW51eCArIDE2MykKICNkZWZpbmUgX19OUl9yZWJvb3QgKF9fTlJfTGludXggKyAxNjQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldGhvc3RuYW1lIChfX05SX0xpbnV4ICsgMTY1KQogI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUgKF9fTlJfTGludXggKyAxNjYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUgKF9fTlJfTGludXggKyAxNjcpCiAjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUgKF9fTlJfTGludXggKyAxNjgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUgKF9fTlJfTGludXggKyAxNjkpCiAjZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zIChfX05SX0xpbnV4ICsgMTcwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUgKF9fTlJfTGludXggKyAxNzEpCiAjZGVmaW5lIF9fTlJfcXVvdGFjdGwgKF9fTlJfTGludXggKyAxNzIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX25mc3NlcnZjdGwgKF9fTlJfTGludXggKyAxNzMpCiAjZGVmaW5lIF9fTlJfZ2V0cG1zZyAoX19OUl9MaW51eCArIDE3NCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcHV0cG1zZyAoX19OUl9MaW51eCArIDE3NSkKICNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbCAoX19OUl9MaW51eCArIDE3NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVzZXJ2ZWQxNzcgKF9fTlJfTGludXggKyAxNzcpCiAjZGVmaW5lIF9fTlJfZ2V0dGlkIChfX05SX0xpbnV4ICsgMTc4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZWFkYWhlYWQgKF9fTlJfTGludXggKyAxNzkpCiAjZGVmaW5lIF9fTlJfc2V0eGF0dHIgKF9fTlJfTGludXggKyAxODApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xzZXR4YXR0ciAoX19OUl9MaW51eCArIDE4MSkKICNkZWZpbmUgX19OUl9mc2V0eGF0dHIgKF9fTlJfTGludXggKyAxODIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldHhhdHRyIChfX05SX0xpbnV4ICsgMTgzKQogI2RlZmluZSBfX05SX2xnZXR4YXR0ciAoX19OUl9MaW51eCArIDE4NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmdldHhhdHRyIChfX05SX0xpbnV4ICsgMTg1KQogI2RlZmluZSBfX05SX2xpc3R4YXR0ciAoX19OUl9MaW51eCArIDE4NikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbGxpc3R4YXR0ciAoX19OUl9MaW51eCArIDE4NykKICNkZWZpbmUgX19OUl9mbGlzdHhhdHRyIChfX05SX0xpbnV4ICsgMTg4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZW1vdmV4YXR0ciAoX19OUl9MaW51eCArIDE4OSkKICNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIgKF9fTlJfTGludXggKyAxOTApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0ciAoX19OUl9MaW51eCArIDE5MSkKICNkZWZpbmUgX19OUl90a2lsbCAoX19OUl9MaW51eCArIDE5MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVzZXJ2ZWQxOTMgKF9fTlJfTGludXggKyAxOTMpCiAjZGVmaW5lIF9fTlJfZnV0ZXggKF9fTlJfTGludXggKyAxOTQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5IChfX05SX0xpbnV4ICsgMTk1KQogI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5IChfX05SX0xpbnV4ICsgMTk2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jYWNoZWZsdXNoIChfX05SX0xpbnV4ICsgMTk3KQogI2RlZmluZSBfX05SX2NhY2hlY3RsIChfX05SX0xpbnV4ICsgMTk4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zeXNtaXBzIChfX05SX0xpbnV4ICsgMTk5KQogI2RlZmluZSBfX05SX2lvX3NldHVwIChfX05SX0xpbnV4ICsgMjAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pb19kZXN0cm95IChfX05SX0xpbnV4ICsgMjAxKQogI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cyAoX19OUl9MaW51eCArIDIwMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW9fc3VibWl0IChfX05SX0xpbnV4ICsgMjAzKQogI2RlZmluZSBfX05SX2lvX2NhbmNlbCAoX19OUl9MaW51eCArIDIwNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXhpdF9ncm91cCAoX19OUl9MaW51eCArIDIwNSkKICNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAoX19OUl9MaW51eCArIDIwNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlIChfX05SX0xpbnV4ICsgMjA3KQogI2RlZmluZSBfX05SX2Vwb2xsX2N0bCAoX19OUl9MaW51eCArIDIwOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAoX19OUl9MaW51eCArIDIwOSkKICNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzIChfX05SX0xpbnV4ICsgMjEwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4gKF9fTlJfTGludXggKyAyMTEpCiAjZGVmaW5lIF9fTlJfZmNudGw2NCAoX19OUl9MaW51eCArIDIxMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzIChfX05SX0xpbnV4ICsgMjEzKQogI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAoX19OUl9MaW51eCArIDIxNCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VtdGltZWRvcCAoX19OUl9MaW51eCArIDIxNSkKICNkZWZpbmUgX19OUl9mYWR2aXNlNjQgKF9fTlJfTGludXggKyAyMTYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N0YXRmczY0IChfX05SX0xpbnV4ICsgMjE3KQogI2RlZmluZSBfX05SX2ZzdGF0ZnM2NCAoX19OUl9MaW51eCArIDIxOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NCAoX19OUl9MaW51eCArIDIxOSkKICNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUgKF9fTlJfTGludXggKyAyMjApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUgKF9fTlJfTGludXggKyAyMjEpCiAjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZSAoX19OUl9MaW51eCArIDIyMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1biAoX19OUl9MaW51eCArIDIyMykKICNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUgKF9fTlJfTGludXggKyAyMjQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUgKF9fTlJfTGludXggKyAyMjUpCiAjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZSAoX19OUl9MaW51eCArIDIyNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzIChfX05SX0xpbnV4ICsgMjI3KQogI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcCAoX19OUl9MaW51eCArIDIyOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdGdraWxsIChfX05SX0xpbnV4ICsgMjI5KQogI2RlZmluZSBfX05SX3V0aW1lcyAoX19OUl9MaW51eCArIDIzMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbWJpbmQgKF9fTlJfTGludXggKyAyMzEpCiAjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeSAoX19OUl9MaW51eCArIDIzMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeSAoX19OUl9MaW51eCArIDIzMykKICNkZWZpbmUgX19OUl9tcV9vcGVuIChfX05SX0xpbnV4ICsgMjM0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tcV91bmxpbmsgKF9fTlJfTGludXggKyAyMzUpCiAjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kIChfX05SX0xpbnV4ICsgMjM2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUgKF9fTlJfTGludXggKyAyMzcpCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5IChfX05SX0xpbnV4ICsgMjM4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyIChfX05SX0xpbnV4ICsgMjM5KQogI2RlZmluZSBfX05SX3ZzZXJ2ZXIgKF9fTlJfTGludXggKyAyNDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3dhaXRpZCAoX19OUl9MaW51eCArIDI0MSkKICNkZWZpbmUgX19OUl9hZGRfa2V5IChfX05SX0xpbnV4ICsgMjQzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleSAoX19OUl9MaW51eCArIDI0NCkKICNkZWZpbmUgX19OUl9rZXljdGwgKF9fTlJfTGludXggKyAyNDUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldF90aHJlYWRfYXJlYSAoX19OUl9MaW51eCArIDI0NikKICNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQgKF9fTlJfTGludXggKyAyNDcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoIChfX05SX0xpbnV4ICsgMjQ4KQogI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2ggKF9fTlJfTGludXggKyAyNDkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21pZ3JhdGVfcGFnZXMgKF9fTlJfTGludXggKyAyNTApCiAjZGVmaW5lIF9fTlJfb3BlbmF0IChfX05SX0xpbnV4ICsgMjUxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ta2RpcmF0IChfX05SX0xpbnV4ICsgMjUyKQogI2RlZmluZSBfX05SX21rbm9kYXQgKF9fTlJfTGludXggKyAyNTMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZjaG93bmF0IChfX05SX0xpbnV4ICsgMjU0KQogI2RlZmluZSBfX05SX2Z1dGltZXNhdCAoX19OUl9MaW51eCArIDI1NSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbmV3ZnN0YXRhdCAoX19OUl9MaW51eCArIDI1NikKICNkZWZpbmUgX19OUl91bmxpbmthdCAoX19OUl9MaW51eCArIDI1NykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVuYW1lYXQgKF9fTlJfTGludXggKyAyNTgpCiAjZGVmaW5lIF9fTlJfbGlua2F0IChfX05SX0xpbnV4ICsgMjU5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zeW1saW5rYXQgKF9fTlJfTGludXggKyAyNjApCiAjZGVmaW5lIF9fTlJfcmVhZGxpbmthdCAoX19OUl9MaW51eCArIDI2MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmNobW9kYXQgKF9fTlJfTGludXggKyAyNjIpCiAjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0IChfX05SX0xpbnV4ICsgMjYzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wc2VsZWN0NiAoX19OUl9MaW51eCArIDI2NCkKICNkZWZpbmUgX19OUl9wcG9sbCAoX19OUl9MaW51eCArIDI2NSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdW5zaGFyZSAoX19OUl9MaW51eCArIDI2NikKICNkZWZpbmUgX19OUl9zcGxpY2UgKF9fTlJfTGludXggKyAyNjcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZSAoX19OUl9MaW51eCArIDI2OCkKICNkZWZpbmUgX19OUl90ZWUgKF9fTlJfTGludXggKyAyNjkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Ztc3BsaWNlIChfX05SX0xpbnV4ICsgMjcwKQogI2RlZmluZSBfX05SX21vdmVfcGFnZXMgKF9fTlJfTGludXggKyAyNzEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdCAoX19OUl9MaW51eCArIDI3MikKICNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QgKF9fTlJfTGludXggKyAyNzMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2tleGVjX2xvYWQgKF9fTlJfTGludXggKyAyNzQpCiAjZGVmaW5lIF9fTlJfZ2V0Y3B1IChfX05SX0xpbnV4ICsgMjc1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdCAoX19OUl9MaW51eCArIDI3NikKICNkZWZpbmUgX19OUl9pb3ByaW9fc2V0IChfX05SX0xpbnV4ICsgMjc3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0IChfX05SX0xpbnV4ICsgMjc4KQogI2RlZmluZSBfX05SX3V0aW1lbnNhdCAoX19OUl9MaW51eCArIDI3OSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2lnbmFsZmQgKF9fTlJfTGludXggKyAyODApCiAjZGVmaW5lIF9fTlJfdGltZXJmZCAoX19OUl9MaW51eCArIDI4MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXZlbnRmZCAoX19OUl9MaW51eCArIDI4MikKICNkZWZpbmUgX19OUl9mYWxsb2NhdGUgKF9fTlJfTGludXggKyAyODMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlIChfX05SX0xpbnV4ICsgMjg0KQogI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZSAoX19OUl9MaW51eCArIDI4NSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lIChfX05SX0xpbnV4ICsgMjg2KQogI2RlZmluZSBfX05SX3NpZ25hbGZkNCAoX19OUl9MaW51eCArIDI4NykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXZlbnRmZDIgKF9fTlJfTGludXggKyAyODgpCiAjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlMSAoX19OUl9MaW51eCArIDI4OSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZHVwMyAoX19OUl9MaW51eCArIDI5MCkKICNkZWZpbmUgX19OUl9waXBlMiAoX19OUl9MaW51eCArIDI5MSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MSAoX19OUl9MaW51eCArIDI5MikKICNkZWZpbmUgX19OUl9wcmVhZHYgKF9fTlJfTGludXggKyAyOTMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3B3cml0ZXYgKF9fTlJfTGludXggKyAyOTQpCiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8gKF9fTlJfTGludXggKyAyOTUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbiAoX19OUl9MaW51eCArIDI5NikKICNkZWZpbmUgX19OUl9hY2NlcHQ0IChfX05SX0xpbnV4ICsgMjk3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZWN2bW1zZyAoX19OUl9MaW51eCArIDI5OCkKICNkZWZpbmUgX19OUl9nZXRkZW50czY0IChfX05SX0xpbnV4ICsgMjk5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mYW5vdGlmeV9pbml0IChfX05SX0xpbnV4ICsgMzAwKQogI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsgKF9fTlJfTGludXggKyAzMDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3BybGltaXQ2NCAoX19OUl9MaW51eCArIDMwMikKICNkZWZpbmUgX19OUl9uYW1lX3RvX2hhbmRsZV9hdCAoX19OUl9MaW51eCArIDMwMykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfb3Blbl9ieV9oYW5kbGVfYXQgKF9fTlJfTGludXggKyAzMDQpCiAjZGVmaW5lIF9fTlJfY2xvY2tfYWRqdGltZSAoX19OUl9MaW51eCArIDMwNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3luY2ZzIChfX05SX0xpbnV4ICsgMzA2KQogI2RlZmluZSBfX05SX3NlbmRtbXNnIChfX05SX0xpbnV4ICsgMzA3KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRucyAoX19OUl9MaW51eCArIDMwOCkKICNkZWZpbmUgX19OUl9wcm9jZXNzX3ZtX3JlYWR2IChfX05SX0xpbnV4ICsgMzA5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wcm9jZXNzX3ZtX3dyaXRldiAoX19OUl9MaW51eCArIDMxMCkKICNkZWZpbmUgX19OUl9rY21wIChfX05SX0xpbnV4ICsgMzExKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9maW5pdF9tb2R1bGUgKF9fTlJfTGludXggKyAzMTIpCiAjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YXR0ciAoX19OUl9MaW51eCArIDMxMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YXR0ciAoX19OUl9MaW51eCArIDMxNCkKLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscyAzMTQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfcmVuYW1lYXQyIChfX05SX0xpbnV4ICsgMzE1KQorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzIDMxNQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX04zMl9MaW51eCA2MDAwCi0jZGVmaW5lIF9fTlJfTjMyX0xpbnV4X3N5c2NhbGxzIDMxNAorI2RlZmluZSBfX05SX04zMl9MaW51eF9zeXNjYWxscyAzMTUKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20va3ZtX3BlcmYuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20va3ZtX3BlcmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzAxZGUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9rdm1fcGVyZi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9YODZfS1ZNX1BFUkZfSAorI2RlZmluZSBfQVNNX1g4Nl9LVk1fUEVSRl9ICisjaW5jbHVkZSA8YXNtL3N2bS5oPgorI2luY2x1ZGUgPGFzbS92bXguaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaW5jbHVkZSA8YXNtL2t2bS5oPgorI2RlZmluZSBERUNPREVfU1RSX0xFTiAyMAorI2RlZmluZSBWQ1BVX0lEICJ2Y3B1X2lkIgorI2RlZmluZSBLVk1fRU5UUllfVFJBQ0UgImt2bTprdm1fZW50cnkiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fRVhJVF9UUkFDRSAia3ZtOmt2bV9leGl0IgorI2RlZmluZSBLVk1fRVhJVF9SRUFTT04gImV4aXRfcmVhc29uIgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL21zci1pbmRleC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9tc3ItaW5kZXguaAppbmRleCA2ZTRjYWM3Li5hODNmMzUwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL21zci1pbmRleC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vbXNyLWluZGV4LmgKQEAgLTMwMiwyNjMgKzMwMiwyOTUgQEAKICNkZWZpbmUgTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MIDB4MDAwMDAwM2EKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1RTQ19BREpVU1QgMHgwMDAwMDAzYgorI2RlZmluZSBNU1JfSUEzMl9CTkRDRkdTIDB4MDAwMDBkOTAKICNkZWZpbmUgRkVBVFVSRV9DT05UUk9MX0xPQ0tFRCAoMTw8MCkKICNkZWZpbmUgRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRURfSU5TSURFX1NNWCAoMTw8MSkKLSNkZWZpbmUgRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRURfT1VUU0lERV9TTVggKDE8PDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRF9PVVRTSURFX1NNWCAoMTw8MikKICNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0UgMHgwMDAwMDAxYgogI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9CU1AgKDE8PDgpCiAjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSAoMTw8MTEpCi0jZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0JBU0UgKDB4ZmZmZmY8PDEyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0VfQkFTRSAoMHhmZmZmZjw8MTIpCiAjZGVmaW5lIE1TUl9JQTMyX1RTQ0RFQURMSU5FIDB4MDAwMDA2ZTAKICNkZWZpbmUgTVNSX0lBMzJfVUNPREVfV1JJVEUgMHgwMDAwMDA3OQogI2RlZmluZSBNU1JfSUEzMl9VQ09ERV9SRVYgMHgwMDAwMDA4YgotI2RlZmluZSBNU1JfSUEzMl9QRVJGX1NUQVRVUyAweDAwMDAwMTk4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU1JfSUEzMl9QRVJGX1NUQVRVUyAweDAwMDAwMTk4CiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZfQ1RMIDB4MDAwMDAxOTkKICNkZWZpbmUgTVNSX0FNRF9QU1RBVEVfREVGX0JBU0UgMHhjMDAxMDA2NAogI2RlZmluZSBNU1JfQU1EX1BFUkZfU1RBVFVTIDB4YzAwMTAwNjMKLSNkZWZpbmUgTVNSX0FNRF9QRVJGX0NUTCAweGMwMDEwMDYyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU1JfQU1EX1BFUkZfQ1RMIDB4YzAwMTAwNjIKICNkZWZpbmUgTVNSX0lBMzJfTVBFUkYgMHgwMDAwMDBlNwogI2RlZmluZSBNU1JfSUEzMl9BUEVSRiAweDAwMDAwMGU4CiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0NPTlRST0wgMHgwMDAwMDE5YQotI2RlZmluZSBNU1JfSUEzMl9USEVSTV9JTlRFUlJVUFQgMHgwMDAwMDE5YgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfVEhFUk1fSU5URVJSVVBUIDB4MDAwMDAxOWIKICNkZWZpbmUgVEhFUk1fSU5UX0hJR0hfRU5BQkxFICgxIDw8IDApCiAjZGVmaW5lIFRIRVJNX0lOVF9MT1dfRU5BQkxFICgxIDw8IDEpCiAjZGVmaW5lIFRIRVJNX0lOVF9QTE5fRU5BQkxFICgxIDw8IDI0KQotI2RlZmluZSBNU1JfSUEzMl9USEVSTV9TVEFUVVMgMHgwMDAwMDE5YwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfVEhFUk1fU1RBVFVTIDB4MDAwMDAxOWMKICNkZWZpbmUgVEhFUk1fU1RBVFVTX1BST0NIT1QgKDEgPDwgMCkKICNkZWZpbmUgVEhFUk1fU1RBVFVTX1BPV0VSX0xJTUlUICgxIDw8IDEwKQogI2RlZmluZSBNU1JfVEhFUk0yX0NUTCAweDAwMDAwMTlkCi0jZGVmaW5lIE1TUl9USEVSTTJfQ1RMX1RNX1NFTEVDVCAoMVVMTCA8PCAxNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TUl9USEVSTTJfQ1RMX1RNX1NFTEVDVCAoMVVMTCA8PCAxNikKICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEUgMHgwMDAwMDFhMAogI2RlZmluZSBNU1JfSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQgMHgwMDAwMDFhMgogI2RlZmluZSBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTIDB4MDAwMDAxYjAKLSNkZWZpbmUgRU5FUkdZX1BFUkZfQklBU19QRVJGT1JNQU5DRSAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFTkVSR1lfUEVSRl9CSUFTX1BFUkZPUk1BTkNFIDAKICNkZWZpbmUgRU5FUkdZX1BFUkZfQklBU19OT1JNQUwgNgogI2RlZmluZSBFTkVSR1lfUEVSRl9CSUFTX1BPV0VSU0FWRSAxNQogI2RlZmluZSBNU1JfSUEzMl9QQUNLQUdFX1RIRVJNX1NUQVRVUyAweDAwMDAwMWIxCi0jZGVmaW5lIFBBQ0tBR0VfVEhFUk1fU1RBVFVTX1BST0NIT1QgKDEgPDwgMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBBQ0tBR0VfVEhFUk1fU1RBVFVTX1BST0NIT1QgKDEgPDwgMCkKICNkZWZpbmUgUEFDS0FHRV9USEVSTV9TVEFUVVNfUE9XRVJfTElNSVQgKDEgPDwgMTApCiAjZGVmaW5lIE1TUl9JQTMyX1BBQ0tBR0VfVEhFUk1fSU5URVJSVVBUIDB4MDAwMDAxYjIKICNkZWZpbmUgUEFDS0FHRV9USEVSTV9JTlRfSElHSF9FTkFCTEUgKDEgPDwgMCkKLSNkZWZpbmUgUEFDS0FHRV9USEVSTV9JTlRfTE9XX0VOQUJMRSAoMSA8PCAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUEFDS0FHRV9USEVSTV9JTlRfTE9XX0VOQUJMRSAoMSA8PCAxKQogI2RlZmluZSBQQUNLQUdFX1RIRVJNX0lOVF9QTE5fRU5BQkxFICgxIDw8IDI0KQogI2RlZmluZSBUSEVSTV9JTlRfVEhSRVNIT0xEMF9FTkFCTEUgKDEgPDwgMTUpCiAjZGVmaW5lIFRIRVJNX1NISUZUX1RIUkVTSE9MRDAgOAotI2RlZmluZSBUSEVSTV9NQVNLX1RIUkVTSE9MRDAgKDB4N2YgPDwgVEhFUk1fU0hJRlRfVEhSRVNIT0xEMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRIRVJNX01BU0tfVEhSRVNIT0xEMCAoMHg3ZiA8PCBUSEVSTV9TSElGVF9USFJFU0hPTEQwKQogI2RlZmluZSBUSEVSTV9JTlRfVEhSRVNIT0xEMV9FTkFCTEUgKDEgPDwgMjMpCiAjZGVmaW5lIFRIRVJNX1NISUZUX1RIUkVTSE9MRDEgMTYKICNkZWZpbmUgVEhFUk1fTUFTS19USFJFU0hPTEQxICgweDdmIDw8IFRIRVJNX1NISUZUX1RIUkVTSE9MRDEpCi0jZGVmaW5lIFRIRVJNX1NUQVRVU19USFJFU0hPTEQwICgxIDw8IDYpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSEVSTV9TVEFUVVNfVEhSRVNIT0xEMCAoMSA8PCA2KQogI2RlZmluZSBUSEVSTV9MT0dfVEhSRVNIT0xEMCAoMSA8PCA3KQogI2RlZmluZSBUSEVSTV9TVEFUVVNfVEhSRVNIT0xEMSAoMSA8PCA4KQogI2RlZmluZSBUSEVSTV9MT0dfVEhSRVNIT0xEMSAoMSA8PCA5KQotI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9GQVNUX1NUUklORyAoMVVMTCA8PCAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfVENDICgxVUxMIDw8IDEpCi0jZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0VNT04gKDFVTEwgPDwgNykKLSNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfQlRTX1VOQVZBSUwgKDFVTEwgPDwgMTEpCi0jZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1BFQlNfVU5BVkFJTCAoMVVMTCA8PCAxMikKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRkFTVF9TVFJJTkdfQklUIDAKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRkFTVF9TVFJJTkcgKDFVTEwgPDwgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRkFTVF9TVFJJTkdfQklUKQorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9UQ0NfQklUIDEKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfVENDICgxVUxMIDw8IE1TUl9JQTMyX01JU0NfRU5BQkxFX1RDQ19CSVQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9FTkhBTkNFRF9TUEVFRFNURVAgKDFVTEwgPDwgMTYpCi0jZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX01XQUlUICgxVUxMIDw8IDE4KQotI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9MSU1JVF9DUFVJRCAoMVVMTCA8PCAyMikKLSNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfWFRQUl9ESVNBQkxFICgxVUxMIDw8IDIzKQorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9FTU9OX0JJVCA3CisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0VNT04gKDFVTEwgPDwgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRU1PTl9CSVQpCisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0JUU19VTkFWQUlMX0JJVCAxMQorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9CVFNfVU5BVkFJTCAoMVVMTCA8PCBNU1JfSUEzMl9NSVNDX0VOQUJMRV9CVFNfVU5BVkFJTF9CSVQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9YRF9ESVNBQkxFICgxVUxMIDw8IDM0KQotI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9YODdfQ09NUEFUICgxVUxMIDw8IDIpCi0jZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1RNMSAoMVVMTCA8PCAzKQotI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9TUExJVF9MT0NLX0RJU0FCTEUgKDFVTEwgPDwgNCkKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfUEVCU19VTkFWQUlMX0JJVCAxMgorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9QRUJTX1VOQVZBSUwgKDFVTEwgPDwgTVNSX0lBMzJfTUlTQ19FTkFCTEVfUEVCU19VTkFWQUlMX0JJVCkKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRU5IQU5DRURfU1BFRURTVEVQX0JJVCAxNgorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9FTkhBTkNFRF9TUEVFRFNURVAgKDFVTEwgPDwgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRU5IQU5DRURfU1BFRURTVEVQX0JJVCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0wzQ0FDSEVfRElTQUJMRSAoMVVMTCA8PCA2KQotI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9TVVBQUkVTU19MT0NLICgxVUxMIDw8IDgpCi0jZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1BSRUZFVENIX0RJU0FCTEUgKDFVTEwgPDwgOSkKLSNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRkVSUiAoMVVMTCA8PCAxMCkKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfTVdBSVRfQklUIDE4CisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX01XQUlUICgxVUxMIDw8IE1TUl9JQTMyX01JU0NfRU5BQkxFX01XQUlUX0JJVCkKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfTElNSVRfQ1BVSURfQklUIDIyCisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0xJTUlUX0NQVUlEICgxVUxMIDw8IE1TUl9JQTMyX01JU0NfRU5BQkxFX0xJTUlUX0NQVUlEX0JJVCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0ZFUlJfTVVMVElQTEVYICgxVUxMIDw8IDEwKQotI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9UTTIgKDFVTEwgPDwgMTMpCi0jZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0FESl9QUkVGX0RJU0FCTEUgKDFVTEwgPDwgMTkpCi0jZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1NQRUVEU1RFUF9MT0NLICgxVUxMIDw8IDIwKQorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9YVFBSX0RJU0FCTEVfQklUIDIzCisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1hUUFJfRElTQUJMRSAoMVVMTCA8PCBNU1JfSUEzMl9NSVNDX0VOQUJMRV9YVFBSX0RJU0FCTEVfQklUKQorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9YRF9ESVNBQkxFX0JJVCAzNAorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9YRF9ESVNBQkxFICgxVUxMIDw8IE1TUl9JQTMyX01JU0NfRU5BQkxFX1hEX0RJU0FCTEVfQklUKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfTDFEX0NPTlRFWFQgKDFVTEwgPDwgMjQpCi0jZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0RDVV9QUkVGX0RJU0FCTEUgKDFVTEwgPDwgMzcpCi0jZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1RVUkJPX0RJU0FCTEUgKDFVTEwgPDwgMzgpCi0jZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0lQX1BSRUZfRElTQUJMRSAoMVVMTCA8PCAzOSkKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfWDg3X0NPTVBBVF9CSVQgMgorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9YODdfQ09NUEFUICgxVUxMIDw8IE1TUl9JQTMyX01JU0NfRU5BQkxFX1g4N19DT01QQVRfQklUKQorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9UTTFfQklUIDMKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfVE0xICgxVUxMIDw8IE1TUl9JQTMyX01JU0NfRU5BQkxFX1RNMV9CSVQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9TUExJVF9MT0NLX0RJU0FCTEVfQklUIDQKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfU1BMSVRfTE9DS19ESVNBQkxFICgxVUxMIDw8IE1TUl9JQTMyX01JU0NfRU5BQkxFX1NQTElUX0xPQ0tfRElTQUJMRV9CSVQpCisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0wzQ0FDSEVfRElTQUJMRV9CSVQgNgorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9MM0NBQ0hFX0RJU0FCTEUgKDFVTEwgPDwgTVNSX0lBMzJfTUlTQ19FTkFCTEVfTDNDQUNIRV9ESVNBQkxFX0JJVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1NVUFBSRVNTX0xPQ0tfQklUIDgKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfU1VQUFJFU1NfTE9DSyAoMVVMTCA8PCBNU1JfSUEzMl9NSVNDX0VOQUJMRV9TVVBQUkVTU19MT0NLX0JJVCkKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfUFJFRkVUQ0hfRElTQUJMRV9CSVQgOQorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9QUkVGRVRDSF9ESVNBQkxFICgxVUxMIDw8IE1TUl9JQTMyX01JU0NfRU5BQkxFX1BSRUZFVENIX0RJU0FCTEVfQklUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRkVSUl9CSVQgMTAKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRkVSUiAoMVVMTCA8PCBNU1JfSUEzMl9NSVNDX0VOQUJMRV9GRVJSX0JJVCkKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRkVSUl9NVUxUSVBMRVhfQklUIDEwCisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0ZFUlJfTVVMVElQTEVYICgxVUxMIDw8IE1TUl9JQTMyX01JU0NfRU5BQkxFX0ZFUlJfTVVMVElQTEVYX0JJVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1RNMl9CSVQgMTMKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfVE0yICgxVUxMIDw8IE1TUl9JQTMyX01JU0NfRU5BQkxFX1RNMl9CSVQpCisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0FESl9QUkVGX0RJU0FCTEVfQklUIDE5CisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0FESl9QUkVGX0RJU0FCTEUgKDFVTEwgPDwgTVNSX0lBMzJfTUlTQ19FTkFCTEVfQURKX1BSRUZfRElTQUJMRV9CSVQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9TUEVFRFNURVBfTE9DS19CSVQgMjAKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfU1BFRURTVEVQX0xPQ0sgKDFVTEwgPDwgTVNSX0lBMzJfTUlTQ19FTkFCTEVfU1BFRURTVEVQX0xPQ0tfQklUKQorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9MMURfQ09OVEVYVF9CSVQgMjQKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfTDFEX0NPTlRFWFQgKDFVTEwgPDwgTVNSX0lBMzJfTUlTQ19FTkFCTEVfTDFEX0NPTlRFWFRfQklUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRENVX1BSRUZfRElTQUJMRV9CSVQgMzcKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRENVX1BSRUZfRElTQUJMRSAoMVVMTCA8PCBNU1JfSUEzMl9NSVNDX0VOQUJMRV9EQ1VfUFJFRl9ESVNBQkxFX0JJVCkKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfVFVSQk9fRElTQUJMRV9CSVQgMzgKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfVFVSQk9fRElTQUJMRSAoMVVMTCA8PCBNU1JfSUEzMl9NSVNDX0VOQUJMRV9UVVJCT19ESVNBQkxFX0JJVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0lQX1BSRUZfRElTQUJMRV9CSVQgMzkKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfSVBfUFJFRl9ESVNBQkxFICgxVUxMIDw8IE1TUl9JQTMyX01JU0NfRU5BQkxFX0lQX1BSRUZfRElTQUJMRV9CSVQpCiAjZGVmaW5lIE1TUl9JQTMyX1RTQ19ERUFETElORSAweDAwMDAwNkUwCiAjZGVmaW5lIE1TUl9JQTMyX01DR19FQVggMHgwMDAwMDE4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCWCAweDAwMDAwMTgxCiAjZGVmaW5lIE1TUl9JQTMyX01DR19FQ1ggMHgwMDAwMDE4MgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VEWCAweDAwMDAwMTgzCiAjZGVmaW5lIE1TUl9JQTMyX01DR19FU0kgMHgwMDAwMDE4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VESSAweDAwMDAwMTg1CiAjZGVmaW5lIE1TUl9JQTMyX01DR19FQlAgMHgwMDAwMDE4NgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VTUCAweDAwMDAwMTg3CiAjZGVmaW5lIE1TUl9JQTMyX01DR19FRkxBR1MgMHgwMDAwMDE4OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VJUCAweDAwMDAwMTg5CiAjZGVmaW5lIE1TUl9JQTMyX01DR19SRVNFUlZFRCAweDAwMDAwMThhCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIwIDB4MDAwMDAzMDAKICNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMSAweDAwMDAwMzAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIyIDB4MDAwMDAzMDIKICNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMyAweDAwMDAwMzAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjAgMHgwMDAwMDMwNAogI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjEgMHgwMDAwMDMwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIyIDB4MDAwMDAzMDYKICNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIzIDB4MDAwMDAzMDcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMCAweDAwMDAwMzA4CiAjZGVmaW5lIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMSAweDAwMDAwMzA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjIgMHgwMDAwMDMwYQogI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjMgMHgwMDAwMDMwYgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIwIDB4MDAwMDAzMGMKICNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIxIDB4MDAwMDAzMGQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMiAweDAwMDAwMzBlCiAjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMyAweDAwMDAwMzBmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjQgMHgwMDAwMDMxMAogI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjUgMHgwMDAwMDMxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMCAweDAwMDAwMzYwCiAjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjEgMHgwMDAwMDM2MQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMiAweDAwMDAwMzYyCiAjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjMgMHgwMDAwMDM2MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X01TX0NDQ1IwIDB4MDAwMDAzNjQKICNkZWZpbmUgTVNSX1A0X01TX0NDQ1IxIDB4MDAwMDAzNjUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMiAweDAwMDAwMzY2CiAjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMyAweDAwMDAwMzY3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjAgMHgwMDAwMDM2OAogI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjEgMHgwMDAwMDM2OQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IyIDB4MDAwMDAzNmEKICNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IzIDB4MDAwMDAzNmIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMCAweDAwMDAwMzZjCiAjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMSAweDAwMDAwMzZkCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjIgMHgwMDAwMDM2ZQogI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjMgMHgwMDAwMDM2ZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0lRX0NDQ1I0IDB4MDAwMDAzNzAKICNkZWZpbmUgTVNSX1A0X0lRX0NDQ1I1IDB4MDAwMDAzNzEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9BTEZfRVNDUjAgMHgwMDAwMDNjYQogI2RlZmluZSBNU1JfUDRfQUxGX0VTQ1IxIDB4MDAwMDAzY2IKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9CUFVfRVNDUjAgMHgwMDAwMDNiMgogI2RlZmluZSBNU1JfUDRfQlBVX0VTQ1IxIDB4MDAwMDAzYjMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9CU1VfRVNDUjAgMHgwMDAwMDNhMAogI2RlZmluZSBNU1JfUDRfQlNVX0VTQ1IxIDB4MDAwMDAzYTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjAgMHgwMDAwMDNiOAogI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IxIDB4MDAwMDAzYjkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjIgMHgwMDAwMDNjYwogI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IzIDB4MDAwMDAzY2QKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjQgMHgwMDAwMDNlMAogI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1I1IDB4MDAwMDAzZTEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9EQUNfRVNDUjAgMHgwMDAwMDNhOAogI2RlZmluZSBNU1JfUDRfREFDX0VTQ1IxIDB4MDAwMDAzYTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9GSVJNX0VTQ1IwIDB4MDAwMDAzYTQKICNkZWZpbmUgTVNSX1A0X0ZJUk1fRVNDUjEgMHgwMDAwMDNhNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0ZMQU1FX0VTQ1IwIDB4MDAwMDAzYTYKICNkZWZpbmUgTVNSX1A0X0ZMQU1FX0VTQ1IxIDB4MDAwMDAzYTcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9GU0JfRVNDUjAgMHgwMDAwMDNhMgogI2RlZmluZSBNU1JfUDRfRlNCX0VTQ1IxIDB4MDAwMDAzYTMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9JUV9FU0NSMCAweDAwMDAwM2JhCiAjZGVmaW5lIE1TUl9QNF9JUV9FU0NSMSAweDAwMDAwM2JiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfSVNfRVNDUjAgMHgwMDAwMDNiNAogI2RlZmluZSBNU1JfUDRfSVNfRVNDUjEgMHgwMDAwMDNiNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0lUTEJfRVNDUjAgMHgwMDAwMDNiNgogI2RlZmluZSBNU1JfUDRfSVRMQl9FU0NSMSAweDAwMDAwM2I3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfSVhfRVNDUjAgMHgwMDAwMDNjOAogI2RlZmluZSBNU1JfUDRfSVhfRVNDUjEgMHgwMDAwMDNjOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X01PQl9FU0NSMCAweDAwMDAwM2FhCiAjZGVmaW5lIE1TUl9QNF9NT0JfRVNDUjEgMHgwMDAwMDNhYgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X01TX0VTQ1IwIDB4MDAwMDAzYzAKICNkZWZpbmUgTVNSX1A0X01TX0VTQ1IxIDB4MDAwMDAzYzEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9QTUhfRVNDUjAgMHgwMDAwMDNhYwogI2RlZmluZSBNU1JfUDRfUE1IX0VTQ1IxIDB4MDAwMDAzYWQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9SQVRfRVNDUjAgMHgwMDAwMDNiYwogI2RlZmluZSBNU1JfUDRfUkFUX0VTQ1IxIDB4MDAwMDAzYmQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9TQUFUX0VTQ1IwIDB4MDAwMDAzYWUKICNkZWZpbmUgTVNSX1A0X1NBQVRfRVNDUjEgMHgwMDAwMDNhZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X1NTVV9FU0NSMCAweDAwMDAwM2JlCiAjZGVmaW5lIE1TUl9QNF9TU1VfRVNDUjEgMHgwMDAwMDNiZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X1RCUFVfRVNDUjAgMHgwMDAwMDNjMgogI2RlZmluZSBNU1JfUDRfVEJQVV9FU0NSMSAweDAwMDAwM2MzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfVENfRVNDUjAgMHgwMDAwMDNjNAogI2RlZmluZSBNU1JfUDRfVENfRVNDUjEgMHgwMDAwMDNjNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X1UyTF9FU0NSMCAweDAwMDAwM2IwCiAjZGVmaW5lIE1TUl9QNF9VMkxfRVNDUjEgMHgwMDAwMDNiMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X1BFQlNfTUFUUklYX1ZFUlQgMHgwMDAwMDNmMgogI2RlZmluZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjAgMHgwMDAwMDMwOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIxIDB4MDAwMDAzMGEKICNkZWZpbmUgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIyIDB4MDAwMDAzMGIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwgMHgwMDAwMDM4ZAogI2RlZmluZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMgMHgwMDAwMDM4ZQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCAweDAwMDAwMzhmCiAjZGVmaW5lIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMIDB4MDAwMDAzOTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9HRU9ERV9CVVNDT05UX0NPTkYwIDB4MDAwMDE5MDAKICNkZWZpbmUgTVNSX0lBMzJfVk1YX0JBU0lDIDB4MDAwMDA0ODAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9QSU5CQVNFRF9DVExTIDB4MDAwMDA0ODEKICNkZWZpbmUgTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTIDB4MDAwMDA0ODIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9FWElUX0NUTFMgMHgwMDAwMDQ4MwogI2RlZmluZSBNU1JfSUEzMl9WTVhfRU5UUllfQ1RMUyAweDAwMDAwNDg0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9WTVhfTUlTQyAweDAwMDAwNDg1CiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9DUjBfRklYRUQwIDB4MDAwMDA0ODYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9DUjBfRklYRUQxIDB4MDAwMDA0ODcKICNkZWZpbmUgTVNSX0lBMzJfVk1YX0NSNF9GSVhFRDAgMHgwMDAwMDQ4OAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfVk1YX0NSNF9GSVhFRDEgMHgwMDAwMDQ4OQogI2RlZmluZSBNU1JfSUEzMl9WTVhfVk1DU19FTlVNIDB4MDAwMDA0OGEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9QUk9DQkFTRURfQ1RMUzIgMHgwMDAwMDQ4YgogI2RlZmluZSBNU1JfSUEzMl9WTVhfRVBUX1ZQSURfQ0FQIDB4MDAwMDA0OGMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9UUlVFX1BJTkJBU0VEX0NUTFMgMHgwMDAwMDQ4ZAogI2RlZmluZSBNU1JfSUEzMl9WTVhfVFJVRV9QUk9DQkFTRURfQ1RMUyAweDAwMDAwNDhlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9WTVhfVFJVRV9FWElUX0NUTFMgMHgwMDAwMDQ4ZgogI2RlZmluZSBNU1JfSUEzMl9WTVhfVFJVRV9FTlRSWV9DVExTIDB4MDAwMDA0OTAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9WTUZVTkMgMHgwMDAwMDQ5MQogI2RlZmluZSBWTVhfQkFTSUNfVk1DU19TSVpFX1NISUZUIDMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWTVhfQkFTSUNfNjQgMHgwMDAxMDAwMDAwMDAwMDAwTExVCiAjZGVmaW5lIFZNWF9CQVNJQ19NRU1fVFlQRV9TSElGVCA1MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVk1YX0JBU0lDX01FTV9UWVBFX01BU0sgMHgwMDNjMDAwMDAwMDAwMDAwTExVCiAjZGVmaW5lIFZNWF9CQVNJQ19NRU1fVFlQRV9XQiA2TExVCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWTVhfQkFTSUNfSU5PVVQgMHgwMDQwMDAwMDAwMDAwMDAwTExVCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9NSVNDX1ZNV1JJVEVfU0hBRE9XX1JPX0ZJRUxEUyAoMVVMTCA8PCAyOSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9NSVNDX1BSRUVNUFRJT05fVElNRVJfU0NBTEUgMHgxRgogI2RlZmluZSBNU1JfVk1fQ1IgMHhjMDAxMDExNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1ZNX0lHTk5FIDB4YzAwMTAxMTUKICNkZWZpbmUgTVNSX1ZNX0hTQVZFX1BBIDB4YzAwMTAxMTcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkXzMyLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3VuaXN0ZF8zMi5oCmluZGV4IDQ4MzhhZTEuLjUxMDJlNTYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkXzMyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfMzIuaApAQCAtNDU0LDUgKzQ1NCw2IEBACiAjZGVmaW5lIF9fTlJfZmluaXRfbW9kdWxlIDM1MAogI2RlZmluZSBfX05SX3NjaGVkX3NldGF0dHIgMzUxCiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YXR0ciAzNTIKLSNlbmRpZgorI2RlZmluZSBfX05SX3JlbmFtZWF0MiAzNTMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkXzY0LmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3VuaXN0ZF82NC5oCmluZGV4IDdiZGIzMDEuLjM2ZDUxMTggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkXzY0LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfNjQuaApAQCAtNDEzLDQgKzQxMyw2IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NjaGVkX3NldGF0dHIgMzE0CiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YXR0ciAzMTUKKyNkZWZpbmUgX19OUl9yZW5hbWVhdDIgMzE2CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3VuaXN0ZF94MzIuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkX3gzMi5oCmluZGV4IGVlNTFmYjUuLjc5NDIyMzcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkX3gzMi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkX3gzMi5oCkBAIC0yNDcsMTU3ICsyNDcsMTU4IEBACiAjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkgKF9fWDMyX1NZU0NBTExfQklUICsgMjAzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eSAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyMDQpCi0jZGVmaW5lIF9fTlJfaW9fc2V0dXAgKF9fWDMyX1NZU0NBTExfQklUICsgMjA2KQogI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kgKF9fWDMyX1NZU0NBTExfQklUICsgMjA3KQogI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cyAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyMDgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBfX05SX2lvX3N1Ym1pdCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyMDkpCiAjZGVmaW5lIF9fTlJfaW9fY2FuY2VsIChfX1gzMl9TWVNDQUxMX0JJVCArIDIxMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUgKF9fWDMyX1NZU0NBTExfQklUICsgMjEyKQogI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyMTMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMgKF9fWDMyX1NZU0NBTExfQklUICsgMjE2KQogI2RlZmluZSBfX05SX2dldGRlbnRzNjQgKF9fWDMyX1NZU0NBTExfQklUICsgMjE3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MgKF9fWDMyX1NZU0NBTExfQklUICsgMjE4KQogI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyMTkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NlbXRpbWVkb3AgKF9fWDMyX1NZU0NBTExfQklUICsgMjIwKQogI2RlZmluZSBfX05SX2ZhZHZpc2U2NCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyMjEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUgKF9fWDMyX1NZU0NBTExfQklUICsgMjIzKQogI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUgKF9fWDMyX1NZU0NBTExfQklUICsgMjI0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuIChfX1gzMl9TWVNDQUxMX0JJVCArIDIyNSkKICNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUgKF9fWDMyX1NZU0NBTExfQklUICsgMjI2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lIChfX1gzMl9TWVNDQUxMX0JJVCArIDIyNykKICNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lIChfX1gzMl9TWVNDQUxMX0JJVCArIDIyOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzIChfX1gzMl9TWVNDQUxMX0JJVCArIDIyOSkKICNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAgKF9fWDMyX1NZU0NBTExfQklUICsgMjMwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9leGl0X2dyb3VwIChfX1gzMl9TWVNDQUxMX0JJVCArIDIzMSkKICNkZWZpbmUgX19OUl9lcG9sbF93YWl0IChfX1gzMl9TWVNDQUxMX0JJVCArIDIzMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXBvbGxfY3RsIChfX1gzMl9TWVNDQUxMX0JJVCArIDIzMykKICNkZWZpbmUgX19OUl90Z2tpbGwgKF9fWDMyX1NZU0NBTExfQklUICsgMjM0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91dGltZXMgKF9fWDMyX1NZU0NBTExfQklUICsgMjM1KQogI2RlZmluZSBfX05SX21iaW5kIChfX1gzMl9TWVNDQUxMX0JJVCArIDIzNykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeSAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyMzgpCiAjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeSAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyMzkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21xX29wZW4gKF9fWDMyX1NZU0NBTExfQklUICsgMjQwKQogI2RlZmluZSBfX05SX21xX3VubGluayAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyNDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyNDIpCiAjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlIChfX1gzMl9TWVNDQUxMX0JJVCArIDI0MykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0ciAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyNDUpCiAjZGVmaW5lIF9fTlJfYWRkX2tleSAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyNDgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5IChfX1gzMl9TWVNDQUxMX0JJVCArIDI0OSkKICNkZWZpbmUgX19OUl9rZXljdGwgKF9fWDMyX1NZU0NBTExfQklUICsgMjUwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pb3ByaW9fc2V0IChfX1gzMl9TWVNDQUxMX0JJVCArIDI1MSkKICNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0IChfX1gzMl9TWVNDQUxMX0JJVCArIDI1MikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0IChfX1gzMl9TWVNDQUxMX0JJVCArIDI1MykKICNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyNTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2ggKF9fWDMyX1NZU0NBTExfQklUICsgMjU1KQogI2RlZmluZSBfX05SX21pZ3JhdGVfcGFnZXMgKF9fWDMyX1NZU0NBTExfQklUICsgMjU2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9vcGVuYXQgKF9fWDMyX1NZU0NBTExfQklUICsgMjU3KQogI2RlZmluZSBfX05SX21rZGlyYXQgKF9fWDMyX1NZU0NBTExfQklUICsgMjU4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ta25vZGF0IChfX1gzMl9TWVNDQUxMX0JJVCArIDI1OSkKICNkZWZpbmUgX19OUl9mY2hvd25hdCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyNjApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Z1dGltZXNhdCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyNjEpCiAjZGVmaW5lIF9fTlJfbmV3ZnN0YXRhdCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyNjIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3VubGlua2F0IChfX1gzMl9TWVNDQUxMX0JJVCArIDI2MykKICNkZWZpbmUgX19OUl9yZW5hbWVhdCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyNjQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xpbmthdCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyNjUpCiAjZGVmaW5lIF9fTlJfc3ltbGlua2F0IChfX1gzMl9TWVNDQUxMX0JJVCArIDI2NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVhZGxpbmthdCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyNjcpCiAjZGVmaW5lIF9fTlJfZmNobW9kYXQgKF9fWDMyX1NZU0NBTExfQklUICsgMjY4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mYWNjZXNzYXQgKF9fWDMyX1NZU0NBTExfQklUICsgMjY5KQogI2RlZmluZSBfX05SX3BzZWxlY3Q2IChfX1gzMl9TWVNDQUxMX0JJVCArIDI3MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcHBvbGwgKF9fWDMyX1NZU0NBTExfQklUICsgMjcxKQogI2RlZmluZSBfX05SX3Vuc2hhcmUgKF9fWDMyX1NZU0NBTExfQklUICsgMjcyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zcGxpY2UgKF9fWDMyX1NZU0NBTExfQklUICsgMjc1KQogI2RlZmluZSBfX05SX3RlZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyNzYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyNzcpCiAjZGVmaW5lIF9fTlJfdXRpbWVuc2F0IChfX1gzMl9TWVNDQUxMX0JJVCArIDI4MCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQgKF9fWDMyX1NZU0NBTExfQklUICsgMjgxKQogI2RlZmluZSBfX05SX3NpZ25hbGZkIChfX1gzMl9TWVNDQUxMX0JJVCArIDI4MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUgKF9fWDMyX1NZU0NBTExfQklUICsgMjgzKQogI2RlZmluZSBfX05SX2V2ZW50ZmQgKF9fWDMyX1NZU0NBTExfQklUICsgMjg0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mYWxsb2NhdGUgKF9fWDMyX1NZU0NBTExfQklUICsgMjg1KQogI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyODYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyODcpCiAjZGVmaW5lIF9fTlJfYWNjZXB0NCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyODgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NpZ25hbGZkNCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAyODkpCiAjZGVmaW5lIF9fTlJfZXZlbnRmZDIgKF9fWDMyX1NZU0NBTExfQklUICsgMjkwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUxIChfX1gzMl9TWVNDQUxMX0JJVCArIDI5MSkKICNkZWZpbmUgX19OUl9kdXAzIChfX1gzMl9TWVNDQUxMX0JJVCArIDI5MikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcGlwZTIgKF9fWDMyX1NZU0NBTExfQklUICsgMjkzKQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEgKF9fWDMyX1NZU0NBTExfQklUICsgMjk0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4gKF9fWDMyX1NZU0NBTExfQklUICsgMjk4KQogI2RlZmluZSBfX05SX2Zhbm90aWZ5X2luaXQgKF9fWDMyX1NZU0NBTExfQklUICsgMzAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mYW5vdGlmeV9tYXJrIChfX1gzMl9TWVNDQUxMX0JJVCArIDMwMSkKICNkZWZpbmUgX19OUl9wcmxpbWl0NjQgKF9fWDMyX1NZU0NBTExfQklUICsgMzAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9uYW1lX3RvX2hhbmRsZV9hdCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAzMDMpCiAjZGVmaW5lIF9fTlJfb3Blbl9ieV9oYW5kbGVfYXQgKF9fWDMyX1NZU0NBTExfQklUICsgMzA0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lIChfX1gzMl9TWVNDQUxMX0JJVCArIDMwNSkKICNkZWZpbmUgX19OUl9zeW5jZnMgKF9fWDMyX1NZU0NBTExfQklUICsgMzA2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRucyAoX19YMzJfU1lTQ0FMTF9CSVQgKyAzMDgpCiAjZGVmaW5lIF9fTlJfZ2V0Y3B1IChfX1gzMl9TWVNDQUxMX0JJVCArIDMwOSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfa2NtcCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAzMTIpCiAjZGVmaW5lIF9fTlJfZmluaXRfbW9kdWxlIChfX1gzMl9TWVNDQUxMX0JJVCArIDMxMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YXR0ciAoX19YMzJfU1lTQ0FMTF9CSVQgKyAzMTQpCiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YXR0ciAoX19YMzJfU1lTQ0FMTF9CSVQgKyAzMTUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3JlbmFtZWF0MiAoX19YMzJfU1lTQ0FMTF9CSVQgKyAzMTYpCiAjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uIChfX1gzMl9TWVNDQUxMX0JJVCArIDUxMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuIChfX1gzMl9TWVNDQUxMX0JJVCArIDUxMykKICNkZWZpbmUgX19OUl9pb2N0bCAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MTQpCiAjZGVmaW5lIF9fTlJfcmVhZHYgKF9fWDMyX1NZU0NBTExfQklUICsgNTE1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl93cml0ZXYgKF9fWDMyX1NZU0NBTExfQklUICsgNTE2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZWN2ZnJvbSAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MTcpCiAjZGVmaW5lIF9fTlJfc2VuZG1zZyAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MTgpCiAjZGVmaW5lIF9fTlJfcmVjdm1zZyAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MTkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2V4ZWN2ZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3B0cmFjZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjEpCiAjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjIpCiAjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0IChfX1gzMl9TWVNDQUxMX0JJVCArIDUyMykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvIChfX1gzMl9TWVNDQUxMX0JJVCArIDUyNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sgKF9fWDMyX1NZU0NBTExfQklUICsgNTI1KQogI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjYpCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5IChfX1gzMl9TWVNDQUxMX0JJVCArIDUyNykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZCAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3dhaXRpZCAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjkpCiAjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0IChfX1gzMl9TWVNDQUxMX0JJVCArIDUzMCkKICNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QgKF9fWDMyX1NZU0NBTExfQklUICsgNTMxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl92bXNwbGljZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MzIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21vdmVfcGFnZXMgKF9fWDMyX1NZU0NBTExfQklUICsgNTMzKQogI2RlZmluZSBfX05SX3ByZWFkdiAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MzQpCiAjZGVmaW5lIF9fTlJfcHdyaXRldiAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MzUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvIChfX1gzMl9TWVNDQUxMX0JJVCArIDUzNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVjdm1tc2cgKF9fWDMyX1NZU0NBTExfQklUICsgNTM3KQogI2RlZmluZSBfX05SX3NlbmRtbXNnIChfX1gzMl9TWVNDQUxMX0JJVCArIDUzOCkKICNkZWZpbmUgX19OUl9wcm9jZXNzX3ZtX3JlYWR2IChfX1gzMl9TWVNDQUxMX0JJVCArIDUzOSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcHJvY2Vzc192bV93cml0ZXYgKF9fWDMyX1NZU0NBTExfQklUICsgNTQwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRzb2Nrb3B0IChfX1gzMl9TWVNDQUxMX0JJVCArIDU0MSkKICNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0IChfX1gzMl9TWVNDQUxMX0JJVCArIDU0MikKLSNlbmRpZgorI2RlZmluZSBfX05SX2lvX3NldHVwIChfX1gzMl9TWVNDQUxMX0JJVCArIDU0MykKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQgKF9fWDMyX1NZU0NBTExfQklUICsgNTQ0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS92c3lzY2FsbC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS92c3lzY2FsbC5oCmluZGV4IDRhNWIzYWIuLmQwMTBhZjkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdnN5c2NhbGwuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3ZzeXNjYWxsLmgKQEAgLTI0LDExICsyNCw2IEBACiAgX19OUl92dGltZSwKICBfX05SX3ZnZXRjcHUsCiB9OwotI2RlZmluZSBWU1lTQ0FMTF9TVEFSVCAoLTEwVUwgPDwgMjApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBWU1lTQ0FMTF9TSVpFIDEwMjQKLSNkZWZpbmUgVlNZU0NBTExfRU5EICgtMlVMIDw8IDIwKQotI2RlZmluZSBWU1lTQ0FMTF9NQVBQRURfUEFHRVMgMQotI2RlZmluZSBWU1lTQ0FMTF9BRERSKHZzeXNjYWxsX25yKSAoVlNZU0NBTExfU1RBUlQrVlNZU0NBTExfU0laRSoodnN5c2NhbGxfbnIpKQorI2RlZmluZSBWU1lTQ0FMTF9BRERSICgtMTBVTCA8PCAyMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvZHJtL2RybS5oIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vZHJtLmgKaW5kZXggZWQ4NDhhOC4uMzJhNzZhNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vZHJtLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vZHJtLmgKQEAgLTQ0MSwyMDAgKzQ0MSwyMDEgQEAKIH07CiAjZGVmaW5lIERSTV9DTElFTlRfQ0FQX1NURVJFT18zRCAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fQ0xJRU5UX0NBUF9VTklWRVJTQUxfUExBTkVTIDIKIHN0cnVjdCBkcm1fc2V0X2NsaWVudF9jYXAgewogIF9fdTY0IGNhcGFiaWxpdHk7CiAgX191NjQgdmFsdWU7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIERSTV9DTE9FWEVDIE9fQ0xPRVhFQwogc3RydWN0IGRybV9wcmltZV9oYW5kbGUgewogIF9fdTMyIGhhbmRsZTsKLSBfX3UzMiBmbGFnczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZmxhZ3M7CiAgX19zMzIgZmQ7CiB9OwogI2luY2x1ZGUgPGRybS9kcm1fbW9kZS5oPgotI2RlZmluZSBEUk1fSU9DVExfQkFTRSAnZCcKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9CQVNFICdkJwogI2RlZmluZSBEUk1fSU8obnIpIF9JTyhEUk1fSU9DVExfQkFTRSxucikKICNkZWZpbmUgRFJNX0lPUihucix0eXBlKSBfSU9SKERSTV9JT0NUTF9CQVNFLG5yLHR5cGUpCiAjZGVmaW5lIERSTV9JT1cobnIsdHlwZSkgX0lPVyhEUk1fSU9DVExfQkFTRSxucix0eXBlKQotI2RlZmluZSBEUk1fSU9XUihucix0eXBlKSBfSU9XUihEUk1fSU9DVExfQkFTRSxucix0eXBlKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPV1IobnIsdHlwZSkgX0lPV1IoRFJNX0lPQ1RMX0JBU0UsbnIsdHlwZSkKICNkZWZpbmUgRFJNX0lPQ1RMX1ZFUlNJT04gRFJNX0lPV1IoMHgwMCwgc3RydWN0IGRybV92ZXJzaW9uKQogI2RlZmluZSBEUk1fSU9DVExfR0VUX1VOSVFVRSBEUk1fSU9XUigweDAxLCBzdHJ1Y3QgZHJtX3VuaXF1ZSkKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9NQUdJQyBEUk1fSU9SKCAweDAyLCBzdHJ1Y3QgZHJtX2F1dGgpCi0jZGVmaW5lIERSTV9JT0NUTF9JUlFfQlVTSUQgRFJNX0lPV1IoMHgwMywgc3RydWN0IGRybV9pcnFfYnVzaWQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfSVJRX0JVU0lEIERSTV9JT1dSKDB4MDMsIHN0cnVjdCBkcm1faXJxX2J1c2lkKQogI2RlZmluZSBEUk1fSU9DVExfR0VUX01BUCBEUk1fSU9XUigweDA0LCBzdHJ1Y3QgZHJtX21hcCkKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9DTElFTlQgRFJNX0lPV1IoMHgwNSwgc3RydWN0IGRybV9jbGllbnQpCiAjZGVmaW5lIERSTV9JT0NUTF9HRVRfU1RBVFMgRFJNX0lPUiggMHgwNiwgc3RydWN0IGRybV9zdGF0cykKLSNkZWZpbmUgRFJNX0lPQ1RMX1NFVF9WRVJTSU9OIERSTV9JT1dSKDB4MDcsIHN0cnVjdCBkcm1fc2V0X3ZlcnNpb24pCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfU0VUX1ZFUlNJT04gRFJNX0lPV1IoMHgwNywgc3RydWN0IGRybV9zZXRfdmVyc2lvbikKICNkZWZpbmUgRFJNX0lPQ1RMX01PREVTRVRfQ1RMIERSTV9JT1coMHgwOCwgc3RydWN0IGRybV9tb2Rlc2V0X2N0bCkKICNkZWZpbmUgRFJNX0lPQ1RMX0dFTV9DTE9TRSBEUk1fSU9XICgweDA5LCBzdHJ1Y3QgZHJtX2dlbV9jbG9zZSkKICNkZWZpbmUgRFJNX0lPQ1RMX0dFTV9GTElOSyBEUk1fSU9XUigweDBhLCBzdHJ1Y3QgZHJtX2dlbV9mbGluaykKLSNkZWZpbmUgRFJNX0lPQ1RMX0dFTV9PUEVOIERSTV9JT1dSKDB4MGIsIHN0cnVjdCBkcm1fZ2VtX29wZW4pCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfR0VNX09QRU4gRFJNX0lPV1IoMHgwYiwgc3RydWN0IGRybV9nZW1fb3BlbikKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9DQVAgRFJNX0lPV1IoMHgwYywgc3RydWN0IGRybV9nZXRfY2FwKQogI2RlZmluZSBEUk1fSU9DVExfU0VUX0NMSUVOVF9DQVAgRFJNX0lPVyggMHgwZCwgc3RydWN0IGRybV9zZXRfY2xpZW50X2NhcCkKICNkZWZpbmUgRFJNX0lPQ1RMX1NFVF9VTklRVUUgRFJNX0lPVyggMHgxMCwgc3RydWN0IGRybV91bmlxdWUpCi0jZGVmaW5lIERSTV9JT0NUTF9BVVRIX01BR0lDIERSTV9JT1coIDB4MTEsIHN0cnVjdCBkcm1fYXV0aCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9BVVRIX01BR0lDIERSTV9JT1coIDB4MTEsIHN0cnVjdCBkcm1fYXV0aCkKICNkZWZpbmUgRFJNX0lPQ1RMX0JMT0NLIERSTV9JT1dSKDB4MTIsIHN0cnVjdCBkcm1fYmxvY2spCiAjZGVmaW5lIERSTV9JT0NUTF9VTkJMT0NLIERSTV9JT1dSKDB4MTMsIHN0cnVjdCBkcm1fYmxvY2spCiAjZGVmaW5lIERSTV9JT0NUTF9DT05UUk9MIERSTV9JT1coIDB4MTQsIHN0cnVjdCBkcm1fY29udHJvbCkKLSNkZWZpbmUgRFJNX0lPQ1RMX0FERF9NQVAgRFJNX0lPV1IoMHgxNSwgc3RydWN0IGRybV9tYXApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfQUREX01BUCBEUk1fSU9XUigweDE1LCBzdHJ1Y3QgZHJtX21hcCkKICNkZWZpbmUgRFJNX0lPQ1RMX0FERF9CVUZTIERSTV9JT1dSKDB4MTYsIHN0cnVjdCBkcm1fYnVmX2Rlc2MpCiAjZGVmaW5lIERSTV9JT0NUTF9NQVJLX0JVRlMgRFJNX0lPVyggMHgxNywgc3RydWN0IGRybV9idWZfZGVzYykKICNkZWZpbmUgRFJNX0lPQ1RMX0lORk9fQlVGUyBEUk1fSU9XUigweDE4LCBzdHJ1Y3QgZHJtX2J1Zl9pbmZvKQotI2RlZmluZSBEUk1fSU9DVExfTUFQX0JVRlMgRFJNX0lPV1IoMHgxOSwgc3RydWN0IGRybV9idWZfbWFwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX01BUF9CVUZTIERSTV9JT1dSKDB4MTksIHN0cnVjdCBkcm1fYnVmX21hcCkKICNkZWZpbmUgRFJNX0lPQ1RMX0ZSRUVfQlVGUyBEUk1fSU9XKCAweDFhLCBzdHJ1Y3QgZHJtX2J1Zl9mcmVlKQogI2RlZmluZSBEUk1fSU9DVExfUk1fTUFQIERSTV9JT1coIDB4MWIsIHN0cnVjdCBkcm1fbWFwKQogI2RlZmluZSBEUk1fSU9DVExfU0VUX1NBUkVBX0NUWCBEUk1fSU9XKCAweDFjLCBzdHJ1Y3QgZHJtX2N0eF9wcml2X21hcCkKLSNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9TQVJFQV9DVFggRFJNX0lPV1IoMHgxZCwgc3RydWN0IGRybV9jdHhfcHJpdl9tYXApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfR0VUX1NBUkVBX0NUWCBEUk1fSU9XUigweDFkLCBzdHJ1Y3QgZHJtX2N0eF9wcml2X21hcCkKICNkZWZpbmUgRFJNX0lPQ1RMX1NFVF9NQVNURVIgRFJNX0lPKDB4MWUpCiAjZGVmaW5lIERSTV9JT0NUTF9EUk9QX01BU1RFUiBEUk1fSU8oMHgxZikKICNkZWZpbmUgRFJNX0lPQ1RMX0FERF9DVFggRFJNX0lPV1IoMHgyMCwgc3RydWN0IGRybV9jdHgpCi0jZGVmaW5lIERSTV9JT0NUTF9STV9DVFggRFJNX0lPV1IoMHgyMSwgc3RydWN0IGRybV9jdHgpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfUk1fQ1RYIERSTV9JT1dSKDB4MjEsIHN0cnVjdCBkcm1fY3R4KQogI2RlZmluZSBEUk1fSU9DVExfTU9EX0NUWCBEUk1fSU9XKCAweDIyLCBzdHJ1Y3QgZHJtX2N0eCkKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9DVFggRFJNX0lPV1IoMHgyMywgc3RydWN0IGRybV9jdHgpCiAjZGVmaW5lIERSTV9JT0NUTF9TV0lUQ0hfQ1RYIERSTV9JT1coIDB4MjQsIHN0cnVjdCBkcm1fY3R4KQotI2RlZmluZSBEUk1fSU9DVExfTkVXX0NUWCBEUk1fSU9XKCAweDI1LCBzdHJ1Y3QgZHJtX2N0eCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9ORVdfQ1RYIERSTV9JT1coIDB4MjUsIHN0cnVjdCBkcm1fY3R4KQogI2RlZmluZSBEUk1fSU9DVExfUkVTX0NUWCBEUk1fSU9XUigweDI2LCBzdHJ1Y3QgZHJtX2N0eF9yZXMpCiAjZGVmaW5lIERSTV9JT0NUTF9BRERfRFJBVyBEUk1fSU9XUigweDI3LCBzdHJ1Y3QgZHJtX2RyYXcpCiAjZGVmaW5lIERSTV9JT0NUTF9STV9EUkFXIERSTV9JT1dSKDB4MjgsIHN0cnVjdCBkcm1fZHJhdykKLSNkZWZpbmUgRFJNX0lPQ1RMX0RNQSBEUk1fSU9XUigweDI5LCBzdHJ1Y3QgZHJtX2RtYSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9ETUEgRFJNX0lPV1IoMHgyOSwgc3RydWN0IGRybV9kbWEpCiAjZGVmaW5lIERSTV9JT0NUTF9MT0NLIERSTV9JT1coIDB4MmEsIHN0cnVjdCBkcm1fbG9jaykKICNkZWZpbmUgRFJNX0lPQ1RMX1VOTE9DSyBEUk1fSU9XKCAweDJiLCBzdHJ1Y3QgZHJtX2xvY2spCiAjZGVmaW5lIERSTV9JT0NUTF9GSU5JU0ggRFJNX0lPVyggMHgyYywgc3RydWN0IGRybV9sb2NrKQotI2RlZmluZSBEUk1fSU9DVExfUFJJTUVfSEFORExFX1RPX0ZEIERSTV9JT1dSKDB4MmQsIHN0cnVjdCBkcm1fcHJpbWVfaGFuZGxlKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX1BSSU1FX0hBTkRMRV9UT19GRCBEUk1fSU9XUigweDJkLCBzdHJ1Y3QgZHJtX3ByaW1lX2hhbmRsZSkKICNkZWZpbmUgRFJNX0lPQ1RMX1BSSU1FX0ZEX1RPX0hBTkRMRSBEUk1fSU9XUigweDJlLCBzdHJ1Y3QgZHJtX3ByaW1lX2hhbmRsZSkKICNkZWZpbmUgRFJNX0lPQ1RMX0FHUF9BQ1FVSVJFIERSTV9JTyggMHgzMCkKICNkZWZpbmUgRFJNX0lPQ1RMX0FHUF9SRUxFQVNFIERSTV9JTyggMHgzMSkKLSNkZWZpbmUgRFJNX0lPQ1RMX0FHUF9FTkFCTEUgRFJNX0lPVyggMHgzMiwgc3RydWN0IGRybV9hZ3BfbW9kZSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9BR1BfRU5BQkxFIERSTV9JT1coIDB4MzIsIHN0cnVjdCBkcm1fYWdwX21vZGUpCiAjZGVmaW5lIERSTV9JT0NUTF9BR1BfSU5GTyBEUk1fSU9SKCAweDMzLCBzdHJ1Y3QgZHJtX2FncF9pbmZvKQogI2RlZmluZSBEUk1fSU9DVExfQUdQX0FMTE9DIERSTV9JT1dSKDB4MzQsIHN0cnVjdCBkcm1fYWdwX2J1ZmZlcikKICNkZWZpbmUgRFJNX0lPQ1RMX0FHUF9GUkVFIERSTV9JT1coIDB4MzUsIHN0cnVjdCBkcm1fYWdwX2J1ZmZlcikKLSNkZWZpbmUgRFJNX0lPQ1RMX0FHUF9CSU5EIERSTV9JT1coIDB4MzYsIHN0cnVjdCBkcm1fYWdwX2JpbmRpbmcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfQUdQX0JJTkQgRFJNX0lPVyggMHgzNiwgc3RydWN0IGRybV9hZ3BfYmluZGluZykKICNkZWZpbmUgRFJNX0lPQ1RMX0FHUF9VTkJJTkQgRFJNX0lPVyggMHgzNywgc3RydWN0IGRybV9hZ3BfYmluZGluZykKICNkZWZpbmUgRFJNX0lPQ1RMX1NHX0FMTE9DIERSTV9JT1dSKDB4MzgsIHN0cnVjdCBkcm1fc2NhdHRlcl9nYXRoZXIpCiAjZGVmaW5lIERSTV9JT0NUTF9TR19GUkVFIERSTV9JT1coIDB4MzksIHN0cnVjdCBkcm1fc2NhdHRlcl9nYXRoZXIpCi0jZGVmaW5lIERSTV9JT0NUTF9XQUlUX1ZCTEFOSyBEUk1fSU9XUigweDNhLCB1bmlvbiBkcm1fd2FpdF92YmxhbmspCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfV0FJVF9WQkxBTksgRFJNX0lPV1IoMHgzYSwgdW5pb24gZHJtX3dhaXRfdmJsYW5rKQogI2RlZmluZSBEUk1fSU9DVExfVVBEQVRFX0RSQVcgRFJNX0lPVygweDNmLCBzdHJ1Y3QgZHJtX3VwZGF0ZV9kcmF3KQogI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRSRVNPVVJDRVMgRFJNX0lPV1IoMHhBMCwgc3RydWN0IGRybV9tb2RlX2NhcmRfcmVzKQogI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRDUlRDIERSTV9JT1dSKDB4QTEsIHN0cnVjdCBkcm1fbW9kZV9jcnRjKQotI2RlZmluZSBEUk1fSU9DVExfTU9ERV9TRVRDUlRDIERSTV9JT1dSKDB4QTIsIHN0cnVjdCBkcm1fbW9kZV9jcnRjKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfU0VUQ1JUQyBEUk1fSU9XUigweEEyLCBzdHJ1Y3QgZHJtX21vZGVfY3J0YykKICNkZWZpbmUgRFJNX0lPQ1RMX01PREVfQ1VSU09SIERSTV9JT1dSKDB4QTMsIHN0cnVjdCBkcm1fbW9kZV9jdXJzb3IpCiAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0dFVEdBTU1BIERSTV9JT1dSKDB4QTQsIHN0cnVjdCBkcm1fbW9kZV9jcnRjX2x1dCkKICNkZWZpbmUgRFJNX0lPQ1RMX01PREVfU0VUR0FNTUEgRFJNX0lPV1IoMHhBNSwgc3RydWN0IGRybV9tb2RlX2NydGNfbHV0KQotI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRFTkNPREVSIERSTV9JT1dSKDB4QTYsIHN0cnVjdCBkcm1fbW9kZV9nZXRfZW5jb2RlcikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0dFVEVOQ09ERVIgRFJNX0lPV1IoMHhBNiwgc3RydWN0IGRybV9tb2RlX2dldF9lbmNvZGVyKQogI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRDT05ORUNUT1IgRFJNX0lPV1IoMHhBNywgc3RydWN0IGRybV9tb2RlX2dldF9jb25uZWN0b3IpCiAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0FUVEFDSE1PREUgRFJNX0lPV1IoMHhBOCwgc3RydWN0IGRybV9tb2RlX21vZGVfY21kKQogI2RlZmluZSBEUk1fSU9DVExfTU9ERV9ERVRBQ0hNT0RFIERSTV9JT1dSKDB4QTksIHN0cnVjdCBkcm1fbW9kZV9tb2RlX2NtZCkKLSNkZWZpbmUgRFJNX0lPQ1RMX01PREVfR0VUUFJPUEVSVFkgRFJNX0lPV1IoMHhBQSwgc3RydWN0IGRybV9tb2RlX2dldF9wcm9wZXJ0eSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0dFVFBST1BFUlRZIERSTV9JT1dSKDB4QUEsIHN0cnVjdCBkcm1fbW9kZV9nZXRfcHJvcGVydHkpCiAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX1NFVFBST1BFUlRZIERSTV9JT1dSKDB4QUIsIHN0cnVjdCBkcm1fbW9kZV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5KQogI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRQUk9QQkxPQiBEUk1fSU9XUigweEFDLCBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Jsb2IpCiAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0dFVEZCIERSTV9JT1dSKDB4QUQsIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQpCi0jZGVmaW5lIERSTV9JT0NUTF9NT0RFX0FEREZCIERSTV9JT1dSKDB4QUUsIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfTU9ERV9BRERGQiBEUk1fSU9XUigweEFFLCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kKQogI2RlZmluZSBEUk1fSU9DVExfTU9ERV9STUZCIERSTV9JT1dSKDB4QUYsIHVuc2lnbmVkIGludCkKICNkZWZpbmUgRFJNX0lPQ1RMX01PREVfUEFHRV9GTElQIERSTV9JT1dSKDB4QjAsIHN0cnVjdCBkcm1fbW9kZV9jcnRjX3BhZ2VfZmxpcCkKICNkZWZpbmUgRFJNX0lPQ1RMX01PREVfRElSVFlGQiBEUk1fSU9XUigweEIxLCBzdHJ1Y3QgZHJtX21vZGVfZmJfZGlydHlfY21kKQotI2RlZmluZSBEUk1fSU9DVExfTU9ERV9DUkVBVEVfRFVNQiBEUk1fSU9XUigweEIyLCBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfTU9ERV9DUkVBVEVfRFVNQiBEUk1fSU9XUigweEIyLCBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIpCiAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX01BUF9EVU1CIERSTV9JT1dSKDB4QjMsIHN0cnVjdCBkcm1fbW9kZV9tYXBfZHVtYikKICNkZWZpbmUgRFJNX0lPQ1RMX01PREVfREVTVFJPWV9EVU1CIERSTV9JT1dSKDB4QjQsIHN0cnVjdCBkcm1fbW9kZV9kZXN0cm95X2R1bWIpCiAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0dFVFBMQU5FUkVTT1VSQ0VTIERSTV9JT1dSKDB4QjUsIHN0cnVjdCBkcm1fbW9kZV9nZXRfcGxhbmVfcmVzKQotI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRQTEFORSBEUk1fSU9XUigweEI2LCBzdHJ1Y3QgZHJtX21vZGVfZ2V0X3BsYW5lKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfR0VUUExBTkUgRFJNX0lPV1IoMHhCNiwgc3RydWN0IGRybV9tb2RlX2dldF9wbGFuZSkKICNkZWZpbmUgRFJNX0lPQ1RMX01PREVfU0VUUExBTkUgRFJNX0lPV1IoMHhCNywgc3RydWN0IGRybV9tb2RlX3NldF9wbGFuZSkKICNkZWZpbmUgRFJNX0lPQ1RMX01PREVfQURERkIyIERSTV9JT1dSKDB4QjgsIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyKQogI2RlZmluZSBEUk1fSU9DVExfTU9ERV9PQkpfR0VUUFJPUEVSVElFUyBEUk1fSU9XUigweEI5LCBzdHJ1Y3QgZHJtX21vZGVfb2JqX2dldF9wcm9wZXJ0aWVzKQotI2RlZmluZSBEUk1fSU9DVExfTU9ERV9PQkpfU0VUUFJPUEVSVFkgRFJNX0lPV1IoMHhCQSwgc3RydWN0IGRybV9tb2RlX29ial9zZXRfcHJvcGVydHkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfTU9ERV9PQkpfU0VUUFJPUEVSVFkgRFJNX0lPV1IoMHhCQSwgc3RydWN0IGRybV9tb2RlX29ial9zZXRfcHJvcGVydHkpCiAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0NVUlNPUjIgRFJNX0lPV1IoMHhCQiwgc3RydWN0IGRybV9tb2RlX2N1cnNvcjIpCiAjZGVmaW5lIERSTV9DT01NQU5EX0JBU0UgMHg0MAogI2RlZmluZSBEUk1fQ09NTUFORF9FTkQgMHhBMAotc3RydWN0IGRybV9ldmVudCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGRybV9ldmVudCB7CiAgX191MzIgdHlwZTsKICBfX3UzMiBsZW5ndGg7CiB9OwotI2RlZmluZSBEUk1fRVZFTlRfVkJMQU5LIDB4MDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9FVkVOVF9WQkxBTksgMHgwMQogI2RlZmluZSBEUk1fRVZFTlRfRkxJUF9DT01QTEVURSAweDAyCiBzdHJ1Y3QgZHJtX2V2ZW50X3ZibGFuayB7CiAgc3RydWN0IGRybV9ldmVudCBiYXNlOwotIF9fdTY0IHVzZXJfZGF0YTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdXNlcl9kYXRhOwogIF9fdTMyIHR2X3NlYzsKICBfX3UzMiB0dl91c2VjOwogIF9fdTMyIHNlcXVlbmNlOwotIF9fdTMyIHJlc2VydmVkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiByZXNlcnZlZDsKIH07CiB0eXBlZGVmIHN0cnVjdCBkcm1fY2xpcF9yZWN0IGRybV9jbGlwX3JlY3RfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9kcmF3YWJsZV9pbmZvIGRybV9kcmF3YWJsZV9pbmZvX3Q7Ci10eXBlZGVmIHN0cnVjdCBkcm1fdGV4X3JlZ2lvbiBkcm1fdGV4X3JlZ2lvbl90OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgc3RydWN0IGRybV90ZXhfcmVnaW9uIGRybV90ZXhfcmVnaW9uX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1faHdfbG9jayBkcm1faHdfbG9ja190OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3ZlcnNpb24gZHJtX3ZlcnNpb25fdDsKIHR5cGVkZWYgc3RydWN0IGRybV91bmlxdWUgZHJtX3VuaXF1ZV90OwotdHlwZWRlZiBzdHJ1Y3QgZHJtX2xpc3QgZHJtX2xpc3RfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIHN0cnVjdCBkcm1fbGlzdCBkcm1fbGlzdF90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2Jsb2NrIGRybV9ibG9ja190OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2NvbnRyb2wgZHJtX2NvbnRyb2xfdDsKIHR5cGVkZWYgZW51bSBkcm1fbWFwX3R5cGUgZHJtX21hcF90eXBlX3Q7Ci10eXBlZGVmIGVudW0gZHJtX21hcF9mbGFncyBkcm1fbWFwX2ZsYWdzX3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBlbnVtIGRybV9tYXBfZmxhZ3MgZHJtX21hcF9mbGFnc190OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2N0eF9wcml2X21hcCBkcm1fY3R4X3ByaXZfbWFwX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fbWFwIGRybV9tYXBfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9jbGllbnQgZHJtX2NsaWVudF90OwotdHlwZWRlZiBlbnVtIGRybV9zdGF0X3R5cGUgZHJtX3N0YXRfdHlwZV90OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgZW51bSBkcm1fc3RhdF90eXBlIGRybV9zdGF0X3R5cGVfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9zdGF0cyBkcm1fc3RhdHNfdDsKIHR5cGVkZWYgZW51bSBkcm1fbG9ja19mbGFncyBkcm1fbG9ja19mbGFnc190OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2xvY2sgZHJtX2xvY2tfdDsKLXR5cGVkZWYgZW51bSBkcm1fZG1hX2ZsYWdzIGRybV9kbWFfZmxhZ3NfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIGVudW0gZHJtX2RtYV9mbGFncyBkcm1fZG1hX2ZsYWdzX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2Rlc2MgZHJtX2J1Zl9kZXNjX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2luZm8gZHJtX2J1Zl9pbmZvX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2ZyZWUgZHJtX2J1Zl9mcmVlX3Q7Ci10eXBlZGVmIHN0cnVjdCBkcm1fYnVmX3B1YiBkcm1fYnVmX3B1Yl90OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgc3RydWN0IGRybV9idWZfcHViIGRybV9idWZfcHViX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX21hcCBkcm1fYnVmX21hcF90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2RtYSBkcm1fZG1hX3Q7CiB0eXBlZGVmIHVuaW9uIGRybV93YWl0X3ZibGFuayBkcm1fd2FpdF92YmxhbmtfdDsKLXR5cGVkZWYgc3RydWN0IGRybV9hZ3BfbW9kZSBkcm1fYWdwX21vZGVfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX21vZGUgZHJtX2FncF9tb2RlX3Q7CiB0eXBlZGVmIGVudW0gZHJtX2N0eF9mbGFncyBkcm1fY3R4X2ZsYWdzX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fY3R4IGRybV9jdHhfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9jdHhfcmVzIGRybV9jdHhfcmVzX3Q7Ci10eXBlZGVmIHN0cnVjdCBkcm1fZHJhdyBkcm1fZHJhd190OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgc3RydWN0IGRybV9kcmF3IGRybV9kcmF3X3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fdXBkYXRlX2RyYXcgZHJtX3VwZGF0ZV9kcmF3X3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fYXV0aCBkcm1fYXV0aF90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2lycV9idXNpZCBkcm1faXJxX2J1c2lkX3Q7Ci10eXBlZGVmIGVudW0gZHJtX3ZibGFua19zZXFfdHlwZSBkcm1fdmJsYW5rX3NlcV90eXBlX3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBlbnVtIGRybV92Ymxhbmtfc2VxX3R5cGUgZHJtX3ZibGFua19zZXFfdHlwZV90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2FncF9idWZmZXIgZHJtX2FncF9idWZmZXJfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9hZ3BfYmluZGluZyBkcm1fYWdwX2JpbmRpbmdfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9hZ3BfaW5mbyBkcm1fYWdwX2luZm9fdDsKLXR5cGVkZWYgc3RydWN0IGRybV9zY2F0dGVyX2dhdGhlciBkcm1fc2NhdHRlcl9nYXRoZXJfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIHN0cnVjdCBkcm1fc2NhdHRlcl9nYXRoZXIgZHJtX3NjYXR0ZXJfZ2F0aGVyX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fc2V0X3ZlcnNpb24gZHJtX3NldF92ZXJzaW9uX3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvZHJtL2RybV9tb2RlLmggYi9saWJjL2tlcm5lbC91YXBpL2RybS9kcm1fbW9kZS5oCmluZGV4IGJiZTFjOGUuLjE5YmMwNmIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvZHJtL2RybV9tb2RlLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vZHJtX21vZGUuaApAQCAtMTU5LDIzMSArMTU5LDIzOCBAQAogI2RlZmluZSBEUk1fTU9ERV9FTkNPREVSX1RWREFDIDQKICNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9WSVJUVUFMIDUKICNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9EU0kgNgotc3RydWN0IGRybV9tb2RlX2dldF9lbmNvZGVyIHsKKyNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9EUE1TVCA3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGRybV9tb2RlX2dldF9lbmNvZGVyIHsKICBfX3UzMiBlbmNvZGVyX2lkOwogIF9fdTMyIGVuY29kZXJfdHlwZTsKICBfX3UzMiBjcnRjX2lkOwotIF9fdTMyIHBvc3NpYmxlX2NydGNzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBwb3NzaWJsZV9jcnRjczsKICBfX3UzMiBwb3NzaWJsZV9jbG9uZXM7CiB9OwogI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfQXV0b21hdGljIDAKLSNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX1Vua25vd24gMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX1Vua25vd24gMAogI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfRFZJRCAzCiAjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9EVklBIDQKICNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX0NvbXBvc2l0ZSA1Ci0jZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9TVklERU8gNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX1NWSURFTyA2CiAjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb25lbnQgOAogI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfU0NBUlQgOQogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93biAwCi0jZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EgMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSAxCiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJIDIKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQgMwogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQSA0Ci0jZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb3NpdGUgNQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvc2l0ZSA1CiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8gNgogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUyA3CiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb25lbnQgOAotI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTiA5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTiA5CiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCAxMAogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEgMTEKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0hETUlCIDEyCi0jZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9UViAxMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1RWIDEzCiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFAgMTQKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1ZJUlRVQUwgMTUKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0RTSSAxNgotc3RydWN0IGRybV9tb2RlX2dldF9jb25uZWN0b3IgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBkcm1fbW9kZV9nZXRfY29ubmVjdG9yIHsKICBfX3U2NCBlbmNvZGVyc19wdHI7CiAgX191NjQgbW9kZXNfcHRyOwogIF9fdTY0IHByb3BzX3B0cjsKLSBfX3U2NCBwcm9wX3ZhbHVlc19wdHI7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHByb3BfdmFsdWVzX3B0cjsKICBfX3UzMiBjb3VudF9tb2RlczsKICBfX3UzMiBjb3VudF9wcm9wczsKICBfX3UzMiBjb3VudF9lbmNvZGVyczsKLSBfX3UzMiBlbmNvZGVyX2lkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBlbmNvZGVyX2lkOwogIF9fdTMyIGNvbm5lY3Rvcl9pZDsKICBfX3UzMiBjb25uZWN0b3JfdHlwZTsKICBfX3UzMiBjb25uZWN0b3JfdHlwZV9pZDsKLSBfX3UzMiBjb25uZWN0aW9uOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBjb25uZWN0aW9uOwogIF9fdTMyIG1tX3dpZHRoLCBtbV9oZWlnaHQ7CiAgX191MzIgc3VicGl4ZWw7CiAgX191MzIgcGFkOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBEUk1fTU9ERV9QUk9QX1BFTkRJTkcgKDE8PDApCiAjZGVmaW5lIERSTV9NT0RFX1BST1BfUkFOR0UgKDE8PDEpCiAjZGVmaW5lIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFICgxPDwyKQotI2RlZmluZSBEUk1fTU9ERV9QUk9QX0VOVU0gKDE8PDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fTU9ERV9QUk9QX0VOVU0gKDE8PDMpCiAjZGVmaW5lIERSTV9NT0RFX1BST1BfQkxPQiAoMTw8NCkKICNkZWZpbmUgRFJNX01PREVfUFJPUF9CSVRNQVNLICgxPDw1KQorI2RlZmluZSBEUk1fTU9ERV9QUk9QX0xFR0FDWV9UWVBFICggICBEUk1fTU9ERV9QUk9QX1JBTkdFIHwgICBEUk1fTU9ERV9QUk9QX0VOVU0gfCAgIERSTV9NT0RFX1BST1BfQkxPQiB8ICAgRFJNX01PREVfUFJPUF9CSVRNQVNLKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX01PREVfUFJPUF9FWFRFTkRFRF9UWVBFIDB4MDAwMGZmYzAKKyNkZWZpbmUgRFJNX01PREVfUFJPUF9UWVBFKG4pICgobikgPDwgNikKKyNkZWZpbmUgRFJNX01PREVfUFJPUF9PQkpFQ1QgRFJNX01PREVfUFJPUF9UWVBFKDEpCisjZGVmaW5lIERSTV9NT0RFX1BST1BfU0lHTkVEX1JBTkdFIERSTV9NT0RFX1BST1BfVFlQRSgyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fbW9kZV9wcm9wZXJ0eV9lbnVtIHsKICBfX3U2NCB2YWx1ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBuYW1lW0RSTV9QUk9QX05BTUVfTEVOXTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9tb2RlX2dldF9wcm9wZXJ0eSB7CiAgX191NjQgdmFsdWVzX3B0cjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZW51bV9ibG9iX3B0cjsKICBfX3UzMiBwcm9wX2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICBjaGFyIG5hbWVbRFJNX1BST1BfTkFNRV9MRU5dOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjb3VudF92YWx1ZXM7CiAgX191MzIgY291bnRfZW51bV9ibG9iczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9tb2RlX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCB2YWx1ZTsKICBfX3UzMiBwcm9wX2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjb25uZWN0b3JfaWQ7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fbW9kZV9vYmpfZ2V0X3Byb3BlcnRpZXMgewogIF9fdTY0IHByb3BzX3B0cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcHJvcF92YWx1ZXNfcHRyOwogIF9fdTMyIGNvdW50X3Byb3BzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvYmpfaWQ7CiAgX191MzIgb2JqX3R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fbW9kZV9vYmpfc2V0X3Byb3BlcnR5IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgdmFsdWU7CiAgX191MzIgcHJvcF9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgb2JqX2lkOwogIF9fdTMyIG9ial90eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Jsb2IgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBibG9iX2lkOwogIF9fdTMyIGxlbmd0aDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZGF0YTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9tb2RlX2ZiX2NtZCB7CiAgX191MzIgZmJfaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHdpZHRoLCBoZWlnaHQ7CiAgX191MzIgcGl0Y2g7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJwcDsKICBfX3UzMiBkZXB0aDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGFuZGxlOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX0ZCX0lOVEVSTEFDRUQgKDE8PDApCiBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZiX2lkOwogIF9fdTMyIHdpZHRoLCBoZWlnaHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBpeGVsX2Zvcm1hdDsKICBfX3UzMiBmbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGFuZGxlc1s0XTsKICBfX3UzMiBwaXRjaGVzWzRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvZmZzZXRzWzRdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX0ZCX0RJUlRZX0FOTk9UQVRFX0NPUFkgMHgwMQogI2RlZmluZSBEUk1fTU9ERV9GQl9ESVJUWV9BTk5PVEFURV9GSUxMIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX0ZCX0RJUlRZX0ZMQUdTIDB4MDMKICNkZWZpbmUgRFJNX01PREVfRkJfRElSVFlfTUFYX0NMSVBTIDI1NgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fbW9kZV9mYl9kaXJ0eV9jbWQgewogIF9fdTMyIGZiX2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICBfX3UzMiBjb2xvcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbnVtX2NsaXBzOwogIF9fdTY0IGNsaXBzX3B0cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9tb2RlX21vZGVfY21kIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY29ubmVjdG9yX2lkOwogIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyBtb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIERSTV9NT0RFX0NVUlNPUl9CTyAweDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9DVVJTT1JfTU9WRSAweDAyCiAjZGVmaW5lIERSTV9NT0RFX0NVUlNPUl9GTEFHUyAweDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9tb2RlX2N1cnNvciB7CiAgX191MzIgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNydGNfaWQ7CiAgX19zMzIgeDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgeTsKICBfX3UzMiB3aWR0aDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGVpZ2h0OwogIF9fdTMyIGhhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9tb2RlX2N1cnNvcjIgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICBfX3UzMiBjcnRjX2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiB4OwogIF9fczMyIHk7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHdpZHRoOwogIF9fdTMyIGhlaWdodDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGFuZGxlOwogIF9fczMyIGhvdF94OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBob3RfeTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9tb2RlX2NydGNfbHV0IHsKICBfX3UzMiBjcnRjX2lkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBnYW1tYV9zaXplOwogIF9fdTY0IHJlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZ3JlZW47CiAgX191NjQgYmx1ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQgMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfUEFHRV9GTElQX0FTWU5DIDB4MDIKICNkZWZpbmUgRFJNX01PREVfUEFHRV9GTElQX0ZMQUdTIChEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlR8RFJNX01PREVfUEFHRV9GTElQX0FTWU5DKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fbW9kZV9jcnRjX3BhZ2VfZmxpcCB7CiAgX191MzIgY3J0Y19pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmJfaWQ7CiAgX191MzIgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkOwogIF9fdTY0IHVzZXJfZGF0YTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgaGVpZ2h0OwogIHVpbnQzMl90IHdpZHRoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBicHA7CiAgdWludDMyX3QgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGhhbmRsZTsKICB1aW50MzJfdCBwaXRjaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDY0X3Qgc2l6ZTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9tb2RlX21hcF9kdW1iIHsKICBfX3UzMiBoYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBhZDsKICBfX3U2NCBvZmZzZXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fbW9kZV9kZXN0cm95X2R1bWIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBoYW5kbGU7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vaTkxNV9kcm0uaCBiL2xpYmMva2VybmVsL3VhcGkvZHJtL2k5MTVfZHJtLmgKaW5kZXggN2I5ODEwYy4uMzI3NGVjZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vaTkxNV9kcm0uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2RybS9pOTE1X2RybS5oCkBAIC0xOTYsNTE1ICsxOTYsNTI5IEBACiAjZGVmaW5lIERSTV9JOTE1X1JFR19SRUFEIDB4MzEKICNkZWZpbmUgRFJNX0k5MTVfR0VUX1JFU0VUX1NUQVRTIDB4MzIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JOTE1X0dFTV9VU0VSUFRSIDB4MzMKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfSU5JVCBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfSU5JVCwgZHJtX2k5MTVfaW5pdF90KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9GTFVTSCBEUk1fSU8gKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfRkxVU0gpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0ZMSVAgRFJNX0lPICggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0ZMSVApCi0jZGVmaW5lIERSTV9JT0NUTF9JOTE1X0JBVENIQlVGRkVSIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9CQVRDSEJVRkZFUiwgZHJtX2k5MTVfYmF0Y2hidWZmZXJfdCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0JBVENIQlVGRkVSIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9CQVRDSEJVRkZFUiwgZHJtX2k5MTVfYmF0Y2hidWZmZXJfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfSVJRX0VNSVQgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0lSUV9FTUlULCBkcm1faTkxNV9pcnFfZW1pdF90KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9JUlFfV0FJVCBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfSVJRX1dBSVQsIGRybV9pOTE1X2lycV93YWl0X3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRVRQQVJBTSwgZHJtX2k5MTVfZ2V0cGFyYW1fdCkKLSNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfU0VUUEFSQU0gRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1NFVFBBUkFNLCBkcm1faTkxNV9zZXRwYXJhbV90KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfU0VUUEFSQU0gRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1NFVFBBUkFNLCBkcm1faTkxNV9zZXRwYXJhbV90KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9BTExPQyBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfQUxMT0MsIGRybV9pOTE1X21lbV9hbGxvY190KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9GUkVFIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9GUkVFLCBkcm1faTkxNV9tZW1fZnJlZV90KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9JTklUX0hFQVAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0lOSVRfSEVBUCwgZHJtX2k5MTVfbWVtX2luaXRfaGVhcF90KQotI2RlZmluZSBEUk1fSU9DVExfSTkxNV9DTURCVUZGRVIgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0NNREJVRkZFUiwgZHJtX2k5MTVfY21kYnVmZmVyX3QpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfSTkxNV9DTURCVUZGRVIgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0NNREJVRkZFUiwgZHJtX2k5MTVfY21kYnVmZmVyX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0RFU1RST1lfSEVBUCBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfREVTVFJPWV9IRUFQLCBkcm1faTkxNV9tZW1fZGVzdHJveV9oZWFwX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X1NFVF9WQkxBTktfUElQRSBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfU0VUX1ZCTEFOS19QSVBFLCBkcm1faTkxNV92YmxhbmtfcGlwZV90KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRVRfVkJMQU5LX1BJUEUgRFJNX0lPUiggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFVF9WQkxBTktfUElQRSwgZHJtX2k5MTVfdmJsYW5rX3BpcGVfdCkKLSNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfVkJMQU5LX1NXQVAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1ZCTEFOS19TV0FQLCBkcm1faTkxNV92Ymxhbmtfc3dhcF90KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfVkJMQU5LX1NXQVAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1ZCTEFOS19TV0FQLCBkcm1faTkxNV92Ymxhbmtfc3dhcF90KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9IV1NfQUREUiBEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9IV1NfQUREUiwgc3RydWN0IGRybV9pOTE1X2dlbV9pbml0KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fSU5JVCBEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fSU5JVCwgc3RydWN0IGRybV9pOTE1X2dlbV9pbml0KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fRVhFQ0JVRkZFUiBEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUiwgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyKQotI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fRVhFQ0JVRkZFUjIgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0VYRUNCVUZGRVIyLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0VYRUNCVUZGRVIyIERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSMiwgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMikKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1BJTiBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1BJTiwgc3RydWN0IGRybV9pOTE1X2dlbV9waW4pCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9VTlBJTiBEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fVU5QSU4sIHN0cnVjdCBkcm1faTkxNV9nZW1fdW5waW4pCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9CVVNZIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fQlVTWSwgc3RydWN0IGRybV9pOTE1X2dlbV9idXN5KQotI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fU0VUX0NBQ0hJTkcgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NFVF9DQUNISU5HLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NhY2hpbmcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fU0VUX0NBQ0hJTkcgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NFVF9DQUNISU5HLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NhY2hpbmcpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9HRVRfQ0FDSElORyBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0dFVF9DQUNISU5HLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NhY2hpbmcpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9USFJPVFRMRSBEUk1fSU8gKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1RIUk9UVExFKQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fRU5URVJWVCBEUk1fSU8oRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9FTlRFUlZUKQotI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fTEVBVkVWVCBEUk1fSU8oRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9MRUFWRVZUKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0xFQVZFVlQgRFJNX0lPKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTEVBVkVWVCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0NSRUFURSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0NSRUFURSwgc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9QUkVBRCBEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1BSRUFELCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkKQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fUFdSSVRFIERSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fUFdSSVRFLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSkKLSNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX01NQVAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9NTUFQLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fTU1BUCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX01NQVAsIHN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX01NQVBfR1RUIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTU1BUF9HVFQsIHN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcF9ndHQpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9TRVRfRE9NQUlOIERSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fU0VUX0RPTUFJTiwgc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfZG9tYWluKQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fU1dfRklOSVNIIERSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fU1dfRklOSVNILCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3N3X2ZpbmlzaCkKLSNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1NFVF9USUxJTkcgRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fU0VUX1RJTElORywgc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfdGlsaW5nKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1NFVF9USUxJTkcgRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fU0VUX1RJTElORywgc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfdGlsaW5nKQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fR0VUX1RJTElORyBEUk1fSU9XUiAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9HRVRfVElMSU5HLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9HRVRfQVBFUlRVUkUgRFJNX0lPUiAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9HRVRfQVBFUlRVUkUsIHN0cnVjdCBkcm1faTkxNV9nZW1fZ2V0X2FwZXJ0dXJlKQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRVRfUElQRV9GUk9NX0NSVENfSUQgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFVF9QSVBFX0ZST01fQ1JUQ19JRCwgc3RydWN0IGRybV9pOTE1X2dldF9waXBlX2Zyb21fY3J0Y19pZCkKLSNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX01BRFZJU0UgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9NQURWSVNFLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21hZHZpc2UpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fTUFEVklTRSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX01BRFZJU0UsIHN0cnVjdCBkcm1faTkxNV9nZW1fbWFkdmlzZSkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfT1ZFUkxBWV9QVVRfSU1BR0UgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfT1ZFUkxBWV9QVVRfSU1BR0UsIHN0cnVjdCBkcm1faW50ZWxfb3ZlcmxheV9wdXRfaW1hZ2UpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X09WRVJMQVlfQVRUUlMgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X09WRVJMQVlfQVRUUlMsIHN0cnVjdCBkcm1faW50ZWxfb3ZlcmxheV9hdHRycykKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfU0VUX1NQUklURV9DT0xPUktFWSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfU0VUX1NQUklURV9DT0xPUktFWSwgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkpCi0jZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFVF9TUFJJVEVfQ09MT1JLRVkgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1NFVF9TUFJJVEVfQ09MT1JLRVksIHN0cnVjdCBkcm1faW50ZWxfc3ByaXRlX2NvbG9ya2V5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VUX1NQUklURV9DT0xPUktFWSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfU0VUX1NQUklURV9DT0xPUktFWSwgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9XQUlUIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fV0FJVCwgc3RydWN0IGRybV9pOTE1X2dlbV93YWl0KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9DUkVBVEUgRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fQ09OVEVYVF9DUkVBVEUsIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9jcmVhdGUpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9DT05URVhUX0RFU1RST1kgRFJNX0lPVyAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9DT05URVhUX0RFU1RST1ksIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9kZXN0cm95KQotI2RlZmluZSBEUk1fSU9DVExfSTkxNV9SRUdfUkVBRCBEUk1fSU9XUiAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1JFR19SRUFELCBzdHJ1Y3QgZHJtX2k5MTVfcmVnX3JlYWQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfSTkxNV9SRUdfUkVBRCBEUk1fSU9XUiAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1JFR19SRUFELCBzdHJ1Y3QgZHJtX2k5MTVfcmVnX3JlYWQpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFVF9SRVNFVF9TVEFUUyBEUk1fSU9XUiAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFVF9SRVNFVF9TVEFUUywgc3RydWN0IGRybV9pOTE1X3Jlc2V0X3N0YXRzKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fVVNFUlBUUiBEUk1fSU9XUiAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9VU0VSUFRSLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VzZXJwdHIpCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9iYXRjaGJ1ZmZlciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBzdGFydDsKICBpbnQgdXNlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IERSMTsKICBpbnQgRFI0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgbnVtX2NsaXByZWN0czsKICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKmNsaXByZWN0czsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGRybV9pOTE1X2JhdGNoYnVmZmVyX3Q7CiB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfY21kYnVmZmVyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBfX3VzZXIgKmJ1ZjsKICBpbnQgc3o7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBEUjE7CiAgaW50IERSNDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IG51bV9jbGlwcmVjdHM7CiAgc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICpjbGlwcmVjdHM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBkcm1faTkxNV9jbWRidWZmZXJfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2lycV9lbWl0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IF9fdXNlciAqaXJxX3NlcTsKIH0gZHJtX2k5MTVfaXJxX2VtaXRfdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9pcnFfd2FpdCB7CiAgaW50IGlycV9zZXE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBkcm1faTkxNV9pcnFfd2FpdF90OwogI2RlZmluZSBJOTE1X1BBUkFNX0lSUV9BQ1RJVkUgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9QQVJBTV9BTExPV19CQVRDSEJVRkZFUiAyCiAjZGVmaW5lIEk5MTVfUEFSQU1fTEFTVF9ESVNQQVRDSCAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X1BBUkFNX0NISVBTRVRfSUQgNAogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19HRU0gNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9QQVJBTV9OVU1fRkVOQ0VTX0FWQUlMIDYKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfT1ZFUkxBWSA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19QQUdFRkxJUFBJTkcgOAogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19FWEVDQlVGMiA5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19CU0QgMTAKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfQkxUIDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19SRUxBWEVEX0ZFTkNJTkcgMTIKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfQ09IRVJFTlRfUklOR1MgMTMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0VYRUNfQ09OU1RBTlRTIDE0CiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1JFTEFYRURfREVMVEEgMTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0dFTjdfU09MX1JFU0VUIDE2CiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0xMQyAxNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfQUxJQVNJTkdfUFBHVFQgMTgKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfV0FJVF9USU1FT1VUIDE5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19TRU1BUEhPUkVTIDIwCiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1BSSU1FX1ZNQVBfRkxVU0ggMjEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1ZFQk9YIDIyCiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1NFQ1VSRV9CQVRDSEVTIDIzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19QSU5ORURfQkFUQ0hFUyAyNAogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19FWEVDX05PX1JFTE9DIDI1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19FWEVDX0hBTkRMRV9MVVQgMjYKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfV1QgMjcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEk5MTVfUEFSQU1fQ01EX1BBUlNFUl9WRVJTSU9OIDI4CiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSB7CiAgaW50IHBhcmFtOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgX191c2VyICp2YWx1ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGRybV9pOTE1X2dldHBhcmFtX3Q7CiAjZGVmaW5lIEk5MTVfU0VUUEFSQU1fVVNFX01JX0JBVENIQlVGRkVSX1NUQVJUIDEKICNkZWZpbmUgSTkxNV9TRVRQQVJBTV9URVhfTFJVX0xPR19HUkFOVUxBUklUWSAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X1NFVFBBUkFNX0FMTE9XX0JBVENIQlVGRkVSIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfU0VUUEFSQU1fTlVNX1VTRURfRkVOQ0VTIDQKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X3NldHBhcmFtIHsKICBpbnQgcGFyYW07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB2YWx1ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGRybV9pOTE1X3NldHBhcmFtX3Q7CiAjZGVmaW5lIEk5MTVfTUVNX1JFR0lPTl9BR1AgMQogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfbWVtX2FsbG9jIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHJlZ2lvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGFsaWdubWVudDsKICBpbnQgc2l6ZTsKICBpbnQgX191c2VyICpyZWdpb25fb2Zmc2V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gZHJtX2k5MTVfbWVtX2FsbG9jX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfbWVtX2ZyZWUgewogIGludCByZWdpb247CiAgaW50IHJlZ2lvbl9vZmZzZXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBkcm1faTkxNV9tZW1fZnJlZV90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X21lbV9pbml0X2hlYXAgewogIGludCByZWdpb247CiAgaW50IHNpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBzdGFydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGRybV9pOTE1X21lbV9pbml0X2hlYXBfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X21lbV9kZXN0cm95X2hlYXAgewogIGludCByZWdpb247Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBkcm1faTkxNV9tZW1fZGVzdHJveV9oZWFwX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9WQkxBTktfUElQRV9BIDEKICNkZWZpbmUgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQiAyCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV92YmxhbmtfcGlwZSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwaXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gZHJtX2k5MTVfdmJsYW5rX3BpcGVfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X3ZibGFua19zd2FwIHsKICBkcm1fZHJhd2FibGVfdCBkcmF3YWJsZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZW51bSBkcm1fdmJsYW5rX3NlcV90eXBlIHNlcXR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBzZXF1ZW5jZTsKIH0gZHJtX2k5MTVfdmJsYW5rX3N3YXBfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2h3c19hZGRyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgYWRkcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGRybV9pOTE1X2h3c19hZGRyX3Q7CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQgewogIF9fdTY0IGd0dF9zdGFydDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZ3R0X2VuZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgewogIF9fdTY0IHNpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGFkOwogfTsKIHN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBhZDsKICBfX3U2NCBvZmZzZXQ7CiAgX191NjQgc2l6ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZGF0YV9wdHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlIHsKICBfX3UzMiBoYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBhZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgb2Zmc2V0OwogIF9fdTY0IHNpemU7CiAgX191NjQgZGF0YV9wdHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgewogIF9fdTMyIGhhbmRsZTsKICBfX3UzMiBwYWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG9mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgc2l6ZTsKICBfX3U2NCBhZGRyX3B0cjsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwX2d0dCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhbmRsZTsKICBfX3UzMiBwYWQ7CiAgX191NjQgb2Zmc2V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfZG9tYWluIHsKICBfX3UzMiBoYW5kbGU7CiAgX191MzIgcmVhZF9kb21haW5zOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3cml0ZV9kb21haW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1faTkxNV9nZW1fc3dfZmluaXNoIHsKICBfX3UzMiBoYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgewogIF9fdTMyIHRhcmdldF9oYW5kbGU7CiAgX191MzIgZGVsdGE7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG9mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcHJlc3VtZWRfb2Zmc2V0OwogIF9fdTMyIHJlYWRfZG9tYWluczsKICBfX3UzMiB3cml0ZV9kb21haW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9DUFUgMHgwMDAwMDAwMQogI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fUkVOREVSIDB4MDAwMDAwMDIKICNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIgMHgwMDAwMDAwNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQgMHgwMDAwMDAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OIDB4MDAwMDAwMTAKICNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWCAweDAwMDAwMDIwCiAjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9HVFQgMHgwMDAwMDA0MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoYW5kbGU7CiAgX191MzIgcmVsb2NhdGlvbl9jb3VudDsKICBfX3U2NCByZWxvY3NfcHRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBhbGlnbm1lbnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG9mZnNldDsKIH07CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBidWZmZXJzX3B0cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYnVmZmVyX2NvdW50OwogIF9fdTMyIGJhdGNoX3N0YXJ0X29mZnNldDsKICBfX3UzMiBiYXRjaF9sZW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIERSMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgRFI0OwogIF9fdTMyIG51bV9jbGlwcmVjdHM7CiAgX191NjQgY2xpcHJlY3RzX3B0cjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIHsKICBfX3UzMiBoYW5kbGU7CiAgX191MzIgcmVsb2NhdGlvbl9jb3VudDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVsb2NzX3B0cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgYWxpZ25tZW50OwogIF9fdTY0IG9mZnNldDsKICNkZWZpbmUgRVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0UgKDE8PDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWEVDX09CSkVDVF9ORUVEU19HVFQgKDE8PDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWEVDX09CSkVDVF9XUklURSAoMTw8MikKICNkZWZpbmUgX19FWEVDX09CSkVDVF9VTktOT1dOX0ZMQUdTIC0oRVhFQ19PQkpFQ1RfV1JJVEU8PDEpCiAgX191NjQgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJzdmQxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByc3ZkMjsKIH07CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgYnVmZmVyc19wdHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJ1ZmZlcl9jb3VudDsKICBfX3UzMiBiYXRjaF9zdGFydF9vZmZzZXQ7CiAgX191MzIgYmF0Y2hfbGVuOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBEUjE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIERSNDsKICBfX3UzMiBudW1fY2xpcHJlY3RzOwogIF9fdTY0IGNsaXByZWN0c19wdHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0VYRUNfUklOR19NQVNLICg3PDwwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9FWEVDX0RFRkFVTFQgKDA8PDApCiAjZGVmaW5lIEk5MTVfRVhFQ19SRU5ERVIgKDE8PDApCiAjZGVmaW5lIEk5MTVfRVhFQ19CU0QgKDI8PDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0VYRUNfQkxUICgzPDwwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9FWEVDX1ZFQk9YICg0PDwwKQogI2RlZmluZSBJOTE1X0VYRUNfQ09OU1RBTlRTX01BU0sgKDM8PDYpCiAjZGVmaW5lIEk5MTVfRVhFQ19DT05TVEFOVFNfUkVMX0dFTkVSQUwgKDA8PDYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0VYRUNfQ09OU1RBTlRTX0FCU09MVVRFICgxPDw2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9FWEVDX0NPTlNUQU5UU19SRUxfU1VSRkFDRSAoMjw8NikKICBfX3U2NCBmbGFnczsKICBfX3U2NCByc3ZkMTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcnN2ZDI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgSTkxNV9FWEVDX0dFTjdfU09MX1JFU0VUICgxPDw4KQogI2RlZmluZSBJOTE1X0VYRUNfU0VDVVJFICgxPDw5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9FWEVDX0lTX1BJTk5FRCAoMTw8MTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0VYRUNfTk9fUkVMT0MgKDE8PDExKQogI2RlZmluZSBJOTE1X0VYRUNfSEFORExFX0xVVCAoMTw8MTIpCiAjZGVmaW5lIF9fSTkxNV9FWEVDX1VOS05PV05fRkxBR1MgLShJOTE1X0VYRUNfSEFORExFX0xVVDw8MSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfRVhFQ19DT05URVhUX0lEX01BU0sgKDB4ZmZmZmZmZmYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBpOTE1X2V4ZWNidWZmZXIyX3NldF9jb250ZXh0X2lkKGViMiwgY29udGV4dCkgICAoZWIyKS5yc3ZkMSA9IGNvbnRleHQgJiBJOTE1X0VYRUNfQ09OVEVYVF9JRF9NQVNLCiAjZGVmaW5lIGk5MTVfZXhlY2J1ZmZlcjJfZ2V0X2NvbnRleHRfaWQoZWIyKSAgICgoZWIyKS5yc3ZkMSAmIEk5MTVfRVhFQ19DT05URVhUX0lEX01BU0spCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGFkOwogIF9fdTY0IGFsaWdubWVudDsKICBfX3U2NCBvZmZzZXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VucGluIHsKICBfX3UzMiBoYW5kbGU7CiAgX191MzIgcGFkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9pOTE1X2dlbV9idXN5IHsKICBfX3UzMiBoYW5kbGU7CiAgX191MzIgYnVzeTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9DQUNISU5HX05PTkUgMAogI2RlZmluZSBJOTE1X0NBQ0hJTkdfQ0FDSEVEIDEKICNkZWZpbmUgSTkxNV9DQUNISU5HX0RJU1BMQVkgMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1faTkxNV9nZW1fY2FjaGluZyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhbmRsZTsKICBfX3UzMiBjYWNoaW5nOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfVElMSU5HX05PTkUgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9USUxJTkdfWCAxCiAjZGVmaW5lIEk5MTVfVElMSU5HX1kgMgogI2RlZmluZSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORSAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0JJVF82X1NXSVpaTEVfOSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMCAyCiAjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzExIDMKICNkZWZpbmUgSTkxNV9CSVRfNl9TV0laWkxFXzlfMTBfMTEgNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV04gNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9CSVRfNl9TV0laWkxFXzlfMTcgNgogI2RlZmluZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMF8xNyA3CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF90aWxpbmcgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHRpbGluZ19tb2RlOwogIF9fdTMyIHN0cmlkZTsKICBfX3UzMiBzd2l6emxlX21vZGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcgewogIF9fdTMyIGhhbmRsZTsKICBfX3UzMiB0aWxpbmdfbW9kZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc3dpenpsZV9tb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF9hcGVydHVyZSB7CiAgX191NjQgYXBlcl9zaXplOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBhcGVyX2F2YWlsYWJsZV9zaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX2k5MTVfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkIHsKICBfX3UzMiBjcnRjX2lkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwaXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIEk5MTVfTUFEVl9XSUxMTkVFRCAwCiAjZGVmaW5lIEk5MTVfTUFEVl9ET05UTkVFRCAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0k5MTVfTUFEVl9QVVJHRUQgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1faTkxNV9nZW1fbWFkdmlzZSB7CiAgX191MzIgaGFuZGxlOwogIF9fdTMyIG1hZHY7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJldGFpbmVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIEk5MTVfT1ZFUkxBWV9UWVBFX01BU0sgMHhmZgogI2RlZmluZSBJOTE1X09WRVJMQVlfWVVWX1BMQU5BUiAweDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X09WRVJMQVlfWVVWX1BBQ0tFRCAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X09WRVJMQVlfUkdCIDB4MDMKICNkZWZpbmUgSTkxNV9PVkVSTEFZX0RFUFRIX01BU0sgMHhmZjAwCiAjZGVmaW5lIEk5MTVfT1ZFUkxBWV9SR0IyNCAweDEwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfT1ZFUkxBWV9SR0IxNiAweDIwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfT1ZFUkxBWV9SR0IxNSAweDMwMDAKICNkZWZpbmUgSTkxNV9PVkVSTEFZX1lVVjQyMiAweDAxMDAKICNkZWZpbmUgSTkxNV9PVkVSTEFZX1lVVjQxMSAweDAyMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfT1ZFUkxBWV9ZVVY0MjAgMHgwMzAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X09WRVJMQVlfWVVWNDEwIDB4MDQwMAogI2RlZmluZSBJOTE1X09WRVJMQVlfU1dBUF9NQVNLIDB4ZmYwMDAwCiAjZGVmaW5lIEk5MTVfT1ZFUkxBWV9OT19TV0FQIDB4MDAwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X09WRVJMQVlfVVZfU1dBUCAweDAxMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9PVkVSTEFZX1lfU1dBUCAweDAyMDAwMAogI2RlZmluZSBJOTE1X09WRVJMQVlfWV9BTkRfVVZfU1dBUCAweDAzMDAwMAogI2RlZmluZSBJOTE1X09WRVJMQVlfRkxBR1NfTUFTSyAweGZmMDAwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X09WRVJMQVlfRU5BQkxFIDB4MDEwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2ludGVsX292ZXJsYXlfcHV0X2ltYWdlIHsKICBfX3UzMiBmbGFnczsKICBfX3UzMiBib19oYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHN0cmlkZV9ZOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBzdHJpZGVfVVY7CiAgX191MzIgb2Zmc2V0X1k7CiAgX191MzIgb2Zmc2V0X1U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG9mZnNldF9WOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBzcmNfd2lkdGg7CiAgX191MTYgc3JjX2hlaWdodDsKICBfX3UxNiBzcmNfc2Nhbl93aWR0aDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgc3JjX3NjYW5faGVpZ2h0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjcnRjX2lkOwogIF9fdTE2IGRzdF94OwogIF9fdTE2IGRzdF95OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBkc3Rfd2lkdGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGRzdF9oZWlnaHQ7CiB9OwogI2RlZmluZSBJOTE1X09WRVJMQVlfVVBEQVRFX0FUVFJTICgxPDwwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9PVkVSTEFZX1VQREFURV9HQU1NQSAoMTw8MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2ludGVsX292ZXJsYXlfYXR0cnMgewogIF9fdTMyIGZsYWdzOwogIF9fdTMyIGNvbG9yX2tleTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgYnJpZ2h0bmVzczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY29udHJhc3Q7CiAgX191MzIgc2F0dXJhdGlvbjsKICBfX3UzMiBnYW1tYTA7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGdhbW1hMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZ2FtbWEyOwogIF9fdTMyIGdhbW1hMzsKICBfX3UzMiBnYW1tYTQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGdhbW1hNTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBJOTE1X1NFVF9DT0xPUktFWV9OT05FICgxPDwwKQogI2RlZmluZSBJOTE1X1NFVF9DT0xPUktFWV9ERVNUSU5BVElPTiAoMTw8MSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSAoMTw8MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2ludGVsX3Nwcml0ZV9jb2xvcmtleSB7CiAgX191MzIgcGxhbmVfaWQ7CiAgX191MzIgbWluX3ZhbHVlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjaGFubmVsX21hc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF92YWx1ZTsKICBfX3UzMiBmbGFnczsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9pOTE1X2dlbV93YWl0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYm9faGFuZGxlOwogIF9fdTMyIGZsYWdzOwogIF9fczY0IHRpbWVvdXRfbnM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfY3JlYXRlIHsKICBfX3UzMiBjdHhfaWQ7CiAgX191MzIgcGFkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2Rlc3Ryb3kgewogIF9fdTMyIGN0eF9pZDsKICBfX3UzMiBwYWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2k5MTVfcmVnX3JlYWQgewogIF9fdTY0IG9mZnNldDsKICBfX3U2NCB2YWw7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2k5MTVfcmVzZXRfc3RhdHMgewogIF9fdTMyIGN0eF9pZDsKICBfX3UzMiBmbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXRfY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJhdGNoX2FjdGl2ZTsKICBfX3UzMiBiYXRjaF9wZW5kaW5nOwogIF9fdTMyIHBhZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBkcm1faTkxNV9nZW1fdXNlcnB0ciB7CisgX191NjQgdXNlcl9wdHI7CisgX191NjQgdXNlcl9zaXplOworIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSTkxNV9VU0VSUFRSX1JFQURfT05MWSAweDEKKyNkZWZpbmUgSTkxNV9VU0VSUFRSX1VOU1lOQ0hST05JWkVEIDB4ODAwMDAwMDAKKyBfX3UzMiBoYW5kbGU7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vbXNtX2RybS5oIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vbXNtX2RybS5oCmluZGV4IDAzM2JiMzkuLjU0MjU3YTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvZHJtL21zbV9kcm0uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2RybS9tc21fZHJtLmgKQEAgLTMzLDcyICszMyw3NyBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNNX1BBUkFNX0dQVV9JRCAweDAxCiAjZGVmaW5lIE1TTV9QQVJBTV9HTUVNX1NJWkUgMHgwMgorI2RlZmluZSBNU01fUEFSQU1fQ0hJUF9JRCAweDAzCiBzdHJ1Y3QgZHJtX21zbV9wYXJhbSB7Ci0gdWludDMyX3QgcGlwZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgcGlwZTsKICB1aW50MzJfdCBwYXJhbTsKICB1aW50NjRfdCB2YWx1ZTsKIH07Ci0jZGVmaW5lIE1TTV9CT19TQ0FOT1VUIDB4MDAwMDAwMDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TTV9CT19TQ0FOT1VUIDB4MDAwMDAwMDEKICNkZWZpbmUgTVNNX0JPX0dQVV9SRUFET05MWSAweDAwMDAwMDAyCiAjZGVmaW5lIE1TTV9CT19DQUNIRV9NQVNLIDB4MDAwZjAwMDAKICNkZWZpbmUgTVNNX0JPX0NBQ0hFRCAweDAwMDEwMDAwCi0jZGVmaW5lIE1TTV9CT19XQyAweDAwMDIwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU01fQk9fV0MgMHgwMDAyMDAwMAogI2RlZmluZSBNU01fQk9fVU5DQUNIRUQgMHgwMDA0MDAwMAorI2RlZmluZSBNU01fQk9fRkxBR1MgKE1TTV9CT19TQ0FOT1VUIHwgICBNU01fQk9fR1BVX1JFQURPTkxZIHwgICBNU01fQk9fQ0FDSEVEIHwgICBNU01fQk9fV0MgfCAgIE1TTV9CT19VTkNBQ0hFRCkKIHN0cnVjdCBkcm1fbXNtX2dlbV9uZXcgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50NjRfdCBzaXplOwogIHVpbnQzMl90IGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBoYW5kbGU7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fbXNtX2dlbV9pbmZvIHsKICB1aW50MzJfdCBoYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHBhZDsKICB1aW50NjRfdCBvZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgTVNNX1BSRVBfUkVBRCAweDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU01fUFJFUF9XUklURSAweDAyCiAjZGVmaW5lIE1TTV9QUkVQX05PU1lOQyAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU01fUFJFUF9GTEFHUyAoTVNNX1BSRVBfUkVBRCB8IE1TTV9QUkVQX1dSSVRFIHwgTVNNX1BSRVBfTk9TWU5DKQogc3RydWN0IGRybV9tc21fZ2VtX2NwdV9wcmVwIHsKICB1aW50MzJfdCBoYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IG9wOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZHJtX21zbV90aW1lc3BlYyB0aW1lb3V0OwogfTsKIHN0cnVjdCBkcm1fbXNtX2dlbV9jcHVfZmluaSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGhhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9tc21fZ2VtX3N1Ym1pdF9yZWxvYyB7CiAgdWludDMyX3Qgc3VibWl0X29mZnNldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3Qgb3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludDMyX3Qgc2hpZnQ7CiAgdWludDMyX3QgcmVsb2NfaWR4OwogIHVpbnQ2NF90IHJlbG9jX29mZnNldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNNX1NVQk1JVF9DTURfQlVGIDB4MDAwMQogI2RlZmluZSBNU01fU1VCTUlUX0NNRF9JQl9UQVJHRVRfQlVGIDB4MDAwMgogI2RlZmluZSBNU01fU1VCTUlUX0NNRF9DVFhfUkVTVE9SRV9CVUYgMHgwMDAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9tc21fZ2VtX3N1Ym1pdF9jbWQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCB0eXBlOwogIHVpbnQzMl90IHN1Ym1pdF9pZHg7CiAgdWludDMyX3Qgc3VibWl0X29mZnNldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3Qgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgcGFkOwogIHVpbnQzMl90IG5yX3JlbG9jczsKICB1aW50NjRfdCBfX3VzZXIgcmVsb2NzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU01fU1VCTUlUX0JPX1JFQUQgMHgwMDAxCiAjZGVmaW5lIE1TTV9TVUJNSVRfQk9fV1JJVEUgMHgwMDAyCisjZGVmaW5lIE1TTV9TVUJNSVRfQk9fRkxBR1MgKE1TTV9TVUJNSVRfQk9fUkVBRCB8IE1TTV9TVUJNSVRfQk9fV1JJVEUpCiBzdHJ1Y3QgZHJtX21zbV9nZW1fc3VibWl0X2JvIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgZmxhZ3M7CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2RybS9yYWRlb25fZHJtLmggYi9saWJjL2tlcm5lbC91YXBpL2RybS9yYWRlb25fZHJtLmgKaW5kZXggZmQwYTNhOS4uZDU4M2QyYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vcmFkZW9uX2RybS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvZHJtL3JhZGVvbl9kcm0uaApAQCAtNDczLDQ1MyArNDczLDQ3MyBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX1JBREVPTl9HRU1fQlVTWSAweDJhCiAjZGVmaW5lIERSTV9SQURFT05fR0VNX1ZBIDB4MmIKKyNkZWZpbmUgRFJNX1JBREVPTl9HRU1fT1AgMHgyYwogI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0NQX0lOSVQgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fQ1BfSU5JVCwgZHJtX3JhZGVvbl9pbml0X3QpCi0jZGVmaW5lIERSTV9JT0NUTF9SQURFT05fQ1BfU1RBUlQgRFJNX0lPKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9DUF9TVEFSVCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fQ1BfU1RBUlQgRFJNX0lPKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9DUF9TVEFSVCkKICNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9DUF9TVE9QIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0NQX1NUT1AsIGRybV9yYWRlb25fY3Bfc3RvcF90KQogI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0NQX1JFU0VUIERSTV9JTyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fQ1BfUkVTRVQpCiAjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fQ1BfSURMRSBEUk1fSU8oIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0NQX0lETEUpCi0jZGVmaW5lIERSTV9JT0NUTF9SQURFT05fUkVTRVQgRFJNX0lPKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9SRVNFVCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fUkVTRVQgRFJNX0lPKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9SRVNFVCkKICNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9GVUxMU0NSRUVOIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0ZVTExTQ1JFRU4sIGRybV9yYWRlb25fZnVsbHNjcmVlbl90KQogI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX1NXQVAgRFJNX0lPKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9TV0FQKQogI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0NMRUFSIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0NMRUFSLCBkcm1fcmFkZW9uX2NsZWFyX3QpCi0jZGVmaW5lIERSTV9JT0NUTF9SQURFT05fVkVSVEVYIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX1ZFUlRFWCwgZHJtX3JhZGVvbl92ZXJ0ZXhfdCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fVkVSVEVYIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX1ZFUlRFWCwgZHJtX3JhZGVvbl92ZXJ0ZXhfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9JTkRJQ0VTIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0lORElDRVMsIGRybV9yYWRlb25faW5kaWNlc190KQogI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX1NUSVBQTEUgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fU1RJUFBMRSwgZHJtX3JhZGVvbl9zdGlwcGxlX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fSU5ESVJFQ1QgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fSU5ESVJFQ1QsIGRybV9yYWRlb25faW5kaXJlY3RfdCkKLSNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9URVhUVVJFIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX1RFWFRVUkUsIGRybV9yYWRlb25fdGV4dHVyZV90KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9URVhUVVJFIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX1RFWFRVUkUsIGRybV9yYWRlb25fdGV4dHVyZV90KQogI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX1ZFUlRFWDIgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fVkVSVEVYMiwgZHJtX3JhZGVvbl92ZXJ0ZXgyX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fQ01EQlVGIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0NNREJVRiwgZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fR0VUUEFSQU0gRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fR0VUUEFSQU0sIGRybV9yYWRlb25fZ2V0cGFyYW1fdCkKLSNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9GTElQIERSTV9JTyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fRkxJUCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fRkxJUCBEUk1fSU8oIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0ZMSVApCiAjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fQUxMT0MgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fQUxMT0MsIGRybV9yYWRlb25fbWVtX2FsbG9jX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fRlJFRSBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9GUkVFLCBkcm1fcmFkZW9uX21lbV9mcmVlX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fSU5JVF9IRUFQIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0lOSVRfSEVBUCwgZHJtX3JhZGVvbl9tZW1faW5pdF9oZWFwX3QpCi0jZGVmaW5lIERSTV9JT0NUTF9SQURFT05fSVJRX0VNSVQgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fSVJRX0VNSVQsIGRybV9yYWRlb25faXJxX2VtaXRfdCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fSVJRX0VNSVQgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fSVJRX0VNSVQsIGRybV9yYWRlb25faXJxX2VtaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9JUlFfV0FJVCBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9JUlFfV0FJVCwgZHJtX3JhZGVvbl9pcnFfd2FpdF90KQogI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0NQX1JFU1VNRSBEUk1fSU8oIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0NQX1JFU1VNRSkKICNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9TRVRQQVJBTSBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9TRVRQQVJBTSwgZHJtX3JhZGVvbl9zZXRwYXJhbV90KQotI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX1NVUkZfQUxMT0MgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fU1VSRl9BTExPQywgZHJtX3JhZGVvbl9zdXJmYWNlX2FsbG9jX3QpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX1NVUkZfQUxMT0MgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fU1VSRl9BTExPQywgZHJtX3JhZGVvbl9zdXJmYWNlX2FsbG9jX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fU1VSRl9GUkVFIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX1NVUkZfRlJFRSwgZHJtX3JhZGVvbl9zdXJmYWNlX2ZyZWVfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9HRU1fSU5GTyBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9HRU1fSU5GTywgc3RydWN0IGRybV9yYWRlb25fZ2VtX2luZm8pCiAjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fR0VNX0NSRUFURSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9HRU1fQ1JFQVRFLCBzdHJ1Y3QgZHJtX3JhZGVvbl9nZW1fY3JlYXRlKQotI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0dFTV9NTUFQIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0dFTV9NTUFQLCBzdHJ1Y3QgZHJtX3JhZGVvbl9nZW1fbW1hcCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fR0VNX01NQVAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fR0VNX01NQVAsIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9tbWFwKQogI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0dFTV9QUkVBRCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9HRU1fUFJFQUQsIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9wcmVhZCkKICNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9HRU1fUFdSSVRFIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0dFTV9QV1JJVEUsIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9wd3JpdGUpCiAjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fR0VNX1NFVF9ET01BSU4gRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fR0VNX1NFVF9ET01BSU4sIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9zZXRfZG9tYWluKQotI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0dFTV9XQUlUX0lETEUgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9HRU1fV0FJVF9JRExFLCBzdHJ1Y3QgZHJtX3JhZGVvbl9nZW1fd2FpdF9pZGxlKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9HRU1fV0FJVF9JRExFIERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fR0VNX1dBSVRfSURMRSwgc3RydWN0IGRybV9yYWRlb25fZ2VtX3dhaXRfaWRsZSkKICNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9DUyBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9DUywgc3RydWN0IGRybV9yYWRlb25fY3MpCiAjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fSU5GTyBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9JTkZPLCBzdHJ1Y3QgZHJtX3JhZGVvbl9pbmZvKQogI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0dFTV9TRVRfVElMSU5HIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0dFTV9TRVRfVElMSU5HLCBzdHJ1Y3QgZHJtX3JhZGVvbl9nZW1fc2V0X3RpbGluZykKLSNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9HRU1fR0VUX1RJTElORyBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9HRU1fR0VUX1RJTElORywgc3RydWN0IGRybV9yYWRlb25fZ2VtX2dldF90aWxpbmcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0dFTV9HRVRfVElMSU5HIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0dFTV9HRVRfVElMSU5HLCBzdHJ1Y3QgZHJtX3JhZGVvbl9nZW1fZ2V0X3RpbGluZykKICNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9HRU1fQlVTWSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9HRU1fQlVTWSwgc3RydWN0IGRybV9yYWRlb25fZ2VtX2J1c3kpCiAjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fR0VNX1ZBIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0dFTV9WQSwgc3RydWN0IGRybV9yYWRlb25fZ2VtX3ZhKQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0dFTV9PUCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9HRU1fT1AsIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9vcCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2luaXQgewogIGVudW0gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSQURFT05fSU5JVF9DUCA9IDB4MDEsCiAgUkFERU9OX0NMRUFOVVBfQ1AgPSAweDAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSQURFT05fSU5JVF9SMjAwX0NQID0gMHgwMywKICBSQURFT05fSU5JVF9SMzAwX0NQID0gMHgwNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUkFERU9OX0lOSVRfUjYwMF9DUCA9IDB4MDUKICB9IGZ1bmM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc2FyZWFfcHJpdl9vZmZzZXQ7CiAgaW50IGlzX3BjaTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGNwX21vZGU7CiAgaW50IGdhcnRfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHJpbmdfc2l6ZTsKICBpbnQgdXNlY190aW1lb3V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZmJfYnBwOwogIHVuc2lnbmVkIGludCBmcm9udF9vZmZzZXQsIGZyb250X3BpdGNoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgYmFja19vZmZzZXQsIGJhY2tfcGl0Y2g7CiAgdW5zaWduZWQgaW50IGRlcHRoX2JwcDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGRlcHRoX29mZnNldCwgZGVwdGhfcGl0Y2g7CiAgdW5zaWduZWQgbG9uZyBmYl9vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgbW1pb19vZmZzZXQ7CiAgdW5zaWduZWQgbG9uZyByaW5nX29mZnNldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyByaW5nX3JwdHJfb2Zmc2V0OwogIHVuc2lnbmVkIGxvbmcgYnVmZmVyc19vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgZ2FydF90ZXh0dXJlc19vZmZzZXQ7CiB9IGRybV9yYWRlb25faW5pdF90OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fY3Bfc3RvcCB7CiAgaW50IGZsdXNoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgaWRsZTsKIH0gZHJtX3JhZGVvbl9jcF9zdG9wX3Q7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9mdWxsc2NyZWVuIHsKICBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUkFERU9OX0lOSVRfRlVMTFNDUkVFTiA9IDB4MDEsCiAgUkFERU9OX0NMRUFOVVBfRlVMTFNDUkVFTiA9IDB4MDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBmdW5jOwogfSBkcm1fcmFkZW9uX2Z1bGxzY3JlZW5fdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENMRUFSX1gxIDAKICNkZWZpbmUgQ0xFQVJfWTEgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0xFQVJfWDIgMgogI2RlZmluZSBDTEVBUl9ZMiAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDTEVBUl9ERVBUSCA0CiB0eXBlZGVmIHVuaW9uIGRybV9yYWRlb25fY2xlYXJfcmVjdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGZsb2F0IGZbNV07CiAgdW5zaWduZWQgaW50IHVpWzVdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gZHJtX3JhZGVvbl9jbGVhcl9yZWN0X3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2NsZWFyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGZsYWdzOwogIHVuc2lnbmVkIGludCBjbGVhcl9jb2xvcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGNsZWFyX2RlcHRoOwogIHVuc2lnbmVkIGludCBjb2xvcl9tYXNrOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZGVwdGhfbWFzazsKICBkcm1fcmFkZW9uX2NsZWFyX3JlY3RfdCBfX3VzZXIgKmRlcHRoX2JveGVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gZHJtX3JhZGVvbl9jbGVhcl90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl92ZXJ0ZXggewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcHJpbTsKICBpbnQgaWR4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgY291bnQ7CiAgaW50IGRpc2NhcmQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBkcm1fcmFkZW9uX3ZlcnRleF90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9pbmRpY2VzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHByaW07CiAgaW50IGlkeDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHN0YXJ0OwogIGludCBlbmQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBkaXNjYXJkOwogfSBkcm1fcmFkZW9uX2luZGljZXNfdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3ZlcnRleDIgewogIGludCBpZHg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBkaXNjYXJkOwogIGludCBucl9zdGF0ZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGRybV9yYWRlb25fc3RhdGVfdCBfX3VzZXIgKnN0YXRlOwogIGludCBucl9wcmltczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZHJtX3JhZGVvbl9wcmltX3QgX191c2VyICpwcmltOwogfSBkcm1fcmFkZW9uX3ZlcnRleDJfdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2NtZF9idWZmZXIgewogIGludCBidWZzejsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBfX3VzZXIgKmJ1ZjsKICBpbnQgbmJveDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICpib3hlczsKIH0gZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl90ZXhfaW1hZ2UgewogIHVuc2lnbmVkIGludCB4LCB5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKICBjb25zdCB2b2lkIF9fdXNlciAqZGF0YTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGRybV9yYWRlb25fdGV4X2ltYWdlX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3RleHR1cmUgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwogIGludCBwaXRjaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGZvcm1hdDsKICBpbnQgd2lkdGg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBoZWlnaHQ7CiAgZHJtX3JhZGVvbl90ZXhfaW1hZ2VfdCBfX3VzZXIgKmltYWdlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gZHJtX3JhZGVvbl90ZXh0dXJlX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3N0aXBwbGUgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgX191c2VyICptYXNrOwogfSBkcm1fcmFkZW9uX3N0aXBwbGVfdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2luZGlyZWN0IHsKICBpbnQgaWR4OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc3RhcnQ7CiAgaW50IGVuZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGRpc2NhcmQ7CiB9IGRybV9yYWRlb25faW5kaXJlY3RfdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9DQVJEX1BDSSAwCiAjZGVmaW5lIFJBREVPTl9DQVJEX0FHUCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSQURFT05fQ0FSRF9QQ0lFIDIKICNkZWZpbmUgUkFERU9OX1BBUkFNX0dBUlRfQlVGRkVSX09GRlNFVCAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSQURFT05fUEFSQU1fTEFTVF9GUkFNRSAyCiAjZGVmaW5lIFJBREVPTl9QQVJBTV9MQVNUX0RJU1BBVENIIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9QQVJBTV9MQVNUX0NMRUFSIDQKICNkZWZpbmUgUkFERU9OX1BBUkFNX0lSUV9OUiA1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSQURFT05fUEFSQU1fR0FSVF9CQVNFIDYKICNkZWZpbmUgUkFERU9OX1BBUkFNX1JFR0lTVEVSX0hBTkRMRSA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSQURFT05fUEFSQU1fU1RBVFVTX0hBTkRMRSA4CiAjZGVmaW5lIFJBREVPTl9QQVJBTV9TQVJFQV9IQU5ETEUgOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkFERU9OX1BBUkFNX0dBUlRfVEVYX0hBTkRMRSAxMAogI2RlZmluZSBSQURFT05fUEFSQU1fU0NSQVRDSF9PRkZTRVQgMTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9QQVJBTV9DQVJEX1RZUEUgMTIKICNkZWZpbmUgUkFERU9OX1BBUkFNX1ZCTEFOS19DUlRDIDEzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSQURFT05fUEFSQU1fRkJfTE9DQVRJT04gMTQKICNkZWZpbmUgUkFERU9OX1BBUkFNX05VTV9HQl9QSVBFUyAxNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkFERU9OX1BBUkFNX0RFVklDRV9JRCAxNgogI2RlZmluZSBSQURFT05fUEFSQU1fTlVNX1pfUElQRVMgMTcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2dldHBhcmFtIHsKICBpbnQgcGFyYW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgX191c2VyICp2YWx1ZTsKIH0gZHJtX3JhZGVvbl9nZXRwYXJhbV90OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkFERU9OX01FTV9SRUdJT05fR0FSVCAxCiAjZGVmaW5lIFJBREVPTl9NRU1fUkVHSU9OX0ZCIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX21lbV9hbGxvYyB7CiAgaW50IHJlZ2lvbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGFsaWdubWVudDsKICBpbnQgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IF9fdXNlciAqcmVnaW9uX29mZnNldDsKIH0gZHJtX3JhZGVvbl9tZW1fYWxsb2NfdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX21lbV9mcmVlIHsKICBpbnQgcmVnaW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcmVnaW9uX29mZnNldDsKIH0gZHJtX3JhZGVvbl9tZW1fZnJlZV90OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fbWVtX2luaXRfaGVhcCB7CiAgaW50IHJlZ2lvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHNpemU7CiAgaW50IHN0YXJ0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gZHJtX3JhZGVvbl9tZW1faW5pdF9oZWFwX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2lycV9lbWl0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IF9fdXNlciAqaXJxX3NlcTsKIH0gZHJtX3JhZGVvbl9pcnFfZW1pdF90OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25faXJxX3dhaXQgewogIGludCBpcnFfc2VxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gZHJtX3JhZGVvbl9pcnFfd2FpdF90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9zZXRwYXJhbSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBwYXJhbTsKICBfX3M2NCB2YWx1ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGRybV9yYWRlb25fc2V0cGFyYW1fdDsKICNkZWZpbmUgUkFERU9OX1NFVFBBUkFNX0ZCX0xPQ0FUSU9OIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9TRVRQQVJBTV9TV0lUQ0hfVElMSU5HIDIKICNkZWZpbmUgUkFERU9OX1NFVFBBUkFNX1BDSUdBUlRfTE9DQVRJT04gMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkFERU9OX1NFVFBBUkFNX05FV19NRU1NQVAgNAogI2RlZmluZSBSQURFT05fU0VUUEFSQU1fUENJR0FSVF9UQUJMRV9TSVpFIDUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9TRVRQQVJBTV9WQkxBTktfQ1JUQyA2CiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3N1cmZhY2VfYWxsb2MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgYWRkcmVzczsKICB1bnNpZ25lZCBpbnQgc2l6ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGZsYWdzOwogfSBkcm1fcmFkZW9uX3N1cmZhY2VfYWxsb2NfdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3N1cmZhY2VfZnJlZSB7CiAgdW5zaWduZWQgaW50IGFkZHJlc3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBkcm1fcmFkZW9uX3N1cmZhY2VfZnJlZV90OwogI2RlZmluZSBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMiAyCiAjZGVmaW5lIFJBREVPTl9HRU1fRE9NQUlOX0NQVSAweDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9HRU1fRE9NQUlOX0dUVCAweDIKICNkZWZpbmUgUkFERU9OX0dFTV9ET01BSU5fVlJBTSAweDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX3JhZGVvbl9nZW1faW5mbyB7CiAgdWludDY0X3QgZ2FydF9zaXplOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50NjRfdCB2cmFtX3NpemU7CiAgdWludDY0X3QgdnJhbV92aXNpYmxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFJBREVPTl9HRU1fTk9fQkFDS0lOR19TVE9SRSAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9yYWRlb25fZ2VtX2NyZWF0ZSB7CiAgdWludDY0X3Qgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDY0X3QgYWxpZ25tZW50OwogIHVpbnQzMl90IGhhbmRsZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgaW5pdGlhbF9kb21haW47CiAgdWludDMyX3QgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgUkFERU9OX1RJTElOR19NQUNSTyAweDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9USUxJTkdfTUlDUk8gMHgyCiAjZGVmaW5lIFJBREVPTl9USUxJTkdfU1dBUF8xNkJJVCAweDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9USUxJTkdfU1dBUF8zMkJJVCAweDgKICNkZWZpbmUgUkFERU9OX1RJTElOR19TVVJGQUNFIDB4MTAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9USUxJTkdfTUlDUk9fU1FVQVJFIDB4MjAKICNkZWZpbmUgUkFERU9OX1RJTElOR19FR19CQU5LV19TSElGVCA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSQURFT05fVElMSU5HX0VHX0JBTktXX01BU0sgMHhmCiAjZGVmaW5lIFJBREVPTl9USUxJTkdfRUdfQkFOS0hfU0hJRlQgMTIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9USUxJTkdfRUdfQkFOS0hfTUFTSyAweGYKICNkZWZpbmUgUkFERU9OX1RJTElOR19FR19NQUNST19USUxFX0FTUEVDVF9TSElGVCAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkFERU9OX1RJTElOR19FR19NQUNST19USUxFX0FTUEVDVF9NQVNLIDB4ZgogI2RlZmluZSBSQURFT05fVElMSU5HX0VHX1RJTEVfU1BMSVRfU0hJRlQgMjQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9USUxJTkdfRUdfVElMRV9TUExJVF9NQVNLIDB4ZgogI2RlZmluZSBSQURFT05fVElMSU5HX0VHX1NURU5DSUxfVElMRV9TUExJVF9TSElGVCAyOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkFERU9OX1RJTElOR19FR19TVEVOQ0lMX1RJTEVfU1BMSVRfTUFTSyAweGYKIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9zZXRfdGlsaW5nIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgaGFuZGxlOwogIHVpbnQzMl90IHRpbGluZ19mbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgcGl0Y2g7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9nZXRfdGlsaW5nIHsKICB1aW50MzJfdCBoYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHRpbGluZ19mbGFnczsKICB1aW50MzJfdCBwaXRjaDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9yYWRlb25fZ2VtX21tYXAgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBoYW5kbGU7CiAgdWludDMyX3QgcGFkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50NjRfdCBvZmZzZXQ7CiAgdWludDY0X3Qgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDY0X3QgYWRkcl9wdHI7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9zZXRfZG9tYWluIHsKICB1aW50MzJfdCBoYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHJlYWRfZG9tYWluczsKICB1aW50MzJfdCB3cml0ZV9kb21haW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV93YWl0X2lkbGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBoYW5kbGU7CiAgdWludDMyX3QgcGFkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3JhZGVvbl9nZW1fYnVzeSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGhhbmRsZTsKICB1aW50MzJfdCBkb21haW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9wcmVhZCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGhhbmRsZTsKICB1aW50MzJfdCBwYWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ2NF90IG9mZnNldDsKICB1aW50NjRfdCBzaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50NjRfdCBkYXRhX3B0cjsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9yYWRlb25fZ2VtX3B3cml0ZSB7CiAgdWludDMyX3QgaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBwYWQ7CiAgdWludDY0X3Qgb2Zmc2V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50NjRfdCBzaXplOwogIHVpbnQ2NF90IGRhdGFfcHRyOwotfTsKLSNkZWZpbmUgUkFERU9OX1ZBX01BUCAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCBkcm1fcmFkZW9uX2dlbV9vcCB7CisgdWludDMyX3QgaGFuZGxlOworIHVpbnQzMl90IG9wOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50NjRfdCB2YWx1ZTsKK307CisjZGVmaW5lIFJBREVPTl9HRU1fT1BfR0VUX0lOSVRJQUxfRE9NQUlOIDAKKyNkZWZpbmUgUkFERU9OX0dFTV9PUF9TRVRfSU5JVElBTF9ET01BSU4gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUkFERU9OX1ZBX01BUCAxCiAjZGVmaW5lIFJBREVPTl9WQV9VTk1BUCAyCiAjZGVmaW5lIFJBREVPTl9WQV9SRVNVTFRfT0sgMAogI2RlZmluZSBSQURFT05fVkFfUkVTVUxUX0VSUk9SIDEKLSNkZWZpbmUgUkFERU9OX1ZBX1JFU1VMVF9WQV9FWElTVCAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSQURFT05fVkFfUkVTVUxUX1ZBX0VYSVNUIDIKICNkZWZpbmUgUkFERU9OX1ZNX1BBR0VfVkFMSUQgKDEgPDwgMCkKICNkZWZpbmUgUkFERU9OX1ZNX1BBR0VfUkVBREFCTEUgKDEgPDwgMSkKICNkZWZpbmUgUkFERU9OX1ZNX1BBR0VfV1JJVEVBQkxFICgxIDw8IDIpCi0jZGVmaW5lIFJBREVPTl9WTV9QQUdFX1NZU1RFTSAoMSA8PCAzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUkFERU9OX1ZNX1BBR0VfU1lTVEVNICgxIDw8IDMpCiAjZGVmaW5lIFJBREVPTl9WTV9QQUdFX1NOT09QRUQgKDEgPDwgNCkKIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV92YSB7CiAgdWludDMyX3QgaGFuZGxlOwotIHVpbnQzMl90IG9wZXJhdGlvbjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3Qgb3BlcmF0aW9uOwogIHVpbnQzMl90IHZtX2lkOwogIHVpbnQzMl90IGZsYWdzOwogIHVpbnQ2NF90IG9mZnNldDsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgUkFERU9OX0NIVU5LX0lEX1JFTE9DUyAweDAxCiAjZGVmaW5lIFJBREVPTl9DSFVOS19JRF9JQiAweDAyCiAjZGVmaW5lIFJBREVPTl9DSFVOS19JRF9GTEFHUyAweDAzCi0jZGVmaW5lIFJBREVPTl9DSFVOS19JRF9DT05TVF9JQiAweDA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSQURFT05fQ0hVTktfSURfQ09OU1RfSUIgMHgwNAogI2RlZmluZSBSQURFT05fQ1NfS0VFUF9USUxJTkdfRkxBR1MgMHgwMQogI2RlZmluZSBSQURFT05fQ1NfVVNFX1ZNIDB4MDIKICNkZWZpbmUgUkFERU9OX0NTX0VORF9PRl9GUkFNRSAweDA0Ci0jZGVmaW5lIFJBREVPTl9DU19SSU5HX0dGWCAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSQURFT05fQ1NfUklOR19HRlggMAogI2RlZmluZSBSQURFT05fQ1NfUklOR19DT01QVVRFIDEKICNkZWZpbmUgUkFERU9OX0NTX1JJTkdfRE1BIDIKICNkZWZpbmUgUkFERU9OX0NTX1JJTkdfVVZEIDMKLXN0cnVjdCBkcm1fcmFkZW9uX2NzX2NodW5rIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJBREVPTl9DU19SSU5HX1ZDRSA0CitzdHJ1Y3QgZHJtX3JhZGVvbl9jc19jaHVuayB7CiAgdWludDMyX3QgY2h1bmtfaWQ7CiAgdWludDMyX3QgbGVuZ3RoX2R3OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50NjRfdCBjaHVua19kYXRhOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX3JhZGVvbl9jc19yZWxvYyB7CiAgdWludDMyX3QgaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCByZWFkX2RvbWFpbnM7CiAgdWludDMyX3Qgd3JpdGVfZG9tYWluOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBmbGFnczsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9yYWRlb25fY3MgewogIHVpbnQzMl90IG51bV9jaHVua3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGNzX2lkOwogIHVpbnQ2NF90IGNodW5rczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDY0X3QgZ2FydF9saW1pdDsKICB1aW50NjRfdCB2cmFtX2xpbWl0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFJBREVPTl9JTkZPX0RFVklDRV9JRCAweDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSQURFT05fSU5GT19OVU1fR0JfUElQRVMgMHgwMQogI2RlZmluZSBSQURFT05fSU5GT19OVU1fWl9QSVBFUyAweDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSQURFT05fSU5GT19BQ0NFTF9XT1JLSU5HIDB4MDMKICNkZWZpbmUgUkFERU9OX0lORk9fQ1JUQ19GUk9NX0lEIDB4MDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9JTkZPX0FDQ0VMX1dPUktJTkcyIDB4MDUKICNkZWZpbmUgUkFERU9OX0lORk9fVElMSU5HX0NPTkZJRyAweDA2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSQURFT05fSU5GT19XQU5UX0hZUEVSWiAweDA3CiAjZGVmaW5lIFJBREVPTl9JTkZPX1dBTlRfQ01BU0sgMHgwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkFERU9OX0lORk9fQ0xPQ0tfQ1JZU1RBTF9GUkVRIDB4MDkKICNkZWZpbmUgUkFERU9OX0lORk9fTlVNX0JBQ0tFTkRTIDB4MGEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9JTkZPX05VTV9USUxFX1BJUEVTIDB4MGIKICNkZWZpbmUgUkFERU9OX0lORk9fRlVTSU9OX0dBUlRfV09SS0lORyAweDBjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSQURFT05fSU5GT19CQUNLRU5EX01BUCAweDBkCiAjZGVmaW5lIFJBREVPTl9JTkZPX1ZBX1NUQVJUIDB4MGUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9JTkZPX0lCX1ZNX01BWF9TSVpFIDB4MGYKICNkZWZpbmUgUkFERU9OX0lORk9fTUFYX1BJUEVTIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9JTkZPX1RJTUVTVEFNUCAweDExCiAjZGVmaW5lIFJBREVPTl9JTkZPX01BWF9TRSAweDEyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSQURFT05fSU5GT19NQVhfU0hfUEVSX1NFIDB4MTMKICNkZWZpbmUgUkFERU9OX0lORk9fRkFTVEZCX1dPUktJTkcgMHgxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkFERU9OX0lORk9fUklOR19XT1JLSU5HIDB4MTUKICNkZWZpbmUgUkFERU9OX0lORk9fU0lfVElMRV9NT0RFX0FSUkFZIDB4MTYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9JTkZPX1NJX0NQX0RNQV9DT01QVVRFIDB4MTcKICNkZWZpbmUgUkFERU9OX0lORk9fQ0lLX01BQ1JPVElMRV9NT0RFX0FSUkFZIDB4MTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBREVPTl9JTkZPX1NJX0JBQ0tFTkRfRU5BQkxFRF9NQVNLIDB4MTkKICNkZWZpbmUgUkFERU9OX0lORk9fTUFYX1NDTEsgMHgxYQorI2RlZmluZSBSQURFT05fSU5GT19WQ0VfRldfVkVSU0lPTiAweDFiCisjZGVmaW5lIFJBREVPTl9JTkZPX1ZDRV9GQl9WRVJTSU9OIDB4MWMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJBREVPTl9JTkZPX05VTV9CWVRFU19NT1ZFRCAweDFkCisjZGVmaW5lIFJBREVPTl9JTkZPX1ZSQU1fVVNBR0UgMHgxZQorI2RlZmluZSBSQURFT05fSU5GT19HVFRfVVNBR0UgMHgxZgorI2RlZmluZSBSQURFT05fSU5GT19BQ1RJVkVfQ1VfQ09VTlQgMHgyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fcmFkZW9uX2luZm8gewogIHVpbnQzMl90IHJlcXVlc3Q7CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2RybS90ZWdyYV9kcm0uaCBiL2xpYmMva2VybmVsL3VhcGkvZHJtL3RlZ3JhX2RybS5oCmluZGV4IDkxZDcxYmUuLjYwOTk1N2QgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvZHJtL3RlZ3JhX2RybS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvZHJtL3RlZ3JhX2RybS5oCkBAIC0xMTksNDAgKzExOSwzOCBAQAogIF9fdTMyIG51bV93YWl0Y2hrczsKICBfX3UzMiB3YWl0Y2hrX21hc2s7CiAgX191MzIgdGltZW91dDsKLSBfX3UzMiBwYWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHN5bmNwdHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGNtZGJ1ZnM7CiAgX191NjQgcmVsb2NzOwogIF9fdTY0IHdhaXRjaGtzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmZW5jZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbNV07CiB9OwogI2RlZmluZSBEUk1fVEVHUkFfR0VNX0NSRUFURSAweDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fVEVHUkFfR0VNX01NQVAgMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX1RFR1JBX1NZTkNQVF9SRUFEIDB4MDIKICNkZWZpbmUgRFJNX1RFR1JBX1NZTkNQVF9JTkNSIDB4MDMKICNkZWZpbmUgRFJNX1RFR1JBX1NZTkNQVF9XQUlUIDB4MDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9URUdSQV9PUEVOX0NIQU5ORUwgMHgwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX1RFR1JBX0NMT1NFX0NIQU5ORUwgMHgwNgogI2RlZmluZSBEUk1fVEVHUkFfR0VUX1NZTkNQVCAweDA3CiAjZGVmaW5lIERSTV9URUdSQV9TVUJNSVQgMHgwOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX1RFR1JBX0dFVF9TWU5DUFRfQkFTRSAweDA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSU9DVExfVEVHUkFfR0VNX0NSRUFURSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1RFR1JBX0dFTV9DUkVBVEUsIHN0cnVjdCBkcm1fdGVncmFfZ2VtX2NyZWF0ZSkKICNkZWZpbmUgRFJNX0lPQ1RMX1RFR1JBX0dFTV9NTUFQIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVEVHUkFfR0VNX01NQVAsIHN0cnVjdCBkcm1fdGVncmFfZ2VtX21tYXApCiAjZGVmaW5lIERSTV9JT0NUTF9URUdSQV9TWU5DUFRfUkVBRCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1RFR1JBX1NZTkNQVF9SRUFELCBzdHJ1Y3QgZHJtX3RlZ3JhX3N5bmNwdF9yZWFkKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0lPQ1RMX1RFR1JBX1NZTkNQVF9JTkNSIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVEVHUkFfU1lOQ1BUX0lOQ1IsIHN0cnVjdCBkcm1fdGVncmFfc3luY3B0X2luY3IpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSU9DVExfVEVHUkFfU1lOQ1BUX1dBSVQgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9URUdSQV9TWU5DUFRfV0FJVCwgc3RydWN0IGRybV90ZWdyYV9zeW5jcHRfd2FpdCkKICNkZWZpbmUgRFJNX0lPQ1RMX1RFR1JBX09QRU5fQ0hBTk5FTCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1RFR1JBX09QRU5fQ0hBTk5FTCwgc3RydWN0IGRybV90ZWdyYV9vcGVuX2NoYW5uZWwpCiAjZGVmaW5lIERSTV9JT0NUTF9URUdSQV9DTE9TRV9DSEFOTkVMIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVEVHUkFfQ0xPU0VfQ0hBTk5FTCwgc3RydWN0IGRybV90ZWdyYV9vcGVuX2NoYW5uZWwpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSU9DVExfVEVHUkFfR0VUX1NZTkNQVCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1RFR1JBX0dFVF9TWU5DUFQsIHN0cnVjdCBkcm1fdGVncmFfZ2V0X3N5bmNwdCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JT0NUTF9URUdSQV9TVUJNSVQgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9URUdSQV9TVUJNSVQsIHN0cnVjdCBkcm1fdGVncmFfc3VibWl0KQogI2RlZmluZSBEUk1fSU9DVExfVEVHUkFfR0VUX1NZTkNQVF9CQVNFIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVEVHUkFfR0VUX1NZTkNQVF9CQVNFLCBzdHJ1Y3QgZHJtX3RlZ3JhX2dldF9zeW5jcHRfYmFzZSkKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaCBiL2xpYmMva2VybmVsL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaAppbmRleCA4NDllZjdkLi41NTM2ZWExIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2RybS92bXdnZnhfZHJtLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vdm13Z2Z4X2RybS5oCkBAIC02OCw2ICs2OCwxMSBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX1ZNV19QQVJBTV9NQVhfTU9CX01FTU9SWSA5CiAjZGVmaW5lIERSTV9WTVdfUEFSQU1fTUFYX01PQl9TSVpFIDEwCitlbnVtIGRybV92bXdfaGFuZGxlX3R5cGUgeworIERSTV9WTVdfSEFORExFX0xFR0FDWSA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIERSTV9WTVdfSEFORExFX1BSSU1FID0gMQorfTsKIHN0cnVjdCBkcm1fdm13X2dldHBhcmFtX2FyZyB7CiAgdWludDY0X3QgdmFsdWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtOTIsNyArOTcsNyBAQAogc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQzMl90IHNpZDsKLSB1aW50MzJfdCBwYWQ2NDsKKyBlbnVtIGRybV92bXdfaGFuZGxlX3R5cGUgaGFuZGxlX3R5cGU7CiB9Owogc3RydWN0IGRybV92bXdfc2l6ZSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9hdWRpdC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9hdWRpdC5oCmluZGV4IGI1MDY1MTIuLjFmZDY0NjIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvYXVkaXQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2F1ZGl0LmgKQEAgLTQ2LDM0OSArNDYsMzYzIEBACiAjZGVmaW5lIEFVRElUX1NFVF9GRUFUVVJFIDEwMTgKICNkZWZpbmUgQVVESVRfR0VUX0ZFQVRVUkUgMTAxOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQVVESVRfRkVBVFVSRV9DSEFOR0UgMTAyMAogI2RlZmluZSBBVURJVF9GSVJTVF9VU0VSX01TRyAxMTAwCiAjZGVmaW5lIEFVRElUX1VTRVJfQVZDIDExMDcKICNkZWZpbmUgQVVESVRfVVNFUl9UVFkgMTEyNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTEFTVF9VU0VSX01TRyAxMTk5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9GSVJTVF9VU0VSX01TRzIgMjEwMAogI2RlZmluZSBBVURJVF9MQVNUX1VTRVJfTVNHMiAyOTk5CiAjZGVmaW5lIEFVRElUX0RBRU1PTl9TVEFSVCAxMjAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9EQUVNT05fRU5EIDEyMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0RBRU1PTl9BQk9SVCAxMjAyCiAjZGVmaW5lIEFVRElUX0RBRU1PTl9DT05GSUcgMTIwMwogI2RlZmluZSBBVURJVF9TWVNDQUxMIDEzMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1BBVEggMTMwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfSVBDIDEzMDMKICNkZWZpbmUgQVVESVRfU09DS0VUQ0FMTCAxMzA0CiAjZGVmaW5lIEFVRElUX0NPTkZJR19DSEFOR0UgMTMwNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfU09DS0FERFIgMTMwNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQ1dEIDEzMDcKICNkZWZpbmUgQVVESVRfRVhFQ1ZFIDEzMDkKICNkZWZpbmUgQVVESVRfSVBDX1NFVF9QRVJNIDEzMTEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX01RX09QRU4gMTMxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTVFfU0VORFJFQ1YgMTMxMwogI2RlZmluZSBBVURJVF9NUV9OT1RJRlkgMTMxNAogI2RlZmluZSBBVURJVF9NUV9HRVRTRVRBVFRSIDEzMTUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0tFUk5FTF9PVEhFUiAxMzE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9GRF9QQUlSIDEzMTcKICNkZWZpbmUgQVVESVRfT0JKX1BJRCAxMzE4CiAjZGVmaW5lIEFVRElUX1RUWSAxMzE5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9FT0UgMTMyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQlBSTV9GQ0FQUyAxMzIxCiAjZGVmaW5lIEFVRElUX0NBUFNFVCAxMzIyCiAjZGVmaW5lIEFVRElUX01NQVAgMTMyMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTkVURklMVEVSX1BLVCAxMzI0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9ORVRGSUxURVJfQ0ZHIDEzMjUKICNkZWZpbmUgQVVESVRfU0VDQ09NUCAxMzI2Ci0jZGVmaW5lIEFVRElUX0FWQyAxNDAwCisjZGVmaW5lIEFVRElUX1BST0NUSVRMRSAxMzI3CisjZGVmaW5lIEFVRElUX0ZFQVRVUkVfQ0hBTkdFIDEzMjgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0FWQyAxNDAwCiAjZGVmaW5lIEFVRElUX1NFTElOVVhfRVJSIDE0MDEKICNkZWZpbmUgQVVESVRfQVZDX1BBVEggMTQwMgogI2RlZmluZSBBVURJVF9NQUNfUE9MSUNZX0xPQUQgMTQwMwotI2RlZmluZSBBVURJVF9NQUNfU1RBVFVTIDE0MDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX01BQ19TVEFUVVMgMTQwNAogI2RlZmluZSBBVURJVF9NQUNfQ09ORklHX0NIQU5HRSAxNDA1CiAjZGVmaW5lIEFVRElUX01BQ19VTkxCTF9BTExPVyAxNDA2CiAjZGVmaW5lIEFVRElUX01BQ19DSVBTT1Y0X0FERCAxNDA3Ci0jZGVmaW5lIEFVRElUX01BQ19DSVBTT1Y0X0RFTCAxNDA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9NQUNfQ0lQU09WNF9ERUwgMTQwOAogI2RlZmluZSBBVURJVF9NQUNfTUFQX0FERCAxNDA5CiAjZGVmaW5lIEFVRElUX01BQ19NQVBfREVMIDE0MTAKICNkZWZpbmUgQVVESVRfTUFDX0lQU0VDX0FERFNBIDE0MTEKLSNkZWZpbmUgQVVESVRfTUFDX0lQU0VDX0RFTFNBIDE0MTIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX01BQ19JUFNFQ19ERUxTQSAxNDEyCiAjZGVmaW5lIEFVRElUX01BQ19JUFNFQ19BRERTUEQgMTQxMwogI2RlZmluZSBBVURJVF9NQUNfSVBTRUNfREVMU1BEIDE0MTQKICNkZWZpbmUgQVVESVRfTUFDX0lQU0VDX0VWRU5UIDE0MTUKLSNkZWZpbmUgQVVESVRfTUFDX1VOTEJMX1NUQ0FERCAxNDE2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9NQUNfVU5MQkxfU1RDQUREIDE0MTYKICNkZWZpbmUgQVVESVRfTUFDX1VOTEJMX1NUQ0RFTCAxNDE3CiAjZGVmaW5lIEFVRElUX0ZJUlNUX0tFUk5fQU5PTV9NU0cgMTcwMAogI2RlZmluZSBBVURJVF9MQVNUX0tFUk5fQU5PTV9NU0cgMTc5OQotI2RlZmluZSBBVURJVF9BTk9NX1BST01JU0NVT1VTIDE3MDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0FOT01fUFJPTUlTQ1VPVVMgMTcwMAogI2RlZmluZSBBVURJVF9BTk9NX0FCRU5EIDE3MDEKICNkZWZpbmUgQVVESVRfQU5PTV9MSU5LIDE3MDIKICNkZWZpbmUgQVVESVRfSU5URUdSSVRZX0RBVEEgMTgwMAotI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfTUVUQURBVEEgMTgwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX01FVEFEQVRBIDE4MDEKICNkZWZpbmUgQVVESVRfSU5URUdSSVRZX1NUQVRVUyAxODAyCiAjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9IQVNIIDE4MDMKICNkZWZpbmUgQVVESVRfSU5URUdSSVRZX1BDUiAxODA0Ci0jZGVmaW5lIEFVRElUX0lOVEVHUklUWV9SVUxFIDE4MDUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9SVUxFIDE4MDUKICNkZWZpbmUgQVVESVRfS0VSTkVMIDIwMDAKICNkZWZpbmUgQVVESVRfRklMVEVSX1VTRVIgMHgwMAogI2RlZmluZSBBVURJVF9GSUxURVJfVEFTSyAweDAxCi0jZGVmaW5lIEFVRElUX0ZJTFRFUl9FTlRSWSAweDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9GSUxURVJfRU5UUlkgMHgwMgogI2RlZmluZSBBVURJVF9GSUxURVJfV0FUQ0ggMHgwMwogI2RlZmluZSBBVURJVF9GSUxURVJfRVhJVCAweDA0CiAjZGVmaW5lIEFVRElUX0ZJTFRFUl9UWVBFIDB4MDUKLSNkZWZpbmUgQVVESVRfTlJfRklMVEVSUyA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9OUl9GSUxURVJTIDYKICNkZWZpbmUgQVVESVRfRklMVEVSX1BSRVBFTkQgMHgxMAogI2RlZmluZSBBVURJVF9ORVZFUiAwCiAjZGVmaW5lIEFVRElUX1BPU1NJQkxFIDEKLSNkZWZpbmUgQVVESVRfQUxXQVlTIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0FMV0FZUyAyCiAjZGVmaW5lIEFVRElUX01BWF9GSUVMRFMgNjQKICNkZWZpbmUgQVVESVRfTUFYX0tFWV9MRU4gMjU2CiAjZGVmaW5lIEFVRElUX0JJVE1BU0tfU0laRSA2NAotI2RlZmluZSBBVURJVF9XT1JEKG5yKSAoKF9fdTMyKSgobnIpLzMyKSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX1dPUkQobnIpICgoX191MzIpKChucikvMzIpKQogI2RlZmluZSBBVURJVF9CSVQobnIpICgxIDw8ICgobnIpIC0gQVVESVRfV09SRChucikqMzIpKQogI2RlZmluZSBBVURJVF9TWVNDQUxMX0NMQVNTRVMgMTYKICNkZWZpbmUgQVVESVRfQ0xBU1NfRElSX1dSSVRFIDAKLSNkZWZpbmUgQVVESVRfQ0xBU1NfRElSX1dSSVRFXzMyIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0NMQVNTX0RJUl9XUklURV8zMiAxCiAjZGVmaW5lIEFVRElUX0NMQVNTX0NIQVRUUiAyCiAjZGVmaW5lIEFVRElUX0NMQVNTX0NIQVRUUl8zMiAzCiAjZGVmaW5lIEFVRElUX0NMQVNTX1JFQUQgNAotI2RlZmluZSBBVURJVF9DTEFTU19SRUFEXzMyIDUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0NMQVNTX1JFQURfMzIgNQogI2RlZmluZSBBVURJVF9DTEFTU19XUklURSA2CiAjZGVmaW5lIEFVRElUX0NMQVNTX1dSSVRFXzMyIDcKICNkZWZpbmUgQVVESVRfQ0xBU1NfU0lHTkFMIDgKLSNkZWZpbmUgQVVESVRfQ0xBU1NfU0lHTkFMXzMyIDkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0NMQVNTX1NJR05BTF8zMiA5CiAjZGVmaW5lIEFVRElUX1VOVVNFRF9CSVRTIDB4MDdGRkZDMDAKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9VSURfVE9fT0JKX1VJRCAxCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfR0lEX1RPX09CSl9HSUQgMgotI2RlZmluZSBBVURJVF9DT01QQVJFX0VVSURfVE9fT0JKX1VJRCAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9DT01QQVJFX0VVSURfVE9fT0JKX1VJRCAzCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfRUdJRF9UT19PQkpfR0lEIDQKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9BVUlEX1RPX09CSl9VSUQgNQogI2RlZmluZSBBVURJVF9DT01QQVJFX1NVSURfVE9fT0JKX1VJRCA2Ci0jZGVmaW5lIEFVRElUX0NPTVBBUkVfU0dJRF9UT19PQkpfR0lEIDcKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0NPTVBBUkVfU0dJRF9UT19PQkpfR0lEIDcKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9GU1VJRF9UT19PQkpfVUlEIDgKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9GU0dJRF9UT19PQkpfR0lEIDkKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9VSURfVE9fQVVJRCAxMAotI2RlZmluZSBBVURJVF9DT01QQVJFX1VJRF9UT19FVUlEIDExCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9DT01QQVJFX1VJRF9UT19FVUlEIDExCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfVUlEX1RPX0ZTVUlEIDEyCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfVUlEX1RPX1NVSUQgMTMKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9BVUlEX1RPX0ZTVUlEIDE0Ci0jZGVmaW5lIEFVRElUX0NPTVBBUkVfQVVJRF9UT19TVUlEIDE1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9DT01QQVJFX0FVSURfVE9fU1VJRCAxNQogI2RlZmluZSBBVURJVF9DT01QQVJFX0FVSURfVE9fRVVJRCAxNgogI2RlZmluZSBBVURJVF9DT01QQVJFX0VVSURfVE9fU1VJRCAxNwogI2RlZmluZSBBVURJVF9DT01QQVJFX0VVSURfVE9fRlNVSUQgMTgKLSNkZWZpbmUgQVVESVRfQ09NUEFSRV9TVUlEX1RPX0ZTVUlEIDE5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9DT01QQVJFX1NVSURfVE9fRlNVSUQgMTkKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9HSURfVE9fRUdJRCAyMAogI2RlZmluZSBBVURJVF9DT01QQVJFX0dJRF9UT19GU0dJRCAyMQogI2RlZmluZSBBVURJVF9DT01QQVJFX0dJRF9UT19TR0lEIDIyCi0jZGVmaW5lIEFVRElUX0NPTVBBUkVfRUdJRF9UT19GU0dJRCAyMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfQ09NUEFSRV9FR0lEX1RPX0ZTR0lEIDIzCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfRUdJRF9UT19TR0lEIDI0CiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfU0dJRF9UT19GU0dJRCAyNQogI2RlZmluZSBBVURJVF9NQVhfRklFTERfQ09NUEFSRSBBVURJVF9DT01QQVJFX1NHSURfVE9fRlNHSUQKLSNkZWZpbmUgQVVESVRfUElEIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX1BJRCAwCiAjZGVmaW5lIEFVRElUX1VJRCAxCiAjZGVmaW5lIEFVRElUX0VVSUQgMgogI2RlZmluZSBBVURJVF9TVUlEIDMKLSNkZWZpbmUgQVVESVRfRlNVSUQgNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfRlNVSUQgNAogI2RlZmluZSBBVURJVF9HSUQgNQogI2RlZmluZSBBVURJVF9FR0lEIDYKICNkZWZpbmUgQVVESVRfU0dJRCA3Ci0jZGVmaW5lIEFVRElUX0ZTR0lEIDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0ZTR0lEIDgKICNkZWZpbmUgQVVESVRfTE9HSU5VSUQgOQogI2RlZmluZSBBVURJVF9QRVJTIDEwCiAjZGVmaW5lIEFVRElUX0FSQ0ggMTEKLSNkZWZpbmUgQVVESVRfTVNHVFlQRSAxMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfTVNHVFlQRSAxMgogI2RlZmluZSBBVURJVF9TVUJKX1VTRVIgMTMKICNkZWZpbmUgQVVESVRfU1VCSl9ST0xFIDE0CiAjZGVmaW5lIEFVRElUX1NVQkpfVFlQRSAxNQotI2RlZmluZSBBVURJVF9TVUJKX1NFTiAxNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfU1VCSl9TRU4gMTYKICNkZWZpbmUgQVVESVRfU1VCSl9DTFIgMTcKICNkZWZpbmUgQVVESVRfUFBJRCAxOAogI2RlZmluZSBBVURJVF9PQkpfVVNFUiAxOQotI2RlZmluZSBBVURJVF9PQkpfUk9MRSAyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfT0JKX1JPTEUgMjAKICNkZWZpbmUgQVVESVRfT0JKX1RZUEUgMjEKICNkZWZpbmUgQVVESVRfT0JKX0xFVl9MT1cgMjIKICNkZWZpbmUgQVVESVRfT0JKX0xFVl9ISUdIIDIzCi0jZGVmaW5lIEFVRElUX0xPR0lOVUlEX1NFVCAyNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfTE9HSU5VSURfU0VUIDI0CiAjZGVmaW5lIEFVRElUX0RFVk1BSk9SIDEwMAogI2RlZmluZSBBVURJVF9ERVZNSU5PUiAxMDEKICNkZWZpbmUgQVVESVRfSU5PREUgMTAyCi0jZGVmaW5lIEFVRElUX0VYSVQgMTAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9FWElUIDEwMwogI2RlZmluZSBBVURJVF9TVUNDRVNTIDEwNAogI2RlZmluZSBBVURJVF9XQVRDSCAxMDUKICNkZWZpbmUgQVVESVRfUEVSTSAxMDYKLSNkZWZpbmUgQVVESVRfRElSIDEwNwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfRElSIDEwNwogI2RlZmluZSBBVURJVF9GSUxFVFlQRSAxMDgKICNkZWZpbmUgQVVESVRfT0JKX1VJRCAxMDkKICNkZWZpbmUgQVVESVRfT0JKX0dJRCAxMTAKLSNkZWZpbmUgQVVESVRfRklFTERfQ09NUEFSRSAxMTEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0ZJRUxEX0NPTVBBUkUgMTExCiAjZGVmaW5lIEFVRElUX0FSRzAgMjAwCiAjZGVmaW5lIEFVRElUX0FSRzEgKEFVRElUX0FSRzArMSkKICNkZWZpbmUgQVVESVRfQVJHMiAoQVVESVRfQVJHMCsyKQotI2RlZmluZSBBVURJVF9BUkczIChBVURJVF9BUkcwKzMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9BUkczIChBVURJVF9BUkcwKzMpCiAjZGVmaW5lIEFVRElUX0ZJTFRFUktFWSAyMTAKICNkZWZpbmUgQVVESVRfTkVHQVRFIDB4ODAwMDAwMDAKICNkZWZpbmUgQVVESVRfQklUX01BU0sgMHgwODAwMDAwMAotI2RlZmluZSBBVURJVF9MRVNTX1RIQU4gMHgxMDAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfTEVTU19USEFOIDB4MTAwMDAwMDAKICNkZWZpbmUgQVVESVRfR1JFQVRFUl9USEFOIDB4MjAwMDAwMDAKICNkZWZpbmUgQVVESVRfTk9UX0VRVUFMIDB4MzAwMDAwMDAKICNkZWZpbmUgQVVESVRfRVFVQUwgMHg0MDAwMDAwMAotI2RlZmluZSBBVURJVF9CSVRfVEVTVCAoQVVESVRfQklUX01BU0t8QVVESVRfRVFVQUwpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9CSVRfVEVTVCAoQVVESVRfQklUX01BU0t8QVVESVRfRVFVQUwpCiAjZGVmaW5lIEFVRElUX0xFU1NfVEhBTl9PUl9FUVVBTCAoQVVESVRfTEVTU19USEFOfEFVRElUX0VRVUFMKQogI2RlZmluZSBBVURJVF9HUkVBVEVSX1RIQU5fT1JfRVFVQUwgKEFVRElUX0dSRUFURVJfVEhBTnxBVURJVF9FUVVBTCkKICNkZWZpbmUgQVVESVRfT1BFUkFUT1JTIChBVURJVF9FUVVBTHxBVURJVF9OT1RfRVFVQUx8QVVESVRfQklUX01BU0spCi1lbnVtIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKICBBdWRpdF9lcXVhbCwKICBBdWRpdF9ub3RfZXF1YWwsCiAgQXVkaXRfYml0bWFzaywKLSBBdWRpdF9iaXR0ZXN0LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBBdWRpdF9iaXR0ZXN0LAogIEF1ZGl0X2x0LAogIEF1ZGl0X2d0LAogIEF1ZGl0X2xlLAotIEF1ZGl0X2dlLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBBdWRpdF9nZSwKICBBdWRpdF9iYWQKIH07CiAjZGVmaW5lIEFVRElUX1NUQVRVU19FTkFCTEVEIDB4MDAwMQotI2RlZmluZSBBVURJVF9TVEFUVVNfRkFJTFVSRSAweDAwMDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX1NUQVRVU19GQUlMVVJFIDB4MDAwMgogI2RlZmluZSBBVURJVF9TVEFUVVNfUElEIDB4MDAwNAogI2RlZmluZSBBVURJVF9TVEFUVVNfUkFURV9MSU1JVCAweDAwMDgKICNkZWZpbmUgQVVESVRfU1RBVFVTX0JBQ0tMT0dfTElNSVQgMHgwMDEwCi0jZGVmaW5lIEFVRElUX1NUQVRVU19CQUNLTE9HX1dBSVRfVElNRSAweDAwMjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX1NUQVRVU19CQUNLTE9HX1dBSVRfVElNRSAweDAwMjAKICNkZWZpbmUgQVVESVRfVkVSU0lPTl9CQUNLTE9HX0xJTUlUIDEKICNkZWZpbmUgQVVESVRfVkVSU0lPTl9CQUNLTE9HX1dBSVRfVElNRSAyCiAjZGVmaW5lIEFVRElUX1ZFUlNJT05fTEFURVNUIEFVRElUX1ZFUlNJT05fQkFDS0xPR19XQUlUX1RJTUUKLSNkZWZpbmUgQVVESVRfRkFJTF9TSUxFTlQgMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfRkFJTF9TSUxFTlQgMAogI2RlZmluZSBBVURJVF9GQUlMX1BSSU5USyAxCiAjZGVmaW5lIEFVRElUX0ZBSUxfUEFOSUMgMgorI2RlZmluZSBfX0FVRElUX0FSQ0hfQ09OVkVOVElPTl9NQVNLIDB4MzAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fQVVESVRfQVJDSF9DT05WRU5USU9OX01JUFM2NF9OMzIgMHgyMDAwMDAwMAogI2RlZmluZSBfX0FVRElUX0FSQ0hfNjRCSVQgMHg4MDAwMDAwMAogI2RlZmluZSBfX0FVRElUX0FSQ0hfTEUgMHg0MDAwMDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQVJDSF9BTFBIQSAoRU1fQUxQSEF8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0FSQ0hfQVJNIChFTV9BUk18X19BVURJVF9BUkNIX0xFKQogI2RlZmluZSBBVURJVF9BUkNIX0FSTUVCIChFTV9BUk0pCiAjZGVmaW5lIEFVRElUX0FSQ0hfQ1JJUyAoRU1fQ1JJU3xfX0FVRElUX0FSQ0hfTEUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BUkNIX0ZSViAoRU1fRlJWKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQVJDSF9JMzg2IChFTV8zODZ8X19BVURJVF9BUkNIX0xFKQogI2RlZmluZSBBVURJVF9BUkNIX0lBNjQgKEVNX0lBXzY0fF9fQVVESVRfQVJDSF82NEJJVHxfX0FVRElUX0FSQ0hfTEUpCiAjZGVmaW5lIEFVRElUX0FSQ0hfTTMyUiAoRU1fTTMyUikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0FSQ0hfTTY4SyAoRU1fNjhLKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQVJDSF9NSVBTIChFTV9NSVBTKQogI2RlZmluZSBBVURJVF9BUkNIX01JUFNFTCAoRU1fTUlQU3xfX0FVRElUX0FSQ0hfTEUpCiAjZGVmaW5lIEFVRElUX0FSQ0hfTUlQUzY0IChFTV9NSVBTfF9fQVVESVRfQVJDSF82NEJJVCkKKyNkZWZpbmUgQVVESVRfQVJDSF9NSVBTNjROMzIgKEVNX01JUFN8X19BVURJVF9BUkNIXzY0QklUfCAgX19BVURJVF9BUkNIX0NPTlZFTlRJT05fTUlQUzY0X04zMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0FSQ0hfTUlQU0VMNjQgKEVNX01JUFN8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKKyNkZWZpbmUgQVVESVRfQVJDSF9NSVBTRUw2NE4zMiAoRU1fTUlQU3xfX0FVRElUX0FSQ0hfNjRCSVR8X19BVURJVF9BUkNIX0xFfCAgX19BVURJVF9BUkNIX0NPTlZFTlRJT05fTUlQUzY0X04zMikKICNkZWZpbmUgQVVESVRfQVJDSF9PUEVOUklTQyAoRU1fT1BFTlJJU0MpCiAjZGVmaW5lIEFVRElUX0FSQ0hfUEFSSVNDIChFTV9QQVJJU0MpCi0jZGVmaW5lIEFVRElUX0FSQ0hfUEFSSVNDNjQgKEVNX1BBUklTQ3xfX0FVRElUX0FSQ0hfNjRCSVQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9BUkNIX1BBUklTQzY0IChFTV9QQVJJU0N8X19BVURJVF9BUkNIXzY0QklUKQogI2RlZmluZSBBVURJVF9BUkNIX1BQQyAoRU1fUFBDKQogI2RlZmluZSBBVURJVF9BUkNIX1BQQzY0IChFTV9QUEM2NHxfX0FVRElUX0FSQ0hfNjRCSVQpCiAjZGVmaW5lIEFVRElUX0FSQ0hfUzM5MCAoRU1fUzM5MCkKLSNkZWZpbmUgQVVESVRfQVJDSF9TMzkwWCAoRU1fUzM5MHxfX0FVRElUX0FSQ0hfNjRCSVQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9BUkNIX1MzOTBYIChFTV9TMzkwfF9fQVVESVRfQVJDSF82NEJJVCkKICNkZWZpbmUgQVVESVRfQVJDSF9TSCAoRU1fU0gpCiAjZGVmaW5lIEFVRElUX0FSQ0hfU0hFTCAoRU1fU0h8X19BVURJVF9BUkNIX0xFKQogI2RlZmluZSBBVURJVF9BUkNIX1NINjQgKEVNX1NIfF9fQVVESVRfQVJDSF82NEJJVCkKLSNkZWZpbmUgQVVESVRfQVJDSF9TSEVMNjQgKEVNX1NIfF9fQVVESVRfQVJDSF82NEJJVHxfX0FVRElUX0FSQ0hfTEUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9BUkNIX1NIRUw2NCAoRU1fU0h8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKICNkZWZpbmUgQVVESVRfQVJDSF9TUEFSQyAoRU1fU1BBUkMpCiAjZGVmaW5lIEFVRElUX0FSQ0hfU1BBUkM2NCAoRU1fU1BBUkNWOXxfX0FVRElUX0FSQ0hfNjRCSVQpCiAjZGVmaW5lIEFVRElUX0FSQ0hfWDg2XzY0IChFTV9YODZfNjR8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKLSNkZWZpbmUgQVVESVRfUEVSTV9FWEVDIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX1BFUk1fRVhFQyAxCiAjZGVmaW5lIEFVRElUX1BFUk1fV1JJVEUgMgogI2RlZmluZSBBVURJVF9QRVJNX1JFQUQgNAogI2RlZmluZSBBVURJVF9QRVJNX0FUVFIgOAotI2RlZmluZSBBVURJVF9NRVNTQUdFX1RFWFRfTUFYIDg1NjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX01FU1NBR0VfVEVYVF9NQVggODU2MAorZW51bSBhdWRpdF9ubGdycHMgeworIEFVRElUX05MR1JQX05PTkUsCisgQVVESVRfTkxHUlBfUkVBRExPRywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19BVURJVF9OTEdSUF9NQVgKK307CisjZGVmaW5lIEFVRElUX05MR1JQX01BWCAoX19BVURJVF9OTEdSUF9NQVggLSAxKQogc3RydWN0IGF1ZGl0X3N0YXR1cyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1hc2s7CiAgX191MzIgZW5hYmxlZDsKICBfX3UzMiBmYWlsdXJlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJhdGVfbGltaXQ7CiAgX191MzIgYmFja2xvZ19saW1pdDsKICBfX3UzMiBsb3N0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBiYWNrbG9nOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB2ZXJzaW9uOwogIF9fdTMyIGJhY2tsb2dfd2FpdF90aW1lOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgYXVkaXRfZmVhdHVyZXMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfRkVBVFVSRV9WRVJTSU9OIDEKICBfX3UzMiB2ZXJzOwogIF9fdTMyIG1hc2s7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZlYXR1cmVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsb2NrOwogfTsKICNkZWZpbmUgQVVESVRfRkVBVFVSRV9PTkxZX1VOU0VUX0xPR0lOVUlEIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0ZFQVRVUkVfTE9HSU5VSURfSU1NVVRBQkxFIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0xBU1RfRkVBVFVSRSBBVURJVF9GRUFUVVJFX0xPR0lOVUlEX0lNTVVUQUJMRQogI2RlZmluZSBhdWRpdF9mZWF0dXJlX3ZhbGlkKHgpICgoeCkgPj0gMCAmJiAoeCkgPD0gQVVESVRfTEFTVF9GRUFUVVJFKQogI2RlZmluZSBBVURJVF9GRUFUVVJFX1RPX01BU0soeCkgKDEgPDwgKCh4KSAmIDMxKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgYXVkaXRfdHR5X3N0YXR1cyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGVuYWJsZWQ7CiAgX191MzIgbG9nX3Bhc3N3ZDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9VSURfVU5TRVQgKHVuc2lnbmVkIGludCktMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBhdWRpdF9ydWxlX2RhdGEgewogIF9fdTMyIGZsYWdzOwogIF9fdTMyIGFjdGlvbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmllbGRfY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1hc2tbQVVESVRfQklUTUFTS19TSVpFXTsKICBfX3UzMiBmaWVsZHNbQVVESVRfTUFYX0ZJRUxEU107CiAgX191MzIgdmFsdWVzW0FVRElUX01BWF9GSUVMRFNdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmaWVsZGZsYWdzW0FVRElUX01BWF9GSUVMRFNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBidWZsZW47CiAgY2hhciBidWZbMF07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBhdWRpdF9ydWxlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmxhZ3M7CiAgX191MzIgYWN0aW9uOwogIF9fdTMyIGZpZWxkX2NvdW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXNrW0FVRElUX0JJVE1BU0tfU0laRV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZpZWxkc1tBVURJVF9NQVhfRklFTERTXTsKICBfX3UzMiB2YWx1ZXNbQVVESVRfTUFYX0ZJRUxEU107CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvYmluZGVyLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2JpbmRlci5oCmluZGV4IDAyMTAxYWIuLjdhNWNlZTUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvYmluZGVyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9iaW5kZXIuaApAQCAtMTgyLDkgKzE4MiwxMiBAQAogIEJDX0VOVEVSX0xPT1BFUiA9IF9JTygnYycsIDEyKSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQkNfRVhJVF9MT09QRVIgPSBfSU8oJ2MnLCAxMyksCi0gQkNfUkVRVUVTVF9ERUFUSF9OT1RJRklDQVRJT04gPSBfSU9XKCdjJywgMTQsIHN0cnVjdCBiaW5kZXJfaGFuZGxlX2Nvb2tpZSksCi0gQkNfQ0xFQVJfREVBVEhfTk9USUZJQ0FUSU9OID0gX0lPVygnYycsIDE1LCBzdHJ1Y3QgYmluZGVyX2hhbmRsZV9jb29raWUpLAotIEJDX0RFQURfQklOREVSX0RPTkUgPSBfSU9XKCdjJywgMTYsIGJpbmRlcl91aW50cHRyX3QpLAorIEJDX1JFUVVFU1RfREVBVEhfTk9USUZJQ0FUSU9OID0gX0lPVygnYycsIDE0LAorIHN0cnVjdCBiaW5kZXJfaGFuZGxlX2Nvb2tpZSksCisgQkNfQ0xFQVJfREVBVEhfTk9USUZJQ0FUSU9OID0gX0lPVygnYycsIDE1LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgYmluZGVyX2hhbmRsZV9jb29raWUpLAorIEJDX0RFQURfQklOREVSX0RPTkUgPSBfSU9XKCdjJywgMTYsIGJpbmRlcl91aW50cHRyX3QpLAogfTsKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvYnRyZnMuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvYnRyZnMuaAppbmRleCAxMWY5NTBmLi5kYjRlZjJhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2J0cmZzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9idHJmcy5oCkBAIC0zNyw0MDggKzM3LDQyMyBAQAogI2RlZmluZSBCVFJGU19GU0lEX1NJWkUgMTYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUUkZTX1VVSURfU0laRSAxNgorI2RlZmluZSBCVFJGU19VVUlEX1VOUEFSU0VEX1NJWkUgMzcKICNkZWZpbmUgQlRSRlNfUUdST1VQX0lOSEVSSVRfU0VUX0xJTUlUUyAoMVVMTCA8PCAwKQogc3RydWN0IGJ0cmZzX3Fncm91cF9saW1pdCB7Ci0gX191NjQgZmxhZ3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGZsYWdzOwogIF9fdTY0IG1heF9yZmVyOwogIF9fdTY0IG1heF9leGNsOwogIF9fdTY0IHJzdl9yZmVyOwotIF9fdTY0IHJzdl9leGNsOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCByc3ZfZXhjbDsKIH07CiBzdHJ1Y3QgYnRyZnNfcWdyb3VwX2luaGVyaXQgewogIF9fdTY0IGZsYWdzOwotIF9fdTY0IG51bV9xZ3JvdXBzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBudW1fcWdyb3VwczsKICBfX3U2NCBudW1fcmVmX2NvcGllczsKICBfX3U2NCBudW1fZXhjbF9jb3BpZXM7CiAgc3RydWN0IGJ0cmZzX3Fncm91cF9saW1pdCBsaW07Ci0gX191NjQgcWdyb3Vwc1swXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgcWdyb3Vwc1swXTsKIH07CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfcWdyb3VwX2xpbWl0X2FyZ3MgewogIF9fdTY0IHFncm91cGlkOwotIHN0cnVjdCBidHJmc19xZ3JvdXBfbGltaXQgbGltOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgYnRyZnNfcWdyb3VwX2xpbWl0IGxpbTsKIH07CiAjZGVmaW5lIEJUUkZTX1NVQlZPTF9OQU1FX01BWCA0MDM5CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfdm9sX2FyZ3NfdjIgewotIF9fczY0IGZkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3M2NCBmZDsKICBfX3U2NCB0cmFuc2lkOwogIF9fdTY0IGZsYWdzOwogIHVuaW9uIHsKLSBzdHJ1Y3QgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgewogIF9fdTY0IHNpemU7CiAgc3RydWN0IGJ0cmZzX3Fncm91cF9pbmhlcml0IF9fdXNlciAqcWdyb3VwX2luaGVyaXQ7CiAgfTsKLSBfX3U2NCB1bnVzZWRbNF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHVudXNlZFs0XTsKICB9OwogIGNoYXIgbmFtZVtCVFJGU19TVUJWT0xfTkFNRV9NQVggKyAxXTsKIH07Ci1zdHJ1Y3QgYnRyZnNfc2NydWJfcHJvZ3Jlc3MgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBidHJmc19zY3J1Yl9wcm9ncmVzcyB7CiAgX191NjQgZGF0YV9leHRlbnRzX3NjcnViYmVkOwogIF9fdTY0IHRyZWVfZXh0ZW50c19zY3J1YmJlZDsKICBfX3U2NCBkYXRhX2J5dGVzX3NjcnViYmVkOwotIF9fdTY0IHRyZWVfYnl0ZXNfc2NydWJiZWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHRyZWVfYnl0ZXNfc2NydWJiZWQ7CiAgX191NjQgcmVhZF9lcnJvcnM7CiAgX191NjQgY3N1bV9lcnJvcnM7CiAgX191NjQgdmVyaWZ5X2Vycm9yczsKLSBfX3U2NCBub19jc3VtOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBub19jc3VtOwogIF9fdTY0IGNzdW1fZGlzY2FyZHM7CiAgX191NjQgc3VwZXJfZXJyb3JzOwogIF9fdTY0IG1hbGxvY19lcnJvcnM7Ci0gX191NjQgdW5jb3JyZWN0YWJsZV9lcnJvcnM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHVuY29ycmVjdGFibGVfZXJyb3JzOwogIF9fdTY0IGNvcnJlY3RlZF9lcnJvcnM7CiAgX191NjQgbGFzdF9waHlzaWNhbDsKICBfX3U2NCB1bnZlcmlmaWVkX2Vycm9yczsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgQlRSRlNfU0NSVUJfUkVBRE9OTFkgMQogc3RydWN0IGJ0cmZzX2lvY3RsX3NjcnViX2FyZ3MgewogIF9fdTY0IGRldmlkOwotIF9fdTY0IHN0YXJ0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBzdGFydDsKICBfX3U2NCBlbmQ7CiAgX191NjQgZmxhZ3M7CiAgc3RydWN0IGJ0cmZzX3NjcnViX3Byb2dyZXNzIHByb2dyZXNzOwotIF9fdTY0IHVudXNlZFsoMTAyNC0zMi1zaXplb2Yoc3RydWN0IGJ0cmZzX3NjcnViX3Byb2dyZXNzKSkvOF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHVudXNlZFsoMTAyNC0zMi1zaXplb2Yoc3RydWN0IGJ0cmZzX3NjcnViX3Byb2dyZXNzKSkvOF07CiB9OwogI2RlZmluZSBCVFJGU19JT0NUTF9ERVZfUkVQTEFDRV9DT05UX1JFQURJTkdfRlJPTV9TUkNERVZfTU9ERV9BTFdBWVMgMAogI2RlZmluZSBCVFJGU19JT0NUTF9ERVZfUkVQTEFDRV9DT05UX1JFQURJTkdfRlJPTV9TUkNERVZfTU9ERV9BVk9JRCAxCi1zdHJ1Y3QgYnRyZnNfaW9jdGxfZGV2X3JlcGxhY2Vfc3RhcnRfcGFyYW1zIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgYnRyZnNfaW9jdGxfZGV2X3JlcGxhY2Vfc3RhcnRfcGFyYW1zIHsKICBfX3U2NCBzcmNkZXZpZDsKICBfX3U2NCBjb250X3JlYWRpbmdfZnJvbV9zcmNkZXZfbW9kZTsKICBfX3U4IHNyY2Rldl9uYW1lW0JUUkZTX0RFVklDRV9QQVRIX05BTUVfTUFYICsgMV07Ci0gX191OCB0Z3RkZXZfbmFtZVtCVFJGU19ERVZJQ0VfUEFUSF9OQU1FX01BWCArIDFdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHRndGRldl9uYW1lW0JUUkZTX0RFVklDRV9QQVRIX05BTUVfTUFYICsgMV07CiB9OwogI2RlZmluZSBCVFJGU19JT0NUTF9ERVZfUkVQTEFDRV9TVEFURV9ORVZFUl9TVEFSVEVEIDAKICNkZWZpbmUgQlRSRlNfSU9DVExfREVWX1JFUExBQ0VfU1RBVEVfU1RBUlRFRCAxCi0jZGVmaW5lIEJUUkZTX0lPQ1RMX0RFVl9SRVBMQUNFX1NUQVRFX0ZJTklTSEVEIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJUUkZTX0lPQ1RMX0RFVl9SRVBMQUNFX1NUQVRFX0ZJTklTSEVEIDIKICNkZWZpbmUgQlRSRlNfSU9DVExfREVWX1JFUExBQ0VfU1RBVEVfQ0FOQ0VMRUQgMwogI2RlZmluZSBCVFJGU19JT0NUTF9ERVZfUkVQTEFDRV9TVEFURV9TVVNQRU5ERUQgNAogc3RydWN0IGJ0cmZzX2lvY3RsX2Rldl9yZXBsYWNlX3N0YXR1c19wYXJhbXMgewotIF9fdTY0IHJlcGxhY2Vfc3RhdGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHJlcGxhY2Vfc3RhdGU7CiAgX191NjQgcHJvZ3Jlc3NfMTAwMDsKICBfX3U2NCB0aW1lX3N0YXJ0ZWQ7CiAgX191NjQgdGltZV9zdG9wcGVkOwotIF9fdTY0IG51bV93cml0ZV9lcnJvcnM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IG51bV93cml0ZV9lcnJvcnM7CiAgX191NjQgbnVtX3VuY29ycmVjdGFibGVfcmVhZF9lcnJvcnM7CiB9OwogI2RlZmluZSBCVFJGU19JT0NUTF9ERVZfUkVQTEFDRV9DTURfU1RBUlQgMAotI2RlZmluZSBCVFJGU19JT0NUTF9ERVZfUkVQTEFDRV9DTURfU1RBVFVTIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJUUkZTX0lPQ1RMX0RFVl9SRVBMQUNFX0NNRF9TVEFUVVMgMQogI2RlZmluZSBCVFJGU19JT0NUTF9ERVZfUkVQTEFDRV9DTURfQ0FOQ0VMIDIKICNkZWZpbmUgQlRSRlNfSU9DVExfREVWX1JFUExBQ0VfUkVTVUxUX05PX0VSUk9SIDAKICNkZWZpbmUgQlRSRlNfSU9DVExfREVWX1JFUExBQ0VfUkVTVUxUX05PVF9TVEFSVEVEIDEKLSNkZWZpbmUgQlRSRlNfSU9DVExfREVWX1JFUExBQ0VfUkVTVUxUX0FMUkVBRFlfU1RBUlRFRCAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCVFJGU19JT0NUTF9ERVZfUkVQTEFDRV9SRVNVTFRfQUxSRUFEWV9TVEFSVEVEIDIKIHN0cnVjdCBidHJmc19pb2N0bF9kZXZfcmVwbGFjZV9hcmdzIHsKICBfX3U2NCBjbWQ7CiAgX191NjQgcmVzdWx0OwotIHVuaW9uIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5pb24gewogIHN0cnVjdCBidHJmc19pb2N0bF9kZXZfcmVwbGFjZV9zdGFydF9wYXJhbXMgc3RhcnQ7CiAgc3RydWN0IGJ0cmZzX2lvY3RsX2Rldl9yZXBsYWNlX3N0YXR1c19wYXJhbXMgc3RhdHVzOwogIH07Ci0gX191NjQgc3BhcmVbNjRdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBzcGFyZVs2NF07CiB9Owogc3RydWN0IGJ0cmZzX2lvY3RsX2Rldl9pbmZvX2FyZ3MgewogIF9fdTY0IGRldmlkOwotIF9fdTggdXVpZFtCVFJGU19VVUlEX1NJWkVdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHV1aWRbQlRSRlNfVVVJRF9TSVpFXTsKICBfX3U2NCBieXRlc191c2VkOwogIF9fdTY0IHRvdGFsX2J5dGVzOwogIF9fdTY0IHVudXNlZFszNzldOwotIF9fdTggcGF0aFtCVFJGU19ERVZJQ0VfUEFUSF9OQU1FX01BWF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcGF0aFtCVFJGU19ERVZJQ0VfUEFUSF9OQU1FX01BWF07CiB9Owogc3RydWN0IGJ0cmZzX2lvY3RsX2ZzX2luZm9fYXJncyB7CiAgX191NjQgbWF4X2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBudW1fZGV2aWNlczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBmc2lkW0JUUkZTX0ZTSURfU0laRV07Ci0gX191NjQgcmVzZXJ2ZWRbMTI0XTsKLX07Ci1zdHJ1Y3QgYnRyZnNfaW9jdGxfZmVhdHVyZV9mbGFncyB7CisgX191MzIgbm9kZXNpemU7CisgX191MzIgc2VjdG9yc2l6ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgY2xvbmVfYWxpZ25tZW50OworIF9fdTMyIHJlc2VydmVkMzI7CisgX191NjQgcmVzZXJ2ZWRbMTIyXTsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGJ0cmZzX2lvY3RsX2ZlYXR1cmVfZmxhZ3MgewogIF9fdTY0IGNvbXBhdF9mbGFnczsKICBfX3U2NCBjb21wYXRfcm9fZmxhZ3M7CiAgX191NjQgaW5jb21wYXRfZmxhZ3M7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIEJUUkZTX0JBTEFOQ0VfQ1RMX1BBVVNFIDEKICNkZWZpbmUgQlRSRlNfQkFMQU5DRV9DVExfQ0FOQ0VMIDIKIHN0cnVjdCBidHJmc19iYWxhbmNlX2FyZ3MgewotIF9fdTY0IHByb2ZpbGVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBwcm9maWxlczsKICBfX3U2NCB1c2FnZTsKICBfX3U2NCBkZXZpZDsKICBfX3U2NCBwc3RhcnQ7Ci0gX191NjQgcGVuZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgcGVuZDsKICBfX3U2NCB2c3RhcnQ7CiAgX191NjQgdmVuZDsKICBfX3U2NCB0YXJnZXQ7Ci0gX191NjQgZmxhZ3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fdTY0IHVudXNlZFs4XTsKKyBfX3U2NCBmbGFnczsKKyBfX3U2NCBsaW1pdDsKKyBfX3U2NCB1bnVzZWRbN107CiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGJ0cmZzX2JhbGFuY2VfcHJvZ3Jlc3MgewogIF9fdTY0IGV4cGVjdGVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBjb25zaWRlcmVkOwogIF9fdTY0IGNvbXBsZXRlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBCVFJGU19CQUxBTkNFX1NUQVRFX1JVTk5JTkcgKDFVTEwgPDwgMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUUkZTX0JBTEFOQ0VfU1RBVEVfUEFVU0VfUkVRICgxVUxMIDw8IDEpCiAjZGVmaW5lIEJUUkZTX0JBTEFOQ0VfU1RBVEVfQ0FOQ0VMX1JFUSAoMVVMTCA8PCAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBidHJmc19pb2N0bF9iYWxhbmNlX2FyZ3MgewogIF9fdTY0IGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBzdGF0ZTsKICBzdHJ1Y3QgYnRyZnNfYmFsYW5jZV9hcmdzIGRhdGE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBidHJmc19iYWxhbmNlX2FyZ3MgbWV0YTsKICBzdHJ1Y3QgYnRyZnNfYmFsYW5jZV9hcmdzIHN5czsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGJ0cmZzX2JhbGFuY2VfcHJvZ3Jlc3Mgc3RhdDsKICBfX3U2NCB1bnVzZWRbNzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIEJUUkZTX0lOT19MT09LVVBfUEFUSF9NQVggNDA4MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBidHJmc19pb2N0bF9pbm9fbG9va3VwX2FyZ3MgewogIF9fdTY0IHRyZWVpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgb2JqZWN0aWQ7CiAgY2hhciBuYW1lW0JUUkZTX0lOT19MT09LVVBfUEFUSF9NQVhdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfc2VhcmNoX2tleSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHRyZWVfaWQ7CiAgX191NjQgbWluX29iamVjdGlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBtYXhfb2JqZWN0aWQ7CiAgX191NjQgbWluX29mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbWF4X29mZnNldDsKICBfX3U2NCBtaW5fdHJhbnNpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbWF4X3RyYW5zaWQ7CiAgX191MzIgbWluX3R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF90eXBlOwogIF9fdTMyIG5yX2l0ZW1zOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB1bnVzZWQ7CiAgX191NjQgdW51c2VkMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgdW51c2VkMjsKICBfX3U2NCB1bnVzZWQzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCB1bnVzZWQ0OwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgYnRyZnNfaW9jdGxfc2VhcmNoX2hlYWRlciB7CiAgX191NjQgdHJhbnNpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgb2JqZWN0aWQ7CiAgX191NjQgb2Zmc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIF9fdTMyIGxlbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBCVFJGU19TRUFSQ0hfQVJHU19CVUZTSVpFICg0MDk2IC0gc2l6ZW9mKHN0cnVjdCBidHJmc19pb2N0bF9zZWFyY2hfa2V5KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgYnRyZnNfaW9jdGxfc2VhcmNoX2FyZ3MgewogIHN0cnVjdCBidHJmc19pb2N0bF9zZWFyY2hfa2V5IGtleTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBidWZbQlRSRlNfU0VBUkNIX0FSR1NfQlVGU0laRV07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBidHJmc19pb2N0bF9zZWFyY2hfYXJnc192MiB7Cisgc3RydWN0IGJ0cmZzX2lvY3RsX3NlYXJjaF9rZXkga2V5OworIF9fdTY0IGJ1Zl9zaXplOworIF9fdTY0IGJ1ZlswXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGJ0cmZzX2lvY3RsX2Nsb25lX3JhbmdlX2FyZ3MgewogIF9fczY0IHNyY19mZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgc3JjX29mZnNldCwgc3JjX2xlbmd0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZGVzdF9vZmZzZXQ7CiB9OwogI2RlZmluZSBCVFJGU19ERUZSQUdfUkFOR0VfQ09NUFJFU1MgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlRSRlNfREVGUkFHX1JBTkdFX1NUQVJUX0lPIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUUkZTX1NBTUVfREFUQV9ESUZGRVJTIDEKIHN0cnVjdCBidHJmc19pb2N0bF9zYW1lX2V4dGVudF9pbmZvIHsKICBfX3M2NCBmZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbG9naWNhbF9vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGJ5dGVzX2RlZHVwZWQ7CiAgX19zMzIgc3RhdHVzOwogIF9fdTMyIHJlc2VydmVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGJ0cmZzX2lvY3RsX3NhbWVfYXJncyB7CiAgX191NjQgbG9naWNhbF9vZmZzZXQ7CiAgX191NjQgbGVuZ3RoOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBkZXN0X2NvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiByZXNlcnZlZDE7CiAgX191MzIgcmVzZXJ2ZWQyOwogIHN0cnVjdCBidHJmc19pb2N0bF9zYW1lX2V4dGVudF9pbmZvIGluZm9bMF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgYnRyZnNfaW9jdGxfc3BhY2VfaW5mbyB7CiAgX191NjQgZmxhZ3M7CiAgX191NjQgdG90YWxfYnl0ZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHVzZWRfYnl0ZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBidHJmc19pb2N0bF9zcGFjZV9hcmdzIHsKICBfX3U2NCBzcGFjZV9zbG90czsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgdG90YWxfc3BhY2VzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgYnRyZnNfaW9jdGxfc3BhY2VfaW5mbyBzcGFjZXNbMF07CiB9Owogc3RydWN0IGJ0cmZzX2RhdGFfY29udGFpbmVyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYnl0ZXNfbGVmdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYnl0ZXNfbWlzc2luZzsKICBfX3UzMiBlbGVtX2NudDsKICBfX3UzMiBlbGVtX21pc3NlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgdmFsWzBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfaW5vX3BhdGhfYXJncyB7CiAgX191NjQgaW51bTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVzZXJ2ZWRbNF07CiAgX191NjQgZnNwYXRoOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgYnRyZnNfaW9jdGxfbG9naWNhbF9pbm9fYXJncyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGxvZ2ljYWw7CiAgX191NjQgc2l6ZTsKICBfX3U2NCByZXNlcnZlZFs0XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgaW5vZGVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIGJ0cmZzX2Rldl9zdGF0X3ZhbHVlcyB7CiAgQlRSRlNfREVWX1NUQVRfV1JJVEVfRVJSUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQlRSRlNfREVWX1NUQVRfUkVBRF9FUlJTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCVFJGU19ERVZfU1RBVF9GTFVTSF9FUlJTLAogIEJUUkZTX0RFVl9TVEFUX0NPUlJVUFRJT05fRVJSUywKICBCVFJGU19ERVZfU1RBVF9HRU5FUkFUSU9OX0VSUlMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJUUkZTX0RFVl9TVEFUX1ZBTFVFU19NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBCVFJGU19ERVZfU1RBVFNfUkVTRVQgKDFVTEwgPDwgMCkKIHN0cnVjdCBidHJmc19pb2N0bF9nZXRfZGV2X3N0YXRzIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZGV2aWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG5yX2l0ZW1zOwogIF9fdTY0IGZsYWdzOwogIF9fdTY0IHZhbHVlc1tCVFJGU19ERVZfU1RBVF9WQUxVRVNfTUFYXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgdW51c2VkWzEyOCAtIDIgLSBCVFJGU19ERVZfU1RBVF9WQUxVRVNfTUFYXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBCVFJGU19RVU9UQV9DVExfRU5BQkxFIDEKICNkZWZpbmUgQlRSRlNfUVVPVEFfQ1RMX0RJU0FCTEUgMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlRSRlNfUVVPVEFfQ1RMX1JFU0NBTl9fTk9UVVNFRCAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGJ0cmZzX2lvY3RsX3F1b3RhX2N0bF9hcmdzIHsKICBfX3U2NCBjbWQ7CiAgX191NjQgc3RhdHVzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGJ0cmZzX2lvY3RsX3F1b3RhX3Jlc2Nhbl9hcmdzIHsKICBfX3U2NCBmbGFnczsKICBfX3U2NCBwcm9ncmVzczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVzZXJ2ZWRbNl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBidHJmc19pb2N0bF9xZ3JvdXBfYXNzaWduX2FyZ3MgewogIF9fdTY0IGFzc2lnbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgc3JjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBkc3Q7CiB9Owogc3RydWN0IGJ0cmZzX2lvY3RsX3Fncm91cF9jcmVhdGVfYXJncyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGNyZWF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcWdyb3VwaWQ7CiB9Owogc3RydWN0IGJ0cmZzX2lvY3RsX3RpbWVzcGVjIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgc2VjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBuc2VjOwogfTsKIHN0cnVjdCBidHJmc19pb2N0bF9yZWNlaXZlZF9zdWJ2b2xfYXJncyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgdXVpZFtCVFJGU19VVUlEX1NJWkVdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBzdHJhbnNpZDsKICBfX3U2NCBydHJhbnNpZDsKICBzdHJ1Y3QgYnRyZnNfaW9jdGxfdGltZXNwZWMgc3RpbWU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBidHJmc19pb2N0bF90aW1lc3BlYyBydGltZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZmxhZ3M7CiAgX191NjQgcmVzZXJ2ZWRbMTZdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUUkZTX1NFTkRfRkxBR19OT19GSUxFX0RBVEEgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVFJGU19TRU5EX0ZMQUdfT01JVF9TVFJFQU1fSEVBREVSIDB4MgogI2RlZmluZSBCVFJGU19TRU5EX0ZMQUdfT01JVF9FTkRfQ01EIDB4NAogI2RlZmluZSBCVFJGU19TRU5EX0ZMQUdfTUFTSyAgIChCVFJGU19TRU5EX0ZMQUdfTk9fRklMRV9EQVRBIHwgICBCVFJGU19TRU5EX0ZMQUdfT01JVF9TVFJFQU1fSEVBREVSIHwgICBCVFJGU19TRU5EX0ZMQUdfT01JVF9FTkRfQ01EKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBidHJmc19pb2N0bF9zZW5kX2FyZ3MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3M2NCBzZW5kX2ZkOwogIF9fdTY0IGNsb25lX3NvdXJjZXNfY291bnQ7CiAgX191NjQgX191c2VyICpjbG9uZV9zb3VyY2VzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBwYXJlbnRfcm9vdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZmxhZ3M7CiAgX191NjQgcmVzZXJ2ZWRbNF07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gYnRyZnNfZXJyX2NvZGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBub3R1c2VkLAogIEJUUkZTX0VSUk9SX0RFVl9SQUlEMV9NSU5fTk9UX01FVCwKICBCVFJGU19FUlJPUl9ERVZfUkFJRDEwX01JTl9OT1RfTUVULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCVFJGU19FUlJPUl9ERVZfUkFJRDVfTUlOX05PVF9NRVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJUUkZTX0VSUk9SX0RFVl9SQUlENl9NSU5fTk9UX01FVCwKICBCVFJGU19FUlJPUl9ERVZfVEdUX1JFUExBQ0UsCiAgQlRSRlNfRVJST1JfREVWX01JU1NJTkdfTk9UX0ZPVU5ELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCVFJGU19FUlJPUl9ERVZfT05MWV9XUklUQUJMRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQlRSRlNfRVJST1JfREVWX0VYQ0xfUlVOX0lOX1BST0dSRVNTCiB9OwogI2RlZmluZSBCVFJGU19JT0NfU05BUF9DUkVBVEUgX0lPVyhCVFJGU19JT0NUTF9NQUdJQywgMSwgICBzdHJ1Y3QgYnRyZnNfaW9jdGxfdm9sX2FyZ3MpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVFJGU19JT0NfREVGUkFHIF9JT1coQlRSRlNfSU9DVExfTUFHSUMsIDIsICAgc3RydWN0IGJ0cmZzX2lvY3RsX3ZvbF9hcmdzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlRSRlNfSU9DX1JFU0laRSBfSU9XKEJUUkZTX0lPQ1RMX01BR0lDLCAzLCAgIHN0cnVjdCBidHJmc19pb2N0bF92b2xfYXJncykKICNkZWZpbmUgQlRSRlNfSU9DX1NDQU5fREVWIF9JT1coQlRSRlNfSU9DVExfTUFHSUMsIDQsICAgc3RydWN0IGJ0cmZzX2lvY3RsX3ZvbF9hcmdzKQogI2RlZmluZSBCVFJGU19JT0NfVFJBTlNfU1RBUlQgX0lPKEJUUkZTX0lPQ1RMX01BR0lDLCA2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlRSRlNfSU9DX1RSQU5TX0VORCBfSU8oQlRSRlNfSU9DVExfTUFHSUMsIDcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVFJGU19JT0NfU1lOQyBfSU8oQlRSRlNfSU9DVExfTUFHSUMsIDgpCiAjZGVmaW5lIEJUUkZTX0lPQ19DTE9ORSBfSU9XKEJUUkZTX0lPQ1RMX01BR0lDLCA5LCBpbnQpCiAjZGVmaW5lIEJUUkZTX0lPQ19BRERfREVWIF9JT1coQlRSRlNfSU9DVExfTUFHSUMsIDEwLCAgIHN0cnVjdCBidHJmc19pb2N0bF92b2xfYXJncykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUUkZTX0lPQ19STV9ERVYgX0lPVyhCVFJGU19JT0NUTF9NQUdJQywgMTEsICAgc3RydWN0IGJ0cmZzX2lvY3RsX3ZvbF9hcmdzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlRSRlNfSU9DX0JBTEFOQ0UgX0lPVyhCVFJGU19JT0NUTF9NQUdJQywgMTIsICAgc3RydWN0IGJ0cmZzX2lvY3RsX3ZvbF9hcmdzKQogI2RlZmluZSBCVFJGU19JT0NfQ0xPTkVfUkFOR0UgX0lPVyhCVFJGU19JT0NUTF9NQUdJQywgMTMsICAgc3RydWN0IGJ0cmZzX2lvY3RsX2Nsb25lX3JhbmdlX2FyZ3MpCiAjZGVmaW5lIEJUUkZTX0lPQ19TVUJWT0xfQ1JFQVRFIF9JT1coQlRSRlNfSU9DVExfTUFHSUMsIDE0LCAgIHN0cnVjdCBidHJmc19pb2N0bF92b2xfYXJncykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUUkZTX0lPQ19TTkFQX0RFU1RST1kgX0lPVyhCVFJGU19JT0NUTF9NQUdJQywgMTUsICAgc3RydWN0IGJ0cmZzX2lvY3RsX3ZvbF9hcmdzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlRSRlNfSU9DX0RFRlJBR19SQU5HRSBfSU9XKEJUUkZTX0lPQ1RMX01BR0lDLCAxNiwgICBzdHJ1Y3QgYnRyZnNfaW9jdGxfZGVmcmFnX3JhbmdlX2FyZ3MpCiAjZGVmaW5lIEJUUkZTX0lPQ19UUkVFX1NFQVJDSCBfSU9XUihCVFJGU19JT0NUTF9NQUdJQywgMTcsICAgc3RydWN0IGJ0cmZzX2lvY3RsX3NlYXJjaF9hcmdzKQorI2RlZmluZSBCVFJGU19JT0NfVFJFRV9TRUFSQ0hfVjIgX0lPV1IoQlRSRlNfSU9DVExfTUFHSUMsIDE3LCAgIHN0cnVjdCBidHJmc19pb2N0bF9zZWFyY2hfYXJnc192MikKICNkZWZpbmUgQlRSRlNfSU9DX0lOT19MT09LVVAgX0lPV1IoQlRSRlNfSU9DVExfTUFHSUMsIDE4LCAgIHN0cnVjdCBidHJmc19pb2N0bF9pbm9fbG9va3VwX2FyZ3MpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVFJGU19JT0NfREVGQVVMVF9TVUJWT0wgX0lPVyhCVFJGU19JT0NUTF9NQUdJQywgMTksIF9fdTY0KQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYW4uaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2FuLmgKaW5kZXggOTU0OWJiZi4uZGY3NzE1YiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYW4uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Nhbi5oCkBAIC0xNiw4ICsxNiw4IEBACiAgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIENBTl9ICi0jZGVmaW5lIENBTl9ICisjaWZuZGVmIF9VQVBJX0NBTl9ICisjZGVmaW5lIF9VQVBJX0NBTl9ICiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Nhbi9iY20uaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2FuL2JjbS5oCmluZGV4IGZjYTEyMzIuLjcyYzM2YmYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2FuL2JjbS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2FuL2JjbS5oCkBAIC0xNiw4ICsxNiw4IEBACiAgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIENBTl9CQ01fSAotI2RlZmluZSBDQU5fQkNNX0gKKyNpZm5kZWYgX1VBUElfQ0FOX0JDTV9ICisjZGVmaW5lIF9VQVBJX0NBTl9CQ01fSAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY2FuLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYW4vZXJyb3IuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2FuL2Vycm9yLmgKaW5kZXggMjQzNmFjZS4uNDZhZjc1OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYW4vZXJyb3IuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Nhbi9lcnJvci5oCkBAIC0xNiw4ICsxNiw4IEBACiAgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIENBTl9FUlJPUl9ICi0jZGVmaW5lIENBTl9FUlJPUl9ICisjaWZuZGVmIF9VQVBJX0NBTl9FUlJPUl9ICisjZGVmaW5lIF9VQVBJX0NBTl9FUlJPUl9ICiAjZGVmaW5lIENBTl9FUlJfRExDIDgKICNkZWZpbmUgQ0FOX0VSUl9UWF9USU1FT1VUIDB4MDAwMDAwMDFVCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYW4vZ3cuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2FuL2d3LmgKaW5kZXggZGQ4MGQ0OC4uY2FmYzFlYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYW4vZ3cuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Nhbi9ndy5oCkBAIC0xNiw4ICsxNiw4IEBACiAgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIENBTl9HV19ICi0jZGVmaW5lIENBTl9HV19ICisjaWZuZGVmIF9VQVBJX0NBTl9HV19ICisjZGVmaW5lIF9VQVBJX0NBTl9HV19ICiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jYW4uaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Nhbi9uZXRsaW5rLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Nhbi9uZXRsaW5rLmgKaW5kZXggZGY4YTE5Yy4uNjU1YWFhMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYW4vbmV0bGluay5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2FuL25ldGxpbmsuaApAQCAtMTYsOCArMTYsOCBAQAogICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBDQU5fTkVUTElOS19ICi0jZGVmaW5lIENBTl9ORVRMSU5LX0gKKyNpZm5kZWYgX1VBUElfQ0FOX05FVExJTktfSAorI2RlZmluZSBfVUFQSV9DQU5fTkVUTElOS19ICiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIHN0cnVjdCBjYW5fYml0dGltaW5nIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC03NywzMCArNzcsMzQgQEAKICNkZWZpbmUgQ0FOX0NUUkxNT0RFX09ORV9TSE9UIDB4MDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENBTl9DVFJMTU9ERV9CRVJSX1JFUE9SVElORyAweDEwCisjZGVmaW5lIENBTl9DVFJMTU9ERV9GRCAweDIwCiBzdHJ1Y3QgY2FuX2RldmljZV9zdGF0cyB7CiAgX191MzIgYnVzX2Vycm9yOwotIF9fdTMyIGVycm9yX3dhcm5pbmc7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGVycm9yX3dhcm5pbmc7CiAgX191MzIgZXJyb3JfcGFzc2l2ZTsKICBfX3UzMiBidXNfb2ZmOwogIF9fdTMyIGFyYml0cmF0aW9uX2xvc3Q7Ci0gX191MzIgcmVzdGFydHM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHJlc3RhcnRzOwogfTsKIGVudW0gewogIElGTEFfQ0FOX1VOU1BFQywKLSBJRkxBX0NBTl9CSVRUSU1JTkcsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQ0FOX0JJVFRJTUlORywKICBJRkxBX0NBTl9CSVRUSU1JTkdfQ09OU1QsCiAgSUZMQV9DQU5fQ0xPQ0ssCiAgSUZMQV9DQU5fU1RBVEUsCi0gSUZMQV9DQU5fQ1RSTE1PREUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQ0FOX0NUUkxNT0RFLAogIElGTEFfQ0FOX1JFU1RBUlRfTVMsCiAgSUZMQV9DQU5fUkVTVEFSVCwKICBJRkxBX0NBTl9CRVJSX0NPVU5URVIsCi0gX19JRkxBX0NBTl9NQVgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9DQU5fREFUQV9CSVRUSU1JTkcsCisgSUZMQV9DQU5fREFUQV9CSVRUSU1JTkdfQ09OU1QsCisgX19JRkxBX0NBTl9NQVgKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRkxBX0NBTl9NQVggKF9fSUZMQV9DQU5fTUFYIC0gMSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYW4vcmF3LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Nhbi9yYXcuaAppbmRleCA5ZDQwYzkwLi43N2NjZTliIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Nhbi9yYXcuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Nhbi9yYXcuaApAQCAtMTYsOCArMTYsOCBAQAogICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBDQU5fUkFXX0gKLSNkZWZpbmUgQ0FOX1JBV19ICisjaWZuZGVmIF9VQVBJX0NBTl9SQVdfSAorI2RlZmluZSBfVUFQSV9DQU5fUkFXX0gKICNpbmNsdWRlIDxsaW51eC9jYW4uaD4KICNkZWZpbmUgU09MX0NBTl9SQVcgKFNPTF9DQU5fQkFTRSArIENBTl9SQVcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYXBhYmlsaXR5LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2NhcGFiaWxpdHkuaAppbmRleCBjMGFiNGQ5Li5lMDEzMDQwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2NhcGFiaWxpdHkuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2NhcGFiaWxpdHkuaApAQCAtMTEzLDkgKzExMywxMSBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0FQX1dBS0VfQUxBUk0gMzUKICNkZWZpbmUgQ0FQX0JMT0NLX1NVU1BFTkQgMzYKLSNkZWZpbmUgQ0FQX0xBU1RfQ0FQIENBUF9CTE9DS19TVVNQRU5ECi0jZGVmaW5lIGNhcF92YWxpZCh4KSAoKHgpID49IDAgJiYgKHgpIDw9IENBUF9MQVNUX0NBUCkKKyNkZWZpbmUgQ0FQX0FVRElUX1JFQUQgMzcKKyNkZWZpbmUgQ0FQX0xBU1RfQ0FQIENBUF9BVURJVF9SRUFECiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBjYXBfdmFsaWQoeCkgKCh4KSA+PSAwICYmICh4KSA8PSBDQVBfTEFTVF9DQVApCiAjZGVmaW5lIENBUF9UT19JTkRFWCh4KSAoKHgpID4+IDUpCiAjZGVmaW5lIENBUF9UT19NQVNLKHgpICgxIDw8ICgoeCkgJiAzMSkpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2V0aHRvb2wuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZXRodG9vbC5oCmluZGV4IGI2ZjEzMjcuLmI4MDhmMGQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZXRodG9vbC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZXRodG9vbC5oCkBAIC0zMjMsNDggKzMyMyw1OCBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByaW5nX2luZGV4WzBdOwogfTsKLXN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWMgewotIF9fdTMyIGZsb3dfdHlwZTsKK3N0cnVjdCBldGh0b29sX3J4ZmggeworIF9fdTMyIGNtZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcnNzX2NvbnRleHQ7CisgX191MzIgaW5kaXJfc2l6ZTsKKyBfX3UzMiBrZXlfc2l6ZTsKKyBfX3UzMiByc3ZkWzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiByc3NfY29uZmlnWzBdOworfTsKKyNkZWZpbmUgRVRIX1JYRkhfSU5ESVJfTk9fQ0hBTkdFIDB4ZmZmZmZmZmYKK3N0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmbG93X3R5cGU7CiAgdW5pb24gewogIHN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjIHRjcF9pcDRfc3BlYzsKICBzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYyB1ZHBfaXA0X3NwZWM7Ci0gc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMgc2N0cF9pcDRfc3BlYzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMgc2N0cF9pcDRfc3BlYzsKICBzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYyBhaF9pcDRfc3BlYzsKICBzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYyBlc3BfaXA0X3NwZWM7CiAgc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMgdXNyX2lwNF9zcGVjOwotIHN0cnVjdCBldGhoZHIgZXRoZXJfc3BlYzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGV0aGhkciBldGhlcl9zcGVjOwogIF9fdTggaGRhdGFbNzJdOwogIH0gaF91LCBtX3U7CiAgX191MTYgdmxhbl90YWc7Ci0gX191MTYgdmxhbl90YWdfbWFzazsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgdmxhbl90YWdfbWFzazsKICBfX3U2NCBkYXRhOwogIF9fdTY0IGRhdGFfbWFzazsKICBfX3MzMiBhY3Rpb247Ci0jZGVmaW5lIEVUSFRPT0xfUlhOVFVQTEVfQUNUSU9OX0RST1AgKC0xKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIVE9PTF9SWE5UVVBMRV9BQ1RJT05fRFJPUCAoLTEpCiAjZGVmaW5lIEVUSFRPT0xfUlhOVFVQTEVfQUNUSU9OX0NMRUFSICgtMikKIH07CiBzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGUgewotIF9fdTMyIGNtZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgY21kOwogIHN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWMgZnM7CiB9OwogI2RlZmluZSBFVEhUT09MX0ZMQVNIX01BWF9GSUxFTkFNRSAxMjgKLWVudW0gZXRodG9vbF9mbGFzaF9vcF90eXBlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIGV0aHRvb2xfZmxhc2hfb3BfdHlwZSB7CiAgRVRIVE9PTF9GTEFTSF9BTExfUkVHSU9OUyA9IDAsCiB9Owogc3RydWN0IGV0aHRvb2xfZmxhc2ggewotIF9fdTMyIGNtZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgY21kOwogIF9fdTMyIHJlZ2lvbjsKICBjaGFyIGRhdGFbRVRIVE9PTF9GTEFTSF9NQVhfRklMRU5BTUVdOwogfTsKLSNkZWZpbmUgRVRIX0ZXX0RVTVBfRElTQUJMRSAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGV0aHRvb2xfZHVtcCB7CiAgX191MzIgY21kOwpAQCAtMzc0LDMxMCArMzg0LDMxMyBAQAogIF9fdTMyIGxlbjsKICBfX3U4IGRhdGFbMF07CiB9Owotc3RydWN0IGV0aHRvb2xfZ2V0X2ZlYXR1cmVzX2Jsb2NrIHsKKyNkZWZpbmUgRVRIX0ZXX0RVTVBfRElTQUJMRSAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGV0aHRvb2xfZ2V0X2ZlYXR1cmVzX2Jsb2NrIHsKICBfX3UzMiBhdmFpbGFibGU7CiAgX191MzIgcmVxdWVzdGVkOwogIF9fdTMyIGFjdGl2ZTsKLSBfX3UzMiBuZXZlcl9jaGFuZ2VkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBuZXZlcl9jaGFuZ2VkOwogfTsKIHN0cnVjdCBldGh0b29sX2dmZWF0dXJlcyB7CiAgX191MzIgY21kOwotIF9fdTMyIHNpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHNpemU7CiAgc3RydWN0IGV0aHRvb2xfZ2V0X2ZlYXR1cmVzX2Jsb2NrIGZlYXR1cmVzWzBdOwogfTsKIHN0cnVjdCBldGh0b29sX3NldF9mZWF0dXJlc19ibG9jayB7Ci0gX191MzIgdmFsaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHZhbGlkOwogIF9fdTMyIHJlcXVlc3RlZDsKIH07CiBzdHJ1Y3QgZXRodG9vbF9zZmVhdHVyZXMgewotIF9fdTMyIGNtZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgY21kOwogIF9fdTMyIHNpemU7CiAgc3RydWN0IGV0aHRvb2xfc2V0X2ZlYXR1cmVzX2Jsb2NrIGZlYXR1cmVzWzBdOwogfTsKLXN0cnVjdCBldGh0b29sX3RzX2luZm8gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBldGh0b29sX3RzX2luZm8gewogIF9fdTMyIGNtZDsKICBfX3UzMiBzb190aW1lc3RhbXBpbmc7CiAgX19zMzIgcGhjX2luZGV4OwotIF9fdTMyIHR4X3R5cGVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0eF90eXBlczsKICBfX3UzMiB0eF9yZXNlcnZlZFszXTsKICBfX3UzMiByeF9maWx0ZXJzOwogIF9fdTMyIHJ4X3Jlc2VydmVkWzNdOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogZW51bSBldGh0b29sX3NmZWF0dXJlc19yZXR2YWxfYml0cyB7CiAgRVRIVE9PTF9GX1VOU1VQUE9SVEVEX19CSVQsCiAgRVRIVE9PTF9GX1dJU0hfX0JJVCwKLSBFVEhUT09MX0ZfQ09NUEFUX19CSVQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEVUSFRPT0xfRl9DT01QQVRfX0JJVCwKIH07CiAjZGVmaW5lIEVUSFRPT0xfRl9VTlNVUFBPUlRFRCAoMSA8PCBFVEhUT09MX0ZfVU5TVVBQT1JURURfX0JJVCkKICNkZWZpbmUgRVRIVE9PTF9GX1dJU0ggKDEgPDwgRVRIVE9PTF9GX1dJU0hfX0JJVCkKLSNkZWZpbmUgRVRIVE9PTF9GX0NPTVBBVCAoMSA8PCBFVEhUT09MX0ZfQ09NUEFUX19CSVQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhUT09MX0ZfQ09NUEFUICgxIDw8IEVUSFRPT0xfRl9DT01QQVRfX0JJVCkKICNkZWZpbmUgRVRIVE9PTF9HU0VUIDB4MDAwMDAwMDEKICNkZWZpbmUgRVRIVE9PTF9TU0VUIDB4MDAwMDAwMDIKICNkZWZpbmUgRVRIVE9PTF9HRFJWSU5GTyAweDAwMDAwMDAzCi0jZGVmaW5lIEVUSFRPT0xfR1JFR1MgMHgwMDAwMDAwNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIVE9PTF9HUkVHUyAweDAwMDAwMDA0CiAjZGVmaW5lIEVUSFRPT0xfR1dPTCAweDAwMDAwMDA1CiAjZGVmaW5lIEVUSFRPT0xfU1dPTCAweDAwMDAwMDA2CiAjZGVmaW5lIEVUSFRPT0xfR01TR0xWTCAweDAwMDAwMDA3Ci0jZGVmaW5lIEVUSFRPT0xfU01TR0xWTCAweDAwMDAwMDA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhUT09MX1NNU0dMVkwgMHgwMDAwMDAwOAogI2RlZmluZSBFVEhUT09MX05XQVlfUlNUIDB4MDAwMDAwMDkKICNkZWZpbmUgRVRIVE9PTF9HTElOSyAweDAwMDAwMDBhCiAjZGVmaW5lIEVUSFRPT0xfR0VFUFJPTSAweDAwMDAwMDBiCi0jZGVmaW5lIEVUSFRPT0xfU0VFUFJPTSAweDAwMDAwMDBjCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhUT09MX1NFRVBST00gMHgwMDAwMDAwYwogI2RlZmluZSBFVEhUT09MX0dDT0FMRVNDRSAweDAwMDAwMDBlCiAjZGVmaW5lIEVUSFRPT0xfU0NPQUxFU0NFIDB4MDAwMDAwMGYKICNkZWZpbmUgRVRIVE9PTF9HUklOR1BBUkFNIDB4MDAwMDAwMTAKLSNkZWZpbmUgRVRIVE9PTF9TUklOR1BBUkFNIDB4MDAwMDAwMTEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSFRPT0xfU1JJTkdQQVJBTSAweDAwMDAwMDExCiAjZGVmaW5lIEVUSFRPT0xfR1BBVVNFUEFSQU0gMHgwMDAwMDAxMgogI2RlZmluZSBFVEhUT09MX1NQQVVTRVBBUkFNIDB4MDAwMDAwMTMKICNkZWZpbmUgRVRIVE9PTF9HUlhDU1VNIDB4MDAwMDAwMTQKLSNkZWZpbmUgRVRIVE9PTF9TUlhDU1VNIDB4MDAwMDAwMTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSFRPT0xfU1JYQ1NVTSAweDAwMDAwMDE1CiAjZGVmaW5lIEVUSFRPT0xfR1RYQ1NVTSAweDAwMDAwMDE2CiAjZGVmaW5lIEVUSFRPT0xfU1RYQ1NVTSAweDAwMDAwMDE3CiAjZGVmaW5lIEVUSFRPT0xfR1NHIDB4MDAwMDAwMTgKLSNkZWZpbmUgRVRIVE9PTF9TU0cgMHgwMDAwMDAxOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIVE9PTF9TU0cgMHgwMDAwMDAxOQogI2RlZmluZSBFVEhUT09MX1RFU1QgMHgwMDAwMDAxYQogI2RlZmluZSBFVEhUT09MX0dTVFJJTkdTIDB4MDAwMDAwMWIKICNkZWZpbmUgRVRIVE9PTF9QSFlTX0lEIDB4MDAwMDAwMWMKLSNkZWZpbmUgRVRIVE9PTF9HU1RBVFMgMHgwMDAwMDAxZAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIVE9PTF9HU1RBVFMgMHgwMDAwMDAxZAogI2RlZmluZSBFVEhUT09MX0dUU08gMHgwMDAwMDAxZQogI2RlZmluZSBFVEhUT09MX1NUU08gMHgwMDAwMDAxZgogI2RlZmluZSBFVEhUT09MX0dQRVJNQUREUiAweDAwMDAwMDIwCi0jZGVmaW5lIEVUSFRPT0xfR1VGTyAweDAwMDAwMDIxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhUT09MX0dVRk8gMHgwMDAwMDAyMQogI2RlZmluZSBFVEhUT09MX1NVRk8gMHgwMDAwMDAyMgogI2RlZmluZSBFVEhUT09MX0dHU08gMHgwMDAwMDAyMwogI2RlZmluZSBFVEhUT09MX1NHU08gMHgwMDAwMDAyNAotI2RlZmluZSBFVEhUT09MX0dGTEFHUyAweDAwMDAwMDI1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhUT09MX0dGTEFHUyAweDAwMDAwMDI1CiAjZGVmaW5lIEVUSFRPT0xfU0ZMQUdTIDB4MDAwMDAwMjYKICNkZWZpbmUgRVRIVE9PTF9HUEZMQUdTIDB4MDAwMDAwMjcKICNkZWZpbmUgRVRIVE9PTF9TUEZMQUdTIDB4MDAwMDAwMjgKLSNkZWZpbmUgRVRIVE9PTF9HUlhGSCAweDAwMDAwMDI5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhUT09MX0dSWEZIIDB4MDAwMDAwMjkKICNkZWZpbmUgRVRIVE9PTF9TUlhGSCAweDAwMDAwMDJhCiAjZGVmaW5lIEVUSFRPT0xfR0dSTyAweDAwMDAwMDJiCiAjZGVmaW5lIEVUSFRPT0xfU0dSTyAweDAwMDAwMDJjCi0jZGVmaW5lIEVUSFRPT0xfR1JYUklOR1MgMHgwMDAwMDAyZAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIVE9PTF9HUlhSSU5HUyAweDAwMDAwMDJkCiAjZGVmaW5lIEVUSFRPT0xfR1JYQ0xTUkxDTlQgMHgwMDAwMDAyZQogI2RlZmluZSBFVEhUT09MX0dSWENMU1JVTEUgMHgwMDAwMDAyZgogI2RlZmluZSBFVEhUT09MX0dSWENMU1JMQUxMIDB4MDAwMDAwMzAKLSNkZWZpbmUgRVRIVE9PTF9TUlhDTFNSTERFTCAweDAwMDAwMDMxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhUT09MX1NSWENMU1JMREVMIDB4MDAwMDAwMzEKICNkZWZpbmUgRVRIVE9PTF9TUlhDTFNSTElOUyAweDAwMDAwMDMyCiAjZGVmaW5lIEVUSFRPT0xfRkxBU0hERVYgMHgwMDAwMDAzMwogI2RlZmluZSBFVEhUT09MX1JFU0VUIDB4MDAwMDAwMzQKLSNkZWZpbmUgRVRIVE9PTF9TUlhOVFVQTEUgMHgwMDAwMDAzNQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIVE9PTF9TUlhOVFVQTEUgMHgwMDAwMDAzNQogI2RlZmluZSBFVEhUT09MX0dSWE5UVVBMRSAweDAwMDAwMDM2CiAjZGVmaW5lIEVUSFRPT0xfR1NTRVRfSU5GTyAweDAwMDAwMDM3CiAjZGVmaW5lIEVUSFRPT0xfR1JYRkhJTkRJUiAweDAwMDAwMDM4Ci0jZGVmaW5lIEVUSFRPT0xfU1JYRkhJTkRJUiAweDAwMDAwMDM5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhUT09MX1NSWEZISU5ESVIgMHgwMDAwMDAzOQogI2RlZmluZSBFVEhUT09MX0dGRUFUVVJFUyAweDAwMDAwMDNhCiAjZGVmaW5lIEVUSFRPT0xfU0ZFQVRVUkVTIDB4MDAwMDAwM2IKICNkZWZpbmUgRVRIVE9PTF9HQ0hBTk5FTFMgMHgwMDAwMDAzYwotI2RlZmluZSBFVEhUT09MX1NDSEFOTkVMUyAweDAwMDAwMDNkCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhUT09MX1NDSEFOTkVMUyAweDAwMDAwMDNkCiAjZGVmaW5lIEVUSFRPT0xfU0VUX0RVTVAgMHgwMDAwMDAzZQogI2RlZmluZSBFVEhUT09MX0dFVF9EVU1QX0ZMQUcgMHgwMDAwMDAzZgogI2RlZmluZSBFVEhUT09MX0dFVF9EVU1QX0RBVEEgMHgwMDAwMDA0MAotI2RlZmluZSBFVEhUT09MX0dFVF9UU19JTkZPIDB4MDAwMDAwNDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSFRPT0xfR0VUX1RTX0lORk8gMHgwMDAwMDA0MQogI2RlZmluZSBFVEhUT09MX0dNT0RVTEVJTkZPIDB4MDAwMDAwNDIKICNkZWZpbmUgRVRIVE9PTF9HTU9EVUxFRUVQUk9NIDB4MDAwMDAwNDMKICNkZWZpbmUgRVRIVE9PTF9HRUVFIDB4MDAwMDAwNDQKLSNkZWZpbmUgRVRIVE9PTF9TRUVFIDB4MDAwMDAwNDUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSFRPT0xfU0VFRSAweDAwMDAwMDQ1CisjZGVmaW5lIEVUSFRPT0xfR1JTU0ggMHgwMDAwMDA0NgorI2RlZmluZSBFVEhUT09MX1NSU1NIIDB4MDAwMDAwNDcKICNkZWZpbmUgU1BBUkNfRVRIX0dTRVQgRVRIVE9PTF9HU0VUCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTUEFSQ19FVEhfU1NFVCBFVEhUT09MX1NTRVQKICNkZWZpbmUgU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiAoMSA8PCAwKQogI2RlZmluZSBTVVBQT1JURURfMTBiYXNlVF9GdWxsICgxIDw8IDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiAoMSA8PCAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgKDEgPDwgMykKICNkZWZpbmUgU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmICgxIDw8IDQpCiAjZGVmaW5lIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCAoMSA8PCA1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1VQUE9SVEVEX0F1dG9uZWcgKDEgPDwgNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNVUFBPUlRFRF9UUCAoMSA8PCA3KQogI2RlZmluZSBTVVBQT1JURURfQVVJICgxIDw8IDgpCiAjZGVmaW5lIFNVUFBPUlRFRF9NSUkgKDEgPDwgOSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNVUFBPUlRFRF9GSUJSRSAoMSA8PCAxMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNVUFBPUlRFRF9CTkMgKDEgPDwgMTEpCiAjZGVmaW5lIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgKDEgPDwgMTIpCiAjZGVmaW5lIFNVUFBPUlRFRF9QYXVzZSAoMSA8PCAxMykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNVUFBPUlRFRF9Bc3ltX1BhdXNlICgxIDw8IDE0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsICgxIDw8IDE1KQogI2RlZmluZSBTVVBQT1JURURfQmFja3BsYW5lICgxIDw8IDE2KQogI2RlZmluZSBTVVBQT1JURURfMTAwMGJhc2VLWF9GdWxsICgxIDw8IDE3KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1VQUE9SVEVEXzEwMDAwYmFzZUtYNF9GdWxsICgxIDw8IDE4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1VQUE9SVEVEXzEwMDAwYmFzZUtSX0Z1bGwgKDEgPDwgMTkpCiAjZGVmaW5lIFNVUFBPUlRFRF8xMDAwMGJhc2VSX0ZFQyAoMSA8PCAyMCkKICNkZWZpbmUgU1VQUE9SVEVEXzIwMDAwYmFzZU1MRDJfRnVsbCAoMSA8PCAyMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNVUFBPUlRFRF8yMDAwMGJhc2VLUjJfRnVsbCAoMSA8PCAyMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNVUFBPUlRFRF80MDAwMGJhc2VLUjRfRnVsbCAoMSA8PCAyMykKICNkZWZpbmUgU1VQUE9SVEVEXzQwMDAwYmFzZUNSNF9GdWxsICgxIDw8IDI0KQogI2RlZmluZSBTVVBQT1JURURfNDAwMDBiYXNlU1I0X0Z1bGwgKDEgPDwgMjUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTVVBQT1JURURfNDAwMDBiYXNlTFI0X0Z1bGwgKDEgPDwgMjYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiAoMSA8PCAwKQogI2RlZmluZSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCAoMSA8PCAxKQogI2RlZmluZSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgKDEgPDwgMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCAoMSA8PCAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiAoMSA8PCA0KQogI2RlZmluZSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsICgxIDw8IDUpCiAjZGVmaW5lIEFEVkVSVElTRURfQXV0b25lZyAoMSA8PCA2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQURWRVJUSVNFRF9UUCAoMSA8PCA3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQURWRVJUSVNFRF9BVUkgKDEgPDwgOCkKICNkZWZpbmUgQURWRVJUSVNFRF9NSUkgKDEgPDwgOSkKICNkZWZpbmUgQURWRVJUSVNFRF9GSUJSRSAoMSA8PCAxMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFEVkVSVElTRURfQk5DICgxIDw8IDExKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgKDEgPDwgMTIpCiAjZGVmaW5lIEFEVkVSVElTRURfUGF1c2UgKDEgPDwgMTMpCiAjZGVmaW5lIEFEVkVSVElTRURfQXN5bV9QYXVzZSAoMSA8PCAxNCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFEVkVSVElTRURfMjUwMGJhc2VYX0Z1bGwgKDEgPDwgMTUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBRFZFUlRJU0VEX0JhY2twbGFuZSAoMSA8PCAxNikKICNkZWZpbmUgQURWRVJUSVNFRF8xMDAwYmFzZUtYX0Z1bGwgKDEgPDwgMTcpCiAjZGVmaW5lIEFEVkVSVElTRURfMTAwMDBiYXNlS1g0X0Z1bGwgKDEgPDwgMTgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBRFZFUlRJU0VEXzEwMDAwYmFzZUtSX0Z1bGwgKDEgPDwgMTkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBRFZFUlRJU0VEXzEwMDAwYmFzZVJfRkVDICgxIDw8IDIwKQogI2RlZmluZSBBRFZFUlRJU0VEXzIwMDAwYmFzZU1MRDJfRnVsbCAoMSA8PCAyMSkKICNkZWZpbmUgQURWRVJUSVNFRF8yMDAwMGJhc2VLUjJfRnVsbCAoMSA8PCAyMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFEVkVSVElTRURfNDAwMDBiYXNlS1I0X0Z1bGwgKDEgPDwgMjMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBRFZFUlRJU0VEXzQwMDAwYmFzZUNSNF9GdWxsICgxIDw8IDI0KQogI2RlZmluZSBBRFZFUlRJU0VEXzQwMDAwYmFzZVNSNF9GdWxsICgxIDw8IDI1KQogI2RlZmluZSBBRFZFUlRJU0VEXzQwMDAwYmFzZUxSNF9GdWxsICgxIDw8IDI2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1BFRURfMTAgMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNQRUVEXzEwMCAxMDAKICNkZWZpbmUgU1BFRURfMTAwMCAxMDAwCiAjZGVmaW5lIFNQRUVEXzI1MDAgMjUwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1BFRURfMTAwMDAgMTAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNQRUVEX1VOS05PV04gLTEKICNkZWZpbmUgRFVQTEVYX0hBTEYgMHgwMAogI2RlZmluZSBEVVBMRVhfRlVMTCAweDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEVVBMRVhfVU5LTk9XTiAweGZmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQT1JUX1RQIDB4MDAKICNkZWZpbmUgUE9SVF9BVUkgMHgwMQogI2RlZmluZSBQT1JUX01JSSAweDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQT1JUX0ZJQlJFIDB4MDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBPUlRfQk5DIDB4MDQKICNkZWZpbmUgUE9SVF9EQSAweDA1CiAjZGVmaW5lIFBPUlRfTk9ORSAweGVmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQT1JUX09USEVSIDB4ZmYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhDVlJfSU5URVJOQUwgMHgwMAogI2RlZmluZSBYQ1ZSX0VYVEVSTkFMIDB4MDEKICNkZWZpbmUgWENWUl9EVU1NWTEgMHgwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWENWUl9EVU1NWTIgMHgwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWENWUl9EVU1NWTMgMHgwNAogI2RlZmluZSBBVVRPTkVHX0RJU0FCTEUgMHgwMAogI2RlZmluZSBBVVRPTkVHX0VOQUJMRSAweDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFVEhfVFBfTURJX0lOVkFMSUQgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVRIX1RQX01ESSAweDAxCiAjZGVmaW5lIEVUSF9UUF9NRElfWCAweDAyCiAjZGVmaW5lIEVUSF9UUF9NRElfQVVUTyAweDAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBXQUtFX1BIWSAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgV0FLRV9VQ0FTVCAoMSA8PCAxKQogI2RlZmluZSBXQUtFX01DQVNUICgxIDw8IDIpCiAjZGVmaW5lIFdBS0VfQkNBU1QgKDEgPDwgMykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFdBS0VfQVJQICgxIDw8IDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBXQUtFX01BR0lDICgxIDw8IDUpCiAjZGVmaW5lIFdBS0VfTUFHSUNTRUNVUkUgKDEgPDwgNikKICNkZWZpbmUgVENQX1Y0X0ZMT1cgMHgwMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVURQX1Y0X0ZMT1cgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0NUUF9WNF9GTE9XIDB4MDMKICNkZWZpbmUgQUhfRVNQX1Y0X0ZMT1cgMHgwNAogI2RlZmluZSBUQ1BfVjZfRkxPVyAweDA1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVRFBfVjZfRkxPVyAweDA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQ1RQX1Y2X0ZMT1cgMHgwNwogI2RlZmluZSBBSF9FU1BfVjZfRkxPVyAweDA4CiAjZGVmaW5lIEFIX1Y0X0ZMT1cgMHgwOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVNQX1Y0X0ZMT1cgMHgwYQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUhfVjZfRkxPVyAweDBiCiAjZGVmaW5lIEVTUF9WNl9GTE9XIDB4MGMKICNkZWZpbmUgSVBfVVNFUl9GTE9XIDB4MGQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjRfRkxPVyAweDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X0ZMT1cgMHgxMQogI2RlZmluZSBFVEhFUl9GTE9XIDB4MTIKICNkZWZpbmUgRkxPV19FWFQgMHg4MDAwMDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkxPV19NQUNfRVhUIDB4NDAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJYSF9MMkRBICgxIDw8IDEpCiAjZGVmaW5lIFJYSF9WTEFOICgxIDw8IDIpCiAjZGVmaW5lIFJYSF9MM19QUk9UTyAoMSA8PCAzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlhIX0lQX1NSQyAoMSA8PCA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlhIX0lQX0RTVCAoMSA8PCA1KQogI2RlZmluZSBSWEhfTDRfQl8wXzEgKDEgPDwgNikKICNkZWZpbmUgUlhIX0w0X0JfMl8zICgxIDw8IDcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSWEhfRElTQ0FSRCAoMSA8PCAzMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJYX0NMU19GTE9XX0RJU0MgMHhmZmZmZmZmZmZmZmZmZmZmVUxMCiAjZGVmaW5lIFJYX0NMU19MT0NfU1BFQ0lBTCAweDgwMDAwMDAwCiAjZGVmaW5lIFJYX0NMU19MT0NfQU5ZIDB4ZmZmZmZmZmYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJYX0NMU19MT0NfRklSU1QgMHhmZmZmZmZmZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlhfQ0xTX0xPQ19MQVNUIDB4ZmZmZmZmZmQKICNkZWZpbmUgRVRIX01PRFVMRV9TRkZfODA3OSAweDEKICNkZWZpbmUgRVRIX01PRFVMRV9TRkZfODA3OV9MRU4gMjU2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFVEhfTU9EVUxFX1NGRl84NDcyIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVRIX01PRFVMRV9TRkZfODQ3Ml9MRU4gNTEyCiBlbnVtIGV0aHRvb2xfcmVzZXRfZmxhZ3MgewogIEVUSF9SRVNFVF9NR01UID0gMSA8PCAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBFVEhfUkVTRVRfSVJRID0gMSA8PCAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBFVEhfUkVTRVRfRE1BID0gMSA8PCAyLAogIEVUSF9SRVNFVF9GSUxURVIgPSAxIDw8IDMsCiAgRVRIX1JFU0VUX09GRkxPQUQgPSAxIDw8IDQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEVUSF9SRVNFVF9NQUMgPSAxIDw8IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEVUSF9SRVNFVF9QSFkgPSAxIDw8IDYsCiAgRVRIX1JFU0VUX1JBTSA9IDEgPDwgNywKICBFVEhfUkVTRVRfREVESUNBVEVEID0gMHgwMDAwZmZmZiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRVRIX1JFU0VUX0FMTCA9IDB4ZmZmZmZmZmYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgRVRIX1JFU0VUX1NIQVJFRF9TSElGVCAxNgogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9mYWxsb2MuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZmFsbG9jLmgKaW5kZXggODBhNGMyOS4uOWVhMGIyNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9mYWxsb2MuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ZhbGxvYy5oCkBAIC0yMiw0ICsyMiw3IEBACiAjZGVmaW5lIEZBTExPQ19GTF9QVU5DSF9IT0xFIDB4MDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZBTExPQ19GTF9OT19ISURFX1NUQUxFIDB4MDQKKyNkZWZpbmUgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIDB4MDgKKyNkZWZpbmUgRkFMTE9DX0ZMX1pFUk9fUkFOR0UgMHgxMAogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9maWx0ZXIuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZmlsdGVyLmgKaW5kZXggOGI3NTI3MC4uYjkwNDc0ZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9maWx0ZXIuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ZpbHRlci5oCkBAIC0xMjMsOCArMTIzLDkgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNLRl9BRF9WTEFOX1RBR19QUkVTRU5UIDQ4CiAjZGVmaW5lIFNLRl9BRF9QQVlfT0ZGU0VUIDUyCi0jZGVmaW5lIFNLRl9BRF9NQVggNTYKLSNkZWZpbmUgU0tGX05FVF9PRkYgKC0weDEwMDAwMCkKKyNkZWZpbmUgU0tGX0FEX1JBTkRPTSA1NgorI2RlZmluZSBTS0ZfQURfTUFYIDYwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTS0ZfTkVUX09GRiAoLTB4MTAwMDAwKQogI2RlZmluZSBTS0ZfTExfT0ZGICgtMHgyMDAwMDApCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZnMuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZnMuaAppbmRleCBkNmZjNzMwLi5jOGU4NDFjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ZzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9mcy5oCkBAIC0zNiwxNTEgKzM2LDE1NCBAQAogI2RlZmluZSBTRUVLX0hPTEUgNAogI2RlZmluZSBTRUVLX01BWCBTRUVLX0hPTEUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJFTkFNRV9OT1JFUExBQ0UgKDEgPDwgMCkKKyNkZWZpbmUgUkVOQU1FX0VYQ0hBTkdFICgxIDw8IDEpCiBzdHJ1Y3QgZnN0cmltX3JhbmdlIHsKICBfX3U2NCBzdGFydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbGVuOwogIF9fdTY0IG1pbmxlbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGZpbGVzX3N0YXRfc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBucl9maWxlczsKICB1bnNpZ25lZCBsb25nIG5yX2ZyZWVfZmlsZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgbWF4X2ZpbGVzOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaW5vZGVzX3N0YXRfdCB7CiAgbG9uZyBucl9pbm9kZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgbnJfdW51c2VkOwogIGxvbmcgZHVtbXlbNV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgTlJfRklMRSA4MTkyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU19SRE9OTFkgMQogI2RlZmluZSBNU19OT1NVSUQgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNfTk9ERVYgNAogI2RlZmluZSBNU19OT0VYRUMgOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNfU1lOQ0hST05PVVMgMTYKICNkZWZpbmUgTVNfUkVNT1VOVCAzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNfTUFORExPQ0sgNjQKICNkZWZpbmUgTVNfRElSU1lOQyAxMjgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TX05PQVRJTUUgMTAyNAogI2RlZmluZSBNU19OT0RJUkFUSU1FIDIwNDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TX0JJTkQgNDA5NgogI2RlZmluZSBNU19NT1ZFIDgxOTIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TX1JFQyAxNjM4NAogI2RlZmluZSBNU19WRVJCT1NFIDMyNzY4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU19TSUxFTlQgMzI3NjgKICNkZWZpbmUgTVNfUE9TSVhBQ0wgKDE8PDE2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNfVU5CSU5EQUJMRSAoMTw8MTcpCiAjZGVmaW5lIE1TX1BSSVZBVEUgKDE8PDE4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNfU0xBVkUgKDE8PDE5KQogI2RlZmluZSBNU19TSEFSRUQgKDE8PDIwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNfUkVMQVRJTUUgKDE8PDIxKQogI2RlZmluZSBNU19LRVJOTU9VTlQgKDE8PDIyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNfSV9WRVJTSU9OICgxPDwyMykKICNkZWZpbmUgTVNfU1RSSUNUQVRJTUUgKDE8PDI0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNfTk9TRUMgKDE8PDI4KQogI2RlZmluZSBNU19CT1JOICgxPDwyOSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TX0FDVElWRSAoMTw8MzApCiAjZGVmaW5lIE1TX05PVVNFUiAoMTw8MzEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU19STVRfTUFTSyAoTVNfUkRPTkxZfE1TX1NZTkNIUk9OT1VTfE1TX01BTkRMT0NLfE1TX0lfVkVSU0lPTikKICNkZWZpbmUgTVNfTUdDX1ZBTCAweEMwRUQwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU19NR0NfTVNLIDB4ZmZmZjAwMDAKICNkZWZpbmUgQkxLUk9TRVQgX0lPKDB4MTIsOTMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCTEtST0dFVCBfSU8oMHgxMiw5NCkKICNkZWZpbmUgQkxLUlJQQVJUIF9JTygweDEyLDk1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQkxLR0VUU0laRSBfSU8oMHgxMiw5NikKICNkZWZpbmUgQkxLRkxTQlVGIF9JTygweDEyLDk3KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQkxLUkFTRVQgX0lPKDB4MTIsOTgpCiAjZGVmaW5lIEJMS1JBR0VUIF9JTygweDEyLDk5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQkxLRlJBU0VUIF9JTygweDEyLDEwMCkKICNkZWZpbmUgQkxLRlJBR0VUIF9JTygweDEyLDEwMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJMS1NFQ1RTRVQgX0lPKDB4MTIsMTAyKQogI2RlZmluZSBCTEtTRUNUR0VUIF9JTygweDEyLDEwMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJMS1NTWkdFVCBfSU8oMHgxMiwxMDQpCiAjZGVmaW5lIEJMS0JTWkdFVCBfSU9SKDB4MTIsMTEyLHNpemVfdCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJMS0JTWlNFVCBfSU9XKDB4MTIsMTEzLHNpemVfdCkKICNkZWZpbmUgQkxLR0VUU0laRTY0IF9JT1IoMHgxMiwxMTQsc2l6ZV90KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQkxLVFJBQ0VTRVRVUCBfSU9XUigweDEyLDExNSxzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXApCiAjZGVmaW5lIEJMS1RSQUNFU1RBUlQgX0lPKDB4MTIsMTE2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQkxLVFJBQ0VTVE9QIF9JTygweDEyLDExNykKICNkZWZpbmUgQkxLVFJBQ0VURUFSRE9XTiBfSU8oMHgxMiwxMTgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCTEtESVNDQVJEIF9JTygweDEyLDExOSkKICNkZWZpbmUgQkxLSU9NSU4gX0lPKDB4MTIsMTIwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQkxLSU9PUFQgX0lPKDB4MTIsMTIxKQogI2RlZmluZSBCTEtBTElHTk9GRiBfSU8oMHgxMiwxMjIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCTEtQQlNaR0VUIF9JTygweDEyLDEyMykKICNkZWZpbmUgQkxLRElTQ0FSRFpFUk9FUyBfSU8oMHgxMiwxMjQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCTEtTRUNESVNDQVJEIF9JTygweDEyLDEyNSkKICNkZWZpbmUgQkxLUk9UQVRJT05BTCBfSU8oMHgxMiwxMjYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCTEtaRVJPT1VUIF9JTygweDEyLDEyNykKICNkZWZpbmUgQk1BUF9JT0NUTCAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGSUJNQVAgX0lPKDB4MDAsMSkKICNkZWZpbmUgRklHRVRCU1ogX0lPKDB4MDAsMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZJRlJFRVpFIF9JT1dSKCdYJywgMTE5LCBpbnQpCiAjZGVmaW5lIEZJVEhBVyBfSU9XUignWCcsIDEyMCwgaW50KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRklUUklNIF9JT1dSKCdYJywgMTIxLCBzdHJ1Y3QgZnN0cmltX3JhbmdlKQogI2RlZmluZSBGU19JT0NfR0VURkxBR1MgX0lPUignZicsIDEsIGxvbmcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGU19JT0NfU0VURkxBR1MgX0lPVygnZicsIDIsIGxvbmcpCiAjZGVmaW5lIEZTX0lPQ19HRVRWRVJTSU9OIF9JT1IoJ3YnLCAxLCBsb25nKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlNfSU9DX1NFVFZFUlNJT04gX0lPVygndicsIDIsIGxvbmcpCiAjZGVmaW5lIEZTX0lPQ19GSUVNQVAgX0lPV1IoJ2YnLCAxMSwgc3RydWN0IGZpZW1hcCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZTX0lPQzMyX0dFVEZMQUdTIF9JT1IoJ2YnLCAxLCBpbnQpCiAjZGVmaW5lIEZTX0lPQzMyX1NFVEZMQUdTIF9JT1coJ2YnLCAyLCBpbnQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGU19JT0MzMl9HRVRWRVJTSU9OIF9JT1IoJ3YnLCAxLCBpbnQpCiAjZGVmaW5lIEZTX0lPQzMyX1NFVFZFUlNJT04gX0lPVygndicsIDIsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZTX1NFQ1JNX0ZMIDB4MDAwMDAwMDEKICNkZWZpbmUgRlNfVU5STV9GTCAweDAwMDAwMDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGU19DT01QUl9GTCAweDAwMDAwMDA0CiAjZGVmaW5lIEZTX1NZTkNfRkwgMHgwMDAwMDAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlNfSU1NVVRBQkxFX0ZMIDB4MDAwMDAwMTAKICNkZWZpbmUgRlNfQVBQRU5EX0ZMIDB4MDAwMDAwMjAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZTX05PRFVNUF9GTCAweDAwMDAwMDQwCiAjZGVmaW5lIEZTX05PQVRJTUVfRkwgMHgwMDAwMDA4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlNfRElSVFlfRkwgMHgwMDAwMDEwMAogI2RlZmluZSBGU19DT01QUkJMS19GTCAweDAwMDAwMjAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGU19OT0NPTVBfRkwgMHgwMDAwMDQwMAogI2RlZmluZSBGU19FQ09NUFJfRkwgMHgwMDAwMDgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlNfQlRSRUVfRkwgMHgwMDAwMTAwMAogI2RlZmluZSBGU19JTkRFWF9GTCAweDAwMDAxMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGU19JTUFHSUNfRkwgMHgwMDAwMjAwMAogI2RlZmluZSBGU19KT1VSTkFMX0RBVEFfRkwgMHgwMDAwNDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlNfTk9UQUlMX0ZMIDB4MDAwMDgwMDAKICNkZWZpbmUgRlNfRElSU1lOQ19GTCAweDAwMDEwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGU19UT1BESVJfRkwgMHgwMDAyMDAwMAogI2RlZmluZSBGU19FWFRFTlRfRkwgMHgwMDA4MDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlNfRElSRUNUSU9fRkwgMHgwMDEwMDAwMAogI2RlZmluZSBGU19OT0NPV19GTCAweDAwODAwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGU19SRVNFUlZFRF9GTCAweDgwMDAwMDAwCiAjZGVmaW5lIEZTX0ZMX1VTRVJfVklTSUJMRSAweDAwMDNERkZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGU19GTF9VU0VSX01PRElGSUFCTEUgMHgwMDAzODBGRgogI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1lOQ19GSUxFX1JBTkdFX1dSSVRFIDIKICNkZWZpbmUgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQUZURVIgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9mdXNlLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Z1c2UuaAppbmRleCA4MTM1ZDQ3Li5jN2NhZmUzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Z1c2UuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Z1c2UuaApAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2RlZmluZSBGVVNFX0tFUk5FTF9WRVJTSU9OIDcKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEZVU0VfS0VSTkVMX01JTk9SX1ZFUlNJT04gMjIKKyNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiAyMwogI2RlZmluZSBGVVNFX1JPT1RfSUQgMQogc3RydWN0IGZ1c2VfYXR0ciB7CiAgdWludDY0X3QgaW5vOwpAQCAtODEsMTAyICs4MSwxMDcgQEAKICNkZWZpbmUgRkFUVFJfTVRJTUVfTk9XICgxIDw8IDgpCiAjZGVmaW5lIEZBVFRSX0xPQ0tPV05FUiAoMSA8PCA5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkFUVFJfQ1RJTUUgKDEgPDwgMTApCiAjZGVmaW5lIEZPUEVOX0RJUkVDVF9JTyAoMSA8PCAwKQogI2RlZmluZSBGT1BFTl9LRUVQX0NBQ0hFICgxIDw8IDEpCiAjZGVmaW5lIEZPUEVOX05PTlNFRUtBQkxFICgxIDw8IDIpCi0jZGVmaW5lIEZVU0VfQVNZTkNfUkVBRCAoMSA8PCAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRlVTRV9BU1lOQ19SRUFEICgxIDw8IDApCiAjZGVmaW5lIEZVU0VfUE9TSVhfTE9DS1MgKDEgPDwgMSkKICNkZWZpbmUgRlVTRV9GSUxFX09QUyAoMSA8PCAyKQogI2RlZmluZSBGVVNFX0FUT01JQ19PX1RSVU5DICgxIDw8IDMpCi0jZGVmaW5lIEZVU0VfRVhQT1JUX1NVUFBPUlQgKDEgPDwgNCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZVU0VfRVhQT1JUX1NVUFBPUlQgKDEgPDwgNCkKICNkZWZpbmUgRlVTRV9CSUdfV1JJVEVTICgxIDw8IDUpCiAjZGVmaW5lIEZVU0VfRE9OVF9NQVNLICgxIDw8IDYpCiAjZGVmaW5lIEZVU0VfU1BMSUNFX1dSSVRFICgxIDw8IDcpCi0jZGVmaW5lIEZVU0VfU1BMSUNFX01PVkUgKDEgPDwgOCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZVU0VfU1BMSUNFX01PVkUgKDEgPDwgOCkKICNkZWZpbmUgRlVTRV9TUExJQ0VfUkVBRCAoMSA8PCA5KQogI2RlZmluZSBGVVNFX0ZMT0NLX0xPQ0tTICgxIDw8IDEwKQogI2RlZmluZSBGVVNFX0hBU19JT0NUTF9ESVIgKDEgPDwgMTEpCi0jZGVmaW5lIEZVU0VfQVVUT19JTlZBTF9EQVRBICgxIDw8IDEyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRlVTRV9BVVRPX0lOVkFMX0RBVEEgKDEgPDwgMTIpCiAjZGVmaW5lIEZVU0VfRE9fUkVBRERJUlBMVVMgKDEgPDwgMTMpCiAjZGVmaW5lIEZVU0VfUkVBRERJUlBMVVNfQVVUTyAoMSA8PCAxNCkKICNkZWZpbmUgRlVTRV9BU1lOQ19ESU8gKDEgPDwgMTUpCi0jZGVmaW5lIENVU0VfVU5SRVNUUklDVEVEX0lPQ1RMICgxIDw8IDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGVVNFX1dSSVRFQkFDS19DQUNIRSAoMSA8PCAxNikKKyNkZWZpbmUgRlVTRV9OT19PUEVOX1NVUFBPUlQgKDEgPDwgMTcpCisjZGVmaW5lIENVU0VfVU5SRVNUUklDVEVEX0lPQ1RMICgxIDw8IDApCiAjZGVmaW5lIEZVU0VfUkVMRUFTRV9GTFVTSCAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlVTRV9SRUxFQVNFX0ZMT0NLX1VOTE9DSyAoMSA8PCAxKQogI2RlZmluZSBGVVNFX0dFVEFUVFJfRkggKDEgPDwgMCkKICNkZWZpbmUgRlVTRV9MS19GTE9DSyAoMSA8PCAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlVTRV9XUklURV9DQUNIRSAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlVTRV9XUklURV9MT0NLT1dORVIgKDEgPDwgMSkKICNkZWZpbmUgRlVTRV9SRUFEX0xPQ0tPV05FUiAoMSA8PCAxKQogI2RlZmluZSBGVVNFX0lPQ1RMX0NPTVBBVCAoMSA8PCAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlVTRV9JT0NUTF9VTlJFU1RSSUNURUQgKDEgPDwgMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZVU0VfSU9DVExfUkVUUlkgKDEgPDwgMikKICNkZWZpbmUgRlVTRV9JT0NUTF8zMkJJVCAoMSA8PCAzKQogI2RlZmluZSBGVVNFX0lPQ1RMX0RJUiAoMSA8PCA0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlVTRV9JT0NUTF9NQVhfSU9WIDI1NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlVTRV9QT0xMX1NDSEVEVUxFX05PVElGWSAoMSA8PCAwKQogZW51bSBmdXNlX29wY29kZSB7CiAgRlVTRV9MT09LVVAgPSAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGVVNFX0ZPUkdFVCA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZVU0VfR0VUQVRUUiA9IDMsCiAgRlVTRV9TRVRBVFRSID0gNCwKICBGVVNFX1JFQURMSU5LID0gNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRlVTRV9TWU1MSU5LID0gNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRlVTRV9NS05PRCA9IDgsCiAgRlVTRV9NS0RJUiA9IDksCiAgRlVTRV9VTkxJTksgPSAxMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRlVTRV9STURJUiA9IDExLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGVVNFX1JFTkFNRSA9IDEyLAogIEZVU0VfTElOSyA9IDEzLAogIEZVU0VfT1BFTiA9IDE0LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGVVNFX1JFQUQgPSAxNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRlVTRV9XUklURSA9IDE2LAogIEZVU0VfU1RBVEZTID0gMTcsCiAgRlVTRV9SRUxFQVNFID0gMTgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZVU0VfRlNZTkMgPSAyMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRlVTRV9TRVRYQVRUUiA9IDIxLAogIEZVU0VfR0VUWEFUVFIgPSAyMiwKICBGVVNFX0xJU1RYQVRUUiA9IDIzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGVVNFX1JFTU9WRVhBVFRSID0gMjQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZVU0VfRkxVU0ggPSAyNSwKICBGVVNFX0lOSVQgPSAyNiwKICBGVVNFX09QRU5ESVIgPSAyNywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRlVTRV9SRUFERElSID0gMjgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZVU0VfUkVMRUFTRURJUiA9IDI5LAogIEZVU0VfRlNZTkNESVIgPSAzMCwKICBGVVNFX0dFVExLID0gMzEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZVU0VfU0VUTEsgPSAzMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRlVTRV9TRVRMS1cgPSAzMywKICBGVVNFX0FDQ0VTUyA9IDM0LAogIEZVU0VfQ1JFQVRFID0gMzUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZVU0VfSU5URVJSVVBUID0gMzYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZVU0VfQk1BUCA9IDM3LAogIEZVU0VfREVTVFJPWSA9IDM4LAogIEZVU0VfSU9DVEwgPSAzOSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRlVTRV9QT0xMID0gNDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZVU0VfTk9USUZZX1JFUExZID0gNDEsCiAgRlVTRV9CQVRDSF9GT1JHRVQgPSA0MiwKICBGVVNFX0ZBTExPQ0FURSA9IDQzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGVVNFX1JFQURESVJQTFVTID0gNDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEZVU0VfUkVOQU1FMiA9IDQ1LAogIENVU0VfSU5JVCA9IDQwOTYsCiB9OwogZW51bSBmdXNlX25vdGlmeV9jb2RlIHsKQEAgLTI1MSwzMjQgKzI1NiwzMzUgQEAKICB1aW50NjRfdCBuZXdkaXI7CiB9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBmdXNlX3JlbmFtZTJfaW4geworIHVpbnQ2NF90IG5ld2RpcjsKKyB1aW50MzJfdCBmbGFnczsKKyB1aW50MzJfdCBwYWRkaW5nOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgZnVzZV9saW5rX2luIHsKICB1aW50NjRfdCBvbGRub2RlaWQ7CiB9Owotc3RydWN0IGZ1c2Vfc2V0YXR0cl9pbiB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGZ1c2Vfc2V0YXR0cl9pbiB7CiAgdWludDMyX3QgdmFsaWQ7CiAgdWludDMyX3QgcGFkZGluZzsKICB1aW50NjRfdCBmaDsKLSB1aW50NjRfdCBzaXplOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50NjRfdCBzaXplOwogIHVpbnQ2NF90IGxvY2tfb3duZXI7CiAgdWludDY0X3QgYXRpbWU7CiAgdWludDY0X3QgbXRpbWU7Ci0gdWludDY0X3QgdW51c2VkMjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDY0X3QgY3RpbWU7CiAgdWludDMyX3QgYXRpbWVuc2VjOwogIHVpbnQzMl90IG10aW1lbnNlYzsKLSB1aW50MzJfdCB1bnVzZWQzOwotIHVpbnQzMl90IG1vZGU7CisgdWludDMyX3QgY3RpbWVuc2VjOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBtb2RlOwogIHVpbnQzMl90IHVudXNlZDQ7CiAgdWludDMyX3QgdWlkOwogIHVpbnQzMl90IGdpZDsKLSB1aW50MzJfdCB1bnVzZWQ1OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCB1bnVzZWQ1OwogfTsKIHN0cnVjdCBmdXNlX29wZW5faW4gewogIHVpbnQzMl90IGZsYWdzOwotIHVpbnQzMl90IHVudXNlZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgdW51c2VkOwogfTsKIHN0cnVjdCBmdXNlX2NyZWF0ZV9pbiB7CiAgdWludDMyX3QgZmxhZ3M7Ci0gdWludDMyX3QgbW9kZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgbW9kZTsKICB1aW50MzJfdCB1bWFzazsKICB1aW50MzJfdCBwYWRkaW5nOwogfTsKLXN0cnVjdCBmdXNlX29wZW5fb3V0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZnVzZV9vcGVuX291dCB7CiAgdWludDY0X3QgZmg7CiAgdWludDMyX3Qgb3Blbl9mbGFnczsKICB1aW50MzJfdCBwYWRkaW5nOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGZ1c2VfcmVsZWFzZV9pbiB7CiAgdWludDY0X3QgZmg7CiAgdWludDMyX3QgZmxhZ3M7Ci0gdWludDMyX3QgcmVsZWFzZV9mbGFnczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgcmVsZWFzZV9mbGFnczsKICB1aW50NjRfdCBsb2NrX293bmVyOwogfTsKIHN0cnVjdCBmdXNlX2ZsdXNoX2luIHsKLSB1aW50NjRfdCBmaDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDY0X3QgZmg7CiAgdWludDMyX3QgdW51c2VkOwogIHVpbnQzMl90IHBhZGRpbmc7CiAgdWludDY0X3QgbG9ja19vd25lcjsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBmdXNlX3JlYWRfaW4gewogIHVpbnQ2NF90IGZoOwogIHVpbnQ2NF90IG9mZnNldDsKLSB1aW50MzJfdCBzaXplOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBzaXplOwogIHVpbnQzMl90IHJlYWRfZmxhZ3M7CiAgdWludDY0X3QgbG9ja19vd25lcjsKICB1aW50MzJfdCBmbGFnczsKLSB1aW50MzJfdCBwYWRkaW5nOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBwYWRkaW5nOwogfTsKICNkZWZpbmUgRlVTRV9DT01QQVRfV1JJVEVfSU5fU0laRSAyNAogc3RydWN0IGZ1c2Vfd3JpdGVfaW4gewotIHVpbnQ2NF90IGZoOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50NjRfdCBmaDsKICB1aW50NjRfdCBvZmZzZXQ7CiAgdWludDMyX3Qgc2l6ZTsKICB1aW50MzJfdCB3cml0ZV9mbGFnczsKLSB1aW50NjRfdCBsb2NrX293bmVyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50NjRfdCBsb2NrX293bmVyOwogIHVpbnQzMl90IGZsYWdzOwogIHVpbnQzMl90IHBhZGRpbmc7CiB9Owotc3RydWN0IGZ1c2Vfd3JpdGVfb3V0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZnVzZV93cml0ZV9vdXQgewogIHVpbnQzMl90IHNpemU7CiAgdWludDMyX3QgcGFkZGluZzsKIH07Ci0jZGVmaW5lIEZVU0VfQ09NUEFUX1NUQVRGU19TSVpFIDQ4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGVVNFX0NPTVBBVF9TVEFURlNfU0laRSA0OAogc3RydWN0IGZ1c2Vfc3RhdGZzX291dCB7CiAgc3RydWN0IGZ1c2Vfa3N0YXRmcyBzdDsKIH07Ci1zdHJ1Y3QgZnVzZV9mc3luY19pbiB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGZ1c2VfZnN5bmNfaW4gewogIHVpbnQ2NF90IGZoOwogIHVpbnQzMl90IGZzeW5jX2ZsYWdzOwogIHVpbnQzMl90IHBhZGRpbmc7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgZnVzZV9zZXR4YXR0cl9pbiB7CiAgdWludDMyX3Qgc2l6ZTsKICB1aW50MzJfdCBmbGFnczsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBmdXNlX2dldHhhdHRyX2luIHsKICB1aW50MzJfdCBzaXplOwogIHVpbnQzMl90IHBhZGRpbmc7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgZnVzZV9nZXR4YXR0cl9vdXQgewogIHVpbnQzMl90IHNpemU7CiAgdWludDMyX3QgcGFkZGluZzsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBmdXNlX2xrX2luIHsKICB1aW50NjRfdCBmaDsKICB1aW50NjRfdCBvd25lcjsKLSBzdHJ1Y3QgZnVzZV9maWxlX2xvY2sgbGs7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBmdXNlX2ZpbGVfbG9jayBsazsKICB1aW50MzJfdCBsa19mbGFnczsKICB1aW50MzJfdCBwYWRkaW5nOwogfTsKLXN0cnVjdCBmdXNlX2xrX291dCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGZ1c2VfbGtfb3V0IHsKICBzdHJ1Y3QgZnVzZV9maWxlX2xvY2sgbGs7CiB9Owogc3RydWN0IGZ1c2VfYWNjZXNzX2luIHsKLSB1aW50MzJfdCBtYXNrOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBtYXNrOwogIHVpbnQzMl90IHBhZGRpbmc7CiB9Owogc3RydWN0IGZ1c2VfaW5pdF9pbiB7Ci0gdWludDMyX3QgbWFqb3I7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IG1ham9yOwogIHVpbnQzMl90IG1pbm9yOwogIHVpbnQzMl90IG1heF9yZWFkYWhlYWQ7CiAgdWludDMyX3QgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZVU0VfQ09NUEFUX0lOSVRfT1VUX1NJWkUgOAorI2RlZmluZSBGVVNFX0NPTVBBVF8yMl9JTklUX09VVF9TSVpFIDI0CiBzdHJ1Y3QgZnVzZV9pbml0X291dCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IG1ham9yOwogIHVpbnQzMl90IG1pbm9yOwogIHVpbnQzMl90IG1heF9yZWFkYWhlYWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MTZfdCBtYXhfYmFja2dyb3VuZDsKICB1aW50MTZfdCBjb25nZXN0aW9uX3RocmVzaG9sZDsKICB1aW50MzJfdCBtYXhfd3JpdGU7CisgdWludDMyX3QgdGltZV9ncmFuOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCB1bnVzZWRbOV07CiB9OwogI2RlZmluZSBDVVNFX0lOSVRfSU5GT19NQVggNDA5Ngogc3RydWN0IGN1c2VfaW5pdF9pbiB7Ci0gdWludDMyX3QgbWFqb3I7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IG1ham9yOwogIHVpbnQzMl90IG1pbm9yOwogIHVpbnQzMl90IHVudXNlZDsKICB1aW50MzJfdCBmbGFnczsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBjdXNlX2luaXRfb3V0IHsKICB1aW50MzJfdCBtYWpvcjsKICB1aW50MzJfdCBtaW5vcjsKLSB1aW50MzJfdCB1bnVzZWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IHVudXNlZDsKICB1aW50MzJfdCBmbGFnczsKICB1aW50MzJfdCBtYXhfcmVhZDsKICB1aW50MzJfdCBtYXhfd3JpdGU7Ci0gdWludDMyX3QgZGV2X21ham9yOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBkZXZfbWFqb3I7CiAgdWludDMyX3QgZGV2X21pbm9yOwogIHVpbnQzMl90IHNwYXJlWzEwXTsKIH07Ci1zdHJ1Y3QgZnVzZV9pbnRlcnJ1cHRfaW4gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBmdXNlX2ludGVycnVwdF9pbiB7CiAgdWludDY0X3QgdW5pcXVlOwogfTsKIHN0cnVjdCBmdXNlX2JtYXBfaW4gewotIHVpbnQ2NF90IGJsb2NrOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50NjRfdCBibG9jazsKICB1aW50MzJfdCBibG9ja3NpemU7CiAgdWludDMyX3QgcGFkZGluZzsKIH07Ci1zdHJ1Y3QgZnVzZV9ibWFwX291dCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGZ1c2VfYm1hcF9vdXQgewogIHVpbnQ2NF90IGJsb2NrOwogfTsKIHN0cnVjdCBmdXNlX2lvY3RsX2luIHsKLSB1aW50NjRfdCBmaDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDY0X3QgZmg7CiAgdWludDMyX3QgZmxhZ3M7CiAgdWludDMyX3QgY21kOwogIHVpbnQ2NF90IGFyZzsKLSB1aW50MzJfdCBpbl9zaXplOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBpbl9zaXplOwogIHVpbnQzMl90IG91dF9zaXplOwogfTsKIHN0cnVjdCBmdXNlX2lvY3RsX2lvdmVjIHsKLSB1aW50NjRfdCBiYXNlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50NjRfdCBiYXNlOwogIHVpbnQ2NF90IGxlbjsKIH07CiBzdHJ1Y3QgZnVzZV9pb2N0bF9vdXQgewotIGludDMyX3QgcmVzdWx0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQzMl90IHJlc3VsdDsKICB1aW50MzJfdCBmbGFnczsKICB1aW50MzJfdCBpbl9pb3ZzOwogIHVpbnQzMl90IG91dF9pb3ZzOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGZ1c2VfcG9sbF9pbiB7CiAgdWludDY0X3QgZmg7CiAgdWludDY0X3Qga2g7Ci0gdWludDMyX3QgZmxhZ3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IGZsYWdzOwogIHVpbnQzMl90IGV2ZW50czsKIH07CiBzdHJ1Y3QgZnVzZV9wb2xsX291dCB7Ci0gdWludDMyX3QgcmV2ZW50czsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgcmV2ZW50czsKICB1aW50MzJfdCBwYWRkaW5nOwogfTsKIHN0cnVjdCBmdXNlX25vdGlmeV9wb2xsX3dha2V1cF9vdXQgewotIHVpbnQ2NF90IGtoOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50NjRfdCBraDsKIH07CiBzdHJ1Y3QgZnVzZV9mYWxsb2NhdGVfaW4gewogIHVpbnQ2NF90IGZoOwotIHVpbnQ2NF90IG9mZnNldDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDY0X3Qgb2Zmc2V0OwogIHVpbnQ2NF90IGxlbmd0aDsKICB1aW50MzJfdCBtb2RlOwogIHVpbnQzMl90IHBhZGRpbmc7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgZnVzZV9pbl9oZWFkZXIgewogIHVpbnQzMl90IGxlbjsKICB1aW50MzJfdCBvcGNvZGU7Ci0gdWludDY0X3QgdW5pcXVlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50NjRfdCB1bmlxdWU7CiAgdWludDY0X3Qgbm9kZWlkOwogIHVpbnQzMl90IHVpZDsKICB1aW50MzJfdCBnaWQ7Ci0gdWludDMyX3QgcGlkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBwaWQ7CiAgdWludDMyX3QgcGFkZGluZzsKIH07CiBzdHJ1Y3QgZnVzZV9vdXRfaGVhZGVyIHsKLSB1aW50MzJfdCBsZW47CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IGxlbjsKICBpbnQzMl90IGVycm9yOwogIHVpbnQ2NF90IHVuaXF1ZTsKIH07Ci1zdHJ1Y3QgZnVzZV9kaXJlbnQgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBmdXNlX2RpcmVudCB7CiAgdWludDY0X3QgaW5vOwogIHVpbnQ2NF90IG9mZjsKICB1aW50MzJfdCBuYW1lbGVuOwotIHVpbnQzMl90IHR5cGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IHR5cGU7CiAgY2hhciBuYW1lW107CiB9OwogI2RlZmluZSBGVVNFX05BTUVfT0ZGU0VUIG9mZnNldG9mKHN0cnVjdCBmdXNlX2RpcmVudCwgbmFtZSkKLSNkZWZpbmUgRlVTRV9ESVJFTlRfQUxJR04oeCkgICAoKCh4KSArIHNpemVvZih1aW50NjRfdCkgLSAxKSAmIH4oc2l6ZW9mKHVpbnQ2NF90KSAtIDEpKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRlVTRV9ESVJFTlRfQUxJR04oeCkgICAoKCh4KSArIHNpemVvZih1aW50NjRfdCkgLSAxKSAmIH4oc2l6ZW9mKHVpbnQ2NF90KSAtIDEpKQogI2RlZmluZSBGVVNFX0RJUkVOVF9TSVpFKGQpICAgRlVTRV9ESVJFTlRfQUxJR04oRlVTRV9OQU1FX09GRlNFVCArIChkKS0+bmFtZWxlbikKIHN0cnVjdCBmdXNlX2RpcmVudHBsdXMgewogIHN0cnVjdCBmdXNlX2VudHJ5X291dCBlbnRyeV9vdXQ7Ci0gc3RydWN0IGZ1c2VfZGlyZW50IGRpcmVudDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGZ1c2VfZGlyZW50IGRpcmVudDsKIH07CiAjZGVmaW5lIEZVU0VfTkFNRV9PRkZTRVRfRElSRU5UUExVUyAgIG9mZnNldG9mKHN0cnVjdCBmdXNlX2RpcmVudHBsdXMsIGRpcmVudC5uYW1lKQogI2RlZmluZSBGVVNFX0RJUkVOVFBMVVNfU0laRShkKSAgIEZVU0VfRElSRU5UX0FMSUdOKEZVU0VfTkFNRV9PRkZTRVRfRElSRU5UUExVUyArIChkKS0+ZGlyZW50Lm5hbWVsZW4pCi1zdHJ1Y3QgZnVzZV9ub3RpZnlfaW52YWxfaW5vZGVfb3V0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZnVzZV9ub3RpZnlfaW52YWxfaW5vZGVfb3V0IHsKICB1aW50NjRfdCBpbm87CiAgaW50NjRfdCBvZmY7CiAgaW50NjRfdCBsZW47Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgZnVzZV9ub3RpZnlfaW52YWxfZW50cnlfb3V0IHsKICB1aW50NjRfdCBwYXJlbnQ7CiAgdWludDMyX3QgbmFtZWxlbjsKLSB1aW50MzJfdCBwYWRkaW5nOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBwYWRkaW5nOwogfTsKIHN0cnVjdCBmdXNlX25vdGlmeV9kZWxldGVfb3V0IHsKICB1aW50NjRfdCBwYXJlbnQ7Ci0gdWludDY0X3QgY2hpbGQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQ2NF90IGNoaWxkOwogIHVpbnQzMl90IG5hbWVsZW47CiAgdWludDMyX3QgcGFkZGluZzsKIH07Ci1zdHJ1Y3QgZnVzZV9ub3RpZnlfc3RvcmVfb3V0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZnVzZV9ub3RpZnlfc3RvcmVfb3V0IHsKICB1aW50NjRfdCBub2RlaWQ7CiAgdWludDY0X3Qgb2Zmc2V0OwogIHVpbnQzMl90IHNpemU7Ci0gdWludDMyX3QgcGFkZGluZzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgcGFkZGluZzsKIH07CiBzdHJ1Y3QgZnVzZV9ub3RpZnlfcmV0cmlldmVfb3V0IHsKICB1aW50NjRfdCBub3RpZnlfdW5pcXVlOwotIHVpbnQ2NF90IG5vZGVpZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDY0X3Qgbm9kZWlkOwogIHVpbnQ2NF90IG9mZnNldDsKICB1aW50MzJfdCBzaXplOwogIHVpbnQzMl90IHBhZGRpbmc7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgZnVzZV9ub3RpZnlfcmV0cmlldmVfaW4gewogIHVpbnQ2NF90IGR1bW15MTsKICB1aW50NjRfdCBvZmZzZXQ7Ci0gdWludDMyX3Qgc2l6ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3Qgc2l6ZTsKICB1aW50MzJfdCBkdW1teTI7CiAgdWludDY0X3QgZHVtbXkzOwogIHVpbnQ2NF90IGR1bW15NDsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9nZnMyX29uZGlzay5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9nZnMyX29uZGlzay5oCmluZGV4IGEzMTA2YmEuLjE2MTVlYjIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZ2ZzMl9vbmRpc2suaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2dmczJfb25kaXNrLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNkZWZpbmUgR0ZTMl9NT1VOVF9MT0NLIDAKICNkZWZpbmUgR0ZTMl9MSVZFX0xPQ0sgMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgR0ZTMl9UUkFOU19MT0NLIDIKKyNkZWZpbmUgR0ZTMl9GUkVFWkVfTE9DSyAyCiAjZGVmaW5lIEdGUzJfUkVOQU1FX0xPQ0sgMwogI2RlZmluZSBHRlMyX0NPTlRST0xfTE9DSyA0CiAjZGVmaW5lIEdGUzJfTU9VTlRFRF9MT0NLIDUKQEAgLTI2NCwxMDUgKzI2NCwxMTIgQEAKICBfX2JlMTYgZGVfcmVjX2xlbjsKICBfX2JlMTYgZGVfbmFtZV9sZW47CiAgX19iZTE2IGRlX3R5cGU7Ci0gX191OCBfX3BhZFsxNF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotfTsKLXN0cnVjdCBnZnMyX2xlYWYgewotIHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyIGxmX2hlYWRlcjsKLSBfX2JlMTYgbGZfZGVwdGg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fYmUxNiBsZl9lbnRyaWVzOwotIF9fYmUzMiBsZl9kaXJlbnRfZm9ybWF0OwotIF9fYmU2NCBsZl9uZXh0OwogIHVuaW9uIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBfX3BhZFsxNF07Cisgc3RydWN0IHsKKyBfX2JlMTYgZGVfcmFoZWFkOworIF9fdTggcGFkMlsxMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIH07CisgfTsKK307CitzdHJ1Y3QgZ2ZzMl9sZWFmIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGdmczJfbWV0YV9oZWFkZXIgbGZfaGVhZGVyOworIF9fYmUxNiBsZl9kZXB0aDsKKyBfX2JlMTYgbGZfZW50cmllczsKKyBfX2JlMzIgbGZfZGlyZW50X2Zvcm1hdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTY0IGxmX25leHQ7CisgdW5pb24gewogIF9fdTggbGZfcmVzZXJ2ZWRbNjRdOwogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmU2NCBsZl9pbm9kZTsKICBfX2JlMzIgbGZfZGlzdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTMyIGxmX25zZWM7CiAgX19iZTY0IGxmX3NlYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBsZl9yZXNlcnZlZDJbNDBdOwogIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR0ZTMl9FQV9NQVhfTkFNRV9MRU4gMjU1CiAjZGVmaW5lIEdGUzJfRUFfTUFYX0RBVEFfTEVOIDY1NTM2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBHRlMyX0VBVFlQRV9VTlVTRUQgMAogI2RlZmluZSBHRlMyX0VBVFlQRV9VU1IgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR0ZTMl9FQVRZUEVfU1lTIDIKICNkZWZpbmUgR0ZTMl9FQVRZUEVfU0VDVVJJVFkgMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR0ZTMl9FQVRZUEVfTEFTVCAzCiAjZGVmaW5lIEdGUzJfRUFUWVBFX1ZBTElEKHgpICgoeCkgPD0gR0ZTMl9FQVRZUEVfTEFTVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdGUzJfRUFGTEFHX0xBU1QgMHgwMQogc3RydWN0IGdmczJfZWFfaGVhZGVyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTMyIGVhX3JlY19sZW47CiAgX19iZTMyIGVhX2RhdGFfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGVhX25hbWVfbGVuOwogIF9fdTggZWFfdHlwZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBlYV9mbGFnczsKICBfX3U4IGVhX251bV9wdHJzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBfX3BhZDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBHRlMyX0xPR19IRUFEX1VOTU9VTlQgMHgwMDAwMDAwMQogc3RydWN0IGdmczJfbG9nX2hlYWRlciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyIGxoX2hlYWRlcjsKICBfX2JlNjQgbGhfc2VxdWVuY2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmUzMiBsaF9mbGFnczsKICBfX2JlMzIgbGhfdGFpbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTMyIGxoX2Jsa25vOwogIF9fYmUzMiBsaF9oYXNoOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIEdGUzJfTE9HX0RFU0NfTUVUQURBVEEgMzAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBHRlMyX0xPR19ERVNDX1JFVk9LRSAzMDEKICNkZWZpbmUgR0ZTMl9MT0dfREVTQ19KREFUQSAzMDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZ2ZzMl9sb2dfZGVzY3JpcHRvciB7CiAgc3RydWN0IGdmczJfbWV0YV9oZWFkZXIgbGRfaGVhZGVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMzIgbGRfdHlwZTsKICBfX2JlMzIgbGRfbGVuZ3RoOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMzIgbGRfZGF0YTE7CiAgX19iZTMyIGxkX2RhdGEyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGxkX3Jlc2VydmVkWzMyXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBHRlMyX0lOVU1fUVVBTlRVTSAxMDQ4NTc2CiBzdHJ1Y3QgZ2ZzMl9pbnVtX3JhbmdlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTY0IGlyX3N0YXJ0OwogIF9fYmU2NCBpcl9sZW5ndGg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBnZnMyX3N0YXRmc19jaGFuZ2UgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlNjQgc2NfdG90YWw7CiAgX19iZTY0IHNjX2ZyZWU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmU2NCBzY19kaW5vZGVzOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdGUzJfUUNGX1VTRVIgMHgwMDAwMDAwMQogc3RydWN0IGdmczJfcXVvdGFfY2hhbmdlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTY0IHFjX2NoYW5nZTsKICBfX2JlMzIgcWNfZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmUzMiBxY19pZDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGdmczJfcXVvdGFfbHZiIHsKICBfX2JlMzIgcWJfbWFnaWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIF9fcGFkOwogIF9fYmU2NCBxYl9saW1pdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTY0IHFiX3dhcm47CiAgX19iZTY0IHFiX3ZhbHVlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2h5cGVydi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9oeXBlcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTRjNGYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9oeXBlcnYuaApAQCAtMCwwICsxLDIzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfVUFQSV9IWVBFUlZfSAorI2RlZmluZSBfVUFQSV9IWVBFUlZfSAorI2luY2x1ZGUgPGxpbnV4L3V1aWQuaD4KKyNkZWZpbmUgVVRJTF9GV19NSU5PUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVVElMX1dTMks4X0ZXX01BSk9SIDEKKyNkZWZpbmUgVVRJTF9XUzJLOF9GV19WRVJTSU9OIChVVElMX1dTMks4X0ZXX01BSk9SIDw8IDE2IHwgVVRJTF9GV19NSU5PUikKKyNkZWZpbmUgVVRJTF9GV19NQUpPUiAzCisjZGVmaW5lIFVUSUxfRldfVkVSU0lPTiAoVVRJTF9GV19NQUpPUiA8PCAxNiB8IFVUSUxfRldfTUlOT1IpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWU1NfT1BfUkVHSVNURVIgMTI4CitlbnVtIGh2X3Zzc19vcCB7CisgVlNTX09QX0NSRUFURSA9IDAsCisgVlNTX09QX0RFTEVURSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVlNTX09QX0hPVF9CQUNLVVAsCisgVlNTX09QX0dFVF9ETV9JTkZPLAorIFZTU19PUF9CVV9DT01QTEVURSwKKyBWU1NfT1BfRlJFRVpFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWU1NfT1BfVEhBVywKKyBWU1NfT1BfQVVUT19SRUNPVkVSLAorIFZTU19PUF9DT1VOVAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaHZfdnNzX2hkciB7CisgX191OCBvcGVyYXRpb247CisgX191OCByZXNlcnZlZFs3XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWU1NfSEJVX05PX0FVVE9fUkVDT1ZFUlkgMHgwMDAwMDAwNQorc3RydWN0IGh2X3Zzc19jaGVja19mZWF0dXJlIHsKKyBfX3UzMiBmbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGh2X3Zzc19jaGVja19kbV9pbmZvIHsKKyBfX3UzMiBmbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CitzdHJ1Y3QgaHZfdnNzX21zZyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuaW9uIHsKKyBzdHJ1Y3QgaHZfdnNzX2hkciB2c3NfaGRyOworIGludCBlcnJvcjsKKyB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bmlvbiB7Cisgc3RydWN0IGh2X3Zzc19jaGVja19mZWF0dXJlIHZzc19jZjsKKyBzdHJ1Y3QgaHZfdnNzX2NoZWNrX2RtX2luZm8gZG1faW5mbzsKKyB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZGVmaW5lIEZDT1BZX1ZFUlNJT05fMCAwCisjZGVmaW5lIEZDT1BZX0NVUlJFTlRfVkVSU0lPTiBGQ09QWV9WRVJTSU9OXzAKKyNkZWZpbmUgV19NQVhfUEFUSCAyNjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIGh2X2Zjb3B5X29wIHsKKyBTVEFSVF9GSUxFX0NPUFkgPSAwLAorIFdSSVRFX1RPX0ZJTEUsCisgQ09NUExFVEVfRkNPUFksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIENBTkNFTF9GQ09QWSwKK307CitzdHJ1Y3QgaHZfZmNvcHlfaGRyIHsKKyBfX3UzMiBvcGVyYXRpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHV1aWRfbGUgc2VydmljZV9pZDA7CisgdXVpZF9sZSBzZXJ2aWNlX2lkMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZGVmaW5lIE9WRVJfV1JJVEUgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDUkVBVEVfUEFUSCAweDIKK3N0cnVjdCBodl9zdGFydF9mY29weSB7Cisgc3RydWN0IGh2X2Zjb3B5X2hkciBoZHI7CisgX191MTYgZmlsZV9uYW1lW1dfTUFYX1BBVEhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiBwYXRoX25hbWVbV19NQVhfUEFUSF07CisgX191MzIgY29weV9mbGFnczsKKyBfX3U2NCBmaWxlX3NpemU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgREFUQV9GUkFHTUVOVCAoNiAqIDEwMjQpCitzdHJ1Y3QgaHZfZG9fZmNvcHkgeworIHN0cnVjdCBodl9mY29weV9oZHIgaGRyOworIF9fdTY0IG9mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgc2l6ZTsKKyBfX3U4IGRhdGFbREFUQV9GUkFHTUVOVF07Cit9OworI2RlZmluZSBIVl9LVlBfRVhDSEFOR0VfTUFYX1ZBTFVFX1NJWkUgKDIwNDgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVl9LVlBfRVhDSEFOR0VfTUFYX0tFWV9TSVpFICg1MTIpCisjZGVmaW5lIFJFR19TWiAxCisjZGVmaW5lIFJFR19VMzIgNAorI2RlZmluZSBSRUdfVTY0IDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWUF9PUF9SRUdJU1RFUiA0CisjZGVmaW5lIEtWUF9PUF9SRUdJU1RFUjEgMTAwCitlbnVtIGh2X2t2cF9leGNoZ19vcCB7CisgS1ZQX09QX0dFVCA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEtWUF9PUF9TRVQsCisgS1ZQX09QX0RFTEVURSwKKyBLVlBfT1BfRU5VTUVSQVRFLAorIEtWUF9PUF9HRVRfSVBfSU5GTywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgS1ZQX09QX1NFVF9JUF9JTkZPLAorIEtWUF9PUF9DT1VOVAorfTsKK2VudW0gaHZfa3ZwX2V4Y2hnX3Bvb2wgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBLVlBfUE9PTF9FWFRFUk5BTCA9IDAsCisgS1ZQX1BPT0xfR1VFU1QsCisgS1ZQX1BPT0xfQVVUTywKKyBLVlBfUE9PTF9BVVRPX0VYVEVSTkFMLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBLVlBfUE9PTF9BVVRPX0lOVEVSTkFMLAorIEtWUF9QT09MX0NPVU5UCit9OworI2RlZmluZSBIVl9TX09LIDB4MDAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhWX0VfRkFJTCAweDgwMDA0MDA1CisjZGVmaW5lIEhWX1NfQ09OVCAweDgwMDcwMTAzCisjZGVmaW5lIEhWX0VSUk9SX05PVF9TVVBQT1JURUQgMHg4MDA3MDAzMgorI2RlZmluZSBIVl9FUlJPUl9NQUNISU5FX0xPQ0tFRCAweDgwMDcwNEY3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVl9FUlJPUl9ERVZJQ0VfTk9UX0NPTk5FQ1RFRCAweDgwMDcwNDhGCisjZGVmaW5lIEhWX0lOVkFMSURBUkcgMHg4MDA3MDA1NworI2RlZmluZSBIVl9HVUlEX05PVEZPVU5EIDB4ODAwNDEwMDIKKyNkZWZpbmUgSFZfRVJST1JfQUxSRUFEWV9FWElTVFMgMHg4MDA3MDA1MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQUREUl9GQU1JTFlfTk9ORSAweDAwCisjZGVmaW5lIEFERFJfRkFNSUxZX0lQVjQgMHgwMQorI2RlZmluZSBBRERSX0ZBTUlMWV9JUFY2IDB4MDIKKyNkZWZpbmUgTUFYX0FEQVBURVJfSURfU0laRSAxMjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1BWF9JUF9BRERSX1NJWkUgMTAyNAorI2RlZmluZSBNQVhfR0FURVdBWV9TSVpFIDUxMgorc3RydWN0IGh2X2t2cF9pcGFkZHJfdmFsdWUgeworIF9fdTE2IGFkYXB0ZXJfaWRbTUFYX0FEQVBURVJfSURfU0laRV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYWRkcl9mYW1pbHk7CisgX191OCBkaGNwX2VuYWJsZWQ7CisgX191MTYgaXBfYWRkcltNQVhfSVBfQUREUl9TSVpFXTsKKyBfX3UxNiBzdWJfbmV0W01BWF9JUF9BRERSX1NJWkVdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiBnYXRlX3dheVtNQVhfR0FURVdBWV9TSVpFXTsKKyBfX3UxNiBkbnNfYWRkcltNQVhfSVBfQUREUl9TSVpFXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CitzdHJ1Y3QgaHZfa3ZwX2hkciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggb3BlcmF0aW9uOworIF9fdTggcG9vbDsKKyBfX3UxNiBwYWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBodl9rdnBfZXhjaGdfbXNnX3ZhbHVlIHsKKyBfX3UzMiB2YWx1ZV90eXBlOworIF9fdTMyIGtleV9zaXplOworIF9fdTMyIHZhbHVlX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTgga2V5W0hWX0tWUF9FWENIQU5HRV9NQVhfS0VZX1NJWkVdOworIHVuaW9uIHsKKyBfX3U4IHZhbHVlW0hWX0tWUF9FWENIQU5HRV9NQVhfVkFMVUVfU0laRV07CisgX191MzIgdmFsdWVfdTMyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB2YWx1ZV91NjQ7CisgfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CitzdHJ1Y3QgaHZfa3ZwX21zZ19lbnVtZXJhdGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBpbmRleDsKKyBzdHJ1Y3QgaHZfa3ZwX2V4Y2hnX21zZ192YWx1ZSBkYXRhOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK3N0cnVjdCBodl9rdnBfbXNnX2dldCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBodl9rdnBfZXhjaGdfbXNnX3ZhbHVlIGRhdGE7Cit9Oworc3RydWN0IGh2X2t2cF9tc2dfc2V0IHsKKyBzdHJ1Y3QgaHZfa3ZwX2V4Y2hnX21zZ192YWx1ZSBkYXRhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgaHZfa3ZwX21zZ19kZWxldGUgeworIF9fdTMyIGtleV9zaXplOworIF9fdTgga2V5W0hWX0tWUF9FWENIQU5HRV9NQVhfS0VZX1NJWkVdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgaHZfa3ZwX3JlZ2lzdGVyIHsKKyBfX3U4IHZlcnNpb25bSFZfS1ZQX0VYQ0hBTkdFX01BWF9LRVlfU0laRV07Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBodl9rdnBfbXNnIHsKKyB1bmlvbiB7Cisgc3RydWN0IGh2X2t2cF9oZHIga3ZwX2hkcjsKKyBpbnQgZXJyb3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIH07CisgdW5pb24geworIHN0cnVjdCBodl9rdnBfbXNnX2dldCBrdnBfZ2V0OworIHN0cnVjdCBodl9rdnBfbXNnX3NldCBrdnBfc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgaHZfa3ZwX21zZ19kZWxldGUga3ZwX2RlbGV0ZTsKKyBzdHJ1Y3QgaHZfa3ZwX21zZ19lbnVtZXJhdGUga3ZwX2VudW1fZGF0YTsKKyBzdHJ1Y3QgaHZfa3ZwX2lwYWRkcl92YWx1ZSBrdnBfaXBfdmFsOworIHN0cnVjdCBodl9rdnBfcmVnaXN0ZXIga3ZwX3JlZ2lzdGVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB9IGJvZHk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworc3RydWN0IGh2X2t2cF9pcF9tc2cgeworIF9fdTggb3BlcmF0aW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHBvb2w7Cisgc3RydWN0IGh2X2t2cF9pcGFkZHJfdmFsdWUga3ZwX2lwX3ZhbDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmLmgKaW5kZXggNGVjYTg0ZC4uNTMwMmYxMyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWYuaApAQCAtMjYsMTg2ICsyNiwxODUgQEAKICNkZWZpbmUgSUZBTElBU1ogMjU2CiAjaW5jbHVkZSA8bGludXgvaGRsYy9pb2N0bC5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUZGX1VQIDB4MQotI2RlZmluZSBJRkZfQlJPQURDQVNUIDB4MgotI2RlZmluZSBJRkZfREVCVUcgMHg0Ci0jZGVmaW5lIElGRl9MT09QQkFDSyAweDgKK2VudW0gbmV0X2RldmljZV9mbGFncyB7CisgSUZGX1VQID0gMTw8MCwKKyBJRkZfQlJPQURDQVNUID0gMTw8MSwKKyBJRkZfREVCVUcgPSAxPDwyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUZGX1BPSU5UT1BPSU5UIDB4MTAKLSNkZWZpbmUgSUZGX05PVFJBSUxFUlMgMHgyMAotI2RlZmluZSBJRkZfUlVOTklORyAweDQwCi0jZGVmaW5lIElGRl9OT0FSUCAweDgwCisgSUZGX0xPT1BCQUNLID0gMTw8MywKKyBJRkZfUE9JTlRPUE9JTlQgPSAxPDw0LAorIElGRl9OT1RSQUlMRVJTID0gMTw8NSwKKyBJRkZfUlVOTklORyA9IDE8PDYsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJRkZfUFJPTUlTQyAweDEwMAotI2RlZmluZSBJRkZfQUxMTVVMVEkgMHgyMDAKLSNkZWZpbmUgSUZGX01BU1RFUiAweDQwMAotI2RlZmluZSBJRkZfU0xBVkUgMHg4MDAKKyBJRkZfTk9BUlAgPSAxPDw3LAorIElGRl9QUk9NSVNDID0gMTw8OCwKKyBJRkZfQUxMTVVMVEkgPSAxPDw5LAorIElGRl9NQVNURVIgPSAxPDwxMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElGRl9NVUxUSUNBU1QgMHgxMDAwCi0jZGVmaW5lIElGRl9QT1JUU0VMIDB4MjAwMAotI2RlZmluZSBJRkZfQVVUT01FRElBIDB4NDAwMAotI2RlZmluZSBJRkZfRFlOQU1JQyAweDgwMDAKKyBJRkZfU0xBVkUgPSAxPDwxMSwKKyBJRkZfTVVMVElDQVNUID0gMTw8MTIsCisgSUZGX1BPUlRTRUwgPSAxPDwxMywKKyBJRkZfQVVUT01FRElBID0gMTw8MTQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJRkZfTE9XRVJfVVAgMHgxMDAwMAotI2RlZmluZSBJRkZfRE9STUFOVCAweDIwMDAwCi0jZGVmaW5lIElGRl9FQ0hPIDB4NDAwMDAKKyBJRkZfRFlOQU1JQyA9IDE8PDE1LAorIElGRl9MT1dFUl9VUCA9IDE8PDE2LAorIElGRl9ET1JNQU5UID0gMTw8MTcsCisgSUZGX0VDSE8gPSAxPDwxOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBJRkZfVVAgSUZGX1VQCisjZGVmaW5lIElGRl9CUk9BRENBU1QgSUZGX0JST0FEQ0FTVAorI2RlZmluZSBJRkZfREVCVUcgSUZGX0RFQlVHCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRkZfTE9PUEJBQ0sgSUZGX0xPT1BCQUNLCisjZGVmaW5lIElGRl9QT0lOVE9QT0lOVCBJRkZfUE9JTlRPUE9JTlQKKyNkZWZpbmUgSUZGX05PVFJBSUxFUlMgSUZGX05PVFJBSUxFUlMKKyNkZWZpbmUgSUZGX1JVTk5JTkcgSUZGX1JVTk5JTkcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElGRl9OT0FSUCBJRkZfTk9BUlAKKyNkZWZpbmUgSUZGX1BST01JU0MgSUZGX1BST01JU0MKKyNkZWZpbmUgSUZGX0FMTE1VTFRJIElGRl9BTExNVUxUSQorI2RlZmluZSBJRkZfTUFTVEVSIElGRl9NQVNURVIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElGRl9TTEFWRSBJRkZfU0xBVkUKKyNkZWZpbmUgSUZGX01VTFRJQ0FTVCBJRkZfTVVMVElDQVNUCisjZGVmaW5lIElGRl9QT1JUU0VMIElGRl9QT1JUU0VMCisjZGVmaW5lIElGRl9BVVRPTUVESUEgSUZGX0FVVE9NRURJQQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZGX0RZTkFNSUMgSUZGX0RZTkFNSUMKKyNkZWZpbmUgSUZGX0xPV0VSX1VQIElGRl9MT1dFUl9VUAorI2RlZmluZSBJRkZfRE9STUFOVCBJRkZfRE9STUFOVAorI2RlZmluZSBJRkZfRUNITyBJRkZfRUNITworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZGX1ZPTEFUSUxFIChJRkZfTE9PUEJBQ0t8SUZGX1BPSU5UT1BPSU5UfElGRl9CUk9BRENBU1R8SUZGX0VDSE98ICBJRkZfTUFTVEVSfElGRl9TTEFWRXxJRkZfUlVOTklOR3xJRkZfTE9XRVJfVVB8SUZGX0RPUk1BTlQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJRkZfODAyXzFRX1ZMQU4gMHgxCi0jZGVmaW5lIElGRl9FQlJJREdFIDB4MgotI2RlZmluZSBJRkZfU0xBVkVfSU5BQ1RJVkUgMHg0Ci0jZGVmaW5lIElGRl9NQVNURVJfODAyM0FEIDB4OAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUZGX01BU1RFUl9BTEIgMHgxMAotI2RlZmluZSBJRkZfQk9ORElORyAweDIwCi0jZGVmaW5lIElGRl9TTEFWRV9ORUVEQVJQIDB4NDAKLSNkZWZpbmUgSUZGX0lTQVRBUCAweDgwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJRkZfTUFTVEVSX0FSUE1PTiAweDEwMAotI2RlZmluZSBJRkZfV0FOX0hETEMgMHgyMDAKLSNkZWZpbmUgSUZGX1hNSVRfRFNUX1JFTEVBU0UgMHg0MDAKLSNkZWZpbmUgSUZGX0RPTlRfQlJJREdFIDB4ODAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJRkZfRElTQUJMRV9ORVRQT0xMIDB4MTAwMAotI2RlZmluZSBJRkZfTUFDVkxBTl9QT1JUIDB4MjAwMAotI2RlZmluZSBJRkZfQlJJREdFX1BPUlQgMHg0MDAwCi0jZGVmaW5lIElGRl9PVlNfREFUQVBBVEggMHg4MDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJRkZfVFhfU0tCX1NIQVJJTkcgMHgxMDAwMAotI2RlZmluZSBJRkZfVU5JQ0FTVF9GTFQgMHgyMDAwMAotI2RlZmluZSBJRkZfVEVBTV9QT1JUIDB4NDAwMDAKLSNkZWZpbmUgSUZGX1NVUFBfTk9GQ1MgMHg4MDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUZGX0xJVkVfQUREUl9DSEFOR0UgMHgxMDAwMDAKLSNkZWZpbmUgSUZGX01BQ1ZMQU4gMHgyMDAwMDAKICNkZWZpbmUgSUZfR0VUX0lGQUNFIDB4MDAwMQogI2RlZmluZSBJRl9HRVRfUFJPVE8gMHgwMDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRl9JRkFDRV9WMzUgMHgxMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRl9JRkFDRV9WMjQgMHgxMDAxCiAjZGVmaW5lIElGX0lGQUNFX1gyMSAweDEwMDIKICNkZWZpbmUgSUZfSUZBQ0VfVDEgMHgxMDAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRl9JRkFDRV9FMSAweDEwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElGX0lGQUNFX1NZTkNfU0VSSUFMIDB4MTAwNQogI2RlZmluZSBJRl9JRkFDRV9YMjFEIDB4MTAwNgogI2RlZmluZSBJRl9QUk9UT19IRExDIDB4MjAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZfUFJPVE9fUFBQIDB4MjAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZfUFJPVE9fQ0lTQ08gMHgyMDAyCiAjZGVmaW5lIElGX1BST1RPX0ZSIDB4MjAwMwogI2RlZmluZSBJRl9QUk9UT19GUl9BRERfUFZDIDB4MjAwNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZfUFJPVE9fRlJfREVMX1BWQyAweDIwMDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElGX1BST1RPX1gyNSAweDIwMDYKICNkZWZpbmUgSUZfUFJPVE9fSERMQ19FVEggMHgyMDA3CiAjZGVmaW5lIElGX1BST1RPX0ZSX0FERF9FVEhfUFZDIDB4MjAwOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZfUFJPVE9fRlJfREVMX0VUSF9QVkMgMHgyMDA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRl9QUk9UT19GUl9QVkMgMHgyMDBBCiAjZGVmaW5lIElGX1BST1RPX0ZSX0VUSF9QVkMgMHgyMDBCCiAjZGVmaW5lIElGX1BST1RPX1JBVyAweDIwMEMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZfT1BFUl9VTktOT1dOLAogIElGX09QRVJfTk9UUFJFU0VOVCwKICBJRl9PUEVSX0RPV04sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGX09QRVJfTE9XRVJMQVlFUkRPV04sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGX09QRVJfVEVTVElORywKICBJRl9PUEVSX0RPUk1BTlQsCiAgSUZfT1BFUl9VUCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIElGX0xJTktfTU9ERV9ERUZBVUxULAogIElGX0xJTktfTU9ERV9ET1JNQU5ULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlmbWFwIHsKICB1bnNpZ25lZCBsb25nIG1lbV9zdGFydDsKICB1bnNpZ25lZCBsb25nIG1lbV9lbmQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IGJhc2VfYWRkcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBpcnE7CiAgdW5zaWduZWQgY2hhciBkbWE7CiAgdW5zaWduZWQgY2hhciBwb3J0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlmX3NldHRpbmdzIHsKICB1bnNpZ25lZCBpbnQgdHlwZTsKICB1bnNpZ25lZCBpbnQgc2l6ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICByYXdfaGRsY19wcm90byBfX3VzZXIgKnJhd19oZGxjOwogIGNpc2NvX3Byb3RvIF9fdXNlciAqY2lzY287CiAgZnJfcHJvdG8gX191c2VyICpmcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZnJfcHJvdG9fcHZjIF9fdXNlciAqZnJfcHZjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBmcl9wcm90b19wdmNfaW5mbyBfX3VzZXIgKmZyX3B2Y19pbmZvOwogIHN5bmNfc2VyaWFsX3NldHRpbmdzIF9fdXNlciAqc3luYzsKICB0ZTFfc2V0dGluZ3MgX191c2VyICp0ZTE7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gaWZzX2lmc3U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBpZnJlcSB7CiAjZGVmaW5lIElGSFdBRERSTEVOIDYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgewogIGNoYXIgaWZybl9uYW1lW0lGTkFNU0laXTsKICB9IGlmcl9pZnJuOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzb2NrYWRkciBpZnJ1X2FkZHI7CiAgc3RydWN0IHNvY2thZGRyIGlmcnVfZHN0YWRkcjsKICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9icm9hZGFkZHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzb2NrYWRkciBpZnJ1X25ldG1hc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzb2NrYWRkciBpZnJ1X2h3YWRkcjsKICBzaG9ydCBpZnJ1X2ZsYWdzOwogIGludCBpZnJ1X2l2YWx1ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGlmcnVfbXR1OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaWZtYXAgaWZydV9tYXA7CiAgY2hhciBpZnJ1X3NsYXZlW0lGTkFNU0laXTsKICBjaGFyIGlmcnVfbmV3bmFtZVtJRk5BTVNJWl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgX191c2VyICogaWZydV9kYXRhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaWZfc2V0dGluZ3MgaWZydV9zZXR0aW5nczsKICB9IGlmcl9pZnJ1OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGlmcl9uYW1lIGlmcl9pZnJuLmlmcm5fbmFtZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaWZyX2h3YWRkciBpZnJfaWZydS5pZnJ1X2h3YWRkcgogI2RlZmluZSBpZnJfYWRkciBpZnJfaWZydS5pZnJ1X2FkZHIKICNkZWZpbmUgaWZyX2RzdGFkZHIgaWZyX2lmcnUuaWZydV9kc3RhZGRyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBpZnJfYnJvYWRhZGRyIGlmcl9pZnJ1LmlmcnVfYnJvYWRhZGRyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBpZnJfbmV0bWFzayBpZnJfaWZydS5pZnJ1X25ldG1hc2sKICNkZWZpbmUgaWZyX2ZsYWdzIGlmcl9pZnJ1LmlmcnVfZmxhZ3MKICNkZWZpbmUgaWZyX21ldHJpYyBpZnJfaWZydS5pZnJ1X2l2YWx1ZQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaWZyX210dSBpZnJfaWZydS5pZnJ1X210dQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaWZyX21hcCBpZnJfaWZydS5pZnJ1X21hcAogI2RlZmluZSBpZnJfc2xhdmUgaWZyX2lmcnUuaWZydV9zbGF2ZQogI2RlZmluZSBpZnJfZGF0YSBpZnJfaWZydS5pZnJ1X2RhdGEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGlmcl9pZmluZGV4IGlmcl9pZnJ1LmlmcnVfaXZhbHVlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBpZnJfYmFuZHdpZHRoIGlmcl9pZnJ1LmlmcnVfaXZhbHVlCiAjZGVmaW5lIGlmcl9xbGVuIGlmcl9pZnJ1LmlmcnVfaXZhbHVlCiAjZGVmaW5lIGlmcl9uZXduYW1lIGlmcl9pZnJ1LmlmcnVfbmV3bmFtZQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaWZyX3NldHRpbmdzIGlmcl9pZnJ1LmlmcnVfc2V0dGluZ3MKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWZjb25mIHsKICBpbnQgaWZjX2xlbjsKICB1bmlvbiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgX191c2VyICppZmN1X2J1ZjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGlmcmVxIF9fdXNlciAqaWZjdV9yZXE7CiAgfSBpZmNfaWZjdTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBpZmNfYnVmIGlmY19pZmN1LmlmY3VfYnVmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBpZmNfcmVxIGlmY19pZmN1LmlmY3VfcmVxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfZXRoZXIuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfZXRoZXIuaAppbmRleCA2MTBmNzBiLi42ZDg4YmE4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2V0aGVyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9ldGhlci5oCkBAIC02MiwxMiArNjIsMTIgQEAKICNkZWZpbmUgRVRIX1BfU0xPVyAweDg4MDkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVUSF9QX1dDQ1AgMHg4ODNFCi0jZGVmaW5lIEVUSF9QX1BQUF9ESVNDIDB4ODg2MwotI2RlZmluZSBFVEhfUF9QUFBfU0VTIDB4ODg2NAogI2RlZmluZSBFVEhfUF9NUExTX1VDIDB4ODg0NwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVRIX1BfTVBMU19NQyAweDg4NDgKICNkZWZpbmUgRVRIX1BfQVRNTVBPQSAweDg4NGMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSF9QX1BQUF9ESVNDIDB4ODg2MworI2RlZmluZSBFVEhfUF9QUFBfU0VTIDB4ODg2NAogI2RlZmluZSBFVEhfUF9MSU5LX0NUTCAweDg4NmMKICNkZWZpbmUgRVRIX1BfQVRNRkFURSAweDg4ODQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC04Niw0OCArODYsNTAgQEAKICNkZWZpbmUgRVRIX1BfVERMUyAweDg5MEQKICNkZWZpbmUgRVRIX1BfRklQIDB4ODkxNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIX1BfODAyMjEgMHg4OTE3CisjZGVmaW5lIEVUSF9QX0xPT1BCQUNLIDB4OTAwMAogI2RlZmluZSBFVEhfUF9RSU5RMSAweDkxMDAKICNkZWZpbmUgRVRIX1BfUUlOUTIgMHg5MjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFVEhfUF9RSU5RMyAweDkzMDAKICNkZWZpbmUgRVRIX1BfRURTQSAweERBREEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVUSF9QX0FGX0lVQ1YgMHhGQkZCCiAjZGVmaW5lIEVUSF9QXzgwMl8zX01JTiAweDA2MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVUSF9QXzgwMl8zIDB4MDAwMQogI2RlZmluZSBFVEhfUF9BWDI1IDB4MDAwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVRIX1BfQUxMIDB4MDAwMwogI2RlZmluZSBFVEhfUF84MDJfMiAweDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVUSF9QX1NOQVAgMHgwMDA1CiAjZGVmaW5lIEVUSF9QX0REQ01QIDB4MDAwNgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVRIX1BfV0FOX1BQUCAweDAwMDcKICNkZWZpbmUgRVRIX1BfUFBQX01QIDB4MDAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVRIX1BfTE9DQUxUQUxLIDB4MDAwOQogI2RlZmluZSBFVEhfUF9DQU4gMHgwMDBDCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFVEhfUF9DQU5GRCAweDAwMEQKICNkZWZpbmUgRVRIX1BfUFBQVEFMSyAweDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVUSF9QX1RSXzgwMl8yIDB4MDAxMQogI2RlZmluZSBFVEhfUF9NT0JJVEVYIDB4MDAxNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVRIX1BfQ09OVFJPTCAweDAwMTYKICNkZWZpbmUgRVRIX1BfSVJEQSAweDAwMTcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVUSF9QX0VDT05FVCAweDAwMTgKICNkZWZpbmUgRVRIX1BfSERMQyAweDAwMTkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVUSF9QX0FSQ05FVCAweDAwMUEKICNkZWZpbmUgRVRIX1BfRFNBIDB4MDAxQgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVRIX1BfVFJBSUxFUiAweDAwMUMKICNkZWZpbmUgRVRIX1BfUEhPTkVUIDB4MDBGNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVRIX1BfSUVFRTgwMjE1NCAweDAwRjYKICNkZWZpbmUgRVRIX1BfQ0FJRiAweDAwRjcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZXRoaGRyIHsKICB1bnNpZ25lZCBjaGFyIGhfZGVzdFtFVEhfQUxFTl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgaF9zb3VyY2VbRVRIX0FMRU5dOwogIF9fYmUxNiBoX3Byb3RvOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2ZkZGkuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfZmRkaS5oCmluZGV4IDY5OWFlNDQuLmNlZTE4YzAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfZmRkaS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfZmRkaS5oCkBAIC0zMSw0MyArMzEsNDMgQEAKICNkZWZpbmUgRkRESV9LX0xMQ19aTEVOIDEzCiAjZGVmaW5lIEZERElfS19MTENfTEVOIDQ0OTEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZERElfS19PVUlfTEVOIDMKICNkZWZpbmUgRkRESV9GQ19LX1ZPSUQgMHgwMAogI2RlZmluZSBGRERJX0ZDX0tfTk9OX1JFU1RSSUNURURfVE9LRU4gMHg4MAogI2RlZmluZSBGRERJX0ZDX0tfUkVTVFJJQ1RFRF9UT0tFTiAweEMwCi0jZGVmaW5lIEZERElfRkNfS19TTVRfTUlOIDB4NDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZERElfRkNfS19TTVRfTUlOIDB4NDEKICNkZWZpbmUgRkRESV9GQ19LX1NNVF9NQVggMHg0RgogI2RlZmluZSBGRERJX0ZDX0tfTUFDX01JTiAweEMxCiAjZGVmaW5lIEZERElfRkNfS19NQUNfTUFYIDB4Q0YKLSNkZWZpbmUgRkRESV9GQ19LX0FTWU5DX0xMQ19NSU4gMHg1MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkRESV9GQ19LX0FTWU5DX0xMQ19NSU4gMHg1MAogI2RlZmluZSBGRERJX0ZDX0tfQVNZTkNfTExDX0RFRiAweDU0CiAjZGVmaW5lIEZERElfRkNfS19BU1lOQ19MTENfTUFYIDB4NUYKICNkZWZpbmUgRkRESV9GQ19LX1NZTkNfTExDX01JTiAweEQwCi0jZGVmaW5lIEZERElfRkNfS19TWU5DX0xMQ19NQVggMHhENwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkRESV9GQ19LX1NZTkNfTExDX01BWCAweEQ3CiAjZGVmaW5lIEZERElfRkNfS19JTVBMRU1FTlRPUl9NSU4gMHg2MAogI2RlZmluZSBGRERJX0ZDX0tfSU1QTEVNRU5UT1JfTUFYIDB4NkYKICNkZWZpbmUgRkRESV9GQ19LX1JFU0VSVkVEX01JTiAweDcwCi0jZGVmaW5lIEZERElfRkNfS19SRVNFUlZFRF9NQVggMHg3RgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkRESV9GQ19LX1JFU0VSVkVEX01BWCAweDdGCiAjZGVmaW5lIEZERElfRVhURU5ERURfU0FQIDB4QUEKICNkZWZpbmUgRkRESV9VSV9DTUQgMHgwMwogc3RydWN0IGZkZGlfODAyMl8xX2hkciB7Ci0gX191OCBkc2FwOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGRzYXA7CiAgX191OCBzc2FwOwogIF9fdTggY3RybDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci1zdHJ1Y3QgZmRkaV84MDIyXzJfaGRyIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZmRkaV84MDIyXzJfaGRyIHsKICBfX3U4IGRzYXA7CiAgX191OCBzc2FwOwogIF9fdTggY3RybF8xOwotIF9fdTggY3RybF8yOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGN0cmxfMjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0jZGVmaW5lIEZERElfS19PVUlfTEVOIDMKIHN0cnVjdCBmZGRpX3NuYXBfaGRyIHsKICBfX3U4IGRzYXA7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtODIsMTMgKzgyLDEyIEBACiAgX191OCBkYWRkcltGRERJX0tfQUxFTl07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggc2FkZHJbRkRESV9LX0FMRU5dOwotIHVuaW9uCi0geworIHVuaW9uIHsKICBzdHJ1Y3QgZmRkaV84MDIyXzFfaGRyIGxsY184MDIyXzE7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBmZGRpXzgwMjJfMl9oZHIgbGxjXzgwMjJfMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGZkZGlfc25hcF9oZHIgbGxjX3NuYXA7CiAgfSBoZHI7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfbGluay5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9saW5rLmgKaW5kZXggYWE1M2YwZS4uMWYzMjBhMyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9saW5rLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9saW5rLmgKQEAgLTE1MSwxNDggKzE1MSwxNTMgQEAKICBJRkxBX0NBUlJJRVIsCiAgSUZMQV9QSFlTX1BPUlRfSUQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQ0FSUklFUl9DSEFOR0VTLAogIF9fSUZMQV9NQVgKIH07CiAjZGVmaW5lIElGTEFfTUFYIChfX0lGTEFfTUFYIC0gMSkKLSNkZWZpbmUgSUZMQV9SVEEocikgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpKSkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRkxBX1JUQShyKSAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpKSkKICNkZWZpbmUgSUZMQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpCiBlbnVtIHsKICBJRkxBX0lORVRfVU5TUEVDLAotIElGTEFfSU5FVF9DT05GLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0lORVRfQ09ORiwKICBfX0lGTEFfSU5FVF9NQVgsCiB9OwogI2RlZmluZSBJRkxBX0lORVRfTUFYIChfX0lGTEFfSU5FVF9NQVggLSAxKQotZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CiAgSUZMQV9JTkVUNl9VTlNQRUMsCiAgSUZMQV9JTkVUNl9GTEFHUywKICBJRkxBX0lORVQ2X0NPTkYsCi0gSUZMQV9JTkVUNl9TVEFUUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9JTkVUNl9TVEFUUywKICBJRkxBX0lORVQ2X01DQVNULAogIElGTEFfSU5FVDZfQ0FDSEVJTkZPLAogIElGTEFfSU5FVDZfSUNNUDZTVEFUUywKLSBJRkxBX0lORVQ2X1RPS0VOLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0lORVQ2X1RPS0VOLAogIF9fSUZMQV9JTkVUNl9NQVgKIH07CiAjZGVmaW5lIElGTEFfSU5FVDZfTUFYIChfX0lGTEFfSU5FVDZfTUFYIC0gMSkKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIEJSSURHRV9NT0RFX1VOU1BFQywKICBCUklER0VfTU9ERV9IQUlSUElOLAogfTsKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIElGTEFfQlJQT1JUX1VOU1BFQywKICBJRkxBX0JSUE9SVF9TVEFURSwKICBJRkxBX0JSUE9SVF9QUklPUklUWSwKLSBJRkxBX0JSUE9SVF9DT1NULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0JSUE9SVF9DT1NULAogIElGTEFfQlJQT1JUX01PREUsCiAgSUZMQV9CUlBPUlRfR1VBUkQsCiAgSUZMQV9CUlBPUlRfUFJPVEVDVCwKLSBJRkxBX0JSUE9SVF9GQVNUX0xFQVZFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0JSUE9SVF9GQVNUX0xFQVZFLAogIElGTEFfQlJQT1JUX0xFQVJOSU5HLAogIElGTEFfQlJQT1JUX1VOSUNBU1RfRkxPT0QsCiAgX19JRkxBX0JSUE9SVF9NQVgKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgSUZMQV9CUlBPUlRfTUFYIChfX0lGTEFfQlJQT1JUX01BWCAtIDEpCiBzdHJ1Y3QgaWZsYV9jYWNoZWluZm8gewogIF9fdTMyIG1heF9yZWFzbV9sZW47Ci0gX191MzIgdHN0YW1wOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0c3RhbXA7CiAgX191MzIgcmVhY2hhYmxlX3RpbWU7CiAgX191MzIgcmV0cmFuc190aW1lOwogfTsKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIElGTEFfSU5GT19VTlNQRUMsCiAgSUZMQV9JTkZPX0tJTkQsCiAgSUZMQV9JTkZPX0RBVEEsCi0gSUZMQV9JTkZPX1hTVEFUUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9JTkZPX1hTVEFUUywKICBJRkxBX0lORk9fU0xBVkVfS0lORCwKICBJRkxBX0lORk9fU0xBVkVfREFUQSwKICBfX0lGTEFfSU5GT19NQVgsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIElGTEFfSU5GT19NQVggKF9fSUZMQV9JTkZPX01BWCAtIDEpCiBlbnVtIHsKICBJRkxBX1ZMQU5fVU5TUEVDLAotIElGTEFfVkxBTl9JRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9WTEFOX0lELAogIElGTEFfVkxBTl9GTEFHUywKICBJRkxBX1ZMQU5fRUdSRVNTX1FPUywKICBJRkxBX1ZMQU5fSU5HUkVTU19RT1MsCi0gSUZMQV9WTEFOX1BST1RPQ09MLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX1ZMQU5fUFJPVE9DT0wsCiAgX19JRkxBX1ZMQU5fTUFYLAogfTsKICNkZWZpbmUgSUZMQV9WTEFOX01BWCAoX19JRkxBX1ZMQU5fTUFYIC0gMSkKLXN0cnVjdCBpZmxhX3ZsYW5fZmxhZ3MgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpZmxhX3ZsYW5fZmxhZ3MgewogIF9fdTMyIGZsYWdzOwogIF9fdTMyIG1hc2s7CiB9OwotZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CiAgSUZMQV9WTEFOX1FPU19VTlNQRUMsCiAgSUZMQV9WTEFOX1FPU19NQVBQSU5HLAogIF9fSUZMQV9WTEFOX1FPU19NQVgKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgSUZMQV9WTEFOX1FPU19NQVggKF9fSUZMQV9WTEFOX1FPU19NQVggLSAxKQogc3RydWN0IGlmbGFfdmxhbl9xb3NfbWFwcGluZyB7CiAgX191MzIgZnJvbTsKLSBfX3UzMiB0bzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdG87CiB9OwogZW51bSB7CiAgSUZMQV9NQUNWTEFOX1VOU1BFQywKLSBJRkxBX01BQ1ZMQU5fTU9ERSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9NQUNWTEFOX01PREUsCiAgSUZMQV9NQUNWTEFOX0ZMQUdTLAogIF9fSUZMQV9NQUNWTEFOX01BWCwKIH07Ci0jZGVmaW5lIElGTEFfTUFDVkxBTl9NQVggKF9fSUZMQV9NQUNWTEFOX01BWCAtIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRkxBX01BQ1ZMQU5fTUFYIChfX0lGTEFfTUFDVkxBTl9NQVggLSAxKQogZW51bSBtYWN2bGFuX21vZGUgewogIE1BQ1ZMQU5fTU9ERV9QUklWQVRFID0gMSwKICBNQUNWTEFOX01PREVfVkVQQSA9IDIsCi0gTUFDVkxBTl9NT0RFX0JSSURHRSA9IDQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE1BQ1ZMQU5fTU9ERV9CUklER0UgPSA0LAogIE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSA9IDgsCiB9OwogI2RlZmluZSBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDIDEKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIElGTEFfVlhMQU5fVU5TUEVDLAogIElGTEFfVlhMQU5fSUQsCiAgSUZMQV9WWExBTl9HUk9VUCwKLSBJRkxBX1ZYTEFOX0xJTkssCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfVlhMQU5fTElOSywKICBJRkxBX1ZYTEFOX0xPQ0FMLAogIElGTEFfVlhMQU5fVFRMLAogIElGTEFfVlhMQU5fVE9TLAotIElGTEFfVlhMQU5fTEVBUk5JTkcsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfVlhMQU5fTEVBUk5JTkcsCiAgSUZMQV9WWExBTl9BR0VJTkcsCiAgSUZMQV9WWExBTl9MSU1JVCwKICBJRkxBX1ZYTEFOX1BPUlRfUkFOR0UsCi0gSUZMQV9WWExBTl9QUk9YWSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9WWExBTl9QUk9YWSwKICBJRkxBX1ZYTEFOX1JTQywKICBJRkxBX1ZYTEFOX0wyTUlTUywKICBJRkxBX1ZYTEFOX0wzTUlTUywKLSBJRkxBX1ZYTEFOX1BPUlQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfVlhMQU5fUE9SVCwKICBJRkxBX1ZYTEFOX0dST1VQNiwKICBJRkxBX1ZYTEFOX0xPQ0FMNiwKKyBJRkxBX1ZYTEFOX1VEUF9DU1VNLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1RYLAorIElGTEFfVlhMQU5fVURQX1pFUk9fQ1NVTTZfUlgsCiAgX19JRkxBX1ZYTEFOX01BWAogfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC0zNzksMTMwICszODQsMTM3IEBACiAgSUZMQV9WRl9UWF9SQVRFLAogIElGTEFfVkZfU1BPT0ZDSEssCiAgSUZMQV9WRl9MSU5LX1NUQVRFLAotIF9fSUZMQV9WRl9NQVgsCisgSUZMQV9WRl9SQVRFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX0lGTEFfVkZfTUFYLAogfTsKICNkZWZpbmUgSUZMQV9WRl9NQVggKF9fSUZMQV9WRl9NQVggLSAxKQogc3RydWN0IGlmbGFfdmZfbWFjIHsKLSBfX3UzMiB2ZjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdmY7CiAgX191OCBtYWNbMzJdOwogfTsKIHN0cnVjdCBpZmxhX3ZmX3ZsYW4gewotIF9fdTMyIHZmOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB2ZjsKICBfX3UzMiB2bGFuOwogIF9fdTMyIHFvczsKIH07Ci1zdHJ1Y3QgaWZsYV92Zl90eF9yYXRlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaWZsYV92Zl90eF9yYXRlIHsKICBfX3UzMiB2ZjsKICBfX3UzMiByYXRlOwogfTsKLXN0cnVjdCBpZmxhX3ZmX3Nwb29mY2hrIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaWZsYV92Zl9yYXRlIHsKKyBfX3UzMiB2ZjsKKyBfX3UzMiBtaW5fdHhfcmF0ZTsKKyBfX3UzMiBtYXhfdHhfcmF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Oworc3RydWN0IGlmbGFfdmZfc3Bvb2ZjaGsgewogIF9fdTMyIHZmOwogIF9fdTMyIHNldHRpbmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX1ZGX0xJTktfU1RBVEVfQVVUTywKICBJRkxBX1ZGX0xJTktfU1RBVEVfRU5BQkxFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX1ZGX0xJTktfU1RBVEVfRElTQUJMRSwKICBfX0lGTEFfVkZfTElOS19TVEFURV9NQVgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBpZmxhX3ZmX2xpbmtfc3RhdGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB2ZjsKICBfX3UzMiBsaW5rX3N0YXRlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZMQV9WRl9QT1JUX1VOU1BFQywKICBJRkxBX1ZGX1BPUlQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fSUZMQV9WRl9QT1JUX01BWCwKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRkxBX1ZGX1BPUlRfTUFYIChfX0lGTEFfVkZfUE9SVF9NQVggLSAxKQogZW51bSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfUE9SVF9VTlNQRUMsCiAgSUZMQV9QT1JUX1ZGLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX1BPUlRfUFJPRklMRSwKICBJRkxBX1BPUlRfVlNJX1RZUEUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfUE9SVF9JTlNUQU5DRV9VVUlELAogIElGTEFfUE9SVF9IT1NUX1VVSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfUE9SVF9SRVFVRVNULAogIElGTEFfUE9SVF9SRVNQT05TRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19JRkxBX1BPUlRfTUFYLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElGTEFfUE9SVF9NQVggKF9fSUZMQV9QT1JUX01BWCAtIDEpCiAjZGVmaW5lIFBPUlRfUFJPRklMRV9NQVggNDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBPUlRfVVVJRF9NQVggMTYKICNkZWZpbmUgUE9SVF9TRUxGX1ZGIC0xCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgUE9SVF9SRVFVRVNUX1BSRUFTU09DSUFURSA9IDAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBPUlRfUkVRVUVTVF9QUkVBU1NPQ0lBVEVfUlIsCiAgUE9SVF9SRVFVRVNUX0FTU09DSUFURSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUE9SVF9SRVFVRVNUX0RJU0FTU09DSUFURSwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgUE9SVF9WRFBfUkVTUE9OU0VfU1VDQ0VTUyA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBPUlRfVkRQX1JFU1BPTlNFX0lOVkFMSURfRk9STUFULAogIFBPUlRfVkRQX1JFU1BPTlNFX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBPUlRfVkRQX1JFU1BPTlNFX1VOVVNFRF9WVElELAogIFBPUlRfVkRQX1JFU1BPTlNFX1ZUSURfVklPTEFUSU9OLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQT1JUX1ZEUF9SRVNQT05TRV9WVElEX1ZFUlNJT05fVklPQUxUSU9OLAogIFBPUlRfVkRQX1JFU1BPTlNFX09VVF9PRl9TWU5DLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfU1VDQ0VTUyA9IDB4MTAwLAogIFBPUlRfUFJPRklMRV9SRVNQT05TRV9JTlBST0dSRVNTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfSU5WQUxJRCwKICBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfQkFEU1RBVEUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBPUlRfUFJPRklMRV9SRVNQT05TRV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTLAogIFBPUlRfUFJPRklMRV9SRVNQT05TRV9FUlJPUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGlmbGFfcG9ydF92c2kgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHZzaV9tZ3JfaWQ7CiAgX191OCB2c2lfdHlwZV9pZFszXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCB2c2lfdHlwZV92ZXJzaW9uOwogIF9fdTggcGFkWzNdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZMQV9JUE9JQl9VTlNQRUMsCiAgSUZMQV9JUE9JQl9QS0VZLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX0lQT0lCX01PREUsCiAgSUZMQV9JUE9JQl9VTUNBU1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fSUZMQV9JUE9JQl9NQVgKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgSVBPSUJfTU9ERV9EQVRBR1JBTSA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQT0lCX01PREVfQ09OTkVDVEVEID0gMSwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRkxBX0lQT0lCX01BWCAoX19JRkxBX0lQT0lCX01BWCAtIDEpCiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZMQV9IU1JfVU5TUEVDLAogIElGTEFfSFNSX1NMQVZFMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZMQV9IU1JfU0xBVkUyLAogIElGTEFfSFNSX01VTFRJQ0FTVF9TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX0hTUl9TVVBFUlZJU0lPTl9BRERSLAogIElGTEFfSFNSX1NFUV9OUiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19JRkxBX0hTUl9NQVgsCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZMQV9IU1JfTUFYIChfX0lGTEFfSFNSX01BWCAtIDEpCiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX3R1bm5lbC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl90dW5uZWwuaAppbmRleCA2N2NlNWNlLi5jM2UzOWE0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX3R1bm5lbC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfdHVubmVsLmgKQEAgLTEyMiw3ICsxMjIsNyBAQAogfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElGTEFfR1JFX01BWCAoX19JRkxBX0dSRV9NQVggLSAxKQotI2RlZmluZSBWVElfSVNWVEkgMHgwMDAxCisjZGVmaW5lIFZUSV9JU1ZUSSAoKF9fZm9yY2UgX19iZTE2KTB4MDAwMSkKIGVudW0gewogIElGTEFfVlRJX1VOU1BFQywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2luLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2luLmgKaW5kZXggZTkwMjA5Yi4uMDE4MmUwYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pbi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaW4uaApAQCAtMTI0LDEzNyArMTI0LDEzOCBAQAogI2RlZmluZSBJUF9QTVRVRElTQ19ETyAyCiAjZGVmaW5lIElQX1BNVFVESVNDX1BST0JFIDMKICNkZWZpbmUgSVBfUE1UVURJU0NfSU5URVJGQUNFIDQKLSNkZWZpbmUgSVBfTVVMVElDQVNUX0lGIDMyCisjZGVmaW5lIElQX1BNVFVESVNDX09NSVQgNQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBfTVVMVElDQVNUX0lGIDMyCiAjZGVmaW5lIElQX01VTFRJQ0FTVF9UVEwgMzMKICNkZWZpbmUgSVBfTVVMVElDQVNUX0xPT1AgMzQKICNkZWZpbmUgSVBfQUREX01FTUJFUlNISVAgMzUKLSNkZWZpbmUgSVBfRFJPUF9NRU1CRVJTSElQIDM2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9EUk9QX01FTUJFUlNISVAgMzYKICNkZWZpbmUgSVBfVU5CTE9DS19TT1VSQ0UgMzcKICNkZWZpbmUgSVBfQkxPQ0tfU09VUkNFIDM4CiAjZGVmaW5lIElQX0FERF9TT1VSQ0VfTUVNQkVSU0hJUCAzOQotI2RlZmluZSBJUF9EUk9QX1NPVVJDRV9NRU1CRVJTSElQIDQwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9EUk9QX1NPVVJDRV9NRU1CRVJTSElQIDQwCiAjZGVmaW5lIElQX01TRklMVEVSIDQxCiAjZGVmaW5lIE1DQVNUX0pPSU5fR1JPVVAgNDIKICNkZWZpbmUgTUNBU1RfQkxPQ0tfU09VUkNFIDQzCi0jZGVmaW5lIE1DQVNUX1VOQkxPQ0tfU09VUkNFIDQ0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNQ0FTVF9VTkJMT0NLX1NPVVJDRSA0NAogI2RlZmluZSBNQ0FTVF9MRUFWRV9HUk9VUCA0NQogI2RlZmluZSBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUCA0NgogI2RlZmluZSBNQ0FTVF9MRUFWRV9TT1VSQ0VfR1JPVVAgNDcKLSNkZWZpbmUgTUNBU1RfTVNGSUxURVIgNDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1DQVNUX01TRklMVEVSIDQ4CiAjZGVmaW5lIElQX01VTFRJQ0FTVF9BTEwgNDkKICNkZWZpbmUgSVBfVU5JQ0FTVF9JRiA1MAogI2RlZmluZSBNQ0FTVF9FWENMVURFIDAKLSNkZWZpbmUgTUNBU1RfSU5DTFVERSAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNQ0FTVF9JTkNMVURFIDEKICNkZWZpbmUgSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMIDEKICNkZWZpbmUgSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCAxCiBzdHJ1Y3QgaXBfbXJlcSB7Ci0gc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKICBzdHJ1Y3QgaW5fYWRkciBpbXJfaW50ZXJmYWNlOwogfTsKIHN0cnVjdCBpcF9tcmVxbiB7Ci0gc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKICBzdHJ1Y3QgaW5fYWRkciBpbXJfYWRkcmVzczsKICBpbnQgaW1yX2lmaW5kZXg7CiB9Owotc3RydWN0IGlwX21yZXFfc291cmNlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaXBfbXJlcV9zb3VyY2UgewogIF9fYmUzMiBpbXJfbXVsdGlhZGRyOwogIF9fYmUzMiBpbXJfaW50ZXJmYWNlOwogIF9fYmUzMiBpbXJfc291cmNlYWRkcjsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBpcF9tc2ZpbHRlciB7CiAgX19iZTMyIGltc2ZfbXVsdGlhZGRyOwogIF9fYmUzMiBpbXNmX2ludGVyZmFjZTsKLSBfX3UzMiBpbXNmX2Ztb2RlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBpbXNmX2Ztb2RlOwogIF9fdTMyIGltc2ZfbnVtc3JjOwogIF9fYmUzMiBpbXNmX3NsaXN0WzFdOwogfTsKLSNkZWZpbmUgSVBfTVNGSUxURVJfU0laRShudW1zcmMpICAgKHNpemVvZihzdHJ1Y3QgaXBfbXNmaWx0ZXIpIC0gc2l6ZW9mKF9fdTMyKSAgICsgKG51bXNyYykgKiBzaXplb2YoX191MzIpKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBfTVNGSUxURVJfU0laRShudW1zcmMpICAgKHNpemVvZihzdHJ1Y3QgaXBfbXNmaWx0ZXIpIC0gc2l6ZW9mKF9fdTMyKSAgICsgKG51bXNyYykgKiBzaXplb2YoX191MzIpKQogc3RydWN0IGdyb3VwX3JlcSB7CiAgX191MzIgZ3JfaW50ZXJmYWNlOwogIHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdyX2dyb3VwOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGdyb3VwX3NvdXJjZV9yZXEgewogIF9fdTMyIGdzcl9pbnRlcmZhY2U7CiAgc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgZ3NyX2dyb3VwOwotIHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdzcl9zb3VyY2U7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdzcl9zb3VyY2U7CiB9Owogc3RydWN0IGdyb3VwX2ZpbHRlciB7CiAgX191MzIgZ2ZfaW50ZXJmYWNlOwotIHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdmX2dyb3VwOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSBnZl9ncm91cDsKICBfX3UzMiBnZl9mbW9kZTsKICBfX3UzMiBnZl9udW1zcmM7CiAgc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgZ2Zfc2xpc3RbMV07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIEdST1VQX0ZJTFRFUl9TSVpFKG51bXNyYykgICAoc2l6ZW9mKHN0cnVjdCBncm91cF9maWx0ZXIpIC0gc2l6ZW9mKHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlKSAgICsgKG51bXNyYykgKiBzaXplb2Yoc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UpKQogc3RydWN0IGluX3BrdGluZm8gewogIGludCBpcGlfaWZpbmRleDsKLSBzdHJ1Y3QgaW5fYWRkciBpcGlfc3BlY19kc3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBpbl9hZGRyIGlwaV9zcGVjX2RzdDsKICBzdHJ1Y3QgaW5fYWRkciBpcGlfYWRkcjsKIH07CiAjZGVmaW5lIF9fU09DS19TSVpFX18gMTYKLXN0cnVjdCBzb2NrYWRkcl9pbiB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHNvY2thZGRyX2luIHsKICBfX2tlcm5lbF9zYV9mYW1pbHlfdCBzaW5fZmFtaWx5OwogIF9fYmUxNiBzaW5fcG9ydDsKICBzdHJ1Y3QgaW5fYWRkciBzaW5fYWRkcjsKLSB1bnNpZ25lZCBjaGFyIF9fcGFkW19fU09DS19TSVpFX18gLSBzaXplb2Yoc2hvcnQgaW50KSAtCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGNoYXIgX19wYWRbX19TT0NLX1NJWkVfXyAtIHNpemVvZihzaG9ydCBpbnQpIC0KICBzaXplb2YodW5zaWduZWQgc2hvcnQgaW50KSAtIHNpemVvZihzdHJ1Y3QgaW5fYWRkcildOwogfTsKICNkZWZpbmUgc2luX3plcm8gX19wYWQKLSNkZWZpbmUgSU5fQ0xBU1NBKGEpICgoKChsb25nIGludCkgKGEpKSAmIDB4ODAwMDAwMDApID09IDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJTl9DTEFTU0EoYSkgKCgoKGxvbmcgaW50KSAoYSkpICYgMHg4MDAwMDAwMCkgPT0gMCkKICNkZWZpbmUgSU5fQ0xBU1NBX05FVCAweGZmMDAwMDAwCiAjZGVmaW5lIElOX0NMQVNTQV9OU0hJRlQgMjQKICNkZWZpbmUgSU5fQ0xBU1NBX0hPU1QgKDB4ZmZmZmZmZmYgJiB+SU5fQ0xBU1NBX05FVCkKLSNkZWZpbmUgSU5fQ0xBU1NBX01BWCAxMjgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElOX0NMQVNTQV9NQVggMTI4CiAjZGVmaW5lIElOX0NMQVNTQihhKSAoKCgobG9uZyBpbnQpIChhKSkgJiAweGMwMDAwMDAwKSA9PSAweDgwMDAwMDAwKQogI2RlZmluZSBJTl9DTEFTU0JfTkVUIDB4ZmZmZjAwMDAKICNkZWZpbmUgSU5fQ0xBU1NCX05TSElGVCAxNgotI2RlZmluZSBJTl9DTEFTU0JfSE9TVCAoMHhmZmZmZmZmZiAmIH5JTl9DTEFTU0JfTkVUKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU5fQ0xBU1NCX0hPU1QgKDB4ZmZmZmZmZmYgJiB+SU5fQ0xBU1NCX05FVCkKICNkZWZpbmUgSU5fQ0xBU1NCX01BWCA2NTUzNgogI2RlZmluZSBJTl9DTEFTU0MoYSkgKCgoKGxvbmcgaW50KSAoYSkpICYgMHhlMDAwMDAwMCkgPT0gMHhjMDAwMDAwMCkKICNkZWZpbmUgSU5fQ0xBU1NDX05FVCAweGZmZmZmZjAwCi0jZGVmaW5lIElOX0NMQVNTQ19OU0hJRlQgOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU5fQ0xBU1NDX05TSElGVCA4CiAjZGVmaW5lIElOX0NMQVNTQ19IT1NUICgweGZmZmZmZmZmICYgfklOX0NMQVNTQ19ORVQpCiAjZGVmaW5lIElOX0NMQVNTRChhKSAoKCgobG9uZyBpbnQpIChhKSkgJiAweGYwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQogI2RlZmluZSBJTl9NVUxUSUNBU1QoYSkgSU5fQ0xBU1NEKGEpCi0jZGVmaW5lIElOX01VTFRJQ0FTVF9ORVQgMHhGMDAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU5fTVVMVElDQVNUX05FVCAweEYwMDAwMDAwCiAjZGVmaW5lIElOX0VYUEVSSU1FTlRBTChhKSAoKCgobG9uZyBpbnQpIChhKSkgJiAweGYwMDAwMDAwKSA9PSAweGYwMDAwMDAwKQogI2RlZmluZSBJTl9CQURDTEFTUyhhKSBJTl9FWFBFUklNRU5UQUwoKGEpKQogI2RlZmluZSBJTkFERFJfQU5ZICgodW5zaWduZWQgbG9uZyBpbnQpIDB4MDAwMDAwMDApCi0jZGVmaW5lIElOQUREUl9CUk9BRENBU1QgKCh1bnNpZ25lZCBsb25nIGludCkgMHhmZmZmZmZmZikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElOQUREUl9CUk9BRENBU1QgKCh1bnNpZ25lZCBsb25nIGludCkgMHhmZmZmZmZmZikKICNkZWZpbmUgSU5BRERSX05PTkUgKCh1bnNpZ25lZCBsb25nIGludCkgMHhmZmZmZmZmZikKICNkZWZpbmUgSU5fTE9PUEJBQ0tORVQgMTI3CiAjZGVmaW5lIElOQUREUl9MT09QQkFDSyAweDdmMDAwMDAxCi0jZGVmaW5lIElOX0xPT1BCQUNLKGEpICgoKChsb25nIGludCkgKGEpKSAmIDB4ZmYwMDAwMDApID09IDB4N2YwMDAwMDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJTl9MT09QQkFDSyhhKSAoKCgobG9uZyBpbnQpIChhKSkgJiAweGZmMDAwMDAwKSA9PSAweDdmMDAwMDAwKQogI2RlZmluZSBJTkFERFJfVU5TUEVDX0dST1VQIDB4ZTAwMDAwMDBVCiAjZGVmaW5lIElOQUREUl9BTExIT1NUU19HUk9VUCAweGUwMDAwMDAxVQogI2RlZmluZSBJTkFERFJfQUxMUlRSU19HUk9VUCAweGUwMDAwMDAyVQotI2RlZmluZSBJTkFERFJfTUFYX0xPQ0FMX0dST1VQIDB4ZTAwMDAwZmZVCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJTkFERFJfTUFYX0xPQ0FMX0dST1VQIDB4ZTAwMDAwZmZVCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2luNi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pbjYuaAppbmRleCA2NDFhNjliLi44ZGQ1M2MxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2luNi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaW42LmgKQEAgLTE2NCw0NiArMTY0LDQ3IEBACiAjZGVmaW5lIElQVjZfUE1UVURJU0NfRE8gMgogI2RlZmluZSBJUFY2X1BNVFVESVNDX1BST0JFIDMKICNkZWZpbmUgSVBWNl9QTVRVRElTQ19JTlRFUkZBQ0UgNAotI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1IgMzIKKyNkZWZpbmUgSVBWNl9QTVRVRElTQ19PTUlUIDUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVjZfRkxPV0xBQkVMX01HUiAzMgogI2RlZmluZSBJUFY2X0ZMT1dJTkZPX1NFTkQgMzMKICNkZWZpbmUgSVBWNl9JUFNFQ19QT0xJQ1kgMzQKICNkZWZpbmUgSVBWNl9YRlJNX1BPTElDWSAzNQotI2RlZmluZSBJUFY2X1JFQ1ZQS1RJTkZPIDQ5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFY2X1JFQ1ZQS1RJTkZPIDQ5CiAjZGVmaW5lIElQVjZfUEtUSU5GTyA1MAogI2RlZmluZSBJUFY2X1JFQ1ZIT1BMSU1JVCA1MQogI2RlZmluZSBJUFY2X0hPUExJTUlUIDUyCi0jZGVmaW5lIElQVjZfUkVDVkhPUE9QVFMgNTMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVjZfUkVDVkhPUE9QVFMgNTMKICNkZWZpbmUgSVBWNl9IT1BPUFRTIDU0CiAjZGVmaW5lIElQVjZfUlRIRFJEU1RPUFRTIDU1CiAjZGVmaW5lIElQVjZfUkVDVlJUSERSIDU2Ci0jZGVmaW5lIElQVjZfUlRIRFIgNTcKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVjZfUlRIRFIgNTcKICNkZWZpbmUgSVBWNl9SRUNWRFNUT1BUUyA1OAogI2RlZmluZSBJUFY2X0RTVE9QVFMgNTkKICNkZWZpbmUgSVBWNl9SRUNWUEFUSE1UVSA2MAotI2RlZmluZSBJUFY2X1BBVEhNVFUgNjEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVjZfUEFUSE1UVSA2MQogI2RlZmluZSBJUFY2X0RPTlRGUkFHIDYyCiAjZGVmaW5lIElQVjZfUkVDVlRDTEFTUyA2NgogI2RlZmluZSBJUFY2X1RDTEFTUyA2NwotI2RlZmluZSBJUFY2X0FERFJfUFJFRkVSRU5DRVMgNzIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVjZfQUREUl9QUkVGRVJFTkNFUyA3MgogI2RlZmluZSBJUFY2X1BSRUZFUl9TUkNfVE1QIDB4MDAwMQogI2RlZmluZSBJUFY2X1BSRUZFUl9TUkNfUFVCTElDIDB4MDAwMgogI2RlZmluZSBJUFY2X1BSRUZFUl9TUkNfUFVCVE1QX0RFRkFVTFQgMHgwMTAwCi0jZGVmaW5lIElQVjZfUFJFRkVSX1NSQ19DT0EgMHgwMDA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFY2X1BSRUZFUl9TUkNfQ09BIDB4MDAwNAogI2RlZmluZSBJUFY2X1BSRUZFUl9TUkNfSE9NRSAweDA0MDAKICNkZWZpbmUgSVBWNl9QUkVGRVJfU1JDX0NHQSAweDAwMDgKICNkZWZpbmUgSVBWNl9QUkVGRVJfU1JDX05PTkNHQSAweDA4MDAKLSNkZWZpbmUgSVBWNl9NSU5IT1BDT1VOVCA3MwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBWNl9NSU5IT1BDT1VOVCA3MwogI2RlZmluZSBJUFY2X09SSUdEU1RBRERSIDc0CiAjZGVmaW5lIElQVjZfUkVDVk9SSUdEU1RBRERSIElQVjZfT1JJR0RTVEFERFIKICNkZWZpbmUgSVBWNl9UUkFOU1BBUkVOVCA3NQotI2RlZmluZSBJUFY2X1VOSUNBU1RfSUYgNzYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVjZfVU5JQ0FTVF9JRiA3NgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2t2bS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9rdm0uaAppbmRleCBlNjRmOWI1Li43NTMzMWRkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2t2bS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgva3ZtLmgKQEAgLTE3MSw2NTMgKzE3MSw3NTggQEAKICNkZWZpbmUgS1ZNX0VYSVRfUzM5MF9UU0NIIDIyCiAjZGVmaW5lIEtWTV9FWElUX0VQUiAyMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0VYSVRfU1lTVEVNX0VWRU5UIDI0CiAjZGVmaW5lIEtWTV9JTlRFUk5BTF9FUlJPUl9FTVVMQVRJT04gMQogI2RlZmluZSBLVk1fSU5URVJOQUxfRVJST1JfU0lNVUxfRVggMgogI2RlZmluZSBLVk1fSU5URVJOQUxfRVJST1JfREVMSVZFUllfRVYgMwotc3RydWN0IGt2bV9ydW4gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBrdm1fcnVuIHsKICBfX3U4IHJlcXVlc3RfaW50ZXJydXB0X3dpbmRvdzsKICBfX3U4IHBhZGRpbmcxWzddOwogIF9fdTMyIGV4aXRfcmVhc29uOwotIF9fdTggcmVhZHlfZm9yX2ludGVycnVwdF9pbmplY3Rpb247CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcmVhZHlfZm9yX2ludGVycnVwdF9pbmplY3Rpb247CiAgX191OCBpZl9mbGFnOwogIF9fdTggcGFkZGluZzJbMl07CiAgX191NjQgY3I4OwotIF9fdTY0IGFwaWNfYmFzZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgYXBpY19iYXNlOwogI2lmZGVmIF9fS1ZNX1MzOTAKICBfX3U2NCBwc3dfbWFzazsKICBfX3U2NCBwc3dfYWRkcjsKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgogIHVuaW9uIHsKICBzdHJ1Y3QgewogIF9fdTY0IGhhcmR3YXJlX2V4aXRfcmVhc29uOwotIH0gaHc7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIH0gaHc7CiAgc3RydWN0IHsKICBfX3U2NCBoYXJkd2FyZV9lbnRyeV9mYWlsdXJlX3JlYXNvbjsKICB9IGZhaWxfZW50cnk7Ci0gc3RydWN0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHsKICBfX3UzMiBleGNlcHRpb247CiAgX191MzIgZXJyb3JfY29kZTsKICB9IGV4OwotIHN0cnVjdCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB7CiAjZGVmaW5lIEtWTV9FWElUX0lPX0lOIDAKICNkZWZpbmUgS1ZNX0VYSVRfSU9fT1VUIDEKICBfX3U4IGRpcmVjdGlvbjsKLSBfX3U4IHNpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggc2l6ZTsKICBfX3UxNiBwb3J0OwogIF9fdTMyIGNvdW50OwogIF9fdTY0IGRhdGFfb2Zmc2V0OwotIH0gaW87CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIH0gaW87CiAgc3RydWN0IHsKICBzdHJ1Y3Qga3ZtX2RlYnVnX2V4aXRfYXJjaCBhcmNoOwogIH0gZGVidWc7Ci0gc3RydWN0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHsKICBfX3U2NCBwaHlzX2FkZHI7CiAgX191OCBkYXRhWzhdOwogIF9fdTMyIGxlbjsKLSBfX3U4IGlzX3dyaXRlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGlzX3dyaXRlOwogIH0gbW1pbzsKICBzdHJ1Y3QgewogIF9fdTY0IG5yOwotIF9fdTY0IGFyZ3NbNl07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGFyZ3NbNl07CiAgX191NjQgcmV0OwogIF9fdTMyIGxvbmdtb2RlOwogIF9fdTMyIHBhZDsKLSB9IGh5cGVyY2FsbDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfSBoeXBlcmNhbGw7CiAgc3RydWN0IHsKICBfX3U2NCByaXA7CiAgX191MzIgaXNfd3JpdGU7Ci0gX191MzIgcGFkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBwYWQ7CiAgfSB0cHJfYWNjZXNzOwogIHN0cnVjdCB7CiAgX191OCBpY3B0Y29kZTsKLSBfX3UxNiBpcGE7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IGlwYTsKICBfX3UzMiBpcGI7CiAgfSBzMzkwX3NpZWljOwogI2RlZmluZSBLVk1fUzM5MF9SRVNFVF9QT1IgMQotI2RlZmluZSBLVk1fUzM5MF9SRVNFVF9DTEVBUiAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUzM5MF9SRVNFVF9DTEVBUiAyCiAjZGVmaW5lIEtWTV9TMzkwX1JFU0VUX1NVQlNZU1RFTSA0CiAjZGVmaW5lIEtWTV9TMzkwX1JFU0VUX0NQVV9JTklUIDgKICNkZWZpbmUgS1ZNX1MzOTBfUkVTRVRfSVBMIDE2Ci0gX191NjQgczM5MF9yZXNldF9mbGFnczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgczM5MF9yZXNldF9mbGFnczsKICBzdHJ1Y3QgewogIF9fdTY0IHRyYW5zX2V4Y19jb2RlOwogIF9fdTMyIHBnbV9jb2RlOwotIH0gczM5MF91Y29udHJvbDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfSBzMzkwX3Vjb250cm9sOwogIHN0cnVjdCB7CiAgX191MzIgZGNybjsKICBfX3UzMiBkYXRhOwotIF9fdTggaXNfd3JpdGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggaXNfd3JpdGU7CiAgfSBkY3I7CiAgc3RydWN0IHsKICBfX3UzMiBzdWJlcnJvcjsKLSBfX3UzMiBuZGF0YTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbmRhdGE7CiAgX191NjQgZGF0YVsxNl07CiAgfSBpbnRlcm5hbDsKICBzdHJ1Y3QgewotIF9fdTY0IGdwcnNbMzJdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBncHJzWzMyXTsKICB9IG9zaTsKICBzdHJ1Y3QgewogIF9fdTY0IG5yOwotIF9fdTY0IHJldDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgcmV0OwogIF9fdTY0IGFyZ3NbOV07CiAgfSBwYXByX2hjYWxsOwogIHN0cnVjdCB7Ci0gX191MTYgc3ViY2hhbm5lbF9pZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgc3ViY2hhbm5lbF9pZDsKICBfX3UxNiBzdWJjaGFubmVsX25yOwogIF9fdTMyIGlvX2ludF9wYXJtOwogIF9fdTMyIGlvX2ludF93b3JkOwotIF9fdTMyIGlwYjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaXBiOwogIF9fdTggZGVxdWV1ZWQ7CiAgfSBzMzkwX3RzY2g7CiAgc3RydWN0IHsKLSBfX3UzMiBlcHI7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGVwcjsKICB9IGVwcjsKKyBzdHJ1Y3QgeworI2RlZmluZSBLVk1fU1lTVEVNX0VWRU5UX1NIVVRET1dOIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfUkVTRVQgMgorIF9fdTMyIHR5cGU7CisgX191NjQgZmxhZ3M7CisgfSBzeXN0ZW1fZXZlbnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgcGFkZGluZ1syNTZdOwogIH07CiAgX191NjQga3ZtX3ZhbGlkX3JlZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGt2bV9kaXJ0eV9yZWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgc3RydWN0IGt2bV9zeW5jX3JlZ3MgcmVnczsKICBjaGFyIHBhZGRpbmdbMTAyNF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lIHsKICBfX3U2NCBhZGRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwYWQ7CiB9Owogc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pbyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHBoeXNfYWRkcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbGVuOwogIF9fdTMyIHBhZDsKICBfX3U4IGRhdGFbOF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3JpbmcgewogIF9fdTMyIGZpcnN0LCBsYXN0OwogIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW8gY29hbGVzY2VkX21taW9bMF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DT0FMRVNDRURfTU1JT19NQVggICAoKFBBR0VfU0laRSAtIHNpemVvZihzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3JpbmcpKSAvICAgc2l6ZW9mKHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW8pKQogc3RydWN0IGt2bV90cmFuc2xhdGlvbiB7CiAgX191NjQgbGluZWFyX2FkZHJlc3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHBoeXNpY2FsX2FkZHJlc3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdmFsaWQ7CiAgX191OCB3cml0ZWFibGU7CiAgX191OCB1c2VybW9kZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwYWRbNV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBrdm1faW50ZXJydXB0IHsKICBfX3UzMiBpcnE7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyB7CiAgX191MzIgc2xvdDsKICBfX3UzMiBwYWRkaW5nMTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkIF9fdXNlciAqZGlydHlfYml0bWFwOwogIF9fdTY0IHBhZGRpbmcyOwogIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX3NpZ25hbF9tYXNrIHsKICBfX3UzMiBsZW47CiAgX191OCBzaWdzZXRbMF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX3Rwcl9hY2Nlc3NfY3RsIHsKICBfX3UzMiBlbmFibGVkOwogIF9fdTMyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFs4XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGt2bV92YXBpY19hZGRyIHsKICBfX3U2NCB2YXBpY19hZGRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fTVBfU1RBVEVfUlVOTkFCTEUgMAogI2RlZmluZSBLVk1fTVBfU1RBVEVfVU5JTklUSUFMSVpFRCAxCiAjZGVmaW5lIEtWTV9NUF9TVEFURV9JTklUX1JFQ0VJVkVEIDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9NUF9TVEFURV9IQUxURUQgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX01QX1NUQVRFX1NJUElfUkVDRUlWRUQgNAogc3RydWN0IGt2bV9tcF9zdGF0ZSB7CiAgX191MzIgbXBfc3RhdGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX3MzOTBfcHN3IHsKICBfX3U2NCBtYXNrOwogIF9fdTY0IGFkZHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9TMzkwX1NJR1BfU1RPUCAweGZmZmUwMDAwdQogI2RlZmluZSBLVk1fUzM5MF9QUk9HUkFNX0lOVCAweGZmZmUwMDAxdQogI2RlZmluZSBLVk1fUzM5MF9TSUdQX1NFVF9QUkVGSVggMHhmZmZlMDAwMnUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9TMzkwX1JFU1RBUlQgMHhmZmZlMDAwM3UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9TMzkwX0lOVF9QRkFVTFRfSU5JVCAweGZmZmUwMDA0dQorI2RlZmluZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkUgMHhmZmZlMDAwNXUKICNkZWZpbmUgS1ZNX1MzOTBfTUNISyAweGZmZmUxMDAwdQorI2RlZmluZSBLVk1fUzM5MF9JTlRfQ0xPQ0tfQ09NUCAweGZmZmYxMDA0dQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1MzOTBfSU5UX0NQVV9USU1FUiAweGZmZmYxMDA1dQogI2RlZmluZSBLVk1fUzM5MF9JTlRfVklSVElPIDB4ZmZmZjI2MDN1CiAjZGVmaW5lIEtWTV9TMzkwX0lOVF9TRVJWSUNFIDB4ZmZmZjI0MDF1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUzM5MF9JTlRfRU1FUkdFTkNZIDB4ZmZmZjEyMDF1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUzM5MF9JTlRfRVhURVJOQUxfQ0FMTCAweGZmZmYxMjAydQogI2RlZmluZSBLVk1fUzM5MF9JTlRfSU8oYWksY3NzaWQsc3NpZCxzY2hpZCkgICAoKChzY2hpZCkpIHwgICAoKHNzaWQpIDw8IDE2KSB8ICAgKChjc3NpZCkgPDwgMTgpIHwgICAoKGFpKSA8PCAyNikpCiAjZGVmaW5lIEtWTV9TMzkwX0lOVF9JT19NSU4gMHgwMDAwMDAwMHUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9TMzkwX0lOVF9JT19NQVggMHhmZmZkZmZmZnUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHsKICBfX3UzMiB0eXBlOwogIF9fdTMyIHBhcm07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHBhcm02NDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Oworc3RydWN0IGt2bV9zMzkwX2lvX2luZm8geworIF9fdTE2IHN1YmNoYW5uZWxfaWQ7CisgX191MTYgc3ViY2hhbm5lbF9ucjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaW9faW50X3Bhcm07CisgX191MzIgaW9faW50X3dvcmQ7Cit9Oworc3RydWN0IGt2bV9zMzkwX2V4dF9pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZXh0X3BhcmFtczsKKyBfX3UzMiBwYWQ7CisgX191NjQgZXh0X3BhcmFtczI7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBrdm1fczM5MF9wZ21faW5mbyB7CisgX191NjQgdHJhbnNfZXhjX2NvZGU7CisgX191NjQgbW9uX2NvZGU7CisgX191NjQgcGVyX2FkZHJlc3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGRhdGFfZXhjX2NvZGU7CisgX191MTYgY29kZTsKKyBfX3UxNiBtb25fY2xhc3NfbnI7CisgX191OCBwZXJfY29kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBwZXJfYXRtaWQ7CisgX191OCBleGNfYWNjZXNzX2lkOworIF9fdTggcGVyX2FjY2Vzc19pZDsKKyBfX3U4IG9wX2FjY2Vzc19pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBwYWRbM107Cit9Oworc3RydWN0IGt2bV9zMzkwX3ByZWZpeF9pbmZvIHsKKyBfX3UzMiBhZGRyZXNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3Qga3ZtX3MzOTBfZXh0Y2FsbF9pbmZvIHsKKyBfX3UxNiBjb2RlOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qga3ZtX3MzOTBfZW1lcmdfaW5mbyB7CisgX191MTYgY29kZTsKK307CitzdHJ1Y3Qga3ZtX3MzOTBfbWNoa19pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgY3IxNDsKKyBfX3U2NCBtY2ljOworIF9fdTY0IGZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOworIF9fdTMyIGV4dF9kYW1hZ2VfY29kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcGFkOworIF9fdTggZml4ZWRfbG9nb3V0WzE2XTsKK307CitzdHJ1Y3Qga3ZtX3MzOTBfaXJxIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdHlwZTsKKyB1bmlvbiB7Cisgc3RydWN0IGt2bV9zMzkwX2lvX2luZm8gaW87Cisgc3RydWN0IGt2bV9zMzkwX2V4dF9pbmZvIGV4dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGt2bV9zMzkwX3BnbV9pbmZvIHBnbTsKKyBzdHJ1Y3Qga3ZtX3MzOTBfZW1lcmdfaW5mbyBlbWVyZzsKKyBzdHJ1Y3Qga3ZtX3MzOTBfZXh0Y2FsbF9pbmZvIGV4dGNhbGw7Cisgc3RydWN0IGt2bV9zMzkwX3ByZWZpeF9pbmZvIHByZWZpeDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGt2bV9zMzkwX21jaGtfaW5mbyBtY2hrOworIGNoYXIgcmVzZXJ2ZWRbNjRdOworIH0gdTsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fR1VFU1REQkdfRU5BQkxFIDB4MDAwMDAwMDEKICNkZWZpbmUgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVAgMHgwMDAwMDAwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgewogIF9fdTMyIGNvbnRyb2w7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBhZDsKICBzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggYXJjaDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGt2bV9pb2V2ZW50ZmRfZmxhZ19ucl9kYXRhbWF0Y2gsCiAga3ZtX2lvZXZlbnRmZF9mbGFnX25yX3BpbywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAga3ZtX2lvZXZlbnRmZF9mbGFnX25yX2RlYXNzaWduLAogIGt2bV9pb2V2ZW50ZmRfZmxhZ19ucl92aXJ0aW9fY2N3X25vdGlmeSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisga3ZtX2lvZXZlbnRmZF9mbGFnX25yX2Zhc3RfbW1pbywKICBrdm1faW9ldmVudGZkX2ZsYWdfbnJfbWF4LAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9JT0VWRU5URkRfRkxBR19EQVRBTUFUQ0ggKDEgPDwga3ZtX2lvZXZlbnRmZF9mbGFnX25yX2RhdGFtYXRjaCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9JT0VWRU5URkRfRkxBR19QSU8gKDEgPDwga3ZtX2lvZXZlbnRmZF9mbGFnX25yX3BpbykKICNkZWZpbmUgS1ZNX0lPRVZFTlRGRF9GTEFHX0RFQVNTSUdOICgxIDw8IGt2bV9pb2V2ZW50ZmRfZmxhZ19ucl9kZWFzc2lnbikKICNkZWZpbmUgS1ZNX0lPRVZFTlRGRF9GTEFHX1ZJUlRJT19DQ1dfTk9USUZZICAgKDEgPDwga3ZtX2lvZXZlbnRmZF9mbGFnX25yX3ZpcnRpb19jY3dfbm90aWZ5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0lPRVZFTlRGRF9WQUxJRF9GTEFHX01BU0sgKCgxIDw8IGt2bV9pb2V2ZW50ZmRfZmxhZ19ucl9tYXgpIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX2lvZXZlbnRmZCB7CiAgX191NjQgZGF0YW1hdGNoOwogIF9fdTY0IGFkZHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgZmQ7CiAgX191MzIgZmxhZ3M7CiAgX191OCBwYWRbMzZdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGt2bV9lbmFibGVfY2FwIHsKICBfX3UzMiBjYXA7CiAgX191MzIgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGFyZ3NbNF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcGFkWzY0XTsKIH07CiBzdHJ1Y3Qga3ZtX3BwY19wdmluZm8gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGNhbGxbNF07CiAgX191OCBwYWRbMTA4XTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUFBDX1BBR0VfU0laRVNfTUFYX1NaIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX3BwY19vbmVfcGFnZV9zaXplIHsKICBfX3UzMiBwYWdlX3NoaWZ0OwogIF9fdTMyIHB0ZV9lbmM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX3BwY19vbmVfc2VnX3BhZ2Vfc2l6ZSB7CiAgX191MzIgcGFnZV9zaGlmdDsKICBfX3UzMiBzbGJfZW5jOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qga3ZtX3BwY19vbmVfcGFnZV9zaXplIGVuY1tLVk1fUFBDX1BBR0VfU0laRVNfTUFYX1NaXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBLVk1fUFBDX1BBR0VfU0laRVNfUkVBTCAweDAwMDAwMDAxCiAjZGVmaW5lIEtWTV9QUENfMVRfU0VHTUVOVFMgMHgwMDAwMDAwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1fcHBjX3NtbXVfaW5mbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGZsYWdzOwogIF9fdTMyIHNsYl9zaXplOwogIF9fdTMyIHBhZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGt2bV9wcGNfb25lX3NlZ19wYWdlX3NpemUgc3BzW0tWTV9QUENfUEFHRV9TSVpFU19NQVhfU1pdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIEtWTV9QUENfUFZJTkZPX0ZMQUdTX0VWX0lETEUgKDE8PDApCiAjZGVmaW5lIEtWTUlPIDB4QUUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9WTV9TMzkwX1VDT05UUk9MIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9WTV9QUENfSFYgMQogI2RlZmluZSBLVk1fVk1fUFBDX1BSIDIKICNkZWZpbmUgS1ZNX1MzOTBfU0lFX1BBR0VfT0ZGU0VUIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9HRVRfQVBJX1ZFUlNJT04gX0lPKEtWTUlPLCAweDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NSRUFURV9WTSBfSU8oS1ZNSU8sIDB4MDEpCiAjZGVmaW5lIEtWTV9HRVRfTVNSX0lOREVYX0xJU1QgX0lPV1IoS1ZNSU8sIDB4MDIsIHN0cnVjdCBrdm1fbXNyX2xpc3QpCiAjZGVmaW5lIEtWTV9TMzkwX0VOQUJMRV9TSUUgX0lPKEtWTUlPLCAweDA2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NIRUNLX0VYVEVOU0lPTiBfSU8oS1ZNSU8sIDB4MDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fR0VUX1ZDUFVfTU1BUF9TSVpFIF9JTyhLVk1JTywgMHgwNCkKICNkZWZpbmUgS1ZNX0dFVF9TVVBQT1JURURfQ1BVSUQgX0lPV1IoS1ZNSU8sIDB4MDUsIHN0cnVjdCBrdm1fY3B1aWQyKQogI2RlZmluZSBLVk1fVFJBQ0VfRU5BQkxFIF9fS1ZNX0RFUFJFQ0FURURfTUFJTl9XXzB4MDYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9UUkFDRV9QQVVTRSBfX0tWTV9ERVBSRUNBVEVEX01BSU5fMHgwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1RSQUNFX0RJU0FCTEUgX19LVk1fREVQUkVDQVRFRF9NQUlOXzB4MDgKICNkZWZpbmUgS1ZNX0dFVF9FTVVMQVRFRF9DUFVJRCBfSU9XUihLVk1JTywgMHgwOSwgc3RydWN0IGt2bV9jcHVpZDIpCiAjZGVmaW5lIEtWTV9DQVBfSVJRQ0hJUCAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0hMVCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX01NVV9TSEFET1dfQ0FDSEVfQ09OVFJPTCAyCiAjZGVmaW5lIEtWTV9DQVBfVVNFUl9NRU1PUlkgMwogI2RlZmluZSBLVk1fQ0FQX1NFVF9UU1NfQUREUiA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1ZBUElDIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfRVhUX0NQVUlEIDcKICNkZWZpbmUgS1ZNX0NBUF9DTE9DS1NPVVJDRSA4CiAjZGVmaW5lIEtWTV9DQVBfTlJfVkNQVVMgOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9OUl9NRU1TTE9UUyAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QSVQgMTEKICNkZWZpbmUgS1ZNX0NBUF9OT1BfSU9fREVMQVkgMTIKICNkZWZpbmUgS1ZNX0NBUF9QVl9NTVUgMTMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfTVBfU1RBVEUgMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU8gMTUKICNkZWZpbmUgS1ZNX0NBUF9TWU5DX01NVSAxNgogI2RlZmluZSBLVk1fQ0FQX0RFVklDRV9BU1NJR05NRU5UIDE3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0lPTU1VIDE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fS1ZNX0hBVkVfTVNJCiAjZGVmaW5lIEtWTV9DQVBfREVWSUNFX01TSSAyMAogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0RFU1RST1lfTUVNT1JZX1JFR0lPTl9XT1JLUyAyMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0tWTV9IQVZFX1VTRVJfTk1JCiAjZGVmaW5lIEtWTV9DQVBfVVNFUl9OTUkgMjIKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0tWTV9IQVZFX0dVRVNUX0RFQlVHCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRyAyMwogI2VuZGlmCiAjaWZkZWYgX19LVk1fSEFWRV9QSVQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUkVJTkpFQ1RfQ09OVFJPTCAyNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2RlZmluZSBLVk1fQ0FQX0lSUV9ST1VUSU5HIDI1CiAjZGVmaW5lIEtWTV9DQVBfSVJRX0lOSkVDVF9TVEFUVVMgMjYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfREVWSUNFX0RFQVNTSUdOTUVOVCAyNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0tWTV9IQVZFX01TSVgKICNkZWZpbmUgS1ZNX0NBUF9ERVZJQ0VfTVNJWCAyOAogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0FTU0lHTl9ERVZfSVJRIDI5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0pPSU5fTUVNT1JZX1JFR0lPTlNfV09SS1MgMzAKICNpZmRlZiBfX0tWTV9IQVZFX01DRQogI2RlZmluZSBLVk1fQ0FQX01DRSAzMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9JUlFGRCAzMgogI2lmZGVmIF9fS1ZNX0hBVkVfUElUCiAjZGVmaW5lIEtWTV9DQVBfUElUMiAzMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9TRVRfQk9PVF9DUFVfSUQgMzQKICNpZmRlZiBfX0tWTV9IQVZFX1BJVF9TVEFURTIKICNkZWZpbmUgS1ZNX0NBUF9QSVRfU1RBVEUyIDM1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0lPRVZFTlRGRCAzNgogI2RlZmluZSBLVk1fQ0FQX1NFVF9JREVOVElUWV9NQVBfQUREUiAzNwogI2lmZGVmIF9fS1ZNX0hBVkVfWEVOX0hWTQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9YRU5fSFZNIDM4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjZGVmaW5lIEtWTV9DQVBfQURKVVNUX0NMT0NLIDM5CiAjZGVmaW5lIEtWTV9DQVBfSU5URVJOQUxfRVJST1JfREFUQSA0MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0tWTV9IQVZFX1ZDUFVfRVZFTlRTCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1ZDUFVfRVZFTlRTIDQxCiAjZW5kaWYKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1BTVyA0MgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QUENfU0VHU1RBVEUgNDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfSFlQRVJWIDQ0CiAjZGVmaW5lIEtWTV9DQVBfSFlQRVJWX1ZBUElDIDQ1CiAjZGVmaW5lIEtWTV9DQVBfSFlQRVJWX1NQSU4gNDYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUENJX1NFR01FTlQgNDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUFBDX1BBSVJFRF9TSU5HTEVTIDQ4CiAjZGVmaW5lIEtWTV9DQVBfSU5UUl9TSEFET1cgNDkKICNpZmRlZiBfX0tWTV9IQVZFX0RFQlVHUkVHUwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9ERUJVR1JFR1MgNTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNkZWZpbmUgS1ZNX0NBUF9YODZfUk9CVVNUX1NJTkdMRVNURVAgNTEKICNkZWZpbmUgS1ZNX0NBUF9QUENfT1NJIDUyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1BQQ19VTlNFVF9JUlEgNTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfRU5BQkxFX0NBUCA1NAogI2lmZGVmIF9fS1ZNX0hBVkVfWFNBVkUKICNkZWZpbmUgS1ZNX0NBUF9YU0FWRSA1NQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0tWTV9IQVZFX1hDUlMKICNkZWZpbmUgS1ZNX0NBUF9YQ1JTIDU2CiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUFBDX0dFVF9QVklORk8gNTcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUFBDX0lSUV9MRVZFTCA1OAogI2RlZmluZSBLVk1fQ0FQX0FTWU5DX1BGIDU5CiAjZGVmaW5lIEtWTV9DQVBfVFNDX0NPTlRST0wgNjAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfR0VUX1RTQ19LSFogNjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUFBDX0JPT0tFX1NSRUdTIDYyCiAjZGVmaW5lIEtWTV9DQVBfU1BBUFJfVENFIDYzCiAjZGVmaW5lIEtWTV9DQVBfUFBDX1NNVCA2NAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QUENfUk1BIDY1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX01BWF9WQ1BVUyA2NgogI2RlZmluZSBLVk1fQ0FQX1BQQ19ISU9SIDY3CiAjZGVmaW5lIEtWTV9DQVBfUFBDX1BBUFIgNjgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfU1dfVExCIDY5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX09ORV9SRUcgNzAKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0dNQVAgNzEKICNkZWZpbmUgS1ZNX0NBUF9UU0NfREVBRExJTkVfVElNRVIgNzIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9VQ09OVFJPTCA3MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9TWU5DX1JFR1MgNzQKICNkZWZpbmUgS1ZNX0NBUF9QQ0lfMl8zIDc1CiAjZGVmaW5lIEtWTV9DQVBfS1ZNQ0xPQ0tfQ1RSTCA3NgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9TSUdOQUxfTVNJIDc3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1BQQ19HRVRfU01NVV9JTkZPIDc4CiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9DT1cgNzkKICNkZWZpbmUgS1ZNX0NBUF9QUENfQUxMT0NfSFRBQiA4MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0tWTV9IQVZFX1JFQURPTkxZX01FTQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9SRUFET05MWV9NRU0gODEKICNlbmRpZgogI2RlZmluZSBLVk1fQ0FQX0lSUUZEX1JFU0FNUExFIDgyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1BQQ19CT09LRV9XQVRDSERPRyA4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QUENfSFRBQl9GRCA4NAogI2RlZmluZSBLVk1fQ0FQX1MzOTBfQ1NTX1NVUFBPUlQgODUKICNkZWZpbmUgS1ZNX0NBUF9QUENfRVBSIDg2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0FSTV9QU0NJIDg3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0FSTV9TRVRfREVWSUNFX0FERFIgODgKICNkZWZpbmUgS1ZNX0NBUF9ERVZJQ0VfQ1RSTCA4OQogI2RlZmluZSBLVk1fQ0FQX0lSUV9NUElDIDkwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1BQQ19SVEFTIDkxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0lSUV9YSUNTIDkyCiAjZGVmaW5lIEtWTV9DQVBfQVJNX0VMMV8zMkJJVCA5MwogI2RlZmluZSBLVk1fQ0FQX1NQQVBSX01VTFRJVENFIDk0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0VYVF9FTVVMX0NQVUlEIDk1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0hZUEVSVl9USU1FIDk2CisjZGVmaW5lIEtWTV9DQVBfSU9BUElDX1BPTEFSSVRZX0lHTk9SRUQgOTcKKyNkZWZpbmUgS1ZNX0NBUF9FTkFCTEVfQ0FQX1ZNIDk4CisjZGVmaW5lIEtWTV9DQVBfUzM5MF9JUlFDSElQIDk5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fQ0FQX0lPRVZFTlRGRF9OT19MRU5HVEggMTAwCisjZGVmaW5lIEtWTV9DQVBfVk1fQVRUUklCVVRFUyAxMDEKKyNkZWZpbmUgS1ZNX0NBUF9BUk1fUFNDSV8wXzIgMTAyCisjZGVmaW5lIEtWTV9DQVBfUFBDX0ZJWFVQX0hDQUxMIDEwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBLVk1fQ0FQX0lSUV9ST1VUSU5HCiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpcnFjaGlwOwogIF9fdTMyIHBpbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGt2bV9pcnFfcm91dGluZ19tc2kgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhZGRyZXNzX2xvOwogIF9fdTMyIGFkZHJlc3NfaGk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGRhdGE7CiAgX191MzIgcGFkOworfTsKK3N0cnVjdCBrdm1faXJxX3JvdXRpbmdfczM5MF9hZGFwdGVyIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgaW5kX2FkZHI7CisgX191NjQgc3VtbWFyeV9hZGRyOworIF9fdTY0IGluZF9vZmZzZXQ7CisgX191MzIgc3VtbWFyeV9vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGFkYXB0ZXJfaWQ7CiB9OwogI2RlZmluZSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUCAxCiAjZGVmaW5lIEtWTV9JUlFfUk9VVElOR19NU0kgMgotc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fSVJRX1JPVVRJTkdfUzM5MF9BREFQVEVSIDMKK3N0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgewogIF9fdTMyIGdzaTsKICBfX3UzMiB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICBfX3UzMiBwYWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgaXJxY2hpcDsKLSBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX21zaSBtc2k7Ci0gX191MzIgcGFkWzhdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX21zaSBtc2k7Cisgc3RydWN0IGt2bV9pcnFfcm91dGluZ19zMzkwX2FkYXB0ZXIgYWRhcHRlcjsKKyBfX3UzMiBwYWRbOF07CiAgfSB1OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nIHsKICBfX3UzMiBucjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgZW50cmllc1swXTsKIH07CiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgS1ZNX0NBUF9NQ0UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX3g4Nl9tY2UgewogIF9fdTY0IHN0YXR1czsKICBfX3U2NCBhZGRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBtaXNjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBtY2dfc3RhdHVzOwogIF9fdTggYmFuazsKICBfX3U4IHBhZDFbN107Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHBhZDJbM107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNlbmRpZgogI2lmZGVmIEtWTV9DQVBfWEVOX0hWTQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICBfX3UzMiBtc3I7CiAgX191NjQgYmxvYl9hZGRyXzMyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBibG9iX2FkZHJfNjQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYmxvYl9zaXplXzMyOwogIF9fdTggYmxvYl9zaXplXzY0OwogIF9fdTggcGFkMlszMF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNkZWZpbmUgS1ZNX0lSUUZEX0ZMQUdfREVBU1NJR04gKDEgPDwgMCkKICNkZWZpbmUgS1ZNX0lSUUZEX0ZMQUdfUkVTQU1QTEUgKDEgPDwgMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX2lycWZkIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmQ7CiAgX191MzIgZ3NpOwogIF9fdTMyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNhbXBsZWZkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHBhZFsxNl07CiB9Owogc3RydWN0IGt2bV9jbG9ja19kYXRhIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgY2xvY2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZsYWdzOwogIF9fdTMyIHBhZFs5XTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fTU1VX0ZTTF9CT09LRV9OT0hWIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9NTVVfRlNMX0JPT0tFX0hWIDEKIHN0cnVjdCBrdm1fY29uZmlnX3RsYiB7CiAgX191NjQgcGFyYW1zOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBhcnJheTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbW11X3R5cGU7CiAgX191MzIgYXJyYXlfbGVuOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX2RpcnR5X3RsYiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGJpdG1hcDsKICBfX3UzMiBudW1fZGlydHk7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19BUkNIX01BU0sgMHhmZjAwMDAwMDAwMDAwMDAwVUxMCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX0dFTkVSSUMgMHgwMDAwMDAwMDAwMDAwMDAwVUxMCiAjZGVmaW5lIEtWTV9SRUdfUFBDIDB4MTAwMDAwMDAwMDAwMDAwMFVMTAogI2RlZmluZSBLVk1fUkVHX1g4NiAweDIwMDAwMDAwMDAwMDAwMDBVTEwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfSUE2NCAweDMwMDAwMDAwMDAwMDAwMDBVTEwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfQVJNIDB4NDAwMDAwMDAwMDAwMDAwMFVMTAogI2RlZmluZSBLVk1fUkVHX1MzOTAgMHg1MDAwMDAwMDAwMDAwMDAwVUxMCiAjZGVmaW5lIEtWTV9SRUdfQVJNNjQgMHg2MDAwMDAwMDAwMDAwMDAwVUxMCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX01JUFMgMHg3MDAwMDAwMDAwMDAwMDAwVUxMCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX1NJWkVfU0hJRlQgNTIKICNkZWZpbmUgS1ZNX1JFR19TSVpFX01BU0sgMHgwMGYwMDAwMDAwMDAwMDAwVUxMCiAjZGVmaW5lIEtWTV9SRUdfU0laRV9VOCAweDAwMDAwMDAwMDAwMDAwMDBVTEwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfU0laRV9VMTYgMHgwMDEwMDAwMDAwMDAwMDAwVUxMCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX1NJWkVfVTMyIDB4MDAyMDAwMDAwMDAwMDAwMFVMTAogI2RlZmluZSBLVk1fUkVHX1NJWkVfVTY0IDB4MDAzMDAwMDAwMDAwMDAwMFVMTAogI2RlZmluZSBLVk1fUkVHX1NJWkVfVTEyOCAweDAwNDAwMDAwMDAwMDAwMDBVTEwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfU0laRV9VMjU2IDB4MDA1MDAwMDAwMDAwMDAwMFVMTAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19TSVpFX1U1MTIgMHgwMDYwMDAwMDAwMDAwMDAwVUxMCiAjZGVmaW5lIEtWTV9SRUdfU0laRV9VMTAyNCAweDAwNzAwMDAwMDAwMDAwMDBVTEwKIHN0cnVjdCBrdm1fcmVnX2xpc3QgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZWdbMF07CiB9Owogc3RydWN0IGt2bV9vbmVfcmVnIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGFkZHI7CiB9Owogc3RydWN0IGt2bV9tc2kgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhZGRyZXNzX2xvOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhZGRyZXNzX2hpOwogIF9fdTMyIGRhdGE7CiAgX191MzIgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcGFkWzE2XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGt2bV9hcm1fZGV2aWNlX2FkZHIgewogIF9fdTY0IGlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBhZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIEtWTV9DUkVBVEVfREVWSUNFX1RFU1QgMQogc3RydWN0IGt2bV9jcmVhdGVfZGV2aWNlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmQ7CiAgX191MzIgZmxhZ3M7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICBfX3UzMiBncm91cDsKICBfX3U2NCBhdHRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBhZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIEtWTV9ERVZfVFlQRV9GU0xfTVBJQ18yMCAxCiAjZGVmaW5lIEtWTV9ERVZfVFlQRV9GU0xfTVBJQ180MiAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fREVWX1RZUEVfWElDUyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fREVWX1RZUEVfVkZJTyA0CiAjZGVmaW5lIEtWTV9ERVZfVkZJT19HUk9VUCAxCiAjZGVmaW5lIEtWTV9ERVZfVkZJT19HUk9VUF9BREQgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0RFVl9WRklPX0dST1VQX0RFTCAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjIgNQorI2RlZmluZSBLVk1fREVWX1RZUEVfRkxJQyA2CiAjZGVmaW5lIEtWTV9TRVRfTUVNT1JZX1JFR0lPTiBfSU9XKEtWTUlPLCAweDQwLCBzdHJ1Y3Qga3ZtX21lbW9yeV9yZWdpb24pCiAjZGVmaW5lIEtWTV9DUkVBVEVfVkNQVSBfSU8oS1ZNSU8sIDB4NDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9rdm1fcGFyYS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9rdm1fcGFyYS5oCmluZGV4IGQ5NzM5OTYuLmJlMDViODUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgva3ZtX3BhcmEuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2t2bV9wYXJhLmgKQEAgLTI5LDYgKzI5LDEwIEBACiAjZGVmaW5lIEtWTV9IQ19GRUFUVVJFUyAzCiAjZGVmaW5lIEtWTV9IQ19QUENfTUFQX01BR0lDX1BBR0UgNAogI2RlZmluZSBLVk1fSENfS0lDS19DUFUgNQotI2luY2x1ZGUgPGFzbS9rdm1fcGFyYS5oPgorI2RlZmluZSBLVk1fSENfTUlQU19HRVRfQ0xPQ0tfRlJFUSA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fSENfTUlQU19FWElUX1ZNIDcKKyNkZWZpbmUgS1ZNX0hDX01JUFNfQ09OU09MRV9PVVRQVVQgOAorI2luY2x1ZGUgPGFzbS9rdm1fcGFyYS5oPgogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9sMnRwLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2wydHAuaAppbmRleCA4MThjZGE0Li4wYmM0ZGQzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2wydHAuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2wydHAuaApAQCAtMTA2LDU0ICsxMDYsNTYgQEAKICBMMlRQX0FUVFJfSVA2X1NBRERSLAogIEwyVFBfQVRUUl9JUDZfREFERFIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEwyVFBfQVRUUl9VRFBfWkVST19DU1VNNl9UWCwKKyBMMlRQX0FUVFJfVURQX1pFUk9fQ1NVTTZfUlgsCiAgX19MMlRQX0FUVFJfTUFYLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEwyVFBfQVRUUl9NQVggKF9fTDJUUF9BVFRSX01BWCAtIDEpCiBlbnVtIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTDJUUF9BVFRSX1NUQVRTX05PTkUsCiAgTDJUUF9BVFRSX1RYX1BBQ0tFVFMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEwyVFBfQVRUUl9UWF9CWVRFUywKICBMMlRQX0FUVFJfVFhfRVJST1JTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMMlRQX0FUVFJfUlhfUEFDS0VUUywKICBMMlRQX0FUVFJfUlhfQllURVMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEwyVFBfQVRUUl9SWF9TRVFfRElTQ0FSRFMsCiAgTDJUUF9BVFRSX1JYX09PU19QQUNLRVRTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMMlRQX0FUVFJfUlhfRVJST1JTLAogIF9fTDJUUF9BVFRSX1NUQVRTX01BWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBMMlRQX0FUVFJfU1RBVFNfTUFYIChfX0wyVFBfQVRUUl9TVEFUU19NQVggLSAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbDJ0cF9wd3R5cGUgewogIEwyVFBfUFdUWVBFX05PTkUgPSAweDAwMDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEwyVFBfUFdUWVBFX0VUSF9WTEFOID0gMHgwMDA0LAogIEwyVFBfUFdUWVBFX0VUSCA9IDB4MDAwNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTDJUUF9QV1RZUEVfUFBQID0gMHgwMDA3LAogIEwyVFBfUFdUWVBFX1BQUF9BQyA9IDB4MDAwOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTDJUUF9QV1RZUEVfSVAgPSAweDAwMGIsCiAgX19MMlRQX1BXVFlQRV9NQVgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSBsMnRwX2wyc3BlY190eXBlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTDJUUF9MMlNQRUNUWVBFX05PTkUsCiAgTDJUUF9MMlNQRUNUWVBFX0RFRkFVTFQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gbDJ0cF9lbmNhcF90eXBlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTDJUUF9FTkNBUFRZUEVfVURQLAogIEwyVFBfRU5DQVBUWVBFX0lQLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIGwydHBfc2VxbW9kZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEwyVFBfU0VRX05PTkUgPSAwLAogIEwyVFBfU0VRX0lQID0gMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTDJUUF9TRVFfQUxMID0gMiwKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBMMlRQX0dFTkxfTkFNRSAibDJ0cCIKICNkZWZpbmUgTDJUUF9HRU5MX1ZFUlNJT04gMHgxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmgKaW5kZXggODI2Yjc2My4uNzg1NDUyMCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbGliYy1jb21wYXQuaApAQCAtNDEsMTMgKzQxLDIwIEBACiAjZGVmaW5lIF9fVUFQSV9ERUZfSVBQUk9UT19WNiAxCiAjZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaWZkZWYgX1NZU19YQVRUUl9ICisjZGVmaW5lIF9fVUFQSV9ERUZfWEFUVFIgMAorI2Vsc2UKKyNkZWZpbmUgX19VQVBJX0RFRl9YQVRUUiAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCiAjZWxzZQogI2RlZmluZSBfX1VBUElfREVGX0lONl9BRERSIDEKICNkZWZpbmUgX19VQVBJX0RFRl9JTjZfQUREUl9BTFQgMQotI2RlZmluZSBfX1VBUElfREVGX1NPQ0tBRERSX0lONiAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX1VBUElfREVGX1NPQ0tBRERSX0lONiAxCiAjZGVmaW5lIF9fVUFQSV9ERUZfSVBWNl9NUkVRIDEKICNkZWZpbmUgX19VQVBJX0RFRl9JUFBST1RPX1Y2IDEKLSNlbmRpZgotI2VuZGlmCisjZGVmaW5lIF9fVUFQSV9ERUZfWEFUVFIgMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21lbWZkLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21lbWZkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxMWRhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbWVtZmQuaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9VQVBJX0xJTlVYX01FTUZEX0gKKyNkZWZpbmUgX1VBUElfTElOVVhfTUVNRkRfSAorI2RlZmluZSBNRkRfQ0xPRVhFQyAweDAwMDFVCisjZGVmaW5lIE1GRF9BTExPV19TRUFMSU5HIDB4MDAwMlUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbXBscy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tcGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg0ZDhlNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbXBscy5oCkBAIC0wLDAgKzEsMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1VBUElfTVBMU19ICisjZGVmaW5lIF9VQVBJX01QTFNfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBtcGxzX2xhYmVsIHsKKyBfX2JlMzIgZW50cnk7Cit9OworI2RlZmluZSBNUExTX0xTX0xBQkVMX01BU0sgMHhGRkZGRjAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVBMU19MU19MQUJFTF9TSElGVCAxMgorI2RlZmluZSBNUExTX0xTX1RDX01BU0sgMHgwMDAwMEUwMAorI2RlZmluZSBNUExTX0xTX1RDX1NISUZUIDkKKyNkZWZpbmUgTVBMU19MU19TX01BU0sgMHgwMDAwMDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVBMU19MU19TX1NISUZUIDgKKyNkZWZpbmUgTVBMU19MU19UVExfTUFTSyAweDAwMDAwMEZGCisjZGVmaW5lIE1QTFNfTFNfVFRMX1NISUZUIDAKKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmVpZ2hib3VyLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25laWdoYm91ci5oCmluZGV4IGQ4NGRlMGMuLmY4MjI0NTMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmVpZ2hib3VyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZWlnaGJvdXIuaApAQCAtNDQsMTExICs0NCwxMTIgQEAKICBOREFfUE9SVCwKICBOREFfVk5JLAogIE5EQV9JRklOREVYLAotIF9fTkRBX01BWAorIE5EQV9NQVNURVIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fTkRBX01BWAogfTsKICNkZWZpbmUgTkRBX01BWCAoX19OREFfTUFYIC0gMSkKICNkZWZpbmUgTlRGX1VTRSAweDAxCi0jZGVmaW5lIE5URl9QUk9YWSAweDA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOVEZfUFJPWFkgMHgwOAogI2RlZmluZSBOVEZfUk9VVEVSIDB4ODAKICNkZWZpbmUgTlRGX1NFTEYgMHgwMgogI2RlZmluZSBOVEZfTUFTVEVSIDB4MDQKLSNkZWZpbmUgTlVEX0lOQ09NUExFVEUgMHgwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTlVEX0lOQ09NUExFVEUgMHgwMQogI2RlZmluZSBOVURfUkVBQ0hBQkxFIDB4MDIKICNkZWZpbmUgTlVEX1NUQUxFIDB4MDQKICNkZWZpbmUgTlVEX0RFTEFZIDB4MDgKLSNkZWZpbmUgTlVEX1BST0JFIDB4MTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5VRF9QUk9CRSAweDEwCiAjZGVmaW5lIE5VRF9GQUlMRUQgMHgyMAogI2RlZmluZSBOVURfTk9BUlAgMHg0MAogI2RlZmluZSBOVURfUEVSTUFORU5UIDB4ODAKLSNkZWZpbmUgTlVEX05PTkUgMHgwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTlVEX05PTkUgMHgwMAogc3RydWN0IG5kYV9jYWNoZWluZm8gewogIF9fdTMyIG5kbV9jb25maXJtZWQ7CiAgX191MzIgbmRtX3VzZWQ7Ci0gX191MzIgbmRtX3VwZGF0ZWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG5kbV91cGRhdGVkOwogIF9fdTMyIG5kbV9yZWZjbnQ7CiB9Owogc3RydWN0IG5kdF9zdGF0cyB7Ci0gX191NjQgbmR0c19hbGxvY3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IG5kdHNfYWxsb2NzOwogIF9fdTY0IG5kdHNfZGVzdHJveXM7CiAgX191NjQgbmR0c19oYXNoX2dyb3dzOwogIF9fdTY0IG5kdHNfcmVzX2ZhaWxlZDsKLSBfX3U2NCBuZHRzX2xvb2t1cHM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IG5kdHNfbG9va3VwczsKICBfX3U2NCBuZHRzX2hpdHM7CiAgX191NjQgbmR0c19yY3ZfcHJvYmVzX21jYXN0OwogIF9fdTY0IG5kdHNfcmN2X3Byb2Jlc191Y2FzdDsKLSBfX3U2NCBuZHRzX3BlcmlvZGljX2djX3J1bnM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IG5kdHNfcGVyaW9kaWNfZ2NfcnVuczsKICBfX3U2NCBuZHRzX2ZvcmNlZF9nY19ydW5zOwogfTsKIGVudW0gewotIE5EVFBBX1VOU1BFQywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkRUUEFfVU5TUEVDLAogIE5EVFBBX0lGSU5ERVgsCiAgTkRUUEFfUkVGQ05ULAogIE5EVFBBX1JFQUNIQUJMRV9USU1FLAotIE5EVFBBX0JBU0VfUkVBQ0hBQkxFX1RJTUUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5EVFBBX0JBU0VfUkVBQ0hBQkxFX1RJTUUsCiAgTkRUUEFfUkVUUkFOU19USU1FLAogIE5EVFBBX0dDX1NUQUxFVElNRSwKICBORFRQQV9ERUxBWV9QUk9CRV9USU1FLAotIE5EVFBBX1FVRVVFX0xFTiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkRUUEFfUVVFVUVfTEVOLAogIE5EVFBBX0FQUF9QUk9CRVMsCiAgTkRUUEFfVUNBU1RfUFJPQkVTLAogIE5EVFBBX01DQVNUX1BST0JFUywKLSBORFRQQV9BTllDQVNUX0RFTEFZLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORFRQQV9BTllDQVNUX0RFTEFZLAogIE5EVFBBX1BST1hZX0RFTEFZLAogIE5EVFBBX1BST1hZX1FMRU4sCiAgTkRUUEFfTE9DS1RJTUUsCi0gTkRUUEFfUVVFVUVfTEVOQllURVMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5EVFBBX1FVRVVFX0xFTkJZVEVTLAogIF9fTkRUUEFfTUFYCiB9OwogI2RlZmluZSBORFRQQV9NQVggKF9fTkRUUEFfTUFYIC0gMSkKLXN0cnVjdCBuZHRtc2cgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBuZHRtc2cgewogIF9fdTggbmR0bV9mYW1pbHk7CiAgX191OCBuZHRtX3BhZDE7CiAgX191MTYgbmR0bV9wYWQyOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IG5kdF9jb25maWcgewogIF9fdTE2IG5kdGNfa2V5X2xlbjsKICBfX3UxNiBuZHRjX2VudHJ5X3NpemU7Ci0gX191MzIgbmR0Y19lbnRyaWVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBuZHRjX2VudHJpZXM7CiAgX191MzIgbmR0Y19sYXN0X2ZsdXNoOwogIF9fdTMyIG5kdGNfbGFzdF9yYW5kOwogIF9fdTMyIG5kdGNfaGFzaF9ybmQ7Ci0gX191MzIgbmR0Y19oYXNoX21hc2s7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG5kdGNfaGFzaF9tYXNrOwogIF9fdTMyIG5kdGNfaGFzaF9jaGFpbl9nYzsKICBfX3UzMiBuZHRjX3Byb3h5X3FsZW47CiB9OwotZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CiAgTkRUQV9VTlNQRUMsCiAgTkRUQV9OQU1FLAogIE5EVEFfVEhSRVNIMSwKLSBORFRBX1RIUkVTSDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5EVEFfVEhSRVNIMiwKICBORFRBX1RIUkVTSDMsCiAgTkRUQV9DT05GSUcsCiAgTkRUQV9QQVJNUywKLSBORFRBX1NUQVRTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORFRBX1NUQVRTLAogIE5EVEFfR0NfSU5URVJWQUwsCiAgX19ORFRBX01BWAogfTsKLSNkZWZpbmUgTkRUQV9NQVggKF9fTkRUQV9NQVggLSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkRUQV9NQVggKF9fTkRUQV9NQVggLSAxKQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGRldmljZS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRkZXZpY2UuaAppbmRleCBmMjQ3MmZjLi4wYmMwYWUyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTM3LDQgKzM3LDkgQEAKICBJRl9QT1JUXzEwMEJBU0VGWAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisjZGVmaW5lIE5FVF9BRERSX1BFUk0gMAorI2RlZmluZSBORVRfQUREUl9SQU5ET00gMQorI2RlZmluZSBORVRfQUREUl9TVE9MRU4gMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkVUX0FERFJfU0VUIDMKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaAppbmRleCBkODVjODViLi41YTg0NjhjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaApAQCAtODgsMTg3ICs4OCwxOTkgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfQVRUUl9DQURUX0ZMQUdTLAogIElQU0VUX0FUVFJfQ0FEVF9MSU5FTk8gPSBJUFNFVF9BVFRSX0xJTkVOTywKKyBJUFNFVF9BVFRSX01BUkssCisgSVBTRVRfQVRUUl9NQVJLTUFTSywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfQVRUUl9DQURUX01BWCA9IDE2LAogIElQU0VUX0FUVFJfR0MsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0FUVFJfSEFTSFNJWkUsCiAgSVBTRVRfQVRUUl9NQVhFTEVNLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9BVFRSX05FVE1BU0ssCiAgSVBTRVRfQVRUUl9QUk9CRVMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0FUVFJfUkVTSVpFLAogIElQU0VUX0FUVFJfU0laRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfQVRUUl9FTEVNRU5UUywKICBJUFNFVF9BVFRSX1JFRkVSRU5DRVMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0FUVFJfTUVNU0laRSwKICBfX0lQU0VUX0FUVFJfQ1JFQVRFX01BWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBJUFNFVF9BVFRSX0NSRUFURV9NQVggKF9fSVBTRVRfQVRUUl9DUkVBVEVfTUFYIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBJUFNFVF9BVFRSX0VUSEVSID0gSVBTRVRfQVRUUl9DQURUX01BWCArIDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0FUVFJfTkFNRSwKICBJUFNFVF9BVFRSX05BTUVSRUYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0FUVFJfSVAyLAogIElQU0VUX0FUVFJfQ0lEUjIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0FUVFJfSVAyX1RPLAogIElQU0VUX0FUVFJfSUZBQ0UsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0FUVFJfQllURVMsCiAgSVBTRVRfQVRUUl9QQUNLRVRTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9BVFRSX0NPTU1FTlQsCiAgX19JUFNFVF9BVFRSX0FEVF9NQVgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgSVBTRVRfQVRUUl9BRFRfTUFYIChfX0lQU0VUX0FUVFJfQURUX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgSVBTRVRfQVRUUl9JUEFERFJfSVBWNCA9IElQU0VUX0FUVFJfVU5TUEVDICsgMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfQVRUUl9JUEFERFJfSVBWNiwKICBfX0lQU0VUX0FUVFJfSVBBRERSX01BWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBJUFNFVF9BVFRSX0lQQUREUl9NQVggKF9fSVBTRVRfQVRUUl9JUEFERFJfTUFYIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGlwc2V0X2Vycm5vIHsKICBJUFNFVF9FUlJfUFJJVkFURSA9IDQwOTYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0VSUl9QUk9UT0NPTCwKICBJUFNFVF9FUlJfRklORF9UWVBFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9FUlJfTUFYX1NFVFMsCiAgSVBTRVRfRVJSX0JVU1ksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0VSUl9FWElTVF9TRVROQU1FMiwKICBJUFNFVF9FUlJfVFlQRV9NSVNNQVRDSCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRVJSX0VYSVNULAogIElQU0VUX0VSUl9JTlZBTElEX0NJRFIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0VSUl9JTlZBTElEX05FVE1BU0ssCiAgSVBTRVRfRVJSX0lOVkFMSURfRkFNSUxZLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9FUlJfVElNRU9VVCwKICBJUFNFVF9FUlJfUkVGRVJFTkNFRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRVJSX0lQQUREUl9JUFY0LAogIElQU0VUX0VSUl9JUEFERFJfSVBWNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRVJSX0NPVU5URVIsCiAgSVBTRVRfRVJSX0NPTU1FTlQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0VSUl9JTlZBTElEX01BUktNQVNLLAogIElQU0VUX0VSUl9UWVBFX1NQRUNJRklDID0gNDM1MiwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBpcHNldF9jbWRfZmxhZ3MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX0JJVF9FWElTVCA9IDAsCiAgSVBTRVRfRkxBR19FWElTVCA9ICgxIDw8IElQU0VUX0ZMQUdfQklUX0VYSVNUKSwKICBJUFNFVF9GTEFHX0JJVF9MSVNUX1NFVE5BTUUgPSAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX0xJU1RfU0VUTkFNRSA9ICgxIDw8IElQU0VUX0ZMQUdfQklUX0xJU1RfU0VUTkFNRSksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0ZMQUdfQklUX0xJU1RfSEVBREVSID0gMiwKICBJUFNFVF9GTEFHX0xJU1RfSEVBREVSID0gKDEgPDwgSVBTRVRfRkxBR19CSVRfTElTVF9IRUFERVIpLAogIElQU0VUX0ZMQUdfQklUX1NLSVBfQ09VTlRFUl9VUERBVEUgPSAzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX1NLSVBfQ09VTlRFUl9VUERBVEUgPQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICAoMSA8PCBJUFNFVF9GTEFHX0JJVF9TS0lQX0NPVU5URVJfVVBEQVRFKSwKICBJUFNFVF9GTEFHX0JJVF9TS0lQX1NVQkNPVU5URVJfVVBEQVRFID0gNCwKICBJUFNFVF9GTEFHX1NLSVBfU1VCQ09VTlRFUl9VUERBVEUgPQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICAoMSA8PCBJUFNFVF9GTEFHX0JJVF9TS0lQX1NVQkNPVU5URVJfVVBEQVRFKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRkxBR19CSVRfTUFUQ0hfQ09VTlRFUlMgPSA1LAogIElQU0VUX0ZMQUdfTUFUQ0hfQ09VTlRFUlMgPSAoMSA8PCBJUFNFVF9GTEFHX0JJVF9NQVRDSF9DT1VOVEVSUyksCiAgSVBTRVRfRkxBR19CSVRfUkVUVVJOX05PTUFUQ0ggPSA3LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX1JFVFVSTl9OT01BVENIID0gKDEgPDwgSVBTRVRfRkxBR19CSVRfUkVUVVJOX05PTUFUQ0gpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX0NNRF9NQVggPSAxNSwKIH07CiBlbnVtIGlwc2V0X2NhZHRfZmxhZ3MgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX0JJVF9CRUZPUkUgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX0JFRk9SRSA9ICgxIDw8IElQU0VUX0ZMQUdfQklUX0JFRk9SRSksCiAgSVBTRVRfRkxBR19CSVRfUEhZU0RFViA9IDEsCiAgSVBTRVRfRkxBR19QSFlTREVWID0gKDEgPDwgSVBTRVRfRkxBR19CSVRfUEhZU0RFViksCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0ZMQUdfQklUX05PTUFUQ0ggPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX05PTUFUQ0ggPSAoMSA8PCBJUFNFVF9GTEFHX0JJVF9OT01BVENIKSwKICBJUFNFVF9GTEFHX0JJVF9XSVRIX0NPVU5URVJTID0gMywKICBJUFNFVF9GTEFHX1dJVEhfQ09VTlRFUlMgPSAoMSA8PCBJUFNFVF9GTEFHX0JJVF9XSVRIX0NPVU5URVJTKSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRkxBR19CSVRfV0lUSF9DT01NRU5UID0gNCwKLSBJUFNFVF9GTEFHX1dJVEhfQ09NTUVOVCA9ICgxIDw8IElQU0VUX0ZMQUdfQklUX1dJVEhfQ09NTUVOVCksCi0gSVBTRVRfRkxBR19DQURUX01BWCA9IDE1LAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfRkxBR19XSVRIX0NPTU1FTlQgPSAoMSA8PCBJUFNFVF9GTEFHX0JJVF9XSVRIX0NPTU1FTlQpLAorIElQU0VUX0ZMQUdfQklUX1dJVEhfRk9SQ0VBREQgPSA1LAorIElQU0VUX0ZMQUdfV0lUSF9GT1JDRUFERCA9ICgxIDw8IElQU0VUX0ZMQUdfQklUX1dJVEhfRk9SQ0VBREQpLAorIElQU0VUX0ZMQUdfQ0FEVF9NQVggPSAxNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworZW51bSBpcHNldF9jcmVhdGVfZmxhZ3MgeworIElQU0VUX0NSRUFURV9GTEFHX0JJVF9GT1JDRUFERCA9IDAsCisgSVBTRVRfQ1JFQVRFX0ZMQUdfRk9SQ0VBREQgPSAoMSA8PCBJUFNFVF9DUkVBVEVfRkxBR19CSVRfRk9SQ0VBREQpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9DUkVBVEVfRkxBR19CSVRfTUFYID0gNywKK307CiBlbnVtIGlwc2V0X2FkdCB7CiAgSVBTRVRfQURELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9ERUwsCiAgSVBTRVRfVEVTVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfQURUX01BWCwKICBJUFNFVF9DUkVBVEUgPSBJUFNFVF9BRFRfTUFYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9DQURUX01BWCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBfX3UxNiBpcF9zZXRfaWRfdDsKICNkZWZpbmUgSVBTRVRfSU5WQUxJRF9JRCA2NTUzNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gaXBfc2V0X2RpbSB7CiAgSVBTRVRfRElNX1pFUk8gPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9ESU1fT05FLAogIElQU0VUX0RJTV9UV08sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0RJTV9USFJFRSwKICBJUFNFVF9ESU1fTUFYID0gNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfQklUX1JFVFVSTl9OT01BVENIID0gNywKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBpcF9zZXRfa29wdCB7CiAgSVBTRVRfSU5WX01BVENIID0gKDEgPDwgSVBTRVRfRElNX1pFUk8pLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9ESU1fT05FX1NSQyA9ICgxIDw8IElQU0VUX0RJTV9PTkUpLAogIElQU0VUX0RJTV9UV09fU1JDID0gKDEgPDwgSVBTRVRfRElNX1RXTyksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0RJTV9USFJFRV9TUkMgPSAoMSA8PCBJUFNFVF9ESU1fVEhSRUUpLAogIElQU0VUX1JFVFVSTl9OT01BVENIID0gKDEgPDwgSVBTRVRfQklUX1JFVFVSTl9OT01BVENIKSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0NPVU5URVJfTk9ORSA9IDAsCiAgSVBTRVRfQ09VTlRFUl9FUSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfQ09VTlRFUl9ORSwKICBJUFNFVF9DT1VOVEVSX0xULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9DT1VOVEVSX0dULAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaXBfc2V0X2NvdW50ZXJfbWF0Y2ggewogIF9fdTggb3A7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHZhbHVlOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPX0lQX1NFVCA4MwogdW5pb24gaXBfc2V0X25hbWVfaW5kZXggeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIG5hbWVbSVBTRVRfTUFYTkFNRUxFTl07CiAgaXBfc2V0X2lkX3QgaW5kZXg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgSVBfU0VUX09QX0dFVF9CWU5BTUUgMHgwMDAwMDAwNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpcF9zZXRfcmVxX2dldF9zZXQgewogIHVuc2lnbmVkIGludCBvcDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHZlcnNpb247CiAgdW5pb24gaXBfc2V0X25hbWVfaW5kZXggc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIElQX1NFVF9PUF9HRVRfQllJTkRFWCAweDAwMDAwMDA3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9TRVRfT1BfR0VUX0ZOQU1FIDB4MDAwMDAwMDgKIHN0cnVjdCBpcF9zZXRfcmVxX2dldF9zZXRfZmFtaWx5IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IG9wOwogIHVuc2lnbmVkIGludCB2ZXJzaW9uOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZmFtaWx5OwogIHVuaW9uIGlwX3NldF9uYW1lX2luZGV4IHNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBJUF9TRVRfT1BfVkVSU0lPTiAweDAwMDAwMTAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlwX3NldF9yZXFfdmVyc2lvbiB7CiAgdW5zaWduZWQgaW50IG9wOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdmVyc2lvbjsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCmluZGV4IDM0NjMyZGQuLmUyYWJmYTAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCkBAIC0xOSwxMzAgKzE5LDE0NSBAQAogI2lmbmRlZiBfTElOVVhfTkZfVEFCTEVTX0gKICNkZWZpbmUgX0xJTlVYX05GX1RBQkxFU19ICiAjZGVmaW5lIE5GVF9DSEFJTl9NQVhOQU1FTEVOIDMyCi1lbnVtIG5mdF9yZWdpc3RlcnMgeworI2RlZmluZSBORlRfVVNFUkRBVEFfTUFYTEVOIDI1NgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbmZ0X3JlZ2lzdGVycyB7CiAgTkZUX1JFR19WRVJESUNULAogIE5GVF9SRUdfMSwKICBORlRfUkVHXzIsCi0gTkZUX1JFR18zLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfUkVHXzMsCiAgTkZUX1JFR180LAogIF9fTkZUX1JFR19NQVgKIH07Ci0jZGVmaW5lIE5GVF9SRUdfTUFYIChfX05GVF9SRUdfTUFYIC0gMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5GVF9SRUdfTUFYIChfX05GVF9SRUdfTUFYIC0gMSkKIGVudW0gbmZ0X3ZlcmRpY3RzIHsKICBORlRfQ09OVElOVUUgPSAtMSwKICBORlRfQlJFQUsgPSAtMiwKLSBORlRfSlVNUCA9IC0zLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfSlVNUCA9IC0zLAogIE5GVF9HT1RPID0gLTQsCiAgTkZUX1JFVFVSTiA9IC01LAogfTsKLWVudW0gbmZfdGFibGVzX21zZ190eXBlcyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBuZl90YWJsZXNfbXNnX3R5cGVzIHsKICBORlRfTVNHX05FV1RBQkxFLAogIE5GVF9NU0dfR0VUVEFCTEUsCiAgTkZUX01TR19ERUxUQUJMRSwKLSBORlRfTVNHX05FV0NIQUlOLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfTVNHX05FV0NIQUlOLAogIE5GVF9NU0dfR0VUQ0hBSU4sCiAgTkZUX01TR19ERUxDSEFJTiwKICBORlRfTVNHX05FV1JVTEUsCi0gTkZUX01TR19HRVRSVUxFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfTVNHX0dFVFJVTEUsCiAgTkZUX01TR19ERUxSVUxFLAogIE5GVF9NU0dfTkVXU0VULAogIE5GVF9NU0dfR0VUU0VULAotIE5GVF9NU0dfREVMU0VULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfTVNHX0RFTFNFVCwKICBORlRfTVNHX05FV1NFVEVMRU0sCiAgTkZUX01TR19HRVRTRVRFTEVNLAogIE5GVF9NU0dfREVMU0VURUxFTSwKLSBORlRfTVNHX01BWCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUX01TR19NQVgsCiB9OwogZW51bSBuZnRfbGlzdF9hdHRyaWJ1dGVzIHsKICBORlRBX0xJU1RfVU5QRUMsCi0gTkZUQV9MSVNUX0VMRU0sCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfTElTVF9FTEVNLAogIF9fTkZUQV9MSVNUX01BWAogfTsKICNkZWZpbmUgTkZUQV9MSVNUX01BWCAoX19ORlRBX0xJU1RfTUFYIC0gMSkKLWVudW0gbmZ0X2hvb2tfYXR0cmlidXRlcyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBuZnRfaG9va19hdHRyaWJ1dGVzIHsKICBORlRBX0hPT0tfVU5TUEVDLAogIE5GVEFfSE9PS19IT09LTlVNLAogIE5GVEFfSE9PS19QUklPUklUWSwKLSBfX05GVEFfSE9PS19NQVgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19ORlRBX0hPT0tfTUFYCiB9OwogI2RlZmluZSBORlRBX0hPT0tfTUFYIChfX05GVEFfSE9PS19NQVggLSAxKQogZW51bSBuZnRfdGFibGVfZmxhZ3MgewotIE5GVF9UQUJMRV9GX0RPUk1BTlQgPSAweDEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9UQUJMRV9GX0RPUk1BTlQgPSAweDEsCiB9OwogZW51bSBuZnRfdGFibGVfYXR0cmlidXRlcyB7CiAgTkZUQV9UQUJMRV9VTlNQRUMsCi0gTkZUQV9UQUJMRV9OQU1FLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX1RBQkxFX05BTUUsCiAgTkZUQV9UQUJMRV9GTEFHUywKICBORlRBX1RBQkxFX1VTRSwKICBfX05GVEFfVEFCTEVfTUFYCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIE5GVEFfVEFCTEVfTUFYIChfX05GVEFfVEFCTEVfTUFYIC0gMSkKIGVudW0gbmZ0X2NoYWluX2F0dHJpYnV0ZXMgewogIE5GVEFfQ0hBSU5fVU5TUEVDLAotIE5GVEFfQ0hBSU5fVEFCTEUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfQ0hBSU5fVEFCTEUsCiAgTkZUQV9DSEFJTl9IQU5ETEUsCiAgTkZUQV9DSEFJTl9OQU1FLAogIE5GVEFfQ0hBSU5fSE9PSywKLSBORlRBX0NIQUlOX1BPTElDWSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9DSEFJTl9QT0xJQ1ksCiAgTkZUQV9DSEFJTl9VU0UsCiAgTkZUQV9DSEFJTl9UWVBFLAogIE5GVEFfQ0hBSU5fQ09VTlRFUlMsCi0gX19ORlRBX0NIQUlOX01BWAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX05GVEFfQ0hBSU5fTUFYCiB9OwogI2RlZmluZSBORlRBX0NIQUlOX01BWCAoX19ORlRBX0NIQUlOX01BWCAtIDEpCiBlbnVtIG5mdF9ydWxlX2F0dHJpYnV0ZXMgewotIE5GVEFfUlVMRV9VTlNQRUMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfUlVMRV9VTlNQRUMsCiAgTkZUQV9SVUxFX1RBQkxFLAogIE5GVEFfUlVMRV9DSEFJTiwKICBORlRBX1JVTEVfSEFORExFLAotIE5GVEFfUlVMRV9FWFBSRVNTSU9OUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9SVUxFX0VYUFJFU1NJT05TLAogIE5GVEFfUlVMRV9DT01QQVQsCiAgTkZUQV9SVUxFX1BPU0lUSU9OLAorIE5GVEFfUlVMRV9VU0VSREFUQSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19ORlRBX1JVTEVfTUFYCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZUQV9SVUxFX01BWCAoX19ORlRBX1JVTEVfTUFYIC0gMSkKIGVudW0gbmZ0X3J1bGVfY29tcGF0X2ZsYWdzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZUX1JVTEVfQ09NUEFUX0ZfSU5WID0gKDEgPDwgMSksCiAgTkZUX1JVTEVfQ09NUEFUX0ZfTUFTSyA9IE5GVF9SVUxFX0NPTVBBVF9GX0lOViwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSBuZnRfcnVsZV9jb21wYXRfYXR0cmlidXRlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GVEFfUlVMRV9DT01QQVRfVU5TUEVDLAogIE5GVEFfUlVMRV9DT01QQVRfUFJPVE8sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GVEFfUlVMRV9DT01QQVRfRkxBR1MsCiAgX19ORlRBX1JVTEVfQ09NUEFUX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIE5GVEFfUlVMRV9DT01QQVRfTUFYIChfX05GVEFfUlVMRV9DT01QQVRfTUFYIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5mdF9zZXRfZmxhZ3MgewogIE5GVF9TRVRfQU5PTllNT1VTID0gMHgxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORlRfU0VUX0NPTlNUQU5UID0gMHgyLAogIE5GVF9TRVRfSU5URVJWQUwgPSAweDQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GVF9TRVRfTUFQID0gMHg4LAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG5mdF9zZXRfcG9saWNpZXMgeworIE5GVF9TRVRfUE9MX1BFUkZPUk1BTkNFLAorIE5GVF9TRVRfUE9MX01FTU9SWSwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBuZnRfc2V0X2Rlc2NfYXR0cmlidXRlcyB7CisgTkZUQV9TRVRfREVTQ19VTlNQRUMsCisgTkZUQV9TRVRfREVTQ19TSVpFLAorIF9fTkZUQV9TRVRfREVTQ19NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBORlRBX1NFVF9ERVNDX01BWCAoX19ORlRBX1NFVF9ERVNDX01BWCAtIDEpCiBlbnVtIG5mdF9zZXRfYXR0cmlidXRlcyB7CiAgTkZUQV9TRVRfVU5TUEVDLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTE1NCwzMCArMTY5LDM1IEBACiAgTkZUQV9TRVRfS0VZX0xFTiwKICBORlRBX1NFVF9EQVRBX1RZUEUsCiAgTkZUQV9TRVRfREFUQV9MRU4sCi0gX19ORlRBX1NFVF9NQVgKKyBORlRBX1NFVF9QT0xJQ1ksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfU0VUX0RFU0MsCisgTkZUQV9TRVRfSUQsCisgX19ORlRBX1NFVF9NQVgKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlRBX1NFVF9NQVggKF9fTkZUQV9TRVRfTUFYIC0gMSkKIGVudW0gbmZ0X3NldF9lbGVtX2ZsYWdzIHsKICBORlRfU0VUX0VMRU1fSU5URVJWQUxfRU5EID0gMHgxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBuZnRfc2V0X2VsZW1fYXR0cmlidXRlcyB7CiAgTkZUQV9TRVRfRUxFTV9VTlNQRUMsCiAgTkZUQV9TRVRfRUxFTV9LRVksCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GVEFfU0VUX0VMRU1fREFUQSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZUQV9TRVRfRUxFTV9GTEFHUywKICBfX05GVEFfU0VUX0VMRU1fTUFYCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZUQV9TRVRfRUxFTV9NQVggKF9fTkZUQV9TRVRfRUxFTV9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmZ0X3NldF9lbGVtX2xpc3RfYXR0cmlidXRlcyB7CiAgTkZUQV9TRVRfRUxFTV9MSVNUX1VOU1BFQywKICBORlRBX1NFVF9FTEVNX0xJU1RfVEFCTEUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GVEFfU0VUX0VMRU1fTElTVF9TRVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GVEFfU0VUX0VMRU1fTElTVF9FTEVNRU5UUywKKyBORlRBX1NFVF9FTEVNX0xJU1RfU0VUX0lELAogIF9fTkZUQV9TRVRfRUxFTV9MSVNUX01BWAogfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC0yNzksOTAgKzI5OSw5NSBAQAogIE5GVEFfTE9PS1VQX1NFVCwKICBORlRBX0xPT0tVUF9TUkVHLAogIE5GVEFfTE9PS1VQX0RSRUcsCi0gX19ORlRBX0xPT0tVUF9NQVgKKyBORlRBX0xPT0tVUF9TRVRfSUQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fTkZUQV9MT09LVVBfTUFYCiB9OwogI2RlZmluZSBORlRBX0xPT0tVUF9NQVggKF9fTkZUQV9MT09LVVBfTUFYIC0gMSkKIGVudW0gbmZ0X3BheWxvYWRfYmFzZXMgewotIE5GVF9QQVlMT0FEX0xMX0hFQURFUiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUX1BBWUxPQURfTExfSEVBREVSLAogIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSLAogIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVIsCiB9OwotZW51bSBuZnRfcGF5bG9hZF9hdHRyaWJ1dGVzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG5mdF9wYXlsb2FkX2F0dHJpYnV0ZXMgewogIE5GVEFfUEFZTE9BRF9VTlNQRUMsCiAgTkZUQV9QQVlMT0FEX0RSRUcsCiAgTkZUQV9QQVlMT0FEX0JBU0UsCi0gTkZUQV9QQVlMT0FEX09GRlNFVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9QQVlMT0FEX09GRlNFVCwKICBORlRBX1BBWUxPQURfTEVOLAogIF9fTkZUQV9QQVlMT0FEX01BWAogfTsKLSNkZWZpbmUgTkZUQV9QQVlMT0FEX01BWCAoX19ORlRBX1BBWUxPQURfTUFYIC0gMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5GVEFfUEFZTE9BRF9NQVggKF9fTkZUQV9QQVlMT0FEX01BWCAtIDEpCiBlbnVtIG5mdF9leHRoZHJfYXR0cmlidXRlcyB7CiAgTkZUQV9FWFRIRFJfVU5TUEVDLAogIE5GVEFfRVhUSERSX0RSRUcsCi0gTkZUQV9FWFRIRFJfVFlQRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9FWFRIRFJfVFlQRSwKICBORlRBX0VYVEhEUl9PRkZTRVQsCiAgTkZUQV9FWFRIRFJfTEVOLAogIF9fTkZUQV9FWFRIRFJfTUFYCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIE5GVEFfRVhUSERSX01BWCAoX19ORlRBX0VYVEhEUl9NQVggLSAxKQogZW51bSBuZnRfbWV0YV9rZXlzIHsKICBORlRfTUVUQV9MRU4sCi0gTkZUX01FVEFfUFJPVE9DT0wsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9NRVRBX1BST1RPQ09MLAogIE5GVF9NRVRBX1BSSU9SSVRZLAogIE5GVF9NRVRBX01BUkssCiAgTkZUX01FVEFfSUlGLAotIE5GVF9NRVRBX09JRiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUX01FVEFfT0lGLAogIE5GVF9NRVRBX0lJRk5BTUUsCiAgTkZUX01FVEFfT0lGTkFNRSwKICBORlRfTUVUQV9JSUZUWVBFLAotIE5GVF9NRVRBX09JRlRZUEUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9NRVRBX09JRlRZUEUsCiAgTkZUX01FVEFfU0tVSUQsCiAgTkZUX01FVEFfU0tHSUQsCiAgTkZUX01FVEFfTkZUUkFDRSwKLSBORlRfTUVUQV9SVENMQVNTSUQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9NRVRBX1JUQ0xBU1NJRCwKICBORlRfTUVUQV9TRUNNQVJLLAogIE5GVF9NRVRBX05GUFJPVE8sCiAgTkZUX01FVEFfTDRQUk9UTywKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9NRVRBX0JSSV9JSUZOQU1FLAorIE5GVF9NRVRBX0JSSV9PSUZOQU1FLAorfTsKIGVudW0gbmZ0X21ldGFfYXR0cmlidXRlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GVEFfTUVUQV9VTlNQRUMsCiAgTkZUQV9NRVRBX0RSRUcsCiAgTkZUQV9NRVRBX0tFWSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZUQV9NRVRBX1NSRUcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkZUQV9NRVRBX01BWAogfTsKICNkZWZpbmUgTkZUQV9NRVRBX01BWCAoX19ORlRBX01FVEFfTUFYIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5mdF9jdF9rZXlzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZUX0NUX1NUQVRFLAogIE5GVF9DVF9ESVJFQ1RJT04sCiAgTkZUX0NUX1NUQVRVUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZUX0NUX01BUkssCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GVF9DVF9TRUNNQVJLLAogIE5GVF9DVF9FWFBJUkFUSU9OLAogIE5GVF9DVF9IRUxQRVIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GVF9DVF9MM1BST1RPQ09MLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORlRfQ1RfU1JDLAogIE5GVF9DVF9EU1QsCiAgTkZUX0NUX1BST1RPQ09MLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORlRfQ1RfUFJPVE9fU1JDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORlRfQ1RfUFJPVE9fRFNULAorIE5GVF9DVF9MQUJFTFMsCiB9OwogZW51bSBuZnRfY3RfYXR0cmlidXRlcyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAppbmRleCBjMDRmNjJjLi42ZjZlODg3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaApAQCAtNDIsMzcgKzQyLDM5IEBACiAgTkZOTEdSUF9ORlRBQkxFUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GTkxHUlBfTkZUQUJMRVMgTkZOTEdSUF9ORlRBQkxFUworIE5GTkxHUlBfQUNDVF9RVU9UQSwKKyNkZWZpbmUgTkZOTEdSUF9BQ0NUX1FVT1RBIE5GTkxHUlBfQUNDVF9RVU9UQQogIF9fTkZOTEdSUF9NQVgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgTkZOTEdSUF9NQVggKF9fTkZOTEdSUF9NQVggLSAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZmdlbm1zZyB7CiAgX191OCBuZmdlbl9mYW1pbHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdmVyc2lvbjsKICBfX2JlMTYgcmVzX2lkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIE5GTkVUTElOS19WMCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORk5MX1NVQlNZU19JRCh4KSAoKHggJiAweGZmMDApID4+IDgpCiAjZGVmaW5lIE5GTkxfTVNHX1RZUEUoeCkgKHggJiAweDAwZmYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORk5MX1NVQlNZU19OT05FIDAKICNkZWZpbmUgTkZOTF9TVUJTWVNfQ1RORVRMSU5LIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GTkxfU1VCU1lTX0NUTkVUTElOS19FWFAgMgogI2RlZmluZSBORk5MX1NVQlNZU19RVUVVRSAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORk5MX1NVQlNZU19VTE9HIDQKICNkZWZpbmUgTkZOTF9TVUJTWVNfT1NGIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GTkxfU1VCU1lTX0lQU0VUIDYKICNkZWZpbmUgTkZOTF9TVUJTWVNfQUNDVCA3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORk5MX1NVQlNZU19DVE5FVExJTktfVElNRU9VVCA4CiAjZGVmaW5lIE5GTkxfU1VCU1lTX0NUSEVMUEVSIDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GTkxfU1VCU1lTX05GVEFCTEVTIDEwCiAjZGVmaW5lIE5GTkxfU1VCU1lTX05GVF9DT01QQVQgMTEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GTkxfU1VCU1lTX0NPVU5UIDEyCiAjZGVmaW5lIE5GTkxfTVNHX0JBVENIX0JFR0lOIE5MTVNHX01JTl9UWVBFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORk5MX01TR19CQVRDSF9FTkQgTkxNU0dfTUlOX1RZUEUrMQogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmgKaW5kZXggMDFmMTNlZi4uMjU5ODg4MSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5oCkBAIC0yOCwxNiArMjgsMjYgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZOTF9NU0dfQUNDVF9HRVRfQ1RSWkVSTywKICBORk5MX01TR19BQ0NUX0RFTCwKKyBORk5MX01TR19BQ0NUX09WRVJRVU9UQSwKICBORk5MX01TR19BQ0NUX01BWAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworZW51bSBuZm5sX2FjY3RfZmxhZ3MgeworIE5GQUNDVF9GX1FVT1RBX1BLVFMgPSAoMSA8PCAwKSwKKyBORkFDQ1RfRl9RVU9UQV9CWVRFUyA9ICgxIDw8IDEpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORkFDQ1RfRl9PVkVSUVVPVEEgPSAoMSA8PCAyKSwKK307CiBlbnVtIG5mbmxfYWNjdF90eXBlIHsKICBORkFDQ1RfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORkFDQ1RfTkFNRSwKICBORkFDQ1RfUEtUUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZBQ0NUX0JZVEVTLAogIE5GQUNDVF9VU0UsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GQUNDVF9GTEFHUywKKyBORkFDQ1RfUVVPVEEsCiAgX19ORkFDQ1RfTUFYCiB9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmZjLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25mYy5oCmluZGV4IDg4OTc5ZGUuLmQ0Y2M3YTMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmZjLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZmMuaApAQCAtOTgsMzcgKzk4LDQyIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GQ19BVFRSX0ZJUk1XQVJFX0RPV05MT0FEX1NUQVRVUywKICBORkNfQVRUUl9TRV9BUERVLAorIE5GQ19BVFRSX1RBUkdFVF9JU08xNTY5M19EU0ZJRCwKKyBORkNfQVRUUl9UQVJHRVRfSVNPMTU2OTNfVUlELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX05GQ19BVFRSX0FGVEVSX0xBU1QKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORkNfQVRUUl9NQVggKF9fTkZDX0FUVFJfQUZURVJfTEFTVCAtIDEpCiBlbnVtIG5mY19zZHBfYXR0ciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GQ19TRFBfQVRUUl9VTlNQRUMsCiAgTkZDX1NEUF9BVFRSX1VSSSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZDX1NEUF9BVFRSX1NBUCwKICBfX05GQ19TRFBfQVRUUl9BRlRFUl9MQVNUCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgTkZDX1NEUF9BVFRSX01BWCAoX19ORkNfU0RQX0FUVFJfQUZURVJfTEFTVCAtIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORkNfREVWSUNFX05BTUVfTUFYU0laRSA4CiAjZGVmaW5lIE5GQ19ORkNJRDFfTUFYU0laRSAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZDX05GQ0lEMl9NQVhTSVpFIDgKICNkZWZpbmUgTkZDX05GQ0lEM19NQVhTSVpFIDEwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORkNfU0VOU0JfUkVTX01BWFNJWkUgMTIKICNkZWZpbmUgTkZDX1NFTlNGX1JFU19NQVhTSVpFIDE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORkNfR0JfTUFYU0laRSA0OAogI2RlZmluZSBORkNfRklSTVdBUkVfTkFNRV9NQVhTSVpFIDMyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORkNfSVNPMTU2OTNfVUlEX01BWFNJWkUgOAogI2RlZmluZSBORkNfUFJPVE9fSkVXRUwgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZDX1BST1RPX01JRkFSRSAyCiAjZGVmaW5lIE5GQ19QUk9UT19GRUxJQ0EgMwogI2RlZmluZSBORkNfUFJPVE9fSVNPMTQ0NDMgNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZDX1BST1RPX05GQ19ERVAgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZDX1BST1RPX0lTTzE0NDQzX0IgNgotI2RlZmluZSBORkNfUFJPVE9fTUFYIDcKKyNkZWZpbmUgTkZDX1BST1RPX0lTTzE1NjkzIDcKKyNkZWZpbmUgTkZDX1BST1RPX01BWCA4CiAjZGVmaW5lIE5GQ19DT01NX0FDVElWRSAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORkNfQ09NTV9QQVNTSVZFIDEKQEAgLTE0Myw0NiArMTQ4LDUzIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORkNfUFJPVE9fTkZDX0RFUF9NQVNLICgxIDw8IE5GQ19QUk9UT19ORkNfREVQKQogI2RlZmluZSBORkNfUFJPVE9fSVNPMTQ0NDNfQl9NQVNLICgxIDw8IE5GQ19QUk9UT19JU08xNDQ0M19CKQorI2RlZmluZSBORkNfUFJPVE9fSVNPMTU2OTNfTUFTSyAoMSA8PCBORkNfUFJPVE9fSVNPMTU2OTMpCiAjZGVmaW5lIE5GQ19TRV9VSUNDIDB4MQotI2RlZmluZSBORkNfU0VfRU1CRURERUQgMHgyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORkNfU0VfRU1CRURERUQgMHgyCiAjZGVmaW5lIE5GQ19TRV9ESVNBQkxFRCAweDAKICNkZWZpbmUgTkZDX1NFX0VOQUJMRUQgMHgxCiBzdHJ1Y3Qgc29ja2FkZHJfbmZjIHsKLSBzYV9mYW1pbHlfdCBzYV9mYW1pbHk7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHNhX2ZhbWlseV90IHNhX2ZhbWlseTsKICBfX3UzMiBkZXZfaWR4OwogIF9fdTMyIHRhcmdldF9pZHg7CiAgX191MzIgbmZjX3Byb3RvY29sOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBORkNfTExDUF9NQVhfU0VSVklDRV9OQU1FIDYzCiBzdHJ1Y3Qgc29ja2FkZHJfbmZjX2xsY3AgewogIHNhX2ZhbWlseV90IHNhX2ZhbWlseTsKLSBfX3UzMiBkZXZfaWR4OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBkZXZfaWR4OwogIF9fdTMyIHRhcmdldF9pZHg7CiAgX191MzIgbmZjX3Byb3RvY29sOwogIF9fdTggZHNhcDsKLSBfX3U4IHNzYXA7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggc3NhcDsKICBjaGFyIHNlcnZpY2VfbmFtZVtORkNfTExDUF9NQVhfU0VSVklDRV9OQU1FXTsgIDsKICBzaXplX3Qgc2VydmljZV9uYW1lX2xlbjsKIH07Ci0jZGVmaW5lIE5GQ19TT0NLUFJPVE9fUkFXIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5GQ19TT0NLUFJPVE9fUkFXIDAKICNkZWZpbmUgTkZDX1NPQ0tQUk9UT19MTENQIDEKICNkZWZpbmUgTkZDX1NPQ0tQUk9UT19NQVggMgogI2RlZmluZSBORkNfSEVBREVSX1NJWkUgMQotI2RlZmluZSBORkNfTExDUF9SQVdfSEVBREVSX1NJWkUgMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTkZDX0xMQ1BfRElSRUNUSU9OX1JYIDB4MDAKLSNkZWZpbmUgTkZDX0xMQ1BfRElSRUNUSU9OX1RYIDB4MDEKKyNkZWZpbmUgTkZDX1JBV19IRUFERVJfU0laRSAyCisjZGVmaW5lIE5GQ19ESVJFQ1RJT05fUlggMHgwMAorI2RlZmluZSBORkNfRElSRUNUSU9OX1RYIDB4MDEKKyNkZWZpbmUgUkFXX1BBWUxPQURfTExDUCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSQVdfUEFZTE9BRF9OQ0kgMQorI2RlZmluZSBSQVdfUEFZTE9BRF9IQ0kgMgorI2RlZmluZSBSQVdfUEFZTE9BRF9ESUdJVEFMIDMKKyNkZWZpbmUgUkFXX1BBWUxPQURfUFJPUFJJRVRBUlkgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZDX0xMQ1BfUlcgMAogI2RlZmluZSBORkNfTExDUF9NSVVYIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GQ19MTENQX1JFTU9URV9NSVUgMgogI2RlZmluZSBORkNfTExDUF9SRU1PVEVfTFRPIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GQ19MTENQX1JFTU9URV9SVyA0CiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25mc2QvbmZzZmguaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmZzZC9uZnNmaC5oCmluZGV4IGQwODk0MTIuLjgxMTc3ZjcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmZzZC9uZnNmaC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmZzZC9uZnNmaC5oCkBAIC02OCw3ICs2OCw3IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBmaF9hdXRoX3R5cGUgZmhfYmFzZS5maF9uZXcuZmJfYXV0aF90eXBlCiAjZGVmaW5lIGZoX2ZpbGVpZF90eXBlIGZoX2Jhc2UuZmhfbmV3LmZiX2ZpbGVpZF90eXBlCi0jZGVmaW5lIGZoX2F1dGggZmhfYmFzZS5maF9uZXcuZmJfYXV0aAogI2RlZmluZSBmaF9mc2lkIGZoX2Jhc2UuZmhfbmV3LmZiX2F1dGgKKyNkZWZpbmUgZmhfYXV0aCBmaF9iYXNlLmZoX25ldy5mYl9hdXRoCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25sODAyMTEuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmw4MDIxMS5oCmluZGV4IDAxYzUwY2QuLjZkZjQ1ZDUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmw4MDIxMS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmw4MDIxMS5oCkBAIC00MjksMTYxICs0MjksMTcxIEBACiAgTkw4MDIxMV9BVFRSX1ZFTkRPUl9EQVRBLAogIE5MODAyMTFfQVRUUl9WRU5ET1JfRVZFTlRTLAogIE5MODAyMTFfQVRUUl9RT1NfTUFQLAotIF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsCisgTkw4MDIxMV9BVFRSX01BQ19ISU5ULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV9ISU5ULAorIE5MODAyMTFfQVRUUl9NQVhfQVBfQVNTT0NfU1RBLAorIE5MODAyMTFfQVRUUl9URExTX1BFRVJfQ0FQQUJJTElUWSwKKyBOTDgwMjExX0FUVFJfSUZBQ0VfU09DS0VUX09XTkVSLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0FUVFJfQ1NBX0NfT0ZGU0VUU19UWCwKKyBOTDgwMjExX0FUVFJfTUFYX0NTQV9DT1VOVEVSUywKKyBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNULAogIE5MODAyMTFfQVRUUl9NQVggPSBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUIC0gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIE5MODAyMTFfQVRUUl9TQ0FOX0dFTkVSQVRJT04gTkw4MDIxMV9BVFRSX0dFTkVSQVRJT04KICNkZWZpbmUgTkw4MDIxMV9BVFRSX01FU0hfUEFSQU1TIE5MODAyMTFfQVRUUl9NRVNIX0NPTkZJRwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkw4MDIxMV9DTURfQ09OTkVDVCBOTDgwMjExX0NNRF9DT05ORUNUCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWSBOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWQogI2RlZmluZSBOTDgwMjExX0FUVFJfQlNTX0JBU0lDX1JBVEVTIE5MODAyMTFfQVRUUl9CU1NfQkFTSUNfUkFURVMKICNkZWZpbmUgTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVMgTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9XSVBIWV9GUkVRIE5MODAyMTFfQVRUUl9XSVBIWV9GUkVRCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFIE5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUKICNkZWZpbmUgTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRSBOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9JRSBOTDgwMjExX0FUVFJfSUUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SIE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX0FUVFJfUkVHX1RZUEUgTkw4MDIxMV9BVFRSX1JFR19UWVBFCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9GUkFNRSBOTDgwMjExX0FUVFJfRlJBTUUKICNkZWZpbmUgTkw4MDIxMV9BVFRSX1NTSUQgTkw4MDIxMV9BVFRSX1NTSUQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9BVVRIX1RZUEUgTkw4MDIxMV9BVFRSX0FVVEhfVFlQRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFIE5MODAyMTFfQVRUUl9SRUFTT05fQ09ERQogI2RlZmluZSBOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFU19QQUlSV0lTRSBOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFU19QQUlSV0lTRQogI2RlZmluZSBOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFX0dST1VQIE5MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVfR1JPVVAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9XUEFfVkVSU0lPTlMgTkw4MDIxMV9BVFRSX1dQQV9WRVJTSU9OUworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkw4MDIxMV9BVFRSX0FLTV9TVUlURVMgTkw4MDIxMV9BVFRSX0FLTV9TVUlURVMKICNkZWZpbmUgTkw4MDIxMV9BVFRSX0tFWSBOTDgwMjExX0FUVFJfS0VZCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9LRVlTIE5MODAyMTFfQVRUUl9LRVlTCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX0FUVFJfRkVBVFVSRV9GTEFHUyBOTDgwMjExX0FUVFJfRkVBVFVSRV9GTEFHUworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkw4MDIxMV9NQVhfU1VQUF9SQVRFUyAzMgogI2RlZmluZSBOTDgwMjExX01BWF9TVVBQX0hUX1JBVEVTIDc3CiAjZGVmaW5lIE5MODAyMTFfTUFYX1NVUFBfUkVHX1JVTEVTIDMyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfRU5DUl9LRVkgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVkgMTYKICNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVkgMjQKICNkZWZpbmUgTkw4MDIxMV9IVF9DQVBBQklMSVRZX0xFTiAyNgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkw4MDIxMV9WSFRfQ0FQQUJJTElUWV9MRU4gMTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfTUFYX05SX0NJUEhFUl9TVUlURVMgNQogI2RlZmluZSBOTDgwMjExX01BWF9OUl9BS01fU1VJVEVTIDIKICNkZWZpbmUgTkw4MDIxMV9NSU5fUkVNQUlOX09OX0NIQU5ORUxfVElNRSAxMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkw4MDIxMV9TQ0FOX1JTU0lfVEhPTERfT0ZGIC0zMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfQ1FNX1RYRV9NQVhfSU5UVkwgMTgwMAogZW51bSBubDgwMjExX2lmdHlwZSB7CiAgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfSUZUWVBFX0FESE9DLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0lGVFlQRV9TVEFUSU9OLAogIE5MODAyMTFfSUZUWVBFX0FQLAogIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfSUZUWVBFX1dEUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiwKICBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5ULAogIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfSUZUWVBFX1AyUF9HTywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRSwKICBOVU1fTkw4MDIxMV9JRlRZUEVTLAogIE5MODAyMTFfSUZUWVBFX01BWCA9IE5VTV9OTDgwMjExX0lGVFlQRVMgLSAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfc3RhX2ZsYWdzIHsKICBfX05MODAyMTFfU1RBX0ZMQUdfSU5WQUxJRCwKICBOTDgwMjExX1NUQV9GTEFHX0FVVEhPUklaRUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU1RBX0ZMQUdfU0hPUlRfUFJFQU1CTEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU1RBX0ZMQUdfV01FLAogIE5MODAyMTFfU1RBX0ZMQUdfTUZQLAogIE5MODAyMTFfU1RBX0ZMQUdfQVVUSEVOVElDQVRFRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU1RBX0ZMQUdfQVNTT0NJQVRFRCwKICBfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCwKICBOTDgwMjExX1NUQV9GTEFHX01BWCA9IF9fTkw4MDIxMV9TVEFfRkxBR19BRlRFUl9MQVNUIC0gMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX1NUQV9GTEFHX01BWF9PTERfQVBJIE5MODAyMTFfU1RBX0ZMQUdfVERMU19QRUVSCiBzdHJ1Y3Qgbmw4MDIxMV9zdGFfZmxhZ191cGRhdGUgewogIF9fdTMyIG1hc2s7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogZW51bSBubDgwMjExX3JhdGVfaW5mbyB7CiAgX19OTDgwMjExX1JBVEVfSU5GT19JTlZBTElELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1JBVEVfSU5GT19CSVRSQVRFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1JBVEVfSU5GT19NQ1MsCiAgTkw4MDIxMV9SQVRFX0lORk9fNDBfTUhaX1dJRFRILAogIE5MODAyMTFfUkFURV9JTkZPX1NIT1JUX0dJLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1JBVEVfSU5GT19CSVRSQVRFMzIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUkFURV9JTkZPX1ZIVF9NQ1MsCiAgTkw4MDIxMV9SQVRFX0lORk9fVkhUX05TUywKICBOTDgwMjExX1JBVEVfSU5GT184MF9NSFpfV0lEVEgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUkFURV9JTkZPXzgwUDgwX01IWl9XSURUSCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9SQVRFX0lORk9fMTYwX01IWl9XSURUSCwKICBfX05MODAyMTFfUkFURV9JTkZPX0FGVEVSX0xBU1QsCiAgTkw4MDIxMV9SQVRFX0lORk9fTUFYID0gX19OTDgwMjExX1JBVEVfSU5GT19BRlRFUl9MQVNUIC0gMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX3N0YV9ic3NfcGFyYW0gewogIF9fTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0lOVkFMSUQsCiAgTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0NUU19QUk9ULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1NUQV9CU1NfUEFSQU1fU0hPUlRfUFJFQU1CTEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU1RBX0JTU19QQVJBTV9TSE9SVF9TTE9UX1RJTUUsCiAgTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0RUSU1fUEVSSU9ELAogIE5MODAyMTFfU1RBX0JTU19QQVJBTV9CRUFDT05fSU5URVJWQUwsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0FGVEVSX0xBU1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU1RBX0JTU19QQVJBTV9NQVggPSBfX05MODAyMTFfU1RBX0JTU19QQVJBTV9BRlRFUl9MQVNUIC0gMQogfTsKIGVudW0gbmw4MDIxMV9zdGFfaW5mbyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkw4MDIxMV9TVEFfSU5GT19JTlZBTElELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1NUQV9JTkZPX0lOQUNUSVZFX1RJTUUsCiAgTkw4MDIxMV9TVEFfSU5GT19SWF9CWVRFUywKICBOTDgwMjExX1NUQV9JTkZPX1RYX0JZVEVTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1NUQV9JTkZPX0xMSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU1RBX0lORk9fUExJRCwKICBOTDgwMjExX1NUQV9JTkZPX1BMSU5LX1NUQVRFLAogIE5MODAyMTFfU1RBX0lORk9fU0lHTkFMLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUywKICBOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFMsCiAgTkw4MDIxMV9TVEFfSU5GT19UWF9SRVRSSUVTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1NUQV9JTkZPX1RYX0ZBSUxFRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9TVEFfSU5GT19TSUdOQUxfQVZHLAogIE5MODAyMTFfU1RBX0lORk9fUlhfQklUUkFURSwKICBOTDgwMjExX1NUQV9JTkZPX0JTU19QQVJBTSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9TVEFfSU5GT19DT05ORUNURURfVElNRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9TVEFfSU5GT19TVEFfRkxBR1MsCiAgTkw4MDIxMV9TVEFfSU5GT19CRUFDT05fTE9TUywKICBOTDgwMjExX1NUQV9JTkZPX1RfT0ZGU0VULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1NUQV9JTkZPX0xPQ0FMX1BNLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1NUQV9JTkZPX1BFRVJfUE0sCiAgTkw4MDIxMV9TVEFfSU5GT19OT05QRUVSX1BNLAogIE5MODAyMTFfU1RBX0lORk9fUlhfQllURVM2NCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9TVEFfSU5GT19UWF9CWVRFUzY0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1NUQV9JTkZPX0NIQUlOX1NJR05BTCwKICBOTDgwMjExX1NUQV9JTkZPX0NIQUlOX1NJR05BTF9BVkcsCisgTkw4MDIxMV9TVEFfSU5GT19FWFBFQ1RFRF9USFJPVUdIUFVULAogIF9fTkw4MDIxMV9TVEFfSU5GT19BRlRFUl9MQVNULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1NUQV9JTkZPX01BWCA9IF9fTkw4MDIxMV9TVEFfSU5GT19BRlRFUl9MQVNUIC0gMQpAQCAtNjQ3LDkzICs2NTcsMTAzIEBACiAgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT184ME1IWiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT18xNjBNSFosCisgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9ERlNfQ0FDX1RJTUUsCisgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9JTkRPT1JfT05MWSwKKyBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0dPX0NPTkNVUlJFTlQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTk9fMjBNSFosCisgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT18xME1IWiwKICBfX05MODAyMTFfRlJFUVVFTkNZX0FUVFJfQUZURVJfTEFTVCwKICBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX01BWCA9IF9fTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9BRlRFUl9MQVNUIC0gMQotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX01BWF9UWF9QT1dFUiBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX01BWF9UWF9QT1dFUgogI2RlZmluZSBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX1BBU1NJVkVfU0NBTiBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX05PX0lSCiAjZGVmaW5lIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTk9fSUJTUyBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX05PX0lSCi0jZGVmaW5lIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTk9fSVIgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT19JUgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT19JUiBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX05PX0lSCiBlbnVtIG5sODAyMTFfYml0cmF0ZV9hdHRyIHsKICBfX05MODAyMTFfQklUUkFURV9BVFRSX0lOVkFMSUQsCiAgTkw4MDIxMV9CSVRSQVRFX0FUVFJfUkFURSwKLSBOTDgwMjExX0JJVFJBVEVfQVRUUl8yR0haX1NIT1JUUFJFQU1CTEUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQklUUkFURV9BVFRSXzJHSFpfU0hPUlRQUkVBTUJMRSwKICBfX05MODAyMTFfQklUUkFURV9BVFRSX0FGVEVSX0xBU1QsCiAgTkw4MDIxMV9CSVRSQVRFX0FUVFJfTUFYID0gX19OTDgwMjExX0JJVFJBVEVfQVRUUl9BRlRFUl9MQVNUIC0gMQogfTsKLWVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciB7CiAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUsCiAgTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVIsCiAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUiwKLSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUsCiB9OwogZW51bSBubDgwMjExX3JlZ190eXBlIHsKICBOTDgwMjExX1JFR0RPTV9UWVBFX0NPVU5UUlksCi0gTkw4MDIxMV9SRUdET01fVFlQRV9XT1JMRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9SRUdET01fVFlQRV9XT1JMRCwKICBOTDgwMjExX1JFR0RPTV9UWVBFX0NVU1RPTV9XT1JMRCwKICBOTDgwMjExX1JFR0RPTV9UWVBFX0lOVEVSU0VDVElPTiwKIH07Ci1lbnVtIG5sODAyMTFfcmVnX3J1bGVfYXR0ciB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBubDgwMjExX3JlZ19ydWxlX2F0dHIgewogIF9fTkw4MDIxMV9SRUdfUlVMRV9BVFRSX0lOVkFMSUQsCiAgTkw4MDIxMV9BVFRSX1JFR19SVUxFX0ZMQUdTLAogIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX1NUQVJULAotIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX0VORCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9BVFRSX0ZSRVFfUkFOR0VfRU5ELAogIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX01BWF9CVywKICBOTDgwMjExX0FUVFJfUE9XRVJfUlVMRV9NQVhfQU5UX0dBSU4sCiAgTkw4MDIxMV9BVFRSX1BPV0VSX1JVTEVfTUFYX0VJUlAsCi0gX19OTDgwMjExX1JFR19SVUxFX0FUVFJfQUZURVJfTEFTVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9BVFRSX0RGU19DQUNfVElNRSwKKyBfX05MODAyMTFfUkVHX1JVTEVfQVRUUl9BRlRFUl9MQVNULAogIE5MODAyMTFfUkVHX1JVTEVfQVRUUl9NQVggPSBfX05MODAyMTFfUkVHX1JVTEVfQVRUUl9BRlRFUl9MQVNUIC0gMQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfc2NoZWRfc2Nhbl9tYXRjaF9hdHRyIHsKICBfX05MODAyMTFfU0NIRURfU0NBTl9NQVRDSF9BVFRSX0lOVkFMSUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU0NIRURfU0NBTl9NQVRDSF9BVFRSX1NTSUQsCiAgTkw4MDIxMV9TQ0hFRF9TQ0FOX01BVENIX0FUVFJfUlNTSSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19OTDgwMjExX1NDSEVEX1NDQU5fTUFUQ0hfQVRUUl9BRlRFUl9MQVNULAogIE5MODAyMTFfU0NIRURfU0NBTl9NQVRDSF9BVFRSX01BWCA9Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkw4MDIxMV9TQ0hFRF9TQ0FOX01BVENIX0FUVFJfQUZURVJfTEFTVCAtIDEKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9NQVRDSF9TU0lEIE5MODAyMTFfU0NIRURfU0NBTl9NQVRDSF9BVFRSX1NTSUQKIGVudW0gbmw4MDIxMV9yZWdfcnVsZV9mbGFncyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUlJGX05PX09GRE0gPSAxPDwwLAogIE5MODAyMTFfUlJGX05PX0NDSyA9IDE8PDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUlJGX05PX0lORE9PUiA9IDE8PDIsCiAgTkw4MDIxMV9SUkZfTk9fT1VURE9PUiA9IDE8PDMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUlJGX0RGUyA9IDE8PDQsCiAgTkw4MDIxMV9SUkZfUFRQX09OTFkgPSAxPDw1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1JSRl9QVE1QX09OTFkgPSAxPDw2LAogIE5MODAyMTFfUlJGX05PX0lSID0gMTw8NywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19OTDgwMjExX1JSRl9OT19JQlNTID0gMTw8OCwKKyBOTDgwMjExX1JSRl9BVVRPX0JXID0gMTw8MTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIE5MODAyMTFfUlJGX05PX0lSCiAjZGVmaW5lIE5MODAyMTFfUlJGX05PX0lCU1MgTkw4MDIxMV9SUkZfTk9fSVIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfUlJGX05PX0lSIE5MODAyMTFfUlJGX05PX0lSCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX1JSRl9OT19JUl9BTEwgKE5MODAyMTFfUlJGX05PX0lSIHwgX19OTDgwMjExX1JSRl9OT19JQlNTKQogZW51bSBubDgwMjExX2Rmc19yZWdpb25zIHsKICBOTDgwMjExX0RGU19VTlNFVCA9IDAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfREZTX0ZDQyA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfREZTX0VUU0kgPSAyLAogIE5MODAyMTFfREZTX0pQID0gMywKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX3VzZXJfcmVnX2hpbnRfdHlwZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfVVNFUl9SRUdfSElOVF9VU0VSID0gMCwKICBOTDgwMjExX1VTRVJfUkVHX0hJTlRfQ0VMTF9CQVNFID0gMSwKKyBOTDgwMjExX1VTRVJfUkVHX0hJTlRfSU5ET09SID0gMiwKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX3N1cnZleV9pbmZvIHsKQEAgLTk3NCwyNzUgKzk5NCwyODUgQEAKICBOTDgwMjExX1RYUkFURV9MRUdBQ1ksCiAgTkw4MDIxMV9UWFJBVEVfSFQsCiAgTkw4MDIxMV9UWFJBVEVfVkhULAotIF9fTkw4MDIxMV9UWFJBVEVfQUZURVJfTEFTVCwKKyBOTDgwMjExX1RYUkFURV9HSSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19OTDgwMjExX1RYUkFURV9BRlRFUl9MQVNULAogIE5MODAyMTFfVFhSQVRFX01BWCA9IF9fTkw4MDIxMV9UWFJBVEVfQUZURVJfTEFTVCAtIDEKIH07CiAjZGVmaW5lIE5MODAyMTFfVFhSQVRFX01DUyBOTDgwMjExX1RYUkFURV9IVAotI2RlZmluZSBOTDgwMjExX1ZIVF9OU1NfTUFYIDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5MODAyMTFfVkhUX05TU19NQVggOAogc3RydWN0IG5sODAyMTFfdHhyYXRlX3ZodCB7CiAgX191MTYgbWNzW05MODAyMTFfVkhUX05TU19NQVhdOwogfTsKLWVudW0gbmw4MDIxMV9iYW5kIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG5sODAyMTFfdHhyYXRlX2dpIHsKKyBOTDgwMjExX1RYUkFURV9ERUZBVUxUX0dJLAorIE5MODAyMTFfVFhSQVRFX0ZPUkNFX1NHSSwKKyBOTDgwMjExX1RYUkFURV9GT1JDRV9MR0ksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK2VudW0gbmw4MDIxMV9iYW5kIHsKICBOTDgwMjExX0JBTkRfMkdIWiwKICBOTDgwMjExX0JBTkRfNUdIWiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9CQU5EXzYwR0haLAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfcHNfc3RhdGUgewogIE5MODAyMTFfUFNfRElTQUJMRUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUFNfRU5BQkxFRCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX2F0dHJfY3FtIHsKICBfX05MODAyMTFfQVRUUl9DUU1fSU5WQUxJRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0NRTV9SU1NJX1RIT0xELAogIE5MODAyMTFfQVRUUl9DUU1fUlNTSV9IWVNULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfQ1FNX1JTU0lfVEhSRVNIT0xEX0VWRU5ULAogIE5MODAyMTFfQVRUUl9DUU1fUEtUX0xPU1NfRVZFTlQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9DUU1fVFhFX1JBVEUsCiAgTkw4MDIxMV9BVFRSX0NRTV9UWEVfUEtUUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0NRTV9UWEVfSU5UVkwsCiAgX19OTDgwMjExX0FUVFJfQ1FNX0FGVEVSX0xBU1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9DUU1fTUFYID0gX19OTDgwMjExX0FUVFJfQ1FNX0FGVEVSX0xBU1QgLSAxCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmw4MDIxMV9jcW1fcnNzaV90aHJlc2hvbGRfZXZlbnQgewogIE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNIT0xEX0VWRU5UX0xPVywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfSElHSCwKICBOTDgwMjExX0NRTV9SU1NJX0JFQUNPTl9MT1NTX0VWRU5ULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIG5sODAyMTFfdHhfcG93ZXJfc2V0dGluZyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfVFhfUE9XRVJfQVVUT01BVElDLAogIE5MODAyMTFfVFhfUE9XRVJfTElNSVRFRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9UWF9QT1dFUl9GSVhFRCwKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX3BhY2tldF9wYXR0ZXJuX2F0dHIgewogIF9fTkw4MDIxMV9QS1RQQVRfSU5WQUxJRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9QS1RQQVRfTUFTSywKICBOTDgwMjExX1BLVFBBVF9QQVRURVJOLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1BLVFBBVF9PRkZTRVQsCiAgTlVNX05MODAyMTFfUEtUUEFULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNQVhfTkw4MDIxMV9QS1RQQVQgPSBOVU1fTkw4MDIxMV9QS1RQQVQgLSAxLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgbmw4MDIxMV9wYXR0ZXJuX3N1cHBvcnQgewogIF9fdTMyIG1heF9wYXR0ZXJuczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWluX3BhdHRlcm5fbGVuOwogIF9fdTMyIG1heF9wYXR0ZXJuX2xlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3BrdF9vZmZzZXQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OTDgwMjExX1dPV0xBTl9QS1RQQVRfSU5WQUxJRCBfX05MODAyMTFfUEtUUEFUX0lOVkFMSUQKICNkZWZpbmUgTkw4MDIxMV9XT1dMQU5fUEtUUEFUX01BU0sgTkw4MDIxMV9QS1RQQVRfTUFTSworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkw4MDIxMV9XT1dMQU5fUEtUUEFUX1BBVFRFUk4gTkw4MDIxMV9QS1RQQVRfUEFUVEVSTgogI2RlZmluZSBOTDgwMjExX1dPV0xBTl9QS1RQQVRfT0ZGU0VUIE5MODAyMTFfUEtUUEFUX09GRlNFVAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTlVNX05MODAyMTFfV09XTEFOX1BLVFBBVCBOVU1fTkw4MDIxMV9QS1RQQVQKICNkZWZpbmUgTUFYX05MODAyMTFfV09XTEFOX1BLVFBBVCBNQVhfTkw4MDIxMV9QS1RQQVQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIG5sODAyMTFfd293bGFuX3BhdHRlcm5fc3VwcG9ydCBubDgwMjExX3BhdHRlcm5fc3VwcG9ydAogZW51bSBubDgwMjExX3dvd2xhbl90cmlnZ2VycyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkw4MDIxMV9XT1dMQU5fVFJJR19JTlZBTElELAogIE5MODAyMTFfV09XTEFOX1RSSUdfQU5ZLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1dPV0xBTl9UUklHX0RJU0NPTk5FQ1QsCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19NQUdJQ19QS1QsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfV09XTEFOX1RSSUdfUEtUX1BBVFRFUk4sCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19HVEtfUkVLRVlfU1VQUE9SVEVELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1dPV0xBTl9UUklHX0dUS19SRUtFWV9GQUlMVVJFLAogIE5MODAyMTFfV09XTEFOX1RSSUdfRUFQX0lERU5UX1JFUVVFU1QsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfV09XTEFOX1RSSUdfNFdBWV9IQU5EU0hBS0UsCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19SRktJTExfUkVMRUFTRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19XQUtFVVBfUEtUXzgwMjExLAogIE5MODAyMTFfV09XTEFOX1RSSUdfV0FLRVVQX1BLVF84MDIxMV9MRU4sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfV09XTEFOX1RSSUdfV0FLRVVQX1BLVF84MDIzLAogIE5MODAyMTFfV09XTEFOX1RSSUdfV0FLRVVQX1BLVF84MDIzX0xFTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19UQ1BfQ09OTkVDVElPTiwKICBOTDgwMjExX1dPV0xBTl9UUklHX1dBS0VVUF9UQ1BfTUFUQ0gsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfV09XTEFOX1RSSUdfV0FLRVVQX1RDUF9DT05OTE9TVCwKICBOTDgwMjExX1dPV0xBTl9UUklHX1dBS0VVUF9UQ1BfTk9NT1JFVE9LRU5TLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOVU1fTkw4MDIxMV9XT1dMQU5fVFJJRywKICBNQVhfTkw4MDIxMV9XT1dMQU5fVFJJRyA9IE5VTV9OTDgwMjExX1dPV0xBTl9UUklHIC0gMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3Qgbmw4MDIxMV93b3dsYW5fdGNwX2RhdGFfc2VxIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc3RhcnQsIG9mZnNldCwgbGVuOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgbmw4MDIxMV93b3dsYW5fdGNwX2RhdGFfdG9rZW4gewogIF9fdTMyIG9mZnNldCwgbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHRva2VuX3N0cmVhbVtdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgbmw4MDIxMV93b3dsYW5fdGNwX2RhdGFfdG9rZW5fZmVhdHVyZSB7CiAgX191MzIgbWluX2xlbiwgbWF4X2xlbiwgYnVmc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSBubDgwMjExX3dvd2xhbl90Y3BfYXR0cnMgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX05MODAyMTFfV09XTEFOX1RDUF9JTlZBTElELAogIE5MODAyMTFfV09XTEFOX1RDUF9TUkNfSVBWNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9XT1dMQU5fVENQX0RTVF9JUFY0LAogIE5MODAyMTFfV09XTEFOX1RDUF9EU1RfTUFDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1dPV0xBTl9UQ1BfU1JDX1BPUlQsCiAgTkw4MDIxMV9XT1dMQU5fVENQX0RTVF9QT1JULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1dPV0xBTl9UQ1BfREFUQV9QQVlMT0FELAogIE5MODAyMTFfV09XTEFOX1RDUF9EQVRBX1BBWUxPQURfU0VRLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1dPV0xBTl9UQ1BfREFUQV9QQVlMT0FEX1RPS0VOLAogIE5MODAyMTFfV09XTEFOX1RDUF9EQVRBX0lOVEVSVkFMLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1dPV0xBTl9UQ1BfV0FLRV9QQVlMT0FELAogIE5MODAyMTFfV09XTEFOX1RDUF9XQUtFX01BU0ssCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5VTV9OTDgwMjExX1dPV0xBTl9UQ1AsCiAgTUFYX05MODAyMTFfV09XTEFOX1RDUCA9IE5VTV9OTDgwMjExX1dPV0xBTl9UQ1AgLSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBubDgwMjExX2NvYWxlc2NlX3J1bGVfc3VwcG9ydCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9ydWxlczsKICBzdHJ1Y3Qgbmw4MDIxMV9wYXR0ZXJuX3N1cHBvcnQgcGF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfZGVsYXk7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmw4MDIxMV9hdHRyX2NvYWxlc2NlX3J1bGUgewogIF9fTkw4MDIxMV9DT0FMRVNDRV9SVUxFX0lOVkFMSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9DT0FMRVNDRV9SVUxFX0RFTEFZLAogIE5MODAyMTFfQVRUUl9DT0FMRVNDRV9SVUxFX0NPTkRJVElPTiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0NPQUxFU0NFX1JVTEVfUEtUX1BBVFRFUk4sCiAgTlVNX05MODAyMTFfQVRUUl9DT0FMRVNDRV9SVUxFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfQ09BTEVTQ0VfUlVMRV9NQVggPSBOVU1fTkw4MDIxMV9BVFRSX0NPQUxFU0NFX1JVTEUgLSAxCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmw4MDIxMV9jb2FsZXNjZV9jb25kaXRpb24gewogIE5MODAyMTFfQ09BTEVTQ0VfQ09ORElUSU9OX01BVENILAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0NPQUxFU0NFX0NPTkRJVElPTl9OT19NQVRDSAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfaWZhY2VfbGltaXRfYXR0cnMgewogIE5MODAyMTFfSUZBQ0VfTElNSVRfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0lGQUNFX0xJTUlUX01BWCwKICBOTDgwMjExX0lGQUNFX0xJTUlUX1RZUEVTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOVU1fTkw4MDIxMV9JRkFDRV9MSU1JVCwKICBNQVhfTkw4MDIxMV9JRkFDRV9MSU1JVCA9IE5VTV9OTDgwMjExX0lGQUNFX0xJTUlUIC0gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIG5sODAyMTFfaWZfY29tYmluYXRpb25fYXR0cnMgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0lGQUNFX0NPTUJfVU5TUEVDLAogIE5MODAyMTFfSUZBQ0VfQ09NQl9MSU1JVFMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfSUZBQ0VfQ09NQl9NQVhOVU0sCiAgTkw4MDIxMV9JRkFDRV9DT01CX1NUQV9BUF9CSV9NQVRDSCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9JRkFDRV9DT01CX05VTV9DSEFOTkVMUywKICBOTDgwMjExX0lGQUNFX0NPTUJfUkFEQVJfREVURUNUX1dJRFRIUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9JRkFDRV9DT01CX1JBREFSX0RFVEVDVF9SRUdJT05TLAogIE5VTV9OTDgwMjExX0lGQUNFX0NPTUIsCiAgTUFYX05MODAyMTFfSUZBQ0VfQ09NQiA9IE5VTV9OTDgwMjExX0lGQUNFX0NPTUIgLSAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfcGxpbmtfc3RhdGUgewogIE5MODAyMTFfUExJTktfTElTVEVOLAogIE5MODAyMTFfUExJTktfT1BOX1NOVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9QTElOS19PUE5fUkNWRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9QTElOS19DTkZfUkNWRCwKICBOTDgwMjExX1BMSU5LX0VTVEFCLAogIE5MODAyMTFfUExJTktfSE9MRElORywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9QTElOS19CTE9DS0VELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOVU1fTkw4MDIxMV9QTElOS19TVEFURVMsCiAgTUFYX05MODAyMTFfUExJTktfU1RBVEVTID0gTlVNX05MODAyMTFfUExJTktfU1RBVEVTIC0gMQogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHBsaW5rX2FjdGlvbnMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1BMSU5LX0FDVElPTl9OT19BQ1RJT04sCiAgTkw4MDIxMV9QTElOS19BQ1RJT05fT1BFTiwKICBOTDgwMjExX1BMSU5LX0FDVElPTl9CTE9DSywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTlVNX05MODAyMTFfUExJTktfQUNUSU9OUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBOTDgwMjExX0tDS19MRU4gMTYKICNkZWZpbmUgTkw4MDIxMV9LRUtfTEVOIDE2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX1JFUExBWV9DVFJfTEVOIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfcmVrZXlfZGF0YSB7CiAgX19OTDgwMjExX1JFS0VZX0RBVEFfSU5WQUxJRCwKICBOTDgwMjExX1JFS0VZX0RBVEFfS0VLLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1JFS0VZX0RBVEFfS0NLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1JFS0VZX0RBVEFfUkVQTEFZX0NUUiwKICBOVU1fTkw4MDIxMV9SRUtFWV9EQVRBLAogIE1BWF9OTDgwMjExX1JFS0VZX0RBVEEgPSBOVU1fTkw4MDIxMV9SRUtFWV9EQVRBIC0gMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX2hpZGRlbl9zc2lkIHsKICBOTDgwMjExX0hJRERFTl9TU0lEX05PVF9JTl9VU0UsCiAgTkw4MDIxMV9ISURERU5fU1NJRF9aRVJPX0xFTiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9ISURERU5fU1NJRF9aRVJPX0NPTlRFTlRTCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gbmw4MDIxMV9zdGFfd21lX2F0dHIgewogIF9fTkw4MDIxMV9TVEFfV01FX0lOVkFMSUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU1RBX1dNRV9VQVBTRF9RVUVVRVMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU1RBX1dNRV9NQVhfU1AsCiAgX19OTDgwMjExX1NUQV9XTUVfQUZURVJfTEFTVCwKICBOTDgwMjExX1NUQV9XTUVfTUFYID0gX19OTDgwMjExX1NUQV9XTUVfQUZURVJfTEFTVCAtIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmw4MDIxMV9wbWtzYV9jYW5kaWRhdGVfYXR0ciB7CiAgX19OTDgwMjExX1BNS1NBX0NBTkRJREFURV9JTlZBTElELAogIE5MODAyMTFfUE1LU0FfQ0FORElEQVRFX0lOREVYLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1BNS1NBX0NBTkRJREFURV9CU1NJRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9QTUtTQV9DQU5ESURBVEVfUFJFQVVUSCwKICBOVU1fTkw4MDIxMV9QTUtTQV9DQU5ESURBVEUsCiAgTUFYX05MODAyMTFfUE1LU0FfQ0FORElEQVRFID0gTlVNX05MODAyMTFfUE1LU0FfQ0FORElEQVRFIC0gMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX3RkbHNfb3BlcmF0aW9uIHsKICBOTDgwMjExX1RETFNfRElTQ09WRVJZX1JFUSwKICBOTDgwMjExX1RETFNfU0VUVVAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfVERMU19URUFSRE9XTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9URExTX0VOQUJMRV9MSU5LLAogIE5MODAyMTFfVERMU19ESVNBQkxFX0xJTkssCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmw4MDIxMV9mZWF0dXJlX2ZsYWdzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GRUFUVVJFX1NLX1RYX1NUQVRVUyA9IDEgPDwgMCwKICBOTDgwMjExX0ZFQVRVUkVfSFRfSUJTUyA9IDEgPDwgMSwKICBOTDgwMjExX0ZFQVRVUkVfSU5BQ1RJVklUWV9USU1FUiA9IDEgPDwgMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GRUFUVVJFX0NFTExfQkFTRV9SRUdfSElOVFMgPSAxIDw8IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfRkVBVFVSRV9QMlBfREVWSUNFX05FRURTX0NIQU5ORUwgPSAxIDw8IDQsCiAgTkw4MDIxMV9GRUFUVVJFX1NBRSA9IDEgPDwgNSwKICBOTDgwMjExX0ZFQVRVUkVfTE9XX1BSSU9SSVRZX1NDQU4gPSAxIDw8IDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfRkVBVFVSRV9TQ0FOX0ZMVVNIID0gMSA8PCA3LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0ZFQVRVUkVfQVBfU0NBTiA9IDEgPDwgOCwKICBOTDgwMjExX0ZFQVRVUkVfVklGX1RYUE9XRVIgPSAxIDw8IDksCiAgTkw4MDIxMV9GRUFUVVJFX05FRURfT0JTU19TQ0FOID0gMSA8PCAxMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GRUFUVVJFX1AyUF9HT19DVFdJTiA9IDEgPDwgMTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfRkVBVFVSRV9QMlBfR09fT1BQUFMgPSAxIDw8IDEyLAogIE5MODAyMTFfRkVBVFVSRV9BRFZFUlRJU0VfQ0hBTl9MSU1JVFMgPSAxIDw8IDE0LAogIE5MODAyMTFfRkVBVFVSRV9GVUxMX0FQX0NMSUVOVF9TVEFURSA9IDEgPDwgMTUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfRkVBVFVSRV9VU0VSU1BBQ0VfTVBNID0gMSA8PCAxNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GRUFUVVJFX0FDVElWRV9NT05JVE9SID0gMSA8PCAxNywKKyBOTDgwMjExX0ZFQVRVUkVfQVBfTU9ERV9DSEFOX1dJRFRIX0NIQU5HRSA9IDEgPDwgMTgsCiB9OwogZW51bSBubDgwMjExX3Byb2JlX3Jlc3Bfb2ZmbG9hZF9zdXBwb3J0X2F0dHIgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTEzMDYsNCArMTMzNiwxMCBAQAogIF9fdTMyIHN1YmNtZDsKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBubDgwMjExX3RkbHNfcGVlcl9jYXBhYmlsaXR5IHsKKyBOTDgwMjExX1RETFNfUEVFUl9IVCA9IDE8PDAsCisgTkw4MDIxMV9URExTX1BFRVJfVkhUID0gMTw8MSwKKyBOTDgwMjExX1RETFNfUEVFUl9XTU0gPSAxPDwyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbnZtZS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9udm1lLmgKaW5kZXggZWVkZWE5MC4uODUwYzQyZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9udm1lLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9udm1lLmgKQEAgLTMyLDUxICszMiw3MSBAQAogIF9fdTggd3JpdGVfdHB1dDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCB3cml0ZV9sYXQ7Ci0gX191OCByc3ZkMTZbMTZdOwotfTsKLWVudW0geworIF9fbGUxNiBpZGxlX3Bvd2VyOworIF9fdTggaWRsZV9zY2FsZTsKKyBfX3U4IHJzdmQxOTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTE2IGFjdGl2ZV9wb3dlcjsKKyBfX3U4IGFjdGl2ZV93b3JrX3NjYWxlOworIF9fdTggcnN2ZDIzWzldOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKICBOVk1FX1BTX0ZMQUdTX01BWF9QT1dFUl9TQ0FMRSA9IDEgPDwgMCwKICBOVk1FX1BTX0ZMQUdTX05PTl9PUF9TVEFURSA9IDEgPDwgMSwKIH07Ci1zdHJ1Y3QgbnZtZV9pZF9jdHJsIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgbnZtZV9pZF9jdHJsIHsKICBfX2xlMTYgdmlkOwogIF9fbGUxNiBzc3ZpZDsKICBjaGFyIHNuWzIwXTsKLSBjaGFyIG1uWzQwXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgY2hhciBtbls0MF07CiAgY2hhciBmcls4XTsKICBfX3U4IHJhYjsKICBfX3U4IGllZWVbM107Ci0gX191OCBtaWM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggbWljOwogIF9fdTggbWR0czsKLSBfX3U4IHJzdmQ3OFsxNzhdOworIF9fdTE2IGNudGxpZDsKKyBfX3UzMiB2ZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcnN2ZDg0WzE3Ml07CiAgX19sZTE2IG9hY3M7CiAgX191OCBhY2w7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYWVybDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBmcm13OwogIF9fdTggbHBhOwogIF9fdTggZWxwZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBucHNzOwotIF9fdTggcnN2ZDI2NFsyNDhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGF2c2NjOworIF9fdTggYXBzdGE7CisgX19sZTE2IHdjdGVtcDsKKyBfX2xlMTYgY2N0ZW1wOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHJzdmQyNzBbMjQyXTsKICBfX3U4IHNxZXM7CiAgX191OCBjcWVzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHJzdmQ1MTRbMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBubjsKICBfX2xlMTYgb25jczsKICBfX2xlMTYgZnVzZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZm5hOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHZ3YzsKICBfX2xlMTYgYXd1bjsKICBfX2xlMTYgYXd1cGY7CisgX191OCBudnNjYzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gX191OCByc3ZkNTMwWzE1MThdOworIF9fdTggcnN2ZDUzMTsKKyBfX2xlMTYgYWN3dTsKKyBfX3U4IHJzdmQ1MzRbMl07CisgX19sZTMyIHNnbHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcnN2ZDU0MFsxNTA4XTsKICBzdHJ1Y3QgbnZtZV9pZF9wb3dlcl9zdGF0ZSBwc2RbMzJdOwogIF9fdTggdnNbMTAyNF07CiB9OwpAQCAtODYsNjMgKzEwNiw3OCBAQAogIE5WTUVfQ1RSTF9PTkNTX1dSSVRFX1VOQ09SUkVDVEFCTEUgPSAxIDw8IDEsCiAgTlZNRV9DVFJMX09OQ1NfRFNNID0gMSA8PCAyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX0NUUkxfVldDX1BSRVNFTlQgPSAxIDw8IDAsCiB9Owogc3RydWN0IG52bWVfbGJhZiB7CiAgX19sZTE2IG1zOwotIF9fdTggZHM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZHM7CiAgX191OCBycDsKIH07CiBzdHJ1Y3QgbnZtZV9pZF9ucyB7Ci0gX19sZTY0IG5zemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGU2NCBuc3plOwogIF9fbGU2NCBuY2FwOwogIF9fbGU2NCBudXNlOwogIF9fdTggbnNmZWF0OwotIF9fdTggbmxiYWY7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggbmxiYWY7CiAgX191OCBmbGJhczsKICBfX3U4IG1jOwogIF9fdTggZHBjOwotIF9fdTggZHBzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBfX3U4IHJzdmQzMFs5OF07CisgX191OCBkcHM7CisgX191OCBubWljOworIF9fdTggcmVzY2FwOworIF9fdTggZnBpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHJzdmQzMzsKKyBfX2xlMTYgbmF3dW47CisgX19sZTE2IG5hd3VwZjsKKyBfX2xlMTYgbmFjd3U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcnN2ZDQwWzgwXTsKKyBfX3U4IGV1aTY0WzhdOwogIHN0cnVjdCBudm1lX2xiYWYgbGJhZlsxNl07CiAgX191OCByc3ZkMTkyWzE5Ml07Ci0gX191OCB2c1szNzEyXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCB2c1szNzEyXTsKIH07CiBlbnVtIHsKICBOVk1FX05TX0ZFQVRfVEhJTiA9IDEgPDwgMCwKLSBOVk1FX0xCQUZfUlBfQkVTVCA9IDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfTEJBRl9SUF9CRVNUID0gMCwKICBOVk1FX0xCQUZfUlBfQkVUVEVSID0gMSwKICBOVk1FX0xCQUZfUlBfR09PRCA9IDIsCiAgTlZNRV9MQkFGX1JQX0RFR1JBREVEID0gMywKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBudm1lX3NtYXJ0X2xvZyB7CiAgX191OCBjcml0aWNhbF93YXJuaW5nOwogIF9fdTggdGVtcGVyYXR1cmVbMl07Ci0gX191OCBhdmFpbF9zcGFyZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBhdmFpbF9zcGFyZTsKICBfX3U4IHNwYXJlX3RocmVzaDsKICBfX3U4IHBlcmNlbnRfdXNlZDsKICBfX3U4IHJzdmQ2WzI2XTsKLSBfX3U4IGRhdGFfdW5pdHNfcmVhZFsxNl07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZGF0YV91bml0c19yZWFkWzE2XTsKICBfX3U4IGRhdGFfdW5pdHNfd3JpdHRlblsxNl07CiAgX191OCBob3N0X3JlYWRzWzE2XTsKICBfX3U4IGhvc3Rfd3JpdGVzWzE2XTsKLSBfX3U4IGN0cmxfYnVzeV90aW1lWzE2XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBjdHJsX2J1c3lfdGltZVsxNl07CiAgX191OCBwb3dlcl9jeWNsZXNbMTZdOwogIF9fdTggcG93ZXJfb25faG91cnNbMTZdOwogIF9fdTggdW5zYWZlX3NodXRkb3duc1sxNl07Ci0gX191OCBtZWRpYV9lcnJvcnNbMTZdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IG1lZGlhX2Vycm9yc1sxNl07CiAgX191OCBudW1fZXJyX2xvZ19lbnRyaWVzWzE2XTsKLSBfX3U4IHJzdmQxOTJbMzIwXTsKKyBfX2xlMzIgd2FybmluZ190ZW1wX3RpbWU7CisgX19sZTMyIGNyaXRpY2FsX2NvbXBfdGltZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTE2IHRlbXBfc2Vuc29yWzhdOworIF9fdTggcnN2ZDIxNlsyOTZdOwogfTsKIGVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTMxNiw2ICszNTEsMTEgQEAKICBOVk1FX0ZFQVRfQVNZTkNfRVZFTlQgPSAweDBiLAogIE5WTUVfRkVBVF9TV19QUk9HUkVTUyA9IDB4MGMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfTE9HX0VSUk9SID0gMHgwMSwKKyBOVk1FX0xPR19TTUFSVCA9IDB4MDIsCisgTlZNRV9MT0dfRldfU0xPVCA9IDB4MDMsCisgTlZNRV9MT0dfUkVTRVJWQVRJT04gPSAweDgwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOVk1FX0ZXQUNUX1JFUEwgPSAoMCA8PCAzKSwKICBOVk1FX0ZXQUNUX1JFUExfQUNUViA9ICgxIDw8IDMpLAogIE5WTUVfRldBQ1RfQUNUViA9ICgyIDw8IDMpLApAQCAtNDkzLDYyICs1MzMsNjMgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTlZNRV9TQ19DT01QQVJFX0ZBSUxFRCA9IDB4Mjg1LAogIE5WTUVfU0NfQUNDRVNTX0RFTklFRCA9IDB4Mjg2LAorIE5WTUVfU0NfRE5SID0gMHg0MDAwLAogfTsKLXN0cnVjdCBudm1lX2NvbXBsZXRpb24gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBudm1lX2NvbXBsZXRpb24gewogIF9fbGUzMiByZXN1bHQ7CiAgX191MzIgcnN2ZDsKICBfX2xlMTYgc3FfaGVhZDsKLSBfX2xlMTYgc3FfaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiBzcV9pZDsKICBfX3UxNiBjb21tYW5kX2lkOwogIF9fbGUxNiBzdGF0dXM7CiB9Owotc3RydWN0IG52bWVfdXNlcl9pbyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IG52bWVfdXNlcl9pbyB7CiAgX191OCBvcGNvZGU7CiAgX191OCBmbGFnczsKICBfX3UxNiBjb250cm9sOwotIF9fdTE2IG5ibG9ja3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IG5ibG9ja3M7CiAgX191MTYgcnN2ZDsKICBfX3U2NCBtZXRhZGF0YTsKICBfX3U2NCBhZGRyOwotIF9fdTY0IHNsYmE7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHNsYmE7CiAgX191MzIgZHNtZ210OwogIF9fdTMyIHJlZnRhZzsKICBfX3UxNiBhcHB0YWc7Ci0gX191MTYgYXBwbWFzazsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgYXBwbWFzazsKIH07CiBzdHJ1Y3QgbnZtZV9hZG1pbl9jbWQgewogIF9fdTggb3Bjb2RlOwotIF9fdTggZmxhZ3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZmxhZ3M7CiAgX191MTYgcnN2ZDE7CiAgX191MzIgbnNpZDsKICBfX3UzMiBjZHcyOwotIF9fdTMyIGNkdzM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNkdzM7CiAgX191NjQgbWV0YWRhdGE7CiAgX191NjQgYWRkcjsKICBfX3UzMiBtZXRhZGF0YV9sZW47Ci0gX191MzIgZGF0YV9sZW47CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGRhdGFfbGVuOwogIF9fdTMyIGNkdzEwOwogIF9fdTMyIGNkdzExOwogIF9fdTMyIGNkdzEyOwotIF9fdTMyIGNkdzEzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBjZHcxMzsKICBfX3UzMiBjZHcxNDsKICBfX3UzMiBjZHcxNTsKICBfX3UzMiB0aW1lb3V0X21zOwotIF9fdTMyIHJlc3VsdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcmVzdWx0OwogfTsKICNkZWZpbmUgTlZNRV9JT0NUTF9JRCBfSU8oJ04nLCAweDQwKQogI2RlZmluZSBOVk1FX0lPQ1RMX0FETUlOX0NNRCBfSU9XUignTicsIDB4NDEsIHN0cnVjdCBudm1lX2FkbWluX2NtZCkKLSNkZWZpbmUgTlZNRV9JT0NUTF9TVUJNSVRfSU8gX0lPVygnTicsIDB4NDIsIHN0cnVjdCBudm1lX3VzZXJfaW8pCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOVk1FX0lPQ1RMX1NVQk1JVF9JTyBfSU9XKCdOJywgMHg0Miwgc3RydWN0IG52bWVfdXNlcl9pbykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wZXJmX2V2ZW50LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCA1OTIyY2JlLi5hODhkZjA4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtMTMyLDI4NyArMTMyLDI5MCBAQAogIFBFUkZfU0FNUExFX0JSQU5DSF9JTl9UWCA9IDFVIDw8IDgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfU0FNUExFX0JSQU5DSF9OT19UWCA9IDFVIDw8IDksCi0gUEVSRl9TQU1QTEVfQlJBTkNIX01BWCA9IDFVIDw8IDEwLAorIFBFUkZfU0FNUExFX0JSQU5DSF9DT05EID0gMVUgPDwgMTAsCisgUEVSRl9TQU1QTEVfQlJBTkNIX01BWCA9IDFVIDw8IDExLAogfTsKLSNkZWZpbmUgUEVSRl9TQU1QTEVfQlJBTkNIX1BMTV9BTEwgICAoUEVSRl9TQU1QTEVfQlJBTkNIX1VTRVJ8ICBQRVJGX1NBTVBMRV9CUkFOQ0hfS0VSTkVMfCAgUEVSRl9TQU1QTEVfQlJBTkNIX0hWKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUEVSRl9TQU1QTEVfQlJBTkNIX1BMTV9BTEwgICAoUEVSRl9TQU1QTEVfQlJBTkNIX1VTRVJ8ICBQRVJGX1NBTVBMRV9CUkFOQ0hfS0VSTkVMfCAgUEVSRl9TQU1QTEVfQlJBTkNIX0hWKQogZW51bSBwZXJmX3NhbXBsZV9yZWdzX2FiaSB7CiAgUEVSRl9TQU1QTEVfUkVHU19BQklfTk9ORSA9IDAsCiAgUEVSRl9TQU1QTEVfUkVHU19BQklfMzIgPSAxLAotIFBFUkZfU0FNUExFX1JFR1NfQUJJXzY0ID0gMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9TQU1QTEVfUkVHU19BQklfNjQgPSAyLAogfTsKIGVudW0gewogIFBFUkZfVFhOX0VMSVNJT04gPSAoMSA8PCAwKSwKLSBQRVJGX1RYTl9UUkFOU0FDVElPTiA9ICgxIDw8IDEpLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1RYTl9UUkFOU0FDVElPTiA9ICgxIDw8IDEpLAogIFBFUkZfVFhOX1NZTkMgPSAoMSA8PCAyKSwKICBQRVJGX1RYTl9BU1lOQyA9ICgxIDw8IDMpLAogIFBFUkZfVFhOX1JFVFJZID0gKDEgPDwgNCksCi0gUEVSRl9UWE5fQ09ORkxJQ1QgPSAoMSA8PCA1KSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9UWE5fQ09ORkxJQ1QgPSAoMSA8PCA1KSwKICBQRVJGX1RYTl9DQVBBQ0lUWV9XUklURSA9ICgxIDw8IDYpLAogIFBFUkZfVFhOX0NBUEFDSVRZX1JFQUQgPSAoMSA8PCA3KSwKICBQRVJGX1RYTl9NQVggPSAoMSA8PCA4KSwKLSBQRVJGX1RYTl9BQk9SVF9NQVNLID0gKDB4ZmZmZmZmZmZVTEwgPDwgMzIpLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1RYTl9BQk9SVF9NQVNLID0gKDB4ZmZmZmZmZmZVTEwgPDwgMzIpLAogIFBFUkZfVFhOX0FCT1JUX1NISUZUID0gMzIsCiB9OwogZW51bSBwZXJmX2V2ZW50X3JlYWRfZm9ybWF0IHsKLSBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQgPSAxVSA8PCAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQgPSAxVSA8PCAwLAogIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORyA9IDFVIDw8IDEsCiAgUEVSRl9GT1JNQVRfSUQgPSAxVSA8PCAyLAogIFBFUkZfRk9STUFUX0dST1VQID0gMVUgPDwgMywKLSBQRVJGX0ZPUk1BVF9NQVggPSAxVSA8PCA0LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX0ZPUk1BVF9NQVggPSAxVSA8PCA0LAogfTsKICNkZWZpbmUgUEVSRl9BVFRSX1NJWkVfVkVSMCA2NAogI2RlZmluZSBQRVJGX0FUVFJfU0laRV9WRVIxIDcyCi0jZGVmaW5lIFBFUkZfQVRUUl9TSVpFX1ZFUjIgODAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBFUkZfQVRUUl9TSVpFX1ZFUjIgODAKICNkZWZpbmUgUEVSRl9BVFRSX1NJWkVfVkVSMyA5Ngogc3RydWN0IHBlcmZfZXZlbnRfYXR0ciB7CiAgX191MzIgdHlwZTsKLSBfX3UzMiBzaXplOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBzaXplOwogIF9fdTY0IGNvbmZpZzsKICB1bmlvbiB7CiAgX191NjQgc2FtcGxlX3BlcmlvZDsKLSBfX3U2NCBzYW1wbGVfZnJlcTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgc2FtcGxlX2ZyZXE7CiAgfTsKICBfX3U2NCBzYW1wbGVfdHlwZTsKICBfX3U2NCByZWFkX2Zvcm1hdDsKLSBfX3U2NCBkaXNhYmxlZCA6IDEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGRpc2FibGVkIDogMSwKICBpbmhlcml0IDogMSwKICBwaW5uZWQgOiAxLAogIGV4Y2x1c2l2ZSA6IDEsCi0gZXhjbHVkZV91c2VyIDogMSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgZXhjbHVkZV91c2VyIDogMSwKICBleGNsdWRlX2tlcm5lbCA6IDEsCiAgZXhjbHVkZV9odiA6IDEsCiAgZXhjbHVkZV9pZGxlIDogMSwKLSBtbWFwIDogMSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1hcCA6IDEsCiAgY29tbSA6IDEsCiAgZnJlcSA6IDEsCiAgaW5oZXJpdF9zdGF0IDogMSwKLSBlbmFibGVfb25fZXhlYyA6IDEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGVuYWJsZV9vbl9leGVjIDogMSwKICB0YXNrIDogMSwKICB3YXRlcm1hcmsgOiAxLAogIHByZWNpc2VfaXAgOiAyLAotIG1tYXBfZGF0YSA6IDEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tYXBfZGF0YSA6IDEsCiAgc2FtcGxlX2lkX2FsbCA6IDEsCiAgZXhjbHVkZV9ob3N0IDogMSwKICBleGNsdWRlX2d1ZXN0IDogMSwKLSBleGNsdWRlX2NhbGxjaGFpbl9rZXJuZWwgOiAxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBleGNsdWRlX2NhbGxjaGFpbl9rZXJuZWwgOiAxLAogIGV4Y2x1ZGVfY2FsbGNoYWluX3VzZXIgOiAxLAogIG1tYXAyIDogMSwKLSBfX3Jlc2VydmVkXzEgOiA0MDsKLSB1bmlvbiB7CisgY29tbV9leGVjIDogMSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19yZXNlcnZlZF8xIDogMzk7CisgdW5pb24gewogIF9fdTMyIHdha2V1cF9ldmVudHM7CiAgX191MzIgd2FrZXVwX3dhdGVybWFyazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKICBfX3UzMiBicF90eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgX191NjQgYnBfYWRkcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgY29uZmlnMTsKICB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgX191NjQgYnBfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBjb25maWcyOwogIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGJyYW5jaF9zYW1wbGVfdHlwZTsKICBfX3U2NCBzYW1wbGVfcmVnc191c2VyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzYW1wbGVfc3RhY2tfdXNlcjsKICBfX3UzMiBfX3Jlc2VydmVkXzI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgcGVyZl9mbGFncyhhdHRyKSAoKigmKGF0dHIpLT5yZWFkX2Zvcm1hdCArIDEpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfRU5BQkxFIF9JTyAoJyQnLCAwKQogI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19ESVNBQkxFIF9JTyAoJyQnLCAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfUkVGUkVTSCBfSU8gKCckJywgMikKICNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfUkVTRVQgX0lPICgnJCcsIDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19QRVJJT0QgX0lPVygnJCcsIDQsIF9fdTY0KQogI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19TRVRfT1VUUFVUIF9JTyAoJyQnLCA1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfU0VUX0ZJTFRFUiBfSU9XKCckJywgNiwgY2hhciAqKQogI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19JRCBfSU9SKCckJywgNywgX191NjQgKikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHBlcmZfZXZlbnRfaW9jX2ZsYWdzIHsKICBQRVJGX0lPQ19GTEFHX0dST1VQID0gMVUgPDwgMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdmVyc2lvbjsKICBfX3UzMiBjb21wYXRfdmVyc2lvbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbG9jazsKICBfX3UzMiBpbmRleDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zNjQgb2Zmc2V0OwogIF9fdTY0IHRpbWVfZW5hYmxlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgdGltZV9ydW5uaW5nOwogIHVuaW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgY2FwYWJpbGl0aWVzOwogIHN0cnVjdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGNhcF9iaXQwIDogMSwKICBjYXBfYml0MF9pc19kZXByZWNhdGVkIDogMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2FwX3VzZXJfcmRwbWMgOiAxLAogIGNhcF91c2VyX3RpbWUgOiAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjYXBfdXNlcl90aW1lX3plcm8gOiAxLAogIGNhcF9fX19fcmVzIDogNTk7Ci0gfTsKLSB9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB9OworIH07CiAgX191MTYgcG1jX3dpZHRoOwogIF9fdTE2IHRpbWVfc2hpZnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHRpbWVfbXVsdDsKICBfX3U2NCB0aW1lX29mZnNldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgdGltZV96ZXJvOwogIF9fdTMyIHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggX19yZXNlcnZlZFsxMTgqOCs0XTsKICBfX3U2NCBkYXRhX2hlYWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRhdGFfdGFpbDsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSyAoNyA8PCAwKQogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfVU5LTk9XTiAoMCA8PCAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwgKDEgPDwgMCkKICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19VU0VSICgyIDw8IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0hZUEVSVklTT1IgKDMgPDwgMCkKICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9LRVJORUwgKDQgPDwgMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfR1VFU1RfVVNFUiAoNSA8PCAwKQogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX01NQVBfREFUQSAoMSA8PCAxMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfQ09NTV9FWEVDICgxIDw8IDEzKQogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0VYQUNUX0lQICgxIDw8IDE0KQogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0VYVF9SRVNFUlZFRCAoMSA8PCAxNSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIF9fdTE2IG1pc2M7CiAgX191MTYgc2l6ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gcGVyZl9ldmVudF90eXBlIHsKICBQRVJGX1JFQ09SRF9NTUFQID0gMSwKICBQRVJGX1JFQ09SRF9MT1NUID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9SRUNPUkRfQ09NTSA9IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfUkVDT1JEX0VYSVQgPSA0LAogIFBFUkZfUkVDT1JEX1RIUk9UVExFID0gNSwKICBQRVJGX1JFQ09SRF9VTlRIUk9UVExFID0gNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9SRUNPUkRfRk9SSyA9IDcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfUkVDT1JEX1JFQUQgPSA4LAogIFBFUkZfUkVDT1JEX1NBTVBMRSA9IDksCiAgUEVSRl9SRUNPUkRfTU1BUDIgPSAxMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9SRUNPUkRfTUFYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFBFUkZfTUFYX1NUQUNLX0RFUFRIIDEyNwogZW51bSBwZXJmX2NhbGxjaGFpbl9jb250ZXh0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9DT05URVhUX0hWID0gKF9fdTY0KS0zMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9DT05URVhUX0tFUk5FTCA9IChfX3U2NCktMTI4LAogIFBFUkZfQ09OVEVYVF9VU0VSID0gKF9fdTY0KS01MTIsCiAgUEVSRl9DT05URVhUX0dVRVNUID0gKF9fdTY0KS0yMDQ4LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJGX0NPTlRFWFRfR1VFU1RfS0VSTkVMID0gKF9fdTY0KS0yMTc2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJGX0NPTlRFWFRfR1VFU1RfVVNFUiA9IChfX3U2NCktMjU2MCwKICBQRVJGX0NPTlRFWFRfTUFYID0gKF9fdTY0KS00MDk1LAogfTsKKyNkZWZpbmUgUEVSRl9GTEFHX0ZEX05PX0dST1VQICgxVUwgPDwgMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBFUkZfRkxBR19GRF9OT19HUk9VUCAoMVUgPDwgMCkKLSNkZWZpbmUgUEVSRl9GTEFHX0ZEX09VVFBVVCAoMVUgPDwgMSkKLSNkZWZpbmUgUEVSRl9GTEFHX1BJRF9DR1JPVVAgKDFVIDw8IDIpCi0jZGVmaW5lIFBFUkZfRkxBR19GRF9DTE9FWEVDICgxVSA8PCAzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUEVSRl9GTEFHX0ZEX09VVFBVVCAoMVVMIDw8IDEpCisjZGVmaW5lIFBFUkZfRkxBR19QSURfQ0dST1VQICgxVUwgPDwgMikKKyNkZWZpbmUgUEVSRl9GTEFHX0ZEX0NMT0VYRUMgKDFVTCA8PCAzKQogdW5pb24gcGVyZl9tZW1fZGF0YV9zcmMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCB2YWw7CiAgc3RydWN0IHsKICBfX3U2NCBtZW1fb3A6NSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbWVtX2x2bDoxNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbWVtX3Nub29wOjUsCiAgbWVtX2xvY2s6MiwKICBtZW1fZHRsYjo3LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtZW1fcnN2ZDozMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKIH07CiAjZGVmaW5lIFBFUkZfTUVNX09QX05BIDB4MDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX09QX0xPQUQgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fT1BfU1RPUkUgMHgwNAogI2RlZmluZSBQRVJGX01FTV9PUF9QRkVUQ0ggMHgwOAogI2RlZmluZSBQRVJGX01FTV9PUF9FWEVDIDB4MTAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX09QX1NISUZUIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9OQSAweDAxCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9ISVQgMHgwMgogI2RlZmluZSBQRVJGX01FTV9MVkxfTUlTUyAweDA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9MVkxfTDEgMHgwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fTFZMX0xGQiAweDEwCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9MMiAweDIwCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9MMyAweDQwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9MVkxfTE9DX1JBTSAweDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9MVkxfUkVNX1JBTTEgMHgxMDAKICNkZWZpbmUgUEVSRl9NRU1fTFZMX1JFTV9SQU0yIDB4MjAwCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9SRU1fQ0NFMSAweDQwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fTFZMX1JFTV9DQ0UyIDB4ODAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9MVkxfSU8gMHgxMDAwCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9VTkMgMHgyMDAwCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9TSElGVCA1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9TTk9PUF9OQSAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9TTk9PUF9OT05FIDB4MDIKICNkZWZpbmUgUEVSRl9NRU1fU05PT1BfSElUIDB4MDQKICNkZWZpbmUgUEVSRl9NRU1fU05PT1BfTUlTUyAweDA4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9TTk9PUF9ISVRNIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX1NOT09QX1NISUZUIDE5CiAjZGVmaW5lIFBFUkZfTUVNX0xPQ0tfTkEgMHgwMQogI2RlZmluZSBQRVJGX01FTV9MT0NLX0xPQ0tFRCAweDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9MT0NLX1NISUZUIDI0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9UTEJfTkEgMHgwMQogI2RlZmluZSBQRVJGX01FTV9UTEJfSElUIDB4MDIKICNkZWZpbmUgUEVSRl9NRU1fVExCX01JU1MgMHgwNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fVExCX0wxIDB4MDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX1RMQl9MMiAweDEwCiAjZGVmaW5lIFBFUkZfTUVNX1RMQl9XSyAweDIwCiAjZGVmaW5lIFBFUkZfTUVNX1RMQl9PUyAweDQwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9UTEJfU0hJRlQgMjYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX1MoYSwgcykgICAoKChfX3U2NClQRVJGX01FTV8jI2EjI18jI3MpIDw8IFBFUkZfTUVNXyMjYSMjX1NISUZUKQogc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5IHsKICBfX3U2NCBmcm9tOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCB0bzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbWlzcHJlZDoxLAogIHByZWRpY3RlZDoxLAogIGluX3R4OjEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGFib3J0OjEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHJlc2VydmVkOjYwOwogfTsKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcGZrZXl2Mi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wZmtleXYyLmgKaW5kZXggYjg3YjY5OC4uMThlZDdlZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wZmtleXYyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wZmtleXYyLmgKQEAgLTIyMywxNDMgKzIyMywxNTYgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc2FkYl94X2ttYWRkcmVzc19yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0jZGVmaW5lIFNBREJfUkVTRVJWRUQgMAotI2RlZmluZSBTQURCX0dFVFNQSSAxCitzdHJ1Y3Qgc2FkYl94X2ZpbHRlciB7CisgX191MTYgc2FkYl94X2ZpbHRlcl9sZW47CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IHNhZGJfeF9maWx0ZXJfZXh0dHlwZTsKKyBfX3UzMiBzYWRiX3hfZmlsdGVyX3NhZGRyWzRdOworIF9fdTMyIHNhZGJfeF9maWx0ZXJfZGFkZHJbNF07CisgX191MTYgc2FkYl94X2ZpbHRlcl9mYW1pbHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggc2FkYl94X2ZpbHRlcl9zcGxlbjsKKyBfX3U4IHNhZGJfeF9maWx0ZXJfZHBsZW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworI2RlZmluZSBTQURCX1JFU0VSVkVEIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNBREJfR0VUU1BJIDEKICNkZWZpbmUgU0FEQl9VUERBVEUgMgogI2RlZmluZSBTQURCX0FERCAzCiAjZGVmaW5lIFNBREJfREVMRVRFIDQKLSNkZWZpbmUgU0FEQl9HRVQgNQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0FEQl9HRVQgNQogI2RlZmluZSBTQURCX0FDUVVJUkUgNgogI2RlZmluZSBTQURCX1JFR0lTVEVSIDcKICNkZWZpbmUgU0FEQl9FWFBJUkUgOAotI2RlZmluZSBTQURCX0ZMVVNIIDkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNBREJfRkxVU0ggOQogI2RlZmluZSBTQURCX0RVTVAgMTAKICNkZWZpbmUgU0FEQl9YX1BST01JU0MgMTEKICNkZWZpbmUgU0FEQl9YX1BDSEFOR0UgMTIKLSNkZWZpbmUgU0FEQl9YX1NQRFVQREFURSAxMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0FEQl9YX1NQRFVQREFURSAxMwogI2RlZmluZSBTQURCX1hfU1BEQUREIDE0CiAjZGVmaW5lIFNBREJfWF9TUERERUxFVEUgMTUKICNkZWZpbmUgU0FEQl9YX1NQREdFVCAxNgotI2RlZmluZSBTQURCX1hfU1BEQUNRVUlSRSAxNwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0FEQl9YX1NQREFDUVVJUkUgMTcKICNkZWZpbmUgU0FEQl9YX1NQRERVTVAgMTgKICNkZWZpbmUgU0FEQl9YX1NQREZMVVNIIDE5CiAjZGVmaW5lIFNBREJfWF9TUERTRVRJRFggMjAKLSNkZWZpbmUgU0FEQl9YX1NQREVYUElSRSAyMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0FEQl9YX1NQREVYUElSRSAyMQogI2RlZmluZSBTQURCX1hfU1BEREVMRVRFMiAyMgogI2RlZmluZSBTQURCX1hfTkFUX1RfTkVXX01BUFBJTkcgMjMKICNkZWZpbmUgU0FEQl9YX01JR1JBVEUgMjQKLSNkZWZpbmUgU0FEQl9NQVggMjQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNBREJfTUFYIDI0CiAjZGVmaW5lIFNBREJfU0FGTEFHU19QRlMgMQogI2RlZmluZSBTQURCX1NBRkxBR1NfTk9QTVRVRElTQyAweDIwMDAwMDAwCiAjZGVmaW5lIFNBREJfU0FGTEFHU19ERUNBUF9EU0NQIDB4NDAwMDAwMDAKLSNkZWZpbmUgU0FEQl9TQUZMQUdTX05PRUNOIDB4ODAwMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNBREJfU0FGTEFHU19OT0VDTiAweDgwMDAwMDAwCiAjZGVmaW5lIFNBREJfU0FTVEFURV9MQVJWQUwgMAogI2RlZmluZSBTQURCX1NBU1RBVEVfTUFUVVJFIDEKICNkZWZpbmUgU0FEQl9TQVNUQVRFX0RZSU5HIDIKLSNkZWZpbmUgU0FEQl9TQVNUQVRFX0RFQUQgMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0FEQl9TQVNUQVRFX0RFQUQgMwogI2RlZmluZSBTQURCX1NBU1RBVEVfTUFYIDMKICNkZWZpbmUgU0FEQl9TQVRZUEVfVU5TUEVDIDAKICNkZWZpbmUgU0FEQl9TQVRZUEVfQUggMgotI2RlZmluZSBTQURCX1NBVFlQRV9FU1AgMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0FEQl9TQVRZUEVfRVNQIDMKICNkZWZpbmUgU0FEQl9TQVRZUEVfUlNWUCA1CiAjZGVmaW5lIFNBREJfU0FUWVBFX09TUEZWMiA2CiAjZGVmaW5lIFNBREJfU0FUWVBFX1JJUFYyIDcKLSNkZWZpbmUgU0FEQl9TQVRZUEVfTUlQIDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNBREJfU0FUWVBFX01JUCA4CiAjZGVmaW5lIFNBREJfWF9TQVRZUEVfSVBDT01QIDkKICNkZWZpbmUgU0FEQl9TQVRZUEVfTUFYIDkKICNkZWZpbmUgU0FEQl9BQUxHX05PTkUgMAotI2RlZmluZSBTQURCX0FBTEdfTUQ1SE1BQyAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQURCX0FBTEdfTUQ1SE1BQyAyCiAjZGVmaW5lIFNBREJfQUFMR19TSEExSE1BQyAzCiAjZGVmaW5lIFNBREJfWF9BQUxHX1NIQTJfMjU2SE1BQyA1CiAjZGVmaW5lIFNBREJfWF9BQUxHX1NIQTJfMzg0SE1BQyA2Ci0jZGVmaW5lIFNBREJfWF9BQUxHX1NIQTJfNTEySE1BQyA3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQURCX1hfQUFMR19TSEEyXzUxMkhNQUMgNwogI2RlZmluZSBTQURCX1hfQUFMR19SSVBFTUQxNjBITUFDIDgKICNkZWZpbmUgU0FEQl9YX0FBTEdfQUVTX1hDQkNfTUFDIDkKICNkZWZpbmUgU0FEQl9YX0FBTEdfTlVMTCAyNTEKLSNkZWZpbmUgU0FEQl9BQUxHX01BWCAyNTEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNBREJfQUFMR19NQVggMjUxCiAjZGVmaW5lIFNBREJfRUFMR19OT05FIDAKICNkZWZpbmUgU0FEQl9FQUxHX0RFU0NCQyAyCiAjZGVmaW5lIFNBREJfRUFMR18zREVTQ0JDIDMKLSNkZWZpbmUgU0FEQl9YX0VBTEdfQ0FTVENCQyA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQURCX1hfRUFMR19DQVNUQ0JDIDYKICNkZWZpbmUgU0FEQl9YX0VBTEdfQkxPV0ZJU0hDQkMgNwogI2RlZmluZSBTQURCX0VBTEdfTlVMTCAxMQogI2RlZmluZSBTQURCX1hfRUFMR19BRVNDQkMgMTIKLSNkZWZpbmUgU0FEQl9YX0VBTEdfQUVTQ1RSIDEzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQURCX1hfRUFMR19BRVNDVFIgMTMKICNkZWZpbmUgU0FEQl9YX0VBTEdfQUVTX0NDTV9JQ1Y4IDE0CiAjZGVmaW5lIFNBREJfWF9FQUxHX0FFU19DQ01fSUNWMTIgMTUKICNkZWZpbmUgU0FEQl9YX0VBTEdfQUVTX0NDTV9JQ1YxNiAxNgotI2RlZmluZSBTQURCX1hfRUFMR19BRVNfR0NNX0lDVjggMTgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNBREJfWF9FQUxHX0FFU19HQ01fSUNWOCAxOAogI2RlZmluZSBTQURCX1hfRUFMR19BRVNfR0NNX0lDVjEyIDE5CiAjZGVmaW5lIFNBREJfWF9FQUxHX0FFU19HQ01fSUNWMTYgMjAKICNkZWZpbmUgU0FEQl9YX0VBTEdfQ0FNRUxMSUFDQkMgMjIKLSNkZWZpbmUgU0FEQl9YX0VBTEdfTlVMTF9BRVNfR01BQyAyMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0FEQl9YX0VBTEdfTlVMTF9BRVNfR01BQyAyMwogI2RlZmluZSBTQURCX0VBTEdfTUFYIDI1MwogI2RlZmluZSBTQURCX1hfRUFMR19TRVJQRU5UQ0JDIDI1MgogI2RlZmluZSBTQURCX1hfRUFMR19UV09GSVNIQ0JDIDI1MwotI2RlZmluZSBTQURCX1hfQ0FMR19OT05FIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNBREJfWF9DQUxHX05PTkUgMAogI2RlZmluZSBTQURCX1hfQ0FMR19PVUkgMQogI2RlZmluZSBTQURCX1hfQ0FMR19ERUZMQVRFIDIKICNkZWZpbmUgU0FEQl9YX0NBTEdfTFpTIDMKLSNkZWZpbmUgU0FEQl9YX0NBTEdfTFpKSCA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQURCX1hfQ0FMR19MWkpIIDQKICNkZWZpbmUgU0FEQl9YX0NBTEdfTUFYIDQKICNkZWZpbmUgU0FEQl9FWFRfUkVTRVJWRUQgMAogI2RlZmluZSBTQURCX0VYVF9TQSAxCi0jZGVmaW5lIFNBREJfRVhUX0xJRkVUSU1FX0NVUlJFTlQgMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0FEQl9FWFRfTElGRVRJTUVfQ1VSUkVOVCAyCiAjZGVmaW5lIFNBREJfRVhUX0xJRkVUSU1FX0hBUkQgMwogI2RlZmluZSBTQURCX0VYVF9MSUZFVElNRV9TT0ZUIDQKICNkZWZpbmUgU0FEQl9FWFRfQUREUkVTU19TUkMgNQotI2RlZmluZSBTQURCX0VYVF9BRERSRVNTX0RTVCA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQURCX0VYVF9BRERSRVNTX0RTVCA2CiAjZGVmaW5lIFNBREJfRVhUX0FERFJFU1NfUFJPWFkgNwogI2RlZmluZSBTQURCX0VYVF9LRVlfQVVUSCA4CiAjZGVmaW5lIFNBREJfRVhUX0tFWV9FTkNSWVBUIDkKLSNkZWZpbmUgU0FEQl9FWFRfSURFTlRJVFlfU1JDIDEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQURCX0VYVF9JREVOVElUWV9TUkMgMTAKICNkZWZpbmUgU0FEQl9FWFRfSURFTlRJVFlfRFNUIDExCiAjZGVmaW5lIFNBREJfRVhUX1NFTlNJVElWSVRZIDEyCiAjZGVmaW5lIFNBREJfRVhUX1BST1BPU0FMIDEzCi0jZGVmaW5lIFNBREJfRVhUX1NVUFBPUlRFRF9BVVRIIDE0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQURCX0VYVF9TVVBQT1JURURfQVVUSCAxNAogI2RlZmluZSBTQURCX0VYVF9TVVBQT1JURURfRU5DUllQVCAxNQogI2RlZmluZSBTQURCX0VYVF9TUElSQU5HRSAxNgogI2RlZmluZSBTQURCX1hfRVhUX0tNUFJJVkFURSAxNwotI2RlZmluZSBTQURCX1hfRVhUX1BPTElDWSAxOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0FEQl9YX0VYVF9QT0xJQ1kgMTgKICNkZWZpbmUgU0FEQl9YX0VYVF9TQTIgMTkKICNkZWZpbmUgU0FEQl9YX0VYVF9OQVRfVF9UWVBFIDIwCiAjZGVmaW5lIFNBREJfWF9FWFRfTkFUX1RfU1BPUlQgMjEKLSNkZWZpbmUgU0FEQl9YX0VYVF9OQVRfVF9EUE9SVCAyMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0FEQl9YX0VYVF9OQVRfVF9EUE9SVCAyMgogI2RlZmluZSBTQURCX1hfRVhUX05BVF9UX09BIDIzCiAjZGVmaW5lIFNBREJfWF9FWFRfU0VDX0NUWCAyNAogI2RlZmluZSBTQURCX1hfRVhUX0tNQUREUkVTUyAyNQotI2RlZmluZSBTQURCX0VYVF9NQVggMjUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNBREJfWF9FWFRfRklMVEVSIDI2CisjZGVmaW5lIFNBREJfRVhUX01BWCAyNgogI2RlZmluZSBTQURCX0lERU5UVFlQRV9SRVNFUlZFRCAwCiAjZGVmaW5lIFNBREJfSURFTlRUWVBFX1BSRUZJWCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQURCX0lERU5UVFlQRV9GUUROIDIKICNkZWZpbmUgU0FEQl9JREVOVFRZUEVfVVNFUkZRRE4gMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0FEQl9JREVOVFRZUEVfTUFYIDMKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcHJjdGwuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcHJjdGwuaAppbmRleCBhMTI3YjVhLi5iZjA3N2ZhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ByY3RsLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wcmN0bC5oCkBAIC0xMTcsNCArMTE3LDcgQEAKICNkZWZpbmUgUFJfR0VUX05PX05FV19QUklWUyAzOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFJfR0VUX1RJRF9BRERSRVNTIDQwCisjZGVmaW5lIFBSX1NFVF9USFBfRElTQUJMRSA0MQorI2RlZmluZSBQUl9HRVRfVEhQX0RJU0FCTEUgNDIKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcHNjaS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wc2NpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlYTc2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcHNjaS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1VBUElfTElOVVhfUFNDSV9ICisjZGVmaW5lIF9VQVBJX0xJTlVYX1BTQ0lfSAorI2RlZmluZSBQU0NJXzBfMl9GTl9CQVNFIDB4ODQwMDAwMDAKKyNkZWZpbmUgUFNDSV8wXzJfRk4obikgKFBTQ0lfMF8yX0ZOX0JBU0UgKyAobikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQU0NJXzBfMl82NEJJVCAweDQwMDAwMDAwCisjZGVmaW5lIFBTQ0lfMF8yX0ZONjRfQkFTRSAgIChQU0NJXzBfMl9GTl9CQVNFICsgUFNDSV8wXzJfNjRCSVQpCisjZGVmaW5lIFBTQ0lfMF8yX0ZONjQobikgKFBTQ0lfMF8yX0ZONjRfQkFTRSArIChuKSkKKyNkZWZpbmUgUFNDSV8wXzJfRk5fUFNDSV9WRVJTSU9OIFBTQ0lfMF8yX0ZOKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQU0NJXzBfMl9GTl9DUFVfU1VTUEVORCBQU0NJXzBfMl9GTigxKQorI2RlZmluZSBQU0NJXzBfMl9GTl9DUFVfT0ZGIFBTQ0lfMF8yX0ZOKDIpCisjZGVmaW5lIFBTQ0lfMF8yX0ZOX0NQVV9PTiBQU0NJXzBfMl9GTigzKQorI2RlZmluZSBQU0NJXzBfMl9GTl9BRkZJTklUWV9JTkZPIFBTQ0lfMF8yX0ZOKDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQU0NJXzBfMl9GTl9NSUdSQVRFIFBTQ0lfMF8yX0ZOKDUpCisjZGVmaW5lIFBTQ0lfMF8yX0ZOX01JR1JBVEVfSU5GT19UWVBFIFBTQ0lfMF8yX0ZOKDYpCisjZGVmaW5lIFBTQ0lfMF8yX0ZOX01JR1JBVEVfSU5GT19VUF9DUFUgUFNDSV8wXzJfRk4oNykKKyNkZWZpbmUgUFNDSV8wXzJfRk5fU1lTVEVNX09GRiBQU0NJXzBfMl9GTig4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFNDSV8wXzJfRk5fU1lTVEVNX1JFU0VUIFBTQ0lfMF8yX0ZOKDkpCisjZGVmaW5lIFBTQ0lfMF8yX0ZONjRfQ1BVX1NVU1BFTkQgUFNDSV8wXzJfRk42NCgxKQorI2RlZmluZSBQU0NJXzBfMl9GTjY0X0NQVV9PTiBQU0NJXzBfMl9GTjY0KDMpCisjZGVmaW5lIFBTQ0lfMF8yX0ZONjRfQUZGSU5JVFlfSU5GTyBQU0NJXzBfMl9GTjY0KDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQU0NJXzBfMl9GTjY0X01JR1JBVEUgUFNDSV8wXzJfRk42NCg1KQorI2RlZmluZSBQU0NJXzBfMl9GTjY0X01JR1JBVEVfSU5GT19VUF9DUFUgUFNDSV8wXzJfRk42NCg3KQorI2RlZmluZSBQU0NJXzBfMl9QT1dFUl9TVEFURV9JRF9NQVNLIDB4ZmZmZgorI2RlZmluZSBQU0NJXzBfMl9QT1dFUl9TVEFURV9JRF9TSElGVCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQU0NJXzBfMl9QT1dFUl9TVEFURV9UWVBFX1NISUZUIDE2CisjZGVmaW5lIFBTQ0lfMF8yX1BPV0VSX1NUQVRFX1RZUEVfTUFTSyAgICgweDEgPDwgUFNDSV8wXzJfUE9XRVJfU1RBVEVfVFlQRV9TSElGVCkKKyNkZWZpbmUgUFNDSV8wXzJfUE9XRVJfU1RBVEVfQUZGTF9TSElGVCAyNAorI2RlZmluZSBQU0NJXzBfMl9QT1dFUl9TVEFURV9BRkZMX01BU0sgICAoMHgzIDw8IFBTQ0lfMF8yX1BPV0VSX1NUQVRFX0FGRkxfU0hJRlQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQU0NJXzBfMl9BRkZJTklUWV9MRVZFTF9PTiAwCisjZGVmaW5lIFBTQ0lfMF8yX0FGRklOSVRZX0xFVkVMX09GRiAxCisjZGVmaW5lIFBTQ0lfMF8yX0FGRklOSVRZX0xFVkVMX09OX1BFTkRJTkcgMgorI2RlZmluZSBQU0NJXzBfMl9UT1NfVVBfTUlHUkFURSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQU0NJXzBfMl9UT1NfVVBfTk9fTUlHUkFURSAxCisjZGVmaW5lIFBTQ0lfMF8yX1RPU19NUCAyCisjZGVmaW5lIFBTQ0lfVkVSU0lPTl9NQUpPUl9TSElGVCAxNgorI2RlZmluZSBQU0NJX1ZFUlNJT05fTUlOT1JfTUFTSyAgICgoMVUgPDwgUFNDSV9WRVJTSU9OX01BSk9SX1NISUZUKSAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQU0NJX1ZFUlNJT05fTUFKT1JfTUFTSyB+UFNDSV9WRVJTSU9OX01JTk9SX01BU0sKKyNkZWZpbmUgUFNDSV9WRVJTSU9OX01BSk9SKHZlcikgICAoKCh2ZXIpICYgUFNDSV9WRVJTSU9OX01BSk9SX01BU0spID4+IFBTQ0lfVkVSU0lPTl9NQUpPUl9TSElGVCkKKyNkZWZpbmUgUFNDSV9WRVJTSU9OX01JTk9SKHZlcikgICAoKHZlcikgJiBQU0NJX1ZFUlNJT05fTUlOT1JfTUFTSykKKyNkZWZpbmUgUFNDSV9SRVRfU1VDQ0VTUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQU0NJX1JFVF9OT1RfU1VQUE9SVEVEIC0xCisjZGVmaW5lIFBTQ0lfUkVUX0lOVkFMSURfUEFSQU1TIC0yCisjZGVmaW5lIFBTQ0lfUkVUX0RFTklFRCAtMworI2RlZmluZSBQU0NJX1JFVF9BTFJFQURZX09OIC00CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQU0NJX1JFVF9PTl9QRU5ESU5HIC01CisjZGVmaW5lIFBTQ0lfUkVUX0lOVEVSTkFMX0ZBSUxVUkUgLTYKKyNkZWZpbmUgUFNDSV9SRVRfTk9UX1BSRVNFTlQgLTcKKyNkZWZpbmUgUFNDSV9SRVRfRElTQUJMRUQgLTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcHRwX2Nsb2NrLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3B0cF9jbG9jay5oCmluZGV4IDAxYjE1ZDAuLjkxMGZlNzQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcHRwX2Nsb2NrLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wdHBfY2xvY2suaApAQCAtMzgsMzggKzM4LDU4IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBuX3Blcl9vdXQ7CiAgaW50IHBwczsKLSBpbnQgcnN2WzE1XTsKLX07CisgaW50IG5fcGluczsKKyBpbnQgcnN2WzE0XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IHB0cF9leHR0c19yZXF1ZXN0IHsKICB1bnNpZ25lZCBpbnQgaW5kZXg7CiAgdW5zaWduZWQgaW50IGZsYWdzOwotIHVuc2lnbmVkIGludCByc3ZbMl07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCByc3ZbMl07CiB9Owogc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCB7CiAgc3RydWN0IHB0cF9jbG9ja190aW1lIHN0YXJ0OwotIHN0cnVjdCBwdHBfY2xvY2tfdGltZSBwZXJpb2Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBwdHBfY2xvY2tfdGltZSBwZXJpb2Q7CiAgdW5zaWduZWQgaW50IGluZGV4OwogIHVuc2lnbmVkIGludCBmbGFnczsKICB1bnNpZ25lZCBpbnQgcnN2WzRdOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBQVFBfTUFYX1NBTVBMRVMgMjUKIHN0cnVjdCBwdHBfc3lzX29mZnNldCB7CiAgdW5zaWduZWQgaW50IG5fc2FtcGxlczsKLSB1bnNpZ25lZCBpbnQgcnN2WzNdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgcnN2WzNdOwogIHN0cnVjdCBwdHBfY2xvY2tfdGltZSB0c1syICogUFRQX01BWF9TQU1QTEVTICsgMV07CiB9OworZW51bSBwdHBfcGluX2Z1bmN0aW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUFRQX1BGX05PTkUsCisgUFRQX1BGX0VYVFRTLAorIFBUUF9QRl9QRVJPVVQsCisgUFRQX1BGX1BIWVNZTkMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCBwdHBfcGluX2Rlc2MgeworIGNoYXIgbmFtZVs2NF07CisgdW5zaWduZWQgaW50IGluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgZnVuYzsKKyB1bnNpZ25lZCBpbnQgY2hhbjsKKyB1bnNpZ25lZCBpbnQgcnN2WzVdOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUF9DTEtfTUFHSUMgJz0nCiAjZGVmaW5lIFBUUF9DTE9DS19HRVRDQVBTIF9JT1IoUFRQX0NMS19NQUdJQywgMSwgc3RydWN0IHB0cF9jbG9ja19jYXBzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFRQX0VYVFRTX1JFUVVFU1QgX0lPVyhQVFBfQ0xLX01BR0lDLCAyLCBzdHJ1Y3QgcHRwX2V4dHRzX3JlcXVlc3QpCiAjZGVmaW5lIFBUUF9QRVJPVVRfUkVRVUVTVCBfSU9XKFBUUF9DTEtfTUFHSUMsIDMsIHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVFBfRU5BQkxFX1BQUyBfSU9XKFBUUF9DTEtfTUFHSUMsIDQsIGludCkKICNkZWZpbmUgUFRQX1NZU19PRkZTRVQgX0lPVyhQVFBfQ0xLX01BR0lDLCA1LCBzdHJ1Y3QgcHRwX3N5c19vZmZzZXQpCisjZGVmaW5lIFBUUF9QSU5fR0VURlVOQyBfSU9XUihQVFBfQ0xLX01BR0lDLCA2LCBzdHJ1Y3QgcHRwX3Bpbl9kZXNjKQorI2RlZmluZSBQVFBfUElOX1NFVEZVTkMgX0lPVyhQVFBfQ0xLX01BR0lDLCA3LCBzdHJ1Y3QgcHRwX3Bpbl9kZXNjKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBwdHBfZXh0dHNfZXZlbnQgewogIHN0cnVjdCBwdHBfY2xvY2tfdGltZSB0OwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zZXJpYWxfY29yZS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IDU5ZmMzMmEuLjY0MzAxMWEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTE0Myw0ICsxNDMsNyBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUE9SVF9BU0MgMTA1CiAjZGVmaW5lIFBPUlRfVElMRUdYIDEwNgorI2RlZmluZSBQT1JUX01FTl9aMTM1IDEwNworI2RlZmluZSBQT1JUX1NDMTZJUzdYWCAxMDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvc2VyaWFsX3JlZy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zZXJpYWxfcmVnLmgKaW5kZXggMWIwYmFkYS4uZTE5Y2ZiNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zZXJpYWxfcmVnLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zZXJpYWxfcmVnLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgVUFSVF9JSVIgMgogI2RlZmluZSBVQVJUX0lJUl9OT19JTlQgMHgwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVUFSVF9JSVJfSUQgMHgwNgorI2RlZmluZSBVQVJUX0lJUl9JRCAweDBlCiAjZGVmaW5lIFVBUlRfSUlSX01TSSAweDAwCiAjZGVmaW5lIFVBUlRfSUlSX1RIUkkgMHgwMgogI2RlZmluZSBVQVJUX0lJUl9SREkgMHgwNApkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zaG0uaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvc2htLmgKaW5kZXggMjhlMTY3MC4uZTQxY2E1MCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zaG0uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NobS5oCkBAIC0yMiwxMSArMjIsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNkZWZpbmUgU0hNTUFYIDB4MjAwMDAwMAogI2RlZmluZSBTSE1NSU4gMQogI2RlZmluZSBTSE1NTkkgNDA5NgorI2RlZmluZSBTSE1NQVggKFVMT05HX01BWCAtICgxVUwgPDwgMjQpKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0hNQUxMIChTSE1NQVgvZ2V0cGFnZXNpemUoKSooU0hNTU5JLzE2KSkKKyNkZWZpbmUgU0hNQUxMIChVTE9OR19NQVggLSAoMVVMIDw8IDI0KSkKICNkZWZpbmUgU0hNU0VHIFNITU1OSQogc3RydWN0IHNobWlkX2RzIHsKICBzdHJ1Y3QgaXBjX3Blcm0gc2htX3Blcm07CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NubXAuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvc25tcC5oCmluZGV4IDlkNWZiMDkuLjY0NTEyOGYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvc25tcC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvc25tcC5oCkBAIC0yNzgsNTcgKzI3OCw2NCBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfVENQU1lOQ0hBTExFTkdFLAogIExJTlVYX01JQl9UQ1BGQVNUT1BFTkFDVElWRSwKKyBMSU5VWF9NSUJfVENQRkFTVE9QRU5BQ1RJVkVGQUlMLAogIExJTlVYX01JQl9UQ1BGQVNUT1BFTlBBU1NJVkUsCi0gTElOVVhfTUlCX1RDUEZBU1RPUEVOUEFTU0lWRUZBSUwsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIExJTlVYX01JQl9UQ1BGQVNUT1BFTlBBU1NJVkVGQUlMLAogIExJTlVYX01JQl9UQ1BGQVNUT1BFTkxJU1RFTk9WRVJGTE9XLAogIExJTlVYX01JQl9UQ1BGQVNUT1BFTkNPT0tJRVJFUUQsCiAgTElOVVhfTUlCX1RDUFNQVVJJT1VTX1JUWF9IT1NUUVVFVUVTLAotIExJTlVYX01JQl9CVVNZUE9MTFJYUEFDS0VUUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTElOVVhfTUlCX0JVU1lQT0xMUlhQQUNLRVRTLAogIExJTlVYX01JQl9UQ1BBVVRPQ09SS0lORywKKyBMSU5VWF9NSUJfVENQRlJPTVpFUk9XSU5ET1dBRFYsCisgTElOVVhfTUlCX1RDUFRPWkVST1dJTkRPV0FEViwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTElOVVhfTUlCX1RDUFdBTlRaRVJPV0lORE9XQURWLAorIExJTlVYX01JQl9UQ1BTWU5SRVRSQU5TLAorIExJTlVYX01JQl9UQ1BPUklHREFUQVNFTlQsCiAgX19MSU5VWF9NSUJfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgTElOVVhfTUlCX1hGUk1OVU0gPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfWEZSTUlORVJST1IsCiAgTElOVVhfTUlCX1hGUk1JTkJVRkZFUkVSUk9SLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfWEZSTUlOSERSRVJST1IsCiAgTElOVVhfTUlCX1hGUk1JTk5PU1RBVEVTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfWEZSTUlOU1RBVEVQUk9UT0VSUk9SLAogIExJTlVYX01JQl9YRlJNSU5TVEFURU1PREVFUlJPUiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTElOVVhfTUlCX1hGUk1JTlNUQVRFU0VRRVJST1IsCiAgTElOVVhfTUlCX1hGUk1JTlNUQVRFRVhQSVJFRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTElOVVhfTUlCX1hGUk1JTlNUQVRFTUlTTUFUQ0gsCiAgTElOVVhfTUlCX1hGUk1JTlNUQVRFSU5WQUxJRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTElOVVhfTUlCX1hGUk1JTlRNUExNSVNNQVRDSCwKICBMSU5VWF9NSUJfWEZSTUlOTk9QT0xTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfWEZSTUlOUE9MQkxPQ0ssCiAgTElOVVhfTUlCX1hGUk1JTlBPTEVSUk9SLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfWEZSTU9VVEVSUk9SLAogIExJTlVYX01JQl9YRlJNT1VUQlVORExFR0VORVJST1IsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNT1VUQlVORExFQ0hFQ0tFUlJPUiwKICBMSU5VWF9NSUJfWEZSTU9VVE5PU1RBVEVTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfWEZSTU9VVFNUQVRFUFJPVE9FUlJPUiwKICBMSU5VWF9NSUJfWEZSTU9VVFNUQVRFTU9ERUVSUk9SLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfWEZSTU9VVFNUQVRFU0VRRVJST1IsCiAgTElOVVhfTUlCX1hGUk1PVVRTVEFURUVYUElSRUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNT1VUUE9MQkxPQ0ssCiAgTElOVVhfTUlCX1hGUk1PVVRQT0xERUFELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfWEZSTU9VVFBPTEVSUk9SLAogIExJTlVYX01JQl9YRlJNRldESERSRVJST1IsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNT1VUU1RBVEVJTlZBTElELAogIExJTlVYX01JQl9YRlJNQUNRVUlSRUVSUk9SLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0xJTlVYX01JQl9YRlJNTUFYCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zcGkvc3BpZGV2LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NwaS9zcGlkZXYuaAppbmRleCAyNDFkYzk1Li5mMjMzMDQwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NwaS9zcGlkZXYuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NwaS9zcGlkZXYuaApAQCAtMzQsNiArMzQsMTEgQEAKICNkZWZpbmUgU1BJX0xPT1AgMHgyMAogI2RlZmluZSBTUElfTk9fQ1MgMHg0MAogI2RlZmluZSBTUElfUkVBRFkgMHg4MAorI2RlZmluZSBTUElfVFhfRFVBTCAweDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU1BJX1RYX1FVQUQgMHgyMDAKKyNkZWZpbmUgU1BJX1JYX0RVQUwgMHg0MDAKKyNkZWZpbmUgU1BJX1JYX1FVQUQgMHg4MDAKICNkZWZpbmUgU1BJX0lPQ19NQUdJQyAnaycKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlciB7CkBAIC00NiwxOSArNTEsMjQgQEAKICBfX3U4IGJpdHNfcGVyX3dvcmQ7CiAgX191OCBjc19jaGFuZ2U7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fdTMyIHBhZDsKKyBfX3U4IHR4X25iaXRzOworIF9fdTggcnhfbmJpdHM7CisgX191MTYgcGFkOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNQSV9NU0dTSVpFKE4pICAgKCgoKE4pKihzaXplb2YgKHN0cnVjdCBzcGlfaW9jX3RyYW5zZmVyKSkpIDwgKDEgPDwgX0lPQ19TSVpFQklUUykpICAgPyAoKE4pKihzaXplb2YgKHN0cnVjdCBzcGlfaW9jX3RyYW5zZmVyKSkpIDogMCkKICNkZWZpbmUgU1BJX0lPQ19NRVNTQUdFKE4pIF9JT1coU1BJX0lPQ19NQUdJQywgMCwgY2hhcltTUElfTVNHU0laRShOKV0pCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTUElfSU9DX1JEX01PREUgX0lPUihTUElfSU9DX01BR0lDLCAxLCBfX3U4KQogI2RlZmluZSBTUElfSU9DX1dSX01PREUgX0lPVyhTUElfSU9DX01BR0lDLCAxLCBfX3U4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1BJX0lPQ19SRF9MU0JfRklSU1QgX0lPUihTUElfSU9DX01BR0lDLCAyLCBfX3U4KQogI2RlZmluZSBTUElfSU9DX1dSX0xTQl9GSVJTVCBfSU9XKFNQSV9JT0NfTUFHSUMsIDIsIF9fdTgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTUElfSU9DX1JEX0JJVFNfUEVSX1dPUkQgX0lPUihTUElfSU9DX01BR0lDLCAzLCBfX3U4KQogI2RlZmluZSBTUElfSU9DX1dSX0JJVFNfUEVSX1dPUkQgX0lPVyhTUElfSU9DX01BR0lDLCAzLCBfX3U4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1BJX0lPQ19SRF9NQVhfU1BFRURfSFogX0lPUihTUElfSU9DX01BR0lDLCA0LCBfX3UzMikKICNkZWZpbmUgU1BJX0lPQ19XUl9NQVhfU1BFRURfSFogX0lPVyhTUElfSU9DX01BR0lDLCA0LCBfX3UzMikKKyNkZWZpbmUgU1BJX0lPQ19SRF9NT0RFMzIgX0lPUihTUElfSU9DX01BR0lDLCA1LCBfX3UzMikKKyNkZWZpbmUgU1BJX0lPQ19XUl9NT0RFMzIgX0lPVyhTUElfSU9DX01BR0lDLCA1LCBfX3UzMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNwLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RjcC5oCmluZGV4IGE3YjVjNWUuLmQ1N2FkMGMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNwLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC90Y3AuaApAQCAtMTkzLDE2ICsxOTMsMTggQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdGNwaV9yY3Zfc3BhY2U7CiAgX191MzIgdGNwaV90b3RhbF9yZXRyYW5zOworIF9fdTY0IHRjcGlfcGFjaW5nX3JhdGU7CisgX191NjQgdGNwaV9tYXhfcGFjaW5nX3JhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVENQX01ENVNJR19NQVhLRVlMRU4gODAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNwX21kNXNpZyB7CiAgc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgdGNwbV9hZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBfX3RjcG1fcGFkMTsKICBfX3UxNiB0Y3BtX2tleWxlbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgX190Y3BtX3BhZDI7CiAgX191OCB0Y3BtX2tleVtUQ1BfTUQ1U0lHX01BWEtFWUxFTl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNwX21ldHJpY3MuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNwX21ldHJpY3MuaAppbmRleCA0NDllYzk1Li4xYzM2YTU1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RjcF9tZXRyaWNzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC90Y3BfbWV0cmljcy5oCkBAIC0yOSwzOCArMjksNDEgQEAKICBUQ1BfTUVUUklDX1NTVEhSRVNILAogIFRDUF9NRVRSSUNfQ1dORCwKICBUQ1BfTUVUUklDX1JFT1JERVJJTkcsCi0gX19UQ1BfTUVUUklDX01BWCwKKyBUQ1BfTUVUUklDX1JUVF9VUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVENQX01FVFJJQ19SVFRWQVJfVVMsCisgX19UQ1BfTUVUUklDX01BWCwKIH07CiAjZGVmaW5lIFRDUF9NRVRSSUNfTUFYIChfX1RDUF9NRVRSSUNfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBUQ1BfTUVUUklDU19BVFRSX1VOU1BFQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENQX01FVFJJQ1NfQVRUUl9BRERSX0lQVjQsCiAgVENQX01FVFJJQ1NfQVRUUl9BRERSX0lQVjYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDUF9NRVRSSUNTX0FUVFJfQUdFLAogIFRDUF9NRVRSSUNTX0FUVFJfVFdfVFNWQUwsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDUF9NRVRSSUNTX0FUVFJfVFdfVFNfU1RBTVAsCiAgVENQX01FVFJJQ1NfQVRUUl9WQUxTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ1BfTUVUUklDU19BVFRSX0ZPUEVOX01TUywKICBUQ1BfTUVUUklDU19BVFRSX0ZPUEVOX1NZTl9EUk9QUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENQX01FVFJJQ1NfQVRUUl9GT1BFTl9TWU5fRFJPUF9UUywKICBUQ1BfTUVUUklDU19BVFRSX0ZPUEVOX0NPT0tJRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENQX01FVFJJQ1NfQVRUUl9TQUREUl9JUFY0LAogIFRDUF9NRVRSSUNTX0FUVFJfU0FERFJfSVBWNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19UQ1BfTUVUUklDU19BVFRSX01BWCwKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ1BfTUVUUklDU19BVFRSX01BWCAoX19UQ1BfTUVUUklDU19BVFRSX01BWCAtIDEpCiBlbnVtIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENQX01FVFJJQ1NfQ01EX1VOU1BFQywKICBUQ1BfTUVUUklDU19DTURfR0VULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ1BfTUVUUklDU19DTURfREVMLAogIF9fVENQX01FVFJJQ1NfQ01EX01BWCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBUQ1BfTUVUUklDU19DTURfTUFYIChfX1RDUF9NRVRSSUNTX0NNRF9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC90aXBjLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RpcGMuaAppbmRleCA2NDVjNjEwLi44ZmRkMzE5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RpcGMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RpcGMuaApAQCAtMTksMTExICsxOSwxMjYgQEAKICNpZm5kZWYgX0xJTlVYX1RJUENfSF8KICNkZWZpbmUgX0xJTlVYX1RJUENfSF8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotc3RydWN0IHRpcGNfcG9ydGlkIHsKKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHRpcGNfcG9ydGlkIHsKICBfX3UzMiByZWY7CiAgX191MzIgbm9kZTsKIH07Ci1zdHJ1Y3QgdGlwY19uYW1lIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdGlwY19uYW1lIHsKICBfX3UzMiB0eXBlOwogIF9fdTMyIGluc3RhbmNlOwogfTsKLXN0cnVjdCB0aXBjX25hbWVfc2VxIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdGlwY19uYW1lX3NlcSB7CiAgX191MzIgdHlwZTsKICBfX3UzMiBsb3dlcjsKICBfX3UzMiB1cHBlcjsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgVElQQ19DRkdfU1JWIDAKICNkZWZpbmUgVElQQ19UT1BfU1JWIDEKKyNkZWZpbmUgVElQQ19MSU5LX1NUQVRFIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJUENfUkVTRVJWRURfVFlQRVMgNjQKICNkZWZpbmUgVElQQ19aT05FX1NDT1BFIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJUENfQ0xVU1RFUl9TQ09QRSAyCiAjZGVmaW5lIFRJUENfTk9ERV9TQ09QRSAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSVBDX01BWF9VU0VSX01TR19TSVpFIDY2MDAwVQogI2RlZmluZSBUSVBDX0xPV19JTVBPUlRBTkNFIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJUENfTUVESVVNX0lNUE9SVEFOQ0UgMQogI2RlZmluZSBUSVBDX0hJR0hfSU1QT1JUQU5DRSAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UgMwogI2RlZmluZSBUSVBDX09LIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJUENfRVJSX05PX05BTUUgMQogI2RlZmluZSBUSVBDX0VSUl9OT19QT1JUIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJUENfRVJSX05PX05PREUgMwogI2RlZmluZSBUSVBDX0VSUl9PVkVSTE9BRCA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSVBDX0NPTk5fU0hVVERPV04gNQogI2RlZmluZSBUSVBDX1NVQl9QT1JUUyAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSVBDX1NVQl9TRVJWSUNFIDB4MDIKICNkZWZpbmUgVElQQ19TVUJfQ0FOQ0VMIDB4MDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJUENfV0FJVF9GT1JFVkVSICh+MCkKIHN0cnVjdCB0aXBjX3N1YnNjciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0aXBjX25hbWVfc2VxIHNlcTsKICBfX3UzMiB0aW1lb3V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmaWx0ZXI7CiAgY2hhciB1c3JfaGFuZGxlWzhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFRJUENfUFVCTElTSEVEIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJUENfV0lUSERSQVdOIDIKICNkZWZpbmUgVElQQ19TVUJTQ1JfVElNRU9VVCAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRpcGNfZXZlbnQgewogIF9fdTMyIGV2ZW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmb3VuZF9sb3dlcjsKICBfX3UzMiBmb3VuZF91cHBlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHRpcGNfcG9ydGlkIHBvcnQ7CiAgc3RydWN0IHRpcGNfc3Vic2NyIHM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNpZm5kZWYgQUZfVElQQworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUZfVElQQyAzMAogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBQRl9USVBDCiAjZGVmaW5lIFBGX1RJUEMgQUZfVElQQworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2lmbmRlZiBTT0xfVElQQwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09MX1RJUEMgMjcxCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJUENfQUREUl9OQU1FU0VRIDEKICNkZWZpbmUgVElQQ19BRERSX01DQVNUIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJUENfQUREUl9OQU1FIDIKICNkZWZpbmUgVElQQ19BRERSX0lEIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc29ja2FkZHJfdGlwYyB7CiAgdW5zaWduZWQgc2hvcnQgZmFtaWx5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGFkZHJ0eXBlOwogIHNpZ25lZCBjaGFyIHNjb3BlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgc3RydWN0IHRpcGNfcG9ydGlkIGlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdGlwY19uYW1lX3NlcSBuYW1lc2VxOwogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0aXBjX25hbWUgbmFtZTsKICBfX3UzMiBkb21haW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gbmFtZTsKICB9IGFkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVElQQ19FUlJJTkZPIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJUENfUkVUREFUQSAyCiAjZGVmaW5lIFRJUENfREVTVE5BTUUgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVElQQ19JTVBPUlRBTkNFIDEyNwogI2RlZmluZSBUSVBDX1NSQ19EUk9QUEFCTEUgMTI4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSVBDX0RFU1RfRFJPUFBBQkxFIDEyOQogI2RlZmluZSBUSVBDX0NPTk5fVElNRU9VVCAxMzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJUENfTk9ERV9SRUNWUV9ERVBUSCAxMzEKICNkZWZpbmUgVElQQ19TT0NLX1JFQ1ZRX0RFUFRIIDEzMgorI2RlZmluZSBUSVBDX01BWF9NRURJQV9OQU1FIDE2CisjZGVmaW5lIFRJUENfTUFYX0lGX05BTUUgMTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJUENfTUFYX0JFQVJFUl9OQU1FIDMyCisjZGVmaW5lIFRJUENfTUFYX0xJTktfTkFNRSA2MAorI2RlZmluZSBTSU9DR0VUTElOS05BTUUgU0lPQ1BST1RPUFJJVkFURQorc3RydWN0IHRpcGNfc2lvY19sbl9yZXEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBwZWVyOworIF9fdTMyIGJlYXJlcl9pZDsKKyBjaGFyIGxpbmtuYW1lW1RJUENfTUFYX0xJTktfTkFNRV07Cit9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC90aXBjX2NvbmZpZy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC90aXBjX2NvbmZpZy5oCmluZGV4IDZlY2FiZGEuLmNhNWJjMWQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGlwY19jb25maWcuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RpcGNfY29uZmlnLmgKQEAgLTIxLDE3NiArMjEsMTczIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaW5jbHVkZSA8bGludXgvdGlwYy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KICNkZWZpbmUgVElQQ19DTURfTk9PUCAweDAwMDAKLSNkZWZpbmUgVElQQ19DTURfR0VUX05PREVTIDB4MDAwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElQQ19DTURfR0VUX05PREVTIDB4MDAwMQogI2RlZmluZSBUSVBDX0NNRF9HRVRfTUVESUFfTkFNRVMgMHgwMDAyCiAjZGVmaW5lIFRJUENfQ01EX0dFVF9CRUFSRVJfTkFNRVMgMHgwMDAzCiAjZGVmaW5lIFRJUENfQ01EX0dFVF9MSU5LUyAweDAwMDQKLSNkZWZpbmUgVElQQ19DTURfU0hPV19OQU1FX1RBQkxFIDB4MDAwNQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElQQ19DTURfU0hPV19OQU1FX1RBQkxFIDB4MDAwNQogI2RlZmluZSBUSVBDX0NNRF9TSE9XX1BPUlRTIDB4MDAwNgogI2RlZmluZSBUSVBDX0NNRF9TSE9XX0xJTktfU1RBVFMgMHgwMDBCCiAjZGVmaW5lIFRJUENfQ01EX1NIT1dfU1RBVFMgMHgwMDBGCi0jZGVmaW5lIFRJUENfQ01EX0dFVF9SRU1PVEVfTU5HIDB4NDAwMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElQQ19DTURfR0VUX1JFTU9URV9NTkcgMHg0MDAzCiAjZGVmaW5lIFRJUENfQ01EX0dFVF9NQVhfUE9SVFMgMHg0MDA0CiAjZGVmaW5lIFRJUENfQ01EX0dFVF9NQVhfUFVCTCAweDQwMDUKICNkZWZpbmUgVElQQ19DTURfR0VUX01BWF9TVUJTQ1IgMHg0MDA2Ci0jZGVmaW5lIFRJUENfQ01EX0dFVF9NQVhfWk9ORVMgMHg0MDA3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSVBDX0NNRF9HRVRfTUFYX1pPTkVTIDB4NDAwNwogI2RlZmluZSBUSVBDX0NNRF9HRVRfTUFYX0NMVVNURVJTIDB4NDAwOAogI2RlZmluZSBUSVBDX0NNRF9HRVRfTUFYX05PREVTIDB4NDAwOQogI2RlZmluZSBUSVBDX0NNRF9HRVRfTUFYX1NMQVZFUyAweDQwMEEKLSNkZWZpbmUgVElQQ19DTURfR0VUX05FVElEIDB4NDAwQgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElQQ19DTURfR0VUX05FVElEIDB4NDAwQgogI2RlZmluZSBUSVBDX0NNRF9FTkFCTEVfQkVBUkVSIDB4NDEwMQogI2RlZmluZSBUSVBDX0NNRF9ESVNBQkxFX0JFQVJFUiAweDQxMDIKICNkZWZpbmUgVElQQ19DTURfU0VUX0xJTktfVE9MIDB4NDEwNwotI2RlZmluZSBUSVBDX0NNRF9TRVRfTElOS19QUkkgMHg0MTA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSVBDX0NNRF9TRVRfTElOS19QUkkgMHg0MTA4CiAjZGVmaW5lIFRJUENfQ01EX1NFVF9MSU5LX1dJTkRPVyAweDQxMDkKICNkZWZpbmUgVElQQ19DTURfU0VUX0xPR19TSVpFIDB4NDEwQQogI2RlZmluZSBUSVBDX0NNRF9EVU1QX0xPRyAweDQxMEIKLSNkZWZpbmUgVElQQ19DTURfUkVTRVRfTElOS19TVEFUUyAweDQxMEMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJUENfQ01EX1JFU0VUX0xJTktfU1RBVFMgMHg0MTBDCiAjZGVmaW5lIFRJUENfQ01EX1NFVF9OT0RFX0FERFIgMHg4MDAxCiAjZGVmaW5lIFRJUENfQ01EX1NFVF9SRU1PVEVfTU5HIDB4ODAwMwogI2RlZmluZSBUSVBDX0NNRF9TRVRfTUFYX1BPUlRTIDB4ODAwNAotI2RlZmluZSBUSVBDX0NNRF9TRVRfTUFYX1BVQkwgMHg4MDA1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSVBDX0NNRF9TRVRfTUFYX1BVQkwgMHg4MDA1CiAjZGVmaW5lIFRJUENfQ01EX1NFVF9NQVhfU1VCU0NSIDB4ODAwNgogI2RlZmluZSBUSVBDX0NNRF9TRVRfTUFYX1pPTkVTIDB4ODAwNwogI2RlZmluZSBUSVBDX0NNRF9TRVRfTUFYX0NMVVNURVJTIDB4ODAwOAotI2RlZmluZSBUSVBDX0NNRF9TRVRfTUFYX05PREVTIDB4ODAwOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElQQ19DTURfU0VUX01BWF9OT0RFUyAweDgwMDkKICNkZWZpbmUgVElQQ19DTURfU0VUX01BWF9TTEFWRVMgMHg4MDBBCiAjZGVmaW5lIFRJUENfQ01EX1NFVF9ORVRJRCAweDgwMEIKICNkZWZpbmUgVElQQ19DTURfTk9UX05FVF9BRE1JTiAweEMwMDEKLSNkZWZpbmUgVElQQ19UTFZfTk9ORSAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSVBDX1RMVl9OT05FIDAKICNkZWZpbmUgVElQQ19UTFZfVk9JRCAxCiAjZGVmaW5lIFRJUENfVExWX1VOU0lHTkVEIDIKICNkZWZpbmUgVElQQ19UTFZfU1RSSU5HIDMKLSNkZWZpbmUgVElQQ19UTFZfTEFSR0VfU1RSSU5HIDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJUENfVExWX0xBUkdFX1NUUklORyA0CiAjZGVmaW5lIFRJUENfVExWX1VMVFJBX1NUUklORyA1CiAjZGVmaW5lIFRJUENfVExWX0VSUk9SX1NUUklORyAxNgogI2RlZmluZSBUSVBDX1RMVl9ORVRfQUREUiAxNwotI2RlZmluZSBUSVBDX1RMVl9NRURJQV9OQU1FIDE4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSVBDX1RMVl9NRURJQV9OQU1FIDE4CiAjZGVmaW5lIFRJUENfVExWX0JFQVJFUl9OQU1FIDE5CiAjZGVmaW5lIFRJUENfVExWX0xJTktfTkFNRSAyMAogI2RlZmluZSBUSVBDX1RMVl9OT0RFX0lORk8gMjEKLSNkZWZpbmUgVElQQ19UTFZfTElOS19JTkZPIDIyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSVBDX1RMVl9MSU5LX0lORk8gMjIKICNkZWZpbmUgVElQQ19UTFZfQkVBUkVSX0NPTkZJRyAyMwogI2RlZmluZSBUSVBDX1RMVl9MSU5LX0NPTkZJRyAyNAogI2RlZmluZSBUSVBDX1RMVl9OQU1FX1RCTF9RVUVSWSAyNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVElQQ19UTFZfUE9SVF9SRUYgMjYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFRJUENfTUFYX01FRElBX05BTUUgMTYKLSNkZWZpbmUgVElQQ19NQVhfSUZfTkFNRSAxNgotI2RlZmluZSBUSVBDX01BWF9CRUFSRVJfTkFNRSAzMgotI2RlZmluZSBUSVBDX01BWF9MSU5LX05BTUUgNjAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJUENfTUlOX0xJTktfUFJJIDAKICNkZWZpbmUgVElQQ19ERUZfTElOS19QUkkgMTAKICNkZWZpbmUgVElQQ19NQVhfTElOS19QUkkgMzEKLSNkZWZpbmUgVElQQ19NRURJQV9MSU5LX1BSSSAoVElQQ19NQVhfTElOS19QUkkgKyAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElQQ19NRURJQV9MSU5LX1BSSSAoVElQQ19NQVhfTElOS19QUkkgKyAxKQogI2RlZmluZSBUSVBDX01JTl9MSU5LX1RPTCA1MAogI2RlZmluZSBUSVBDX0RFRl9MSU5LX1RPTCAxNTAwCiAjZGVmaW5lIFRJUENfTUFYX0xJTktfVE9MIDMwMDAwCi0jaWYgVElQQ19NSU5fTElOS19UT0wgPCAxNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpZiBUSVBDX01JTl9MSU5LX1RPTCA8IDE2CiAjZXJyb3IgIlRJUENfTUlOX0xJTktfVE9MIGlzIHRvbyBzbWFsbCAoYWJvcnQgbGltaXQgbWF5IGJlIE5hTikiCiAjZW5kaWYKICNkZWZpbmUgVElQQ19NSU5fTElOS19XSU4gMTYKLSNkZWZpbmUgVElQQ19ERUZfTElOS19XSU4gNTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJUENfREVGX0xJTktfV0lOIDUwCiAjZGVmaW5lIFRJUENfTUFYX0xJTktfV0lOIDE1MAogc3RydWN0IHRpcGNfbm9kZV9pbmZvIHsKICBfX2JlMzIgYWRkcjsKLSBfX2JlMzIgdXA7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUzMiB1cDsKIH07CiBzdHJ1Y3QgdGlwY19saW5rX2luZm8gewogIF9fYmUzMiBkZXN0OwotIF9fYmUzMiB1cDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTMyIHVwOwogIGNoYXIgc3RyW1RJUENfTUFYX0xJTktfTkFNRV07CiB9Owogc3RydWN0IHRpcGNfYmVhcmVyX2NvbmZpZyB7Ci0gX19iZTMyIHByaW9yaXR5OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMzIgcHJpb3JpdHk7CiAgX19iZTMyIGRpc2NfZG9tYWluOwogIGNoYXIgbmFtZVtUSVBDX01BWF9CRUFSRVJfTkFNRV07CiB9Owotc3RydWN0IHRpcGNfbGlua19jb25maWcgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB0aXBjX2xpbmtfY29uZmlnIHsKICBfX2JlMzIgdmFsdWU7CiAgY2hhciBuYW1lW1RJUENfTUFYX0xJTktfTkFNRV07CiB9OwotI2RlZmluZSBUSVBDX05UUV9BTExUWVBFUyAweDgwMDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSVBDX05UUV9BTExUWVBFUyAweDgwMDAwMDAwCiBzdHJ1Y3QgdGlwY19uYW1lX3RhYmxlX3F1ZXJ5IHsKICBfX2JlMzIgZGVwdGg7CiAgX19iZTMyIHR5cGU7Ci0gX19iZTMyIGxvd2JvdW5kOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMzIgbG93Ym91bmQ7CiAgX19iZTMyIHVwYm91bmQ7CiB9OwogI2RlZmluZSBUSVBDX0NGR19UTFZfRVJST1IgIlx4ODAiCi0jZGVmaW5lIFRJUENfQ0ZHX05PVF9ORVRfQURNSU4gIlx4ODEiCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSVBDX0NGR19OT1RfTkVUX0FETUlOICJceDgxIgogI2RlZmluZSBUSVBDX0NGR19OT1RfWk9ORV9NU1RSICJceDgyIgogI2RlZmluZSBUSVBDX0NGR19OT19SRU1PVEUgIlx4ODMiCiAjZGVmaW5lIFRJUENfQ0ZHX05PVF9TVVBQT1JURUQgIlx4ODQiCi0jZGVmaW5lIFRJUENfQ0ZHX0lOVkFMSURfVkFMVUUgIlx4ODUiCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSVBDX0NGR19JTlZBTElEX1ZBTFVFICJceDg1Igogc3RydWN0IHRsdl9kZXNjIHsKICBfX2JlMTYgdGx2X2xlbjsKICBfX2JlMTYgdGx2X3R5cGU7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFRMVl9BTElHTlRPIDQKICNkZWZpbmUgVExWX0FMSUdOKGRhdGFsZW4pICgoKGRhdGFsZW4pKyhUTFZfQUxJR05UTy0xKSkgJiB+KFRMVl9BTElHTlRPLTEpKQogI2RlZmluZSBUTFZfTEVOR1RIKGRhdGFsZW4pIChzaXplb2Yoc3RydWN0IHRsdl9kZXNjKSArIChkYXRhbGVuKSkKLSNkZWZpbmUgVExWX1NQQUNFKGRhdGFsZW4pIChUTFZfQUxJR04oVExWX0xFTkdUSChkYXRhbGVuKSkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUTFZfU1BBQ0UoZGF0YWxlbikgKFRMVl9BTElHTihUTFZfTEVOR1RIKGRhdGFsZW4pKSkKICNkZWZpbmUgVExWX0RBVEEodGx2KSAoKHZvaWQgKikoKGNoYXIgKikodGx2KSArIFRMVl9MRU5HVEgoMCkpKQogc3RydWN0IHRsdl9saXN0X2Rlc2MgewogIHN0cnVjdCB0bHZfZGVzYyAqdGx2X3B0cjsKLSBfX3UzMiB0bHZfc3BhY2U7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHRsdl9zcGFjZTsKIH07CiAjZGVmaW5lIFRJUENfR0VOTF9OQU1FICJUSVBDIgogI2RlZmluZSBUSVBDX0dFTkxfVkVSU0lPTiAweDEKLSNkZWZpbmUgVElQQ19HRU5MX0NNRCAweDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJUENfR0VOTF9DTUQgMHgxCiBzdHJ1Y3QgdGlwY19nZW5sbXNnaGRyIHsKICBfX3UzMiBkZXN0OwogIF9fdTE2IGNtZDsKLSBfX3UxNiByZXNlcnZlZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgcmVzZXJ2ZWQ7CiB9OwogI2RlZmluZSBUSVBDX0dFTkxfSERSTEVOIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgdGlwY19nZW5sbXNnaGRyKSkKIHN0cnVjdCB0aXBjX2NmZ19tc2dfaGRyIHsKLSBfX2JlMzIgdGNtX2xlbjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTMyIHRjbV9sZW47CiAgX19iZTE2IHRjbV90eXBlOwogIF9fYmUxNiB0Y21fZmxhZ3M7CiAgY2hhciB0Y21fcmVzZXJ2ZWRbOF07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFRDTV9GX1JFUVVFU1QgMHgxCiAjZGVmaW5lIFRDTV9GX01PUkUgMHgyCiAjZGVmaW5lIFRDTV9BTElHTihkYXRhbGVuKSAoKChkYXRhbGVuKSszKSAmIH4zKQotI2RlZmluZSBUQ01fTEVOR1RIKGRhdGFsZW4pIChzaXplb2Yoc3RydWN0IHRpcGNfY2ZnX21zZ19oZHIpICsgZGF0YWxlbikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRDTV9MRU5HVEgoZGF0YWxlbikgKHNpemVvZihzdHJ1Y3QgdGlwY19jZmdfbXNnX2hkcikgKyBkYXRhbGVuKQogI2RlZmluZSBUQ01fU1BBQ0UoZGF0YWxlbikgKFRDTV9BTElHTihUQ01fTEVOR1RIKGRhdGFsZW4pKSkKICNkZWZpbmUgVENNX0RBVEEodGNtX2hkcikgKCh2b2lkICopKChjaGFyICopKHRjbV9oZHIpICsgVENNX0xFTkdUSCgwKSkpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VkcC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC91ZHAuaAppbmRleCA0MWEwNTkyLi4yYzA4MTlmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VkcC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdWRwLmgKQEAgLTI5LDggKzI5LDExIEBACiB9OwogI2RlZmluZSBVRFBfQ09SSyAxCiAjZGVmaW5lIFVEUF9FTkNBUCAxMDAKLSNkZWZpbmUgVURQX0VOQ0FQX0VTUElOVURQX05PTl9JS0UgMQorI2RlZmluZSBVRFBfTk9fQ0hFQ0s2X1RYIDEwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVURQX05PX0NIRUNLNl9SWCAxMDIKKyNkZWZpbmUgVURQX0VOQ0FQX0VTUElOVURQX05PTl9JS0UgMQogI2RlZmluZSBVRFBfRU5DQVBfRVNQSU5VRFAgMgogI2RlZmluZSBVRFBfRU5DQVBfTDJUUElOVURQIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdWhpZC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC91aGlkLmgKaW5kZXggMzdjM2IxNy4uZTUyZjY4ZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC91aGlkLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC91aGlkLmgKQEAgLTIxLDg4ICsyMSwxMTQgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgogZW51bSB1aGlkX2V2ZW50X3R5cGUgewogIFVISURfQ1JFQVRFLAogIFVISURfREVTVFJPWSwKLSBVSElEX1NUQVJULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBVSElEX1NUQVJULAogIFVISURfU1RPUCwKICBVSElEX09QRU4sCiAgVUhJRF9DTE9TRSwKLSBVSElEX09VVFBVVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVUhJRF9PVVRQVVQsCiAgVUhJRF9PVVRQVVRfRVYsCiAgVUhJRF9JTlBVVCwKICBVSElEX0ZFQVRVUkUsCi0gVUhJRF9GRUFUVVJFX0FOU1dFUiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVUhJRF9GRUFUVVJFX0FOU1dFUiwKKyBVSElEX0NSRUFURTIsCisgVUhJRF9JTlBVVDIsCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB1aGlkX2NyZWF0ZV9yZXEgewogIF9fdTggbmFtZVsxMjhdOwogIF9fdTggcGh5c1s2NF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdW5pcVs2NF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggX191c2VyICpyZF9kYXRhOwogIF9fdTE2IHJkX3NpemU7CiAgX191MTYgYnVzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB2ZW5kb3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHByb2R1Y3Q7CiAgX191MzIgdmVyc2lvbjsKICBfX3UzMiBjb3VudHJ5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB1aGlkX2NyZWF0ZTJfcmVxIHsKKyBfX3U4IG5hbWVbMTI4XTsKKyBfX3U4IHBoeXNbNjRdOworIF9fdTggdW5pcVs2NF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IHJkX3NpemU7CisgX191MTYgYnVzOworIF9fdTMyIHZlbmRvcjsKKyBfX3UzMiBwcm9kdWN0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB2ZXJzaW9uOworIF9fdTMyIGNvdW50cnk7CisgX191OCByZF9kYXRhW0hJRF9NQVhfREVTQ1JJUFRPUl9TSVpFXTsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVUhJRF9EQVRBX01BWCA0MDk2CiBlbnVtIHVoaWRfcmVwb3J0X3R5cGUgewogIFVISURfRkVBVFVSRV9SRVBPUlQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFVISURfT1VUUFVUX1JFUE9SVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVUhJRF9JTlBVVF9SRVBPUlQsCiB9Owogc3RydWN0IHVoaWRfaW5wdXRfcmVxIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkYXRhW1VISURfREFUQV9NQVhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBzaXplOwogfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci1zdHJ1Y3QgdWhpZF9vdXRwdXRfcmVxIHsKK3N0cnVjdCB1aGlkX2lucHV0Ml9yZXEgeworIF9fdTE2IHNpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZGF0YVtVSElEX0RBVEFfTUFYXTsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworc3RydWN0IHVoaWRfb3V0cHV0X3JlcSB7CisgX191OCBkYXRhW1VISURfREFUQV9NQVhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBzaXplOwogIF9fdTggcnR5cGU7CiB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdWhpZF9vdXRwdXRfZXZfcmVxIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgdHlwZTsKICBfX3UxNiBjb2RlOwogIF9fczMyIHZhbHVlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB1aGlkX2ZlYXR1cmVfcmVxIHsKICBfX3UzMiBpZDsKICBfX3U4IHJudW07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcnR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CiBzdHJ1Y3QgdWhpZF9mZWF0dXJlX2Fuc3dlcl9yZXEgewogIF9fdTMyIGlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBlcnI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHNpemU7CiAgX191OCBkYXRhW1VISURfREFUQV9NQVhdOwogfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHVoaWRfZXZlbnQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIHVuaW9uIHsKICBzdHJ1Y3QgdWhpZF9jcmVhdGVfcmVxIGNyZWF0ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHVoaWRfaW5wdXRfcmVxIGlucHV0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdWhpZF9vdXRwdXRfcmVxIG91dHB1dDsKICBzdHJ1Y3QgdWhpZF9vdXRwdXRfZXZfcmVxIG91dHB1dF9ldjsKICBzdHJ1Y3QgdWhpZF9mZWF0dXJlX3JlcSBmZWF0dXJlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdWhpZF9mZWF0dXJlX2Fuc3dlcl9yZXEgZmVhdHVyZV9hbnN3ZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB1aGlkX2NyZWF0ZTJfcmVxIGNyZWF0ZTI7Cisgc3RydWN0IHVoaWRfaW5wdXQyX3JlcSBpbnB1dDI7CiAgfSB1OwogfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdWlucHV0LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VpbnB1dC5oCmluZGV4IDZhZDAzMzQuLmY2MjI4MjIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdWlucHV0LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC91aW5wdXQuaApAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFVJTlBVVF9WRVJTSU9OIDMKKyNkZWZpbmUgVUlOUFVUX1ZFUlNJT04gNAogc3RydWN0IHVpbnB1dF9mZl91cGxvYWQgewogIF9fdTMyIHJlcXVlc3RfaWQ7CiAgX19zMzIgcmV0dmFsOwpAQCAtNTgsMjEgKzU4LDIyIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVSV9CRUdJTl9GRl9FUkFTRSBfSU9XUihVSU5QVVRfSU9DVExfQkFTRSwgMjAyLCBzdHJ1Y3QgdWlucHV0X2ZmX2VyYXNlKQogI2RlZmluZSBVSV9FTkRfRkZfRVJBU0UgX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMjAzLCBzdHJ1Y3QgdWlucHV0X2ZmX2VyYXNlKQorI2RlZmluZSBVSV9HRVRfU1lTTkFNRShsZW4pIF9JT0MoX0lPQ19SRUFELCBVSU5QVVRfSU9DVExfQkFTRSwgMzAwLCBsZW4pCiAjZGVmaW5lIEVWX1VJTlBVVCAweDAxMDEKLSNkZWZpbmUgVUlfRkZfVVBMT0FEIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVJX0ZGX1VQTE9BRCAxCiAjZGVmaW5lIFVJX0ZGX0VSQVNFIDIKICNkZWZpbmUgVUlOUFVUX01BWF9OQU1FX1NJWkUgODAKIHN0cnVjdCB1aW5wdXRfdXNlcl9kZXYgewotIGNoYXIgbmFtZVtVSU5QVVRfTUFYX05BTUVfU0laRV07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGNoYXIgbmFtZVtVSU5QVVRfTUFYX05BTUVfU0laRV07CiAgc3RydWN0IGlucHV0X2lkIGlkOwogIF9fdTMyIGZmX2VmZmVjdHNfbWF4OwogIF9fczMyIGFic21heFtBQlNfQ05UXTsKLSBfX3MzMiBhYnNtaW5bQUJTX0NOVF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczMyIGFic21pbltBQlNfQ05UXTsKICBfX3MzMiBhYnNmdXp6W0FCU19DTlRdOwogIF9fczMyIGFic2ZsYXRbQUJTX0NOVF07CiB9OwotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYi9jZGMtd2RtLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYi9jZGMtd2RtLmgKaW5kZXggZTE3MGY1OS4uMjM4NTViZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC91c2IvY2RjLXdkbS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdXNiL2NkYy13ZG0uaApAQCAtMTgsNiArMTgsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9VQVBJX19MSU5VWF9VU0JfQ0RDX1dETV9ICiAjZGVmaW5lIF9VQVBJX19MSU5VWF9VU0JfQ0RDX1dETV9ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNkZWZpbmUgSU9DVExfV0RNX01BWF9DT01NQU5EIF9JT1IoJ0gnLCAweEEwLCBfX3UxNikKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC91c2IvY2RjLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYi9jZGMuaAppbmRleCAxNzI3OGUxLi42OThkOWVjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYi9jZGMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYi9jZGMuaApAQCAtNjIsMzEyICs2MiwzMjMgQEAKICNkZWZpbmUgVVNCX0NEQ19OQ01fVFlQRSAweDFhCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfQ0RDX01CSU1fVFlQRSAweDFiCisjZGVmaW5lIFVTQl9DRENfTUJJTV9FWFRFTkRFRF9UWVBFIDB4MWMKIHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIHsKICBfX3U4IGJMZW5ndGg7Ci0gX191OCBiRGVzY3JpcHRvclR5cGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYkRlc2NyaXB0b3JUeXBlOwogIF9fdTggYkRlc2NyaXB0b3JTdWJUeXBlOwogIF9fbGUxNiBiY2RDREM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLXN0cnVjdCB1c2JfY2RjX2NhbGxfbWdtdF9kZXNjcmlwdG9yIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdXNiX2NkY19jYWxsX21nbXRfZGVzY3JpcHRvciB7CiAgX191OCBiTGVuZ3RoOwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwogIF9fdTggYkRlc2NyaXB0b3JTdWJUeXBlOwotIF9fdTggYm1DYXBhYmlsaXRpZXM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYm1DYXBhYmlsaXRpZXM7CiAjZGVmaW5lIFVTQl9DRENfQ0FMTF9NR01UX0NBUF9DQUxMX01HTVQgMHgwMQogI2RlZmluZSBVU0JfQ0RDX0NBTExfTUdNVF9DQVBfREFUQV9JTlRGIDB4MDIKICBfX3U4IGJEYXRhSW50ZXJmYWNlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBzdHJ1Y3QgdXNiX2NkY19hY21fZGVzY3JpcHRvciB7CiAgX191OCBiTGVuZ3RoOwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwotIF9fdTggYkRlc2NyaXB0b3JTdWJUeXBlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJEZXNjcmlwdG9yU3ViVHlwZTsKICBfX3U4IGJtQ2FwYWJpbGl0aWVzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIFVTQl9DRENfQ09NTV9GRUFUVVJFIDB4MDEKLSNkZWZpbmUgVVNCX0NEQ19DQVBfTElORSAweDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfQ0RDX0NBUF9MSU5FIDB4MDIKICNkZWZpbmUgVVNCX0NEQ19DQVBfQlJLIDB4MDQKICNkZWZpbmUgVVNCX0NEQ19DQVBfTk9USUZZIDB4MDgKIHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgewotIF9fdTggYkxlbmd0aDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBiTGVuZ3RoOwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwogIF9fdTggYkRlc2NyaXB0b3JTdWJUeXBlOwogIF9fdTggYk1hc3RlckludGVyZmFjZTA7Ci0gX191OCBiU2xhdmVJbnRlcmZhY2UwOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJTbGF2ZUludGVyZmFjZTA7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIHN0cnVjdCB1c2JfY2RjX2NvdW50cnlfZnVuY3Rpb25hbF9kZXNjIHsKICBfX3U4IGJMZW5ndGg7Ci0gX191OCBiRGVzY3JpcHRvclR5cGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYkRlc2NyaXB0b3JUeXBlOwogIF9fdTggYkRlc2NyaXB0b3JTdWJUeXBlOwogIF9fdTggaUNvdW50cnlDb2RlUmVsRGF0ZTsKICBfX2xlMTYgd0NvdW50eUNvZGUwOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBzdHJ1Y3QgdXNiX2NkY19uZXR3b3JrX3Rlcm1pbmFsX2Rlc2MgewogIF9fdTggYkxlbmd0aDsKICBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKLSBfX3U4IGJEZXNjcmlwdG9yU3ViVHlwZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBiRGVzY3JpcHRvclN1YlR5cGU7CiAgX191OCBiRW50aXR5SWQ7CiAgX191OCBpTmFtZTsKICBfX3U4IGJDaGFubmVsSW5kZXg7Ci0gX191OCBiUGh5c2ljYWxJbnRlcmZhY2U7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYlBoeXNpY2FsSW50ZXJmYWNlOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBzdHJ1Y3QgdXNiX2NkY19ldGhlcl9kZXNjIHsKICBfX3U4IGJMZW5ndGg7Ci0gX191OCBiRGVzY3JpcHRvclR5cGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYkRlc2NyaXB0b3JUeXBlOwogIF9fdTggYkRlc2NyaXB0b3JTdWJUeXBlOwogIF9fdTggaU1BQ0FkZHJlc3M7CiAgX19sZTMyIGJtRXRoZXJuZXRTdGF0aXN0aWNzOwotIF9fbGUxNiB3TWF4U2VnbWVudFNpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiB3TWF4U2VnbWVudFNpemU7CiAgX19sZTE2IHdOdW1iZXJNQ0ZpbHRlcnM7CiAgX191OCBiTnVtYmVyUG93ZXJGaWx0ZXJzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci1zdHJ1Y3QgdXNiX2NkY19kbW1fZGVzYyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHVzYl9jZGNfZG1tX2Rlc2MgewogIF9fdTggYkZ1bmN0aW9uTGVuZ3RoOwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwogIF9fdTggYkRlc2NyaXB0b3JTdWJ0eXBlOwotIF9fdTE2IGJjZFZlcnNpb247CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IGJjZFZlcnNpb247CiAgX19sZTE2IHdNYXhDb21tYW5kOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBzdHJ1Y3QgdXNiX2NkY19tZGxtX2Rlc2MgewotIF9fdTggYkxlbmd0aDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBiTGVuZ3RoOwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwogIF9fdTggYkRlc2NyaXB0b3JTdWJUeXBlOwogIF9fbGUxNiBiY2RWZXJzaW9uOwotIF9fdTggYkdVSURbMTZdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJHVUlEWzE2XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogc3RydWN0IHVzYl9jZGNfbWRsbV9kZXRhaWxfZGVzYyB7CiAgX191OCBiTGVuZ3RoOwotIF9fdTggYkRlc2NyaXB0b3JUeXBlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKICBfX3U4IGJEZXNjcmlwdG9yU3ViVHlwZTsKICBfX3U4IGJHdWlkRGVzY3JpcHRvclR5cGU7CiAgX191OCBiRGV0YWlsRGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogc3RydWN0IHVzYl9jZGNfb2JleF9kZXNjIHsKICBfX3U4IGJMZW5ndGg7CiAgX191OCBiRGVzY3JpcHRvclR5cGU7Ci0gX191OCBiRGVzY3JpcHRvclN1YlR5cGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYkRlc2NyaXB0b3JTdWJUeXBlOwogIF9fbGUxNiBiY2RWZXJzaW9uOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBzdHJ1Y3QgdXNiX2NkY19uY21fZGVzYyB7Ci0gX191OCBiTGVuZ3RoOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJMZW5ndGg7CiAgX191OCBiRGVzY3JpcHRvclR5cGU7CiAgX191OCBiRGVzY3JpcHRvclN1YlR5cGU7CiAgX19sZTE2IGJjZE5jbVZlcnNpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYm1OZXR3b3JrQ2FwYWJpbGl0aWVzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CitzdHJ1Y3QgdXNiX2NkY19tYmltX2Rlc2MgeworIF9fdTggYkxlbmd0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBiRGVzY3JpcHRvclR5cGU7CisgX191OCBiRGVzY3JpcHRvclN1YlR5cGU7CisgX19sZTE2IGJjZE1CSU1WZXJzaW9uOworIF9fbGUxNiB3TWF4Q29udHJvbE1lc3NhZ2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYk51bWJlckZpbHRlcnM7CisgX191OCBiTWF4RmlsdGVyU2l6ZTsKKyBfX2xlMTYgd01heFNlZ21lbnRTaXplOwogIF9fdTggYm1OZXR3b3JrQ2FwYWJpbGl0aWVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotc3RydWN0IHVzYl9jZGNfbWJpbV9kZXNjIHsKK3N0cnVjdCB1c2JfY2RjX21iaW1fZXh0ZW5kZWRfZGVzYyB7CiAgX191OCBiTGVuZ3RoOwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGJEZXNjcmlwdG9yU3ViVHlwZTsKLSBfX2xlMTYgYmNkTUJJTVZlcnNpb247Ci0gX19sZTE2IHdNYXhDb250cm9sTWVzc2FnZTsKLSBfX3U4IGJOdW1iZXJGaWx0ZXJzOworIF9fbGUxNiBiY2RNQklNRXh0ZW5kZWRWZXJzaW9uOworIF9fdTggYk1heE91dHN0YW5kaW5nQ29tbWFuZE1lc3NhZ2VzOworIF9fbGUxNiB3TVRVOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBfX3U4IGJNYXhGaWx0ZXJTaXplOwotIF9fbGUxNiB3TWF4U2VnbWVudFNpemU7Ci0gX191OCBibU5ldHdvcmtDYXBhYmlsaXRpZXM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQl9DRENfU0VORF9FTkNBUFNVTEFURURfQ09NTUFORCAweDAwCiAjZGVmaW5lIFVTQl9DRENfR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRSAweDAxCiAjZGVmaW5lIFVTQl9DRENfUkVRX1NFVF9MSU5FX0NPRElORyAweDIwCi0jZGVmaW5lIFVTQl9DRENfUkVRX0dFVF9MSU5FX0NPRElORyAweDIxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfQ0RDX1JFUV9HRVRfTElORV9DT0RJTkcgMHgyMQogI2RlZmluZSBVU0JfQ0RDX1JFUV9TRVRfQ09OVFJPTF9MSU5FX1NUQVRFIDB4MjIKICNkZWZpbmUgVVNCX0NEQ19SRVFfU0VORF9CUkVBSyAweDIzCiAjZGVmaW5lIFVTQl9DRENfU0VUX0VUSEVSTkVUX01VTFRJQ0FTVF9GSUxURVJTIDB4NDAKLSNkZWZpbmUgVVNCX0NEQ19TRVRfRVRIRVJORVRfUE1fUEFUVEVSTl9GSUxURVIgMHg0MQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0NEQ19TRVRfRVRIRVJORVRfUE1fUEFUVEVSTl9GSUxURVIgMHg0MQogI2RlZmluZSBVU0JfQ0RDX0dFVF9FVEhFUk5FVF9QTV9QQVRURVJOX0ZJTFRFUiAweDQyCiAjZGVmaW5lIFVTQl9DRENfU0VUX0VUSEVSTkVUX1BBQ0tFVF9GSUxURVIgMHg0MwogI2RlZmluZSBVU0JfQ0RDX0dFVF9FVEhFUk5FVF9TVEFUSVNUSUMgMHg0NAotI2RlZmluZSBVU0JfQ0RDX0dFVF9OVEJfUEFSQU1FVEVSUyAweDgwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfQ0RDX0dFVF9OVEJfUEFSQU1FVEVSUyAweDgwCiAjZGVmaW5lIFVTQl9DRENfR0VUX05FVF9BRERSRVNTIDB4ODEKICNkZWZpbmUgVVNCX0NEQ19TRVRfTkVUX0FERFJFU1MgMHg4MgogI2RlZmluZSBVU0JfQ0RDX0dFVF9OVEJfRk9STUFUIDB4ODMKLSNkZWZpbmUgVVNCX0NEQ19TRVRfTlRCX0ZPUk1BVCAweDg0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfQ0RDX1NFVF9OVEJfRk9STUFUIDB4ODQKICNkZWZpbmUgVVNCX0NEQ19HRVRfTlRCX0lOUFVUX1NJWkUgMHg4NQogI2RlZmluZSBVU0JfQ0RDX1NFVF9OVEJfSU5QVVRfU0laRSAweDg2CiAjZGVmaW5lIFVTQl9DRENfR0VUX01BWF9EQVRBR1JBTV9TSVpFIDB4ODcKLSNkZWZpbmUgVVNCX0NEQ19TRVRfTUFYX0RBVEFHUkFNX1NJWkUgMHg4OAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0NEQ19TRVRfTUFYX0RBVEFHUkFNX1NJWkUgMHg4OAogI2RlZmluZSBVU0JfQ0RDX0dFVF9DUkNfTU9ERSAweDg5CiAjZGVmaW5lIFVTQl9DRENfU0VUX0NSQ19NT0RFIDB4OGEKIHN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nIHsKLSBfX2xlMzIgZHdEVEVSYXRlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgZHdEVEVSYXRlOwogIF9fdTggYkNoYXJGb3JtYXQ7CiAjZGVmaW5lIFVTQl9DRENfMV9TVE9QX0JJVFMgMAogI2RlZmluZSBVU0JfQ0RDXzFfNV9TVE9QX0JJVFMgMQotI2RlZmluZSBVU0JfQ0RDXzJfU1RPUF9CSVRTIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9DRENfMl9TVE9QX0JJVFMgMgogIF9fdTggYlBhcml0eVR5cGU7CiAjZGVmaW5lIFVTQl9DRENfTk9fUEFSSVRZIDAKICNkZWZpbmUgVVNCX0NEQ19PRERfUEFSSVRZIDEKLSNkZWZpbmUgVVNCX0NEQ19FVkVOX1BBUklUWSAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfQ0RDX0VWRU5fUEFSSVRZIDIKICNkZWZpbmUgVVNCX0NEQ19NQVJLX1BBUklUWSAzCiAjZGVmaW5lIFVTQl9DRENfU1BBQ0VfUEFSSVRZIDQKICBfX3U4IGJEYXRhQml0czsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogI2RlZmluZSBVU0JfQ0RDX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTICgxIDw8IDApCiAjZGVmaW5lIFVTQl9DRENfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCAoMSA8PCAxKQogI2RlZmluZSBVU0JfQ0RDX1BBQ0tFVF9UWVBFX0RJUkVDVEVEICgxIDw8IDIpCi0jZGVmaW5lIFVTQl9DRENfUEFDS0VUX1RZUEVfQlJPQURDQVNUICgxIDw8IDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfQ0RDX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVCAoMSA8PCAzKQogI2RlZmluZSBVU0JfQ0RDX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCAoMSA8PCA0KQogI2RlZmluZSBVU0JfQ0RDX05PVElGWV9ORVRXT1JLX0NPTk5FQ1RJT04gMHgwMAogI2RlZmluZSBVU0JfQ0RDX05PVElGWV9SRVNQT05TRV9BVkFJTEFCTEUgMHgwMQotI2RlZmluZSBVU0JfQ0RDX05PVElGWV9TRVJJQUxfU1RBVEUgMHgyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0NEQ19OT1RJRllfU0VSSUFMX1NUQVRFIDB4MjAKICNkZWZpbmUgVVNCX0NEQ19OT1RJRllfU1BFRURfQ0hBTkdFIDB4MmEKIHN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbiB7CiAgX191OCBibVJlcXVlc3RUeXBlOwotIF9fdTggYk5vdGlmaWNhdGlvblR5cGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYk5vdGlmaWNhdGlvblR5cGU7CiAgX19sZTE2IHdWYWx1ZTsKICBfX2xlMTYgd0luZGV4OwogIF9fbGUxNiB3TGVuZ3RoOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBzdHJ1Y3QgdXNiX2NkY19zcGVlZF9jaGFuZ2UgewogIF9fbGUzMiBETEJpdFJSYXRlOwogIF9fbGUzMiBVTEJpdFJhdGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIHN0cnVjdCB1c2JfY2RjX25jbV9udGJfcGFyYW1ldGVycyB7CiAgX19sZTE2IHdMZW5ndGg7CiAgX19sZTE2IGJtTnRiRm9ybWF0c1N1cHBvcnRlZDsKLSBfX2xlMzIgZHdOdGJJbk1heFNpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBkd050YkluTWF4U2l6ZTsKICBfX2xlMTYgd05kcEluRGl2aXNvcjsKICBfX2xlMTYgd05kcEluUGF5bG9hZFJlbWFpbmRlcjsKICBfX2xlMTYgd05kcEluQWxpZ25tZW50OwotIF9fbGUxNiB3UGFkZGluZzE7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiB3UGFkZGluZzE7CiAgX19sZTMyIGR3TnRiT3V0TWF4U2l6ZTsKICBfX2xlMTYgd05kcE91dERpdmlzb3I7CiAgX19sZTE2IHdOZHBPdXRQYXlsb2FkUmVtYWluZGVyOwotIF9fbGUxNiB3TmRwT3V0QWxpZ25tZW50OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgd05kcE91dEFsaWdubWVudDsKICBfX2xlMTYgd050Yk91dE1heERhdGFncmFtczsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEgxNl9TSUdOIDB4NDg0RDQzNEUKLSNkZWZpbmUgVVNCX0NEQ19OQ01fTlRIMzJfU0lHTiAweDY4NkQ2MzZFCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfQ0RDX05DTV9OVEgzMl9TSUdOIDB4Njg2RDYzNkUKIHN0cnVjdCB1c2JfY2RjX25jbV9udGgxNiB7CiAgX19sZTMyIGR3U2lnbmF0dXJlOwogIF9fbGUxNiB3SGVhZGVyTGVuZ3RoOwotIF9fbGUxNiB3U2VxdWVuY2U7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiB3U2VxdWVuY2U7CiAgX19sZTE2IHdCbG9ja0xlbmd0aDsKICBfX2xlMTYgd05kcEluZGV4OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci1zdHJ1Y3QgdXNiX2NkY19uY21fbnRoMzIgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB1c2JfY2RjX25jbV9udGgzMiB7CiAgX19sZTMyIGR3U2lnbmF0dXJlOwogIF9fbGUxNiB3SGVhZGVyTGVuZ3RoOwogIF9fbGUxNiB3U2VxdWVuY2U7Ci0gX19sZTMyIGR3QmxvY2tMZW5ndGg7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBkd0Jsb2NrTGVuZ3RoOwogIF9fbGUzMiBkd05kcEluZGV4OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIFVTQl9DRENfTkNNX05EUDE2X0NSQ19TSUdOIDB4MzE0RDQzNEUKLSNkZWZpbmUgVVNCX0NEQ19OQ01fTkRQMTZfTk9DUkNfU0lHTiAweDMwNEQ0MzRFCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfQ0RDX05DTV9ORFAxNl9OT0NSQ19TSUdOIDB4MzA0RDQzNEUKICNkZWZpbmUgVVNCX0NEQ19OQ01fTkRQMzJfQ1JDX1NJR04gMHgzMTZENjM2RQogI2RlZmluZSBVU0JfQ0RDX05DTV9ORFAzMl9OT0NSQ19TSUdOIDB4MzA2RDYzNkUKICNkZWZpbmUgVVNCX0NEQ19NQklNX05EUDE2X0lQU19TSUdOIDB4MDA1MzUwNDkKLSNkZWZpbmUgVVNCX0NEQ19NQklNX05EUDMyX0lQU19TSUdOIDB4MDA3MzcwNjkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9DRENfTUJJTV9ORFAzMl9JUFNfU0lHTiAweDAwNzM3MDY5CiAjZGVmaW5lIFVTQl9DRENfTUJJTV9ORFAxNl9EU1NfU0lHTiAweDAwNTM1MzQ0CiAjZGVmaW5lIFVTQl9DRENfTUJJTV9ORFAzMl9EU1NfU0lHTiAweDAwNzM3MzY0CiBzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMTYgewotIF9fbGUxNiB3RGF0YWdyYW1JbmRleDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTE2IHdEYXRhZ3JhbUluZGV4OwogIF9fbGUxNiB3RGF0YWdyYW1MZW5ndGg7CiB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKIHN0cnVjdCB1c2JfY2RjX25jbV9uZHAxNiB7Ci0gX19sZTMyIGR3U2lnbmF0dXJlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgZHdTaWduYXR1cmU7CiAgX19sZTE2IHdMZW5ndGg7CiAgX19sZTE2IHdOZXh0TmRwSW5kZXg7CiAgc3RydWN0IHVzYl9jZGNfbmNtX2RwZTE2IGRwZTE2WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMzIgewogIF9fbGUzMiBkd0RhdGFncmFtSW5kZXg7CiAgX19sZTMyIGR3RGF0YWdyYW1MZW5ndGg7Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKIHN0cnVjdCB1c2JfY2RjX25jbV9uZHAzMiB7CiAgX19sZTMyIGR3U2lnbmF0dXJlOwogIF9fbGUxNiB3TGVuZ3RoOwotIF9fbGUxNiB3UmVzZXJ2ZWQ2OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgd1Jlc2VydmVkNjsKICBfX2xlMzIgZHdOZXh0TmRwSW5kZXg7CiAgX19sZTMyIGR3UmVzZXJ2ZWQxMjsKICBzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMzIgZHBlMzJbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKICNkZWZpbmUgVVNCX0NEQ19OQ01fTkRQMTZfSU5ERVhfTUlOIDB4MDAwQwogI2RlZmluZSBVU0JfQ0RDX05DTV9ORFAzMl9JTkRFWF9NSU4gMHgwMDEwCiAjZGVmaW5lIFVTQl9DRENfTkNNX0RBVEFHUkFNX0ZPUk1BVF9DUkMgMHgzMAotI2RlZmluZSBVU0JfQ0RDX05DTV9EQVRBR1JBTV9GT1JNQVRfTk9DUkMgMFgzMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0NEQ19OQ01fREFUQUdSQU1fRk9STUFUX05PQ1JDIDBYMzEKICNkZWZpbmUgVVNCX0NEQ19OQ01fUFJPVE9fQ09ERV9OT19FTkNBUF9DT01NQU5EUyAweDAwCiAjZGVmaW5lIFVTQl9DRENfTkNNX1BST1RPX0NPREVfRVhURVJOX1BST1RPIDB4RkUKICNkZWZpbmUgVVNCX0NEQ19OQ01fTkNBUF9FVEhfRklMVEVSICgxIDw8IDApCi0jZGVmaW5lIFVTQl9DRENfTkNNX05DQVBfTkVUX0FERFJFU1MgKDEgPDwgMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9DRENfTkNNX05DQVBfTkVUX0FERFJFU1MgKDEgPDwgMSkKICNkZWZpbmUgVVNCX0NEQ19OQ01fTkNBUF9FTkNBUF9DT01NQU5EICgxIDw8IDIpCiAjZGVmaW5lIFVTQl9DRENfTkNNX05DQVBfTUFYX0RBVEFHUkFNX1NJWkUgKDEgPDwgMykKICNkZWZpbmUgVVNCX0NEQ19OQ01fTkNBUF9DUkNfTU9ERSAoMSA8PCA0KQotI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX05UQl9JTlBVVF9TSVpFICgxIDw8IDUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX05UQl9JTlBVVF9TSVpFICgxIDw8IDUpCiAjZGVmaW5lIFVTQl9DRENfTkNNX05UQjE2X1NVUFBPUlRFRCAoMSA8PCAwKQogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEIzMl9TVVBQT1JURUQgKDEgPDwgMSkKICNkZWZpbmUgVVNCX0NEQ19OQ01fTkRQX0FMSUdOX01JTl9TSVpFIDB4MDQKLSNkZWZpbmUgVVNCX0NEQ19OQ01fTlRCX01BWF9MRU5HVEggMHgxQwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0NEQ19OQ01fTlRCX01BWF9MRU5HVEggMHgxQwogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEIxNl9GT1JNQVQgMHgwMAogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEIzMl9GT1JNQVQgMHgwMQogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEJfTUlOX0lOX1NJWkUgMjA0OAotI2RlZmluZSBVU0JfQ0RDX05DTV9OVEJfTUlOX09VVF9TSVpFIDIwNDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9DRENfTkNNX05UQl9NSU5fT1VUX1NJWkUgMjA0OAogc3RydWN0IHVzYl9jZGNfbmNtX25kcF9pbnB1dF9zaXplIHsKICBfX2xlMzIgZHdOdGJJbk1heFNpemU7CiAgX19sZTE2IHdOdGJJbk1heERhdGFncmFtczsKLSBfX2xlMTYgd1Jlc2VydmVkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgd1Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIFVTQl9DRENfTkNNX0NSQ19OT1RfQVBQRU5ERUQgMHgwMAogI2RlZmluZSBVU0JfQ0RDX05DTV9DUkNfQVBQRU5ERUQgMHgwMQotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYi9mdW5jdGlvbmZzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYi9mdW5jdGlvbmZzLmgKaW5kZXggM2VhMTg1YS4uMzU5NTI5YyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC91c2IvZnVuY3Rpb25mcy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdXNiL2Z1bmN0aW9uZnMuaApAQCAtMjQsNTggKzI0LDY2IEBACiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogZW51bSB7CiAgRlVOQ1RJT05GU19ERVNDUklQVE9SU19NQUdJQyA9IDEsCi0gRlVOQ1RJT05GU19TVFJJTkdTX01BR0lDID0gMgorIEZVTkNUSU9ORlNfU1RSSU5HU19NQUdJQyA9IDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEZVTkNUSU9ORlNfREVTQ1JJUFRPUlNfTUFHSUNfVjIgPSAzLAorfTsKK2VudW0gZnVuY3Rpb25mc19mbGFncyB7CisgRlVOQ1RJT05GU19IQVNfRlNfREVTQyA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEZVTkNUSU9ORlNfSEFTX0hTX0RFU0MgPSAyLAorIEZVTkNUSU9ORlNfSEFTX1NTX0RFU0MgPSA0LAogfTsKIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcl9ub19hdWRpbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYkxlbmd0aDsKICBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBiRW5kcG9pbnRBZGRyZXNzOwogIF9fdTggYm1BdHRyaWJ1dGVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgd01heFBhY2tldFNpemU7CiAgX191OCBiSW50ZXJ2YWw7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIHN0cnVjdCB1c2JfZnVuY3Rpb25mc19kZXNjc19oZWFkIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTMyIG1hZ2ljOwogIF9fbGUzMiBsZW5ndGg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBmc19jb3VudDsKICBfX2xlMzIgaHNfY291bnQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotc3RydWN0IHVzYl9mdW5jdGlvbmZzX3N0cmluZ3NfaGVhZCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGRlcHJlY2F0ZWQpKTsKK3N0cnVjdCB1c2JfZnVuY3Rpb25mc19zdHJpbmdzX2hlYWQgewogIF9fbGUzMiBtYWdpYzsKICBfX2xlMzIgbGVuZ3RoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMzIgc3RyX2NvdW50OwogIF9fbGUzMiBsYW5nX2NvdW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiBlbnVtIHVzYl9mdW5jdGlvbmZzX2V2ZW50X3R5cGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGVU5DVElPTkZTX0JJTkQsCiAgRlVOQ1RJT05GU19VTkJJTkQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZVTkNUSU9ORlNfRU5BQkxFLAogIEZVTkNUSU9ORlNfRElTQUJMRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRlVOQ1RJT05GU19TRVRVUCwKICBGVU5DVElPTkZTX1NVU1BFTkQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZVTkNUSU9ORlNfUkVTVU1FCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB1c2JfZnVuY3Rpb25mc19ldmVudCB7CiAgdW5pb24gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IHNldHVwOwogIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCB0eXBlOwogIF9fdTggX3BhZFszXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogI2RlZmluZSBGVU5DVElPTkZTX0ZJRk9fU1RBVFVTIF9JTygnZycsIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGVU5DVElPTkZTX0ZJRk9fRkxVU0ggX0lPKCdnJywgMikKICNkZWZpbmUgRlVOQ1RJT05GU19DTEVBUl9IQUxUIF9JTygnZycsIDMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGVU5DVElPTkZTX0lOVEVSRkFDRV9SRVZNQVAgX0lPKCdnJywgMTI4KQogI2RlZmluZSBGVU5DVElPTkZTX0VORFBPSU5UX1JFVk1BUCBfSU8oJ2cnLCAxMjkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYmRldmljZV9mcy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC91c2JkZXZpY2VfZnMuaAppbmRleCAwYzE3ODFkLi4zNTlkMzUxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYmRldmljZV9mcy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdXNiZGV2aWNlX2ZzLmgKQEAgLTkxLDM3ICs5MSw0NyBAQAogIGludCBhY3R1YWxfbGVuZ3RoOwogIGludCBzdGFydF9mcmFtZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5pb24gewogIGludCBudW1iZXJfb2ZfcGFja2V0czsKKyB1bnNpZ25lZCBpbnQgc3RyZWFtX2lkOworIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBlcnJvcl9jb3VudDsKICB1bnNpZ25lZCBpbnQgc2lnbnI7CiAgdm9pZCBfX3VzZXIgKnVzZXJjb250ZXh0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdXNiZGV2ZnNfaXNvX3BhY2tldF9kZXNjIGlzb19mcmFtZV9kZXNjWzBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdXNiZGV2ZnNfaW9jdGwgewogIGludCBpZm5vOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgaW9jdGxfY29kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCBfX3VzZXIgKmRhdGE7CiB9Owogc3RydWN0IHVzYmRldmZzX2h1Yl9wb3J0aW5mbyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgbnBvcnRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIHBvcnQgWzEyN107CiB9OwogI2RlZmluZSBVU0JERVZGU19DQVBfWkVST19QQUNLRVQgMHgwMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVVNCREVWRlNfQ0FQX0JVTEtfQ09OVElOVUFUSU9OIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQkRFVkZTX0NBUF9OT19QQUNLRVRfU0laRV9MSU0gMHgwNAogI2RlZmluZSBVU0JERVZGU19DQVBfQlVMS19TQ0FUVEVSX0dBVEhFUiAweDA4CiAjZGVmaW5lIFVTQkRFVkZTX0RJU0NPTk5FQ1RfQ0xBSU1fSUZfRFJJVkVSIDB4MDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQkRFVkZTX0RJU0NPTk5FQ1RfQ0xBSU1fRVhDRVBUX0RSSVZFUiAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHVzYmRldmZzX2Rpc2Nvbm5lY3RfY2xhaW0gewogIHVuc2lnbmVkIGludCBpbnRlcmZhY2U7CiAgdW5zaWduZWQgaW50IGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIGRyaXZlcltVU0JERVZGU19NQVhEUklWRVJOQU1FICsgMV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCB1c2JkZXZmc19zdHJlYW1zIHsKKyB1bnNpZ25lZCBpbnQgbnVtX3N0cmVhbXM7CisgdW5zaWduZWQgaW50IG51bV9lcHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGNoYXIgZXBzWzBdOwogfTsKICNkZWZpbmUgVVNCREVWRlNfQ09OVFJPTCBfSU9XUignVScsIDAsIHN0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIpCiAjZGVmaW5lIFVTQkRFVkZTX0NPTlRST0wzMiBfSU9XUignVScsIDAsIHN0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIzMikKQEAgLTE2Miw0ICsxNzIsNyBAQAogI2RlZmluZSBVU0JERVZGU19HRVRfQ0FQQUJJTElUSUVTIF9JT1IoJ1UnLCAyNiwgX191MzIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JERVZGU19ESVNDT05ORUNUX0NMQUlNIF9JT1IoJ1UnLCAyNywgc3RydWN0IHVzYmRldmZzX2Rpc2Nvbm5lY3RfY2xhaW0pCisjZGVmaW5lIFVTQkRFVkZTX0FMTE9DX1NUUkVBTVMgX0lPUignVScsIDI4LCBzdHJ1Y3QgdXNiZGV2ZnNfc3RyZWFtcykKKyNkZWZpbmUgVVNCREVWRlNfRlJFRV9TVFJFQU1TIF9JT1IoJ1UnLCAyOSwgc3RydWN0IHVzYmRldmZzX3N0cmVhbXMpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYmlwLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYmlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMzZjI5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdXNiaXAuaApAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9VQVBJX0xJTlVYX1VTQklQX0gKKyNkZWZpbmUgX1VBUElfTElOVVhfVVNCSVBfSAorZW51bSB1c2JpcF9kZXZpY2Vfc3RhdHVzIHsKKyBTREVWX1NUX0FWQUlMQUJMRSA9IDB4MDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFNERVZfU1RfVVNFRCwKKyBTREVWX1NUX0VSUk9SLAorIFZERVZfU1RfTlVMTCwKKyBWREVWX1NUX05PVEFTU0lHTkVELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWREVWX1NUX1VTRUQsCisgVkRFVl9TVF9FUlJPUgorfTsKKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdjRsMi1jb21tb24uaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdjRsMi1jb21tb24uaAppbmRleCA4MTRkOTYwLi5lYWYzYmZjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItY29tbW9uLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLWNvbW1vbi5oCkBAIC0xOCwyOCArMTgsMzggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX1Y0TDJfQ09NTU9OX18KICNkZWZpbmUgX19WNEwyX0NPTU1PTl9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNkZWZpbmUgVjRMMl9TRUxfVEdUX0NST1AgMHgwMDAwCi0jZGVmaW5lIFY0TDJfU0VMX1RHVF9DUk9QX0RFRkFVTFQgMHgwMDAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1NFTF9UR1RfQ1JPUF9ERUZBVUxUIDB4MDAwMQogI2RlZmluZSBWNEwyX1NFTF9UR1RfQ1JPUF9CT1VORFMgMHgwMDAyCiAjZGVmaW5lIFY0TDJfU0VMX1RHVF9DT01QT1NFIDB4MDEwMAogI2RlZmluZSBWNEwyX1NFTF9UR1RfQ09NUE9TRV9ERUZBVUxUIDB4MDEwMQotI2RlZmluZSBWNEwyX1NFTF9UR1RfQ09NUE9TRV9CT1VORFMgMHgwMTAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1NFTF9UR1RfQ09NUE9TRV9CT1VORFMgMHgwMTAyCiAjZGVmaW5lIFY0TDJfU0VMX1RHVF9DT01QT1NFX1BBRERFRCAweDAxMDMKICNkZWZpbmUgVjRMMl9TRUxfVEdUX0NST1BfQUNUSVZFIFY0TDJfU0VMX1RHVF9DUk9QCiAjZGVmaW5lIFY0TDJfU0VMX1RHVF9DT01QT1NFX0FDVElWRSBWNEwyX1NFTF9UR1RfQ09NUE9TRQotI2RlZmluZSBWNEwyX1NVQkRFVl9TRUxfVEdUX0NST1BfQUNUVUFMIFY0TDJfU0VMX1RHVF9DUk9QCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1NVQkRFVl9TRUxfVEdUX0NST1BfQUNUVUFMIFY0TDJfU0VMX1RHVF9DUk9QCiAjZGVmaW5lIFY0TDJfU1VCREVWX1NFTF9UR1RfQ09NUE9TRV9BQ1RVQUwgVjRMMl9TRUxfVEdUX0NPTVBPU0UKICNkZWZpbmUgVjRMMl9TVUJERVZfU0VMX1RHVF9DUk9QX0JPVU5EUyBWNEwyX1NFTF9UR1RfQ1JPUF9CT1VORFMKICNkZWZpbmUgVjRMMl9TVUJERVZfU0VMX1RHVF9DT01QT1NFX0JPVU5EUyBWNEwyX1NFTF9UR1RfQ09NUE9TRV9CT1VORFMKLSNkZWZpbmUgVjRMMl9TRUxfRkxBR19HRSAoMSA8PCAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9TRUxfRkxBR19HRSAoMSA8PCAwKQogI2RlZmluZSBWNEwyX1NFTF9GTEFHX0xFICgxIDw8IDEpCiAjZGVmaW5lIFY0TDJfU0VMX0ZMQUdfS0VFUF9DT05GSUcgKDEgPDwgMikKICNkZWZpbmUgVjRMMl9TVUJERVZfU0VMX0ZMQUdfU0laRV9HRSBWNEwyX1NFTF9GTEFHX0dFCi0jZGVmaW5lIFY0TDJfU1VCREVWX1NFTF9GTEFHX1NJWkVfTEUgVjRMMl9TRUxfRkxBR19MRQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9TVUJERVZfU0VMX0ZMQUdfU0laRV9MRSBWNEwyX1NFTF9GTEFHX0xFCiAjZGVmaW5lIFY0TDJfU1VCREVWX1NFTF9GTEFHX0tFRVBfQ09ORklHIFY0TDJfU0VMX0ZMQUdfS0VFUF9DT05GSUcKK3N0cnVjdCB2NGwyX2VkaWQgeworIF9fdTMyIHBhZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgc3RhcnRfYmxvY2s7CisgX191MzIgYmxvY2tzOworIF9fdTMyIHJlc2VydmVkWzVdOworIF9fdTggKmVkaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLWNvbnRyb2xzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItY29udHJvbHMuaAppbmRleCAyMjM2ZmY3Li5hYmFmMTk5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItY29udHJvbHMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItY29udHJvbHMuaApAQCAtMzEsOTAwICszMSw5MjEgQEAKICNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX0RWIDB4MDBhMDAwMDAKICNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX0ZNX1JYIDB4MDBhMTAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19SRl9UVU5FUiAweDAwYTIwMDAwCiAjZGVmaW5lIFY0TDJfQ0lEX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19VU0VSIHwgMHg5MDApCiAjZGVmaW5lIFY0TDJfQ0lEX1VTRVJfQkFTRSBWNEwyX0NJRF9CQVNFCiAjZGVmaW5lIFY0TDJfQ0lEX1VTRVJfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19VU0VSIHwgMSkKLSNkZWZpbmUgVjRMMl9DSURfQlJJR0hUTkVTUyAoVjRMMl9DSURfQkFTRSswKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfQlJJR0hUTkVTUyAoVjRMMl9DSURfQkFTRSswKQogI2RlZmluZSBWNEwyX0NJRF9DT05UUkFTVCAoVjRMMl9DSURfQkFTRSsxKQogI2RlZmluZSBWNEwyX0NJRF9TQVRVUkFUSU9OIChWNEwyX0NJRF9CQVNFKzIpCiAjZGVmaW5lIFY0TDJfQ0lEX0hVRSAoVjRMMl9DSURfQkFTRSszKQotI2RlZmluZSBWNEwyX0NJRF9BVURJT19WT0xVTUUgKFY0TDJfQ0lEX0JBU0UrNSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSAoVjRMMl9DSURfQkFTRSs1KQogI2RlZmluZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFIChWNEwyX0NJRF9CQVNFKzYpCiAjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0JBU1MgKFY0TDJfQ0lEX0JBU0UrNykKICNkZWZpbmUgVjRMMl9DSURfQVVESU9fVFJFQkxFIChWNEwyX0NJRF9CQVNFKzgpCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX01VVEUgKFY0TDJfQ0lEX0JBU0UrOSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX01VVEUgKFY0TDJfQ0lEX0JBU0UrOSkKICNkZWZpbmUgVjRMMl9DSURfQVVESU9fTE9VRE5FU1MgKFY0TDJfQ0lEX0JBU0UrMTApCiAjZGVmaW5lIFY0TDJfQ0lEX0JMQUNLX0xFVkVMIChWNEwyX0NJRF9CQVNFKzExKQogI2RlZmluZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0UgKFY0TDJfQ0lEX0JBU0UrMTIpCi0jZGVmaW5lIFY0TDJfQ0lEX0RPX1dISVRFX0JBTEFOQ0UgKFY0TDJfQ0lEX0JBU0UrMTMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFIChWNEwyX0NJRF9CQVNFKzEzKQogI2RlZmluZSBWNEwyX0NJRF9SRURfQkFMQU5DRSAoVjRMMl9DSURfQkFTRSsxNCkKICNkZWZpbmUgVjRMMl9DSURfQkxVRV9CQUxBTkNFIChWNEwyX0NJRF9CQVNFKzE1KQogI2RlZmluZSBWNEwyX0NJRF9HQU1NQSAoVjRMMl9DSURfQkFTRSsxNikKLSNkZWZpbmUgVjRMMl9DSURfV0hJVEVORVNTIChWNEwyX0NJRF9HQU1NQSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX1dISVRFTkVTUyAoVjRMMl9DSURfR0FNTUEpCiAjZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFIChWNEwyX0NJRF9CQVNFKzE3KQogI2RlZmluZSBWNEwyX0NJRF9BVVRPR0FJTiAoVjRMMl9DSURfQkFTRSsxOCkKICNkZWZpbmUgVjRMMl9DSURfR0FJTiAoVjRMMl9DSURfQkFTRSsxOSkKLSNkZWZpbmUgVjRMMl9DSURfSEZMSVAgKFY0TDJfQ0lEX0JBU0UrMjApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9IRkxJUCAoVjRMMl9DSURfQkFTRSsyMCkKICNkZWZpbmUgVjRMMl9DSURfVkZMSVAgKFY0TDJfQ0lEX0JBU0UrMjEpCiAjZGVmaW5lIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZIChWNEwyX0NJRF9CQVNFKzI0KQogZW51bSB2NGwyX3Bvd2VyX2xpbmVfZnJlcXVlbmN5IHsKLSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9ESVNBQkxFRCA9IDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0RJU0FCTEVEID0gMCwKICBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaID0gMSwKICBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaID0gMiwKICBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9BVVRPID0gMywKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgVjRMMl9DSURfSFVFX0FVVE8gKFY0TDJfQ0lEX0JBU0UrMjUpCiAjZGVmaW5lIFY0TDJfQ0lEX1dISVRFX0JBTEFOQ0VfVEVNUEVSQVRVUkUgKFY0TDJfQ0lEX0JBU0UrMjYpCiAjZGVmaW5lIFY0TDJfQ0lEX1NIQVJQTkVTUyAoVjRMMl9DSURfQkFTRSsyNykKLSNkZWZpbmUgVjRMMl9DSURfQkFDS0xJR0hUX0NPTVBFTlNBVElPTiAoVjRMMl9DSURfQkFTRSsyOCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0JBQ0tMSUdIVF9DT01QRU5TQVRJT04gKFY0TDJfQ0lEX0JBU0UrMjgpCiAjZGVmaW5lIFY0TDJfQ0lEX0NIUk9NQV9BR0MgKFY0TDJfQ0lEX0JBU0UrMjkpCiAjZGVmaW5lIFY0TDJfQ0lEX0NPTE9SX0tJTExFUiAoVjRMMl9DSURfQkFTRSszMCkKICNkZWZpbmUgVjRMMl9DSURfQ09MT1JGWCAoVjRMMl9DSURfQkFTRSszMSkKLWVudW0gdjRsMl9jb2xvcmZ4IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHY0bDJfY29sb3JmeCB7CiAgVjRMMl9DT0xPUkZYX05PTkUgPSAwLAogIFY0TDJfQ09MT1JGWF9CVyA9IDEsCiAgVjRMMl9DT0xPUkZYX1NFUElBID0gMiwKLSBWNEwyX0NPTE9SRlhfTkVHQVRJVkUgPSAzLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX0NPTE9SRlhfTkVHQVRJVkUgPSAzLAogIFY0TDJfQ09MT1JGWF9FTUJPU1MgPSA0LAogIFY0TDJfQ09MT1JGWF9TS0VUQ0ggPSA1LAogIFY0TDJfQ09MT1JGWF9TS1lfQkxVRSA9IDYsCi0gVjRMMl9DT0xPUkZYX0dSQVNTX0dSRUVOID0gNywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9DT0xPUkZYX0dSQVNTX0dSRUVOID0gNywKICBWNEwyX0NPTE9SRlhfU0tJTl9XSElURU4gPSA4LAogIFY0TDJfQ09MT1JGWF9WSVZJRCA9IDksCiAgVjRMMl9DT0xPUkZYX0FRVUEgPSAxMCwKLSBWNEwyX0NPTE9SRlhfQVJUX0ZSRUVaRSA9IDExLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX0NPTE9SRlhfQVJUX0ZSRUVaRSA9IDExLAogIFY0TDJfQ09MT1JGWF9TSUxIT1VFVFRFID0gMTIsCiAgVjRMMl9DT0xPUkZYX1NPTEFSSVpBVElPTiA9IDEzLAogIFY0TDJfQ09MT1JGWF9BTlRJUVVFID0gMTQsCi0gVjRMMl9DT0xPUkZYX1NFVF9DQkNSID0gMTUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfQ09MT1JGWF9TRVRfQ0JDUiA9IDE1LAogfTsKICNkZWZpbmUgVjRMMl9DSURfQVVUT0JSSUdIVE5FU1MgKFY0TDJfQ0lEX0JBU0UrMzIpCiAjZGVmaW5lIFY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVIgKFY0TDJfQ0lEX0JBU0UrMzMpCi0jZGVmaW5lIFY0TDJfQ0lEX1JPVEFURSAoVjRMMl9DSURfQkFTRSszNCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX1JPVEFURSAoVjRMMl9DSURfQkFTRSszNCkKICNkZWZpbmUgVjRMMl9DSURfQkdfQ09MT1IgKFY0TDJfQ0lEX0JBU0UrMzUpCiAjZGVmaW5lIFY0TDJfQ0lEX0NIUk9NQV9HQUlOIChWNEwyX0NJRF9CQVNFKzM2KQogI2RlZmluZSBWNEwyX0NJRF9JTExVTUlOQVRPUlNfMSAoVjRMMl9DSURfQkFTRSszNykKLSNkZWZpbmUgVjRMMl9DSURfSUxMVU1JTkFUT1JTXzIgKFY0TDJfQ0lEX0JBU0UrMzgpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9JTExVTUlOQVRPUlNfMiAoVjRMMl9DSURfQkFTRSszOCkKICNkZWZpbmUgVjRMMl9DSURfTUlOX0JVRkZFUlNfRk9SX0NBUFRVUkUgKFY0TDJfQ0lEX0JBU0UrMzkpCiAjZGVmaW5lIFY0TDJfQ0lEX01JTl9CVUZGRVJTX0ZPUl9PVVRQVVQgKFY0TDJfQ0lEX0JBU0UrNDApCiAjZGVmaW5lIFY0TDJfQ0lEX0FMUEhBX0NPTVBPTkVOVCAoVjRMMl9DSURfQkFTRSs0MSkKLSNkZWZpbmUgVjRMMl9DSURfQ09MT1JGWF9DQkNSIChWNEwyX0NJRF9CQVNFKzQyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfQ09MT1JGWF9DQkNSIChWNEwyX0NJRF9CQVNFKzQyKQogI2RlZmluZSBWNEwyX0NJRF9MQVNUUDEgKFY0TDJfQ0lEX0JBU0UrNDMpCiAjZGVmaW5lIFY0TDJfQ0lEX1VTRVJfTUVZRV9CQVNFIChWNEwyX0NJRF9VU0VSX0JBU0UgKyAweDEwMDApCiAjZGVmaW5lIFY0TDJfQ0lEX1VTRVJfQlRUVl9CQVNFIChWNEwyX0NJRF9VU0VSX0JBU0UgKyAweDEwMTApCi0jZGVmaW5lIFY0TDJfQ0lEX1VTRVJfUzIyNTVfQkFTRSAoVjRMMl9DSURfVVNFUl9CQVNFICsgMHgxMDMwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfVVNFUl9TMjI1NV9CQVNFIChWNEwyX0NJRF9VU0VSX0JBU0UgKyAweDEwMzApCiAjZGVmaW5lIFY0TDJfQ0lEX1VTRVJfU0k0NzZYX0JBU0UgKFY0TDJfQ0lEX1VTRVJfQkFTRSArIDB4MTA0MCkKICNkZWZpbmUgVjRMMl9DSURfVVNFUl9USV9WUEVfQkFTRSAoVjRMMl9DSURfVVNFUl9CQVNFICsgMHgxMDUwKQogI2RlZmluZSBWNEwyX0NJRF9VU0VSX1NBQTcxMzRfQkFTRSAoVjRMMl9DSURfVVNFUl9CQVNFICsgMHgxMDYwKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHg5MDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHg5MDApCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRSAoVjRMMl9DSURfTVBFR19CQVNFKzApCiBlbnVtIHY0bDJfbXBlZ19zdHJlYW1fdHlwZSB7Ci0gVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTID0gMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTID0gMCwKICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFMgPSAxLAogIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMV9TUyA9IDIsCiAgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX0RWRCA9IDMsCi0gVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcxX1ZDRCA9IDQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMV9WQ0QgPSA0LAogIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9TVkNEID0gNSwKIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QTVQgKFY0TDJfQ0lEX01QRUdfQkFTRSsxKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU8gKFY0TDJfQ0lEX01QRUdfQkFTRSsyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX0FVRElPIChWNEwyX0NJRF9NUEVHX0JBU0UrMikKICNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPIChWNEwyX0NJRF9NUEVHX0JBU0UrMykKICNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BDUiAoVjRMMl9DSURfTVBFR19CQVNFKzQpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9BVURJTyAoVjRMMl9DSURfTVBFR19CQVNFKzUpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9WSURFTyAoVjRMMl9DSURfTVBFR19CQVNFKzYpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfVklERU8gKFY0TDJfQ0lEX01QRUdfQkFTRSs2KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UIChWNEwyX0NJRF9NUEVHX0JBU0UrNykKIGVudW0gdjRsMl9tcGVnX3N0cmVhbV92YmlfZm10IHsKICBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSA9IDAsCi0gVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFYgPSAxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViA9IDEsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVEgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDApCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19zYW1wbGluZ19mcmVxIHsKLSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80NDEwMCA9IDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ0MTAwID0gMCwKICBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMCA9IDEsCiAgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfMzIwMDAgPSAyLAogfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORyAoVjRMMl9DSURfTVBFR19CQVNFKzEwMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkcgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDEpCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19lbmNvZGluZyB7CiAgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzEgPSAwLAogIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yID0gMSwKLSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMyA9IDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8zID0gMiwKICBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUFDID0gMywKICBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzID0gNCwKIH07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzEwMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzEwMikKIGVudW0gdjRsMl9tcGVnX2F1ZGlvX2wxX2JpdHJhdGUgewogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzMySyA9IDAsCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNjRLID0gMSwKLSBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV85NksgPSAyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV85NksgPSAyLAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzEyOEsgPSAzLAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzE2MEsgPSA0LAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzE5MksgPSA1LAotIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzIyNEsgPSA2LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yMjRLID0gNiwKICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yNTZLID0gNywKICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yODhLID0gOCwKICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zMjBLID0gOSwKLSBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zNTJLID0gMTAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzM1MksgPSAxMCwKICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zODRLID0gMTEsCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNDE2SyA9IDEyLAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzQ0OEsgPSAxMywKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMTAzKQogZW51bSB2NGwyX21wZWdfYXVkaW9fbDJfYml0cmF0ZSB7CiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzJLID0gMCwKLSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV80OEsgPSAxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV80OEsgPSAxLAogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzU2SyA9IDIsCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNjRLID0gMywKICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV84MEsgPSA0LAotIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzk2SyA9IDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzk2SyA9IDUsCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTEySyA9IDYsCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTI4SyA9IDcsCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTYwSyA9IDgsCi0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTkySyA9IDksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzE5MksgPSA5LAogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzIyNEsgPSAxMCwKICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLID0gMTEsCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzIwSyA9IDEyLAotIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzM4NEsgPSAxMywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SyA9IDEzLAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA0KQogZW51bSB2NGwyX21wZWdfYXVkaW9fbDNfYml0cmF0ZSB7Ci0gVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMzJLID0gMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMzJLID0gMCwKICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV80MEsgPSAxLAogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzQ4SyA9IDIsCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNTZLID0gMywKLSBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV82NEsgPSA0LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV82NEsgPSA0LAogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzgwSyA9IDUsCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfOTZLID0gNiwKICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8xMTJLID0gNywKLSBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8xMjhLID0gOCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTI4SyA9IDgsCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTYwSyA9IDksCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTkySyA9IDEwLAogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzIyNEsgPSAxMSwKLSBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8yNTZLID0gMTIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzI1NksgPSAxMiwKICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8zMjBLID0gMTMsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREUgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDUpCi1lbnVtIHY0bDJfbXBlZ19hdWRpb19tb2RlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHY0bDJfbXBlZ19hdWRpb19tb2RlIHsKICBWNEwyX01QRUdfQVVESU9fTU9ERV9TVEVSRU8gPSAwLAogIFY0TDJfTVBFR19BVURJT19NT0RFX0pPSU5UX1NURVJFTyA9IDEsCiAgVjRMMl9NUEVHX0FVRElPX01PREVfRFVBTCA9IDIsCi0gVjRMMl9NUEVHX0FVRElPX01PREVfTU9OTyA9IDMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19BVURJT19NT0RFX01PTk8gPSAzLAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTiAoVjRMMl9DSURfTVBFR19CQVNFKzEwNikKIGVudW0gdjRsMl9tcGVnX2F1ZGlvX21vZGVfZXh0ZW5zaW9uIHsKLSBWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfNCA9IDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80ID0gMCwKICBWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfOCA9IDEsCiAgVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzEyID0gMiwKICBWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfMTYgPSAzLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VNUEhBU0lTIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA3KQogZW51bSB2NGwyX21wZWdfYXVkaW9fZW1waGFzaXMgewogIFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FID0gMCwKLSBWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfNTBfRElWXzE1X3VTID0gMSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTXzUwX0RJVl8xNV91UyA9IDEsCiAgVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX0NDSVRUX0oxNyA9IDIsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0NSQyAoVjRMMl9DSURfTVBFR19CQVNFKzEwOCkKLWVudW0gdjRsMl9tcGVnX2F1ZGlvX2NyYyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB2NGwyX21wZWdfYXVkaW9fY3JjIHsKICBWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUgPSAwLAogIFY0TDJfTVBFR19BVURJT19DUkNfQ1JDMTYgPSAxLAogfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19NVVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19NVVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA5KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FBQ19CSVRSQVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMTEwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMTExKQogZW51bSB2NGwyX21wZWdfYXVkaW9fYWMzX2JpdHJhdGUgewotIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zMksgPSAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzJLID0gMCwKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDBLID0gMSwKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDhLID0gMiwKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTZLID0gMywKLSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNjRLID0gNCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzY0SyA9IDQsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzgwSyA9IDUsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzk2SyA9IDYsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzExMksgPSA3LAotIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xMjhLID0gOCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzEyOEsgPSA4LAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xNjBLID0gOSwKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTkySyA9IDEwLAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yMjRLID0gMTEsCi0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzI1NksgPSAxMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzI1NksgPSAxMiwKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzIwSyA9IDEzLAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLID0gMTQsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQ0OEsgPSAxNSwKLSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTEySyA9IDE2LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTEySyA9IDE2LAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV81NzZLID0gMTcsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzY0MEsgPSAxOCwKIH07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fREVDX1BMQVlCQUNLIChWNEwyX0NJRF9NUEVHX0JBU0UrMTEyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19ERUNfUExBWUJBQ0sgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMTIpCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19kZWNfcGxheWJhY2sgewogIFY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfQVVUTyA9IDAsCiAgVjRMMl9NUEVHX0FVRElPX0RFQ19QTEFZQkFDS19TVEVSRU8gPSAxLAotIFY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfTEVGVCA9IDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfTEVGVCA9IDIsCiAgVjRMMl9NUEVHX0FVRElPX0RFQ19QTEFZQkFDS19SSUdIVCA9IDMsCiAgVjRMMl9NUEVHX0FVRElPX0RFQ19QTEFZQkFDS19NT05PID0gNCwKICBWNEwyX01QRUdfQVVESU9fREVDX1BMQVlCQUNLX1NXQVBQRURfU1RFUkVPID0gNSwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19ERUNfTVVMVElMSU5HVUFMX1BMQVlCQUNLIChWNEwyX0NJRF9NUEVHX0JBU0UrMTEzKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAwKQogZW51bSB2NGwyX21wZWdfdmlkZW9fZW5jb2RpbmcgewotIFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEgPSAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xID0gMCwKICBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18yID0gMSwKICBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR180X0FWQyA9IDIsCiB9OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVCAoVjRMMl9DSURfTVBFR19CQVNFKzIwMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQVNQRUNUIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAxKQogZW51bSB2NGwyX21wZWdfdmlkZW9fYXNwZWN0IHsKICBWNEwyX01QRUdfVklERU9fQVNQRUNUXzF4MSA9IDAsCiAgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDMgPSAxLAotIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSA9IDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSA9IDIsCiAgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8yMjF4MTAwID0gMywKIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVMgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDIpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX1NJWkUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAzKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA0KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA1KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERSAoVjRMMl9DSURfTVBFR19CQVNFKzIwNikKLWVudW0gdjRsMl9tcGVnX3ZpZGVvX2JpdHJhdGVfbW9kZSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB2NGwyX21wZWdfdmlkZW9fYml0cmF0ZV9tb2RlIHsKICBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUiA9IDAsCiAgVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIgPSAxLAogfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA3KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSyAoVjRMMl9DSURfTVBFR19CQVNFKzIwOCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19URU1QT1JBTF9ERUNJTUFUSU9OIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA5KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTApCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURV9ZVVYgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEVfWVVWIChWNEwyX0NJRF9NUEVHX0JBU0UrMjExKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0RFQ09ERVJfU0xJQ0VfSU5URVJGQUNFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjEyKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0RFQ09ERVJfTVBFRzRfREVCTE9DS19GSUxURVIgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTMpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQ1lDTElDX0lOVFJBX1JFRlJFU0hfTUIgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTQpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fRlJBTUVfUkNfRU5BQkxFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjE1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19GUkFNRV9SQ19FTkFCTEUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTUpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSEVBREVSX01PREUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTYpCiBlbnVtIHY0bDJfbXBlZ192aWRlb19oZWFkZXJfbW9kZSB7CiAgVjRMMl9NUEVHX1ZJREVPX0hFQURFUl9NT0RFX1NFUEFSQVRFID0gMCwKLSBWNEwyX01QRUdfVklERU9fSEVBREVSX01PREVfSk9JTkVEX1dJVEhfMVNUX0ZSQU1FID0gMSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX1ZJREVPX0hFQURFUl9NT0RFX0pPSU5FRF9XSVRIXzFTVF9GUkFNRSA9IDEsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01BWF9SRUZfUElDIChWNEwyX0NJRF9NUEVHX0JBU0UrMjE3KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01CX1JDX0VOQUJMRSAoVjRMMl9DSURfTVBFR19CQVNFKzIxOCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NQVhfQllURVMgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VTFRJX1NMSUNFX01BWF9CWVRFUyAoVjRMMl9DSURfTVBFR19CQVNFKzIxOSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NQVhfTUIgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjApCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTU9ERSAoVjRMMl9DSURfTVBFR19CQVNFKzIyMSkKIGVudW0gdjRsMl9tcGVnX3ZpZGVvX211bHRpX3NsaWNlX21vZGUgewotIFY0TDJfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFX1NJTkdMRSA9IDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFX1NJTkdMRSA9IDAsCiAgVjRMMl9NUEVHX1ZJREVPX01VTFRJX1NJQ0VfTU9ERV9NQVhfTUIgPSAxLAogIFY0TDJfTVBFR19WSURFT19NVUxUSV9TSUNFX01PREVfTUFYX0JZVEVTID0gMiwKIH07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVkJWX1NJWkUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZCVl9TSVpFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjIyKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0RFQ19QVFMgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjMpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fREVDX0ZSQU1FIChWNEwyX0NJRF9NUEVHX0JBU0UrMjI0KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZCVl9ERUxBWSAoVjRMMl9DSURfTVBFR19CQVNFKzIyNSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19SRVBFQVRfU0VRX0hFQURFUiAoVjRMMl9DSURfTVBFR19CQVNFKzIyNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fUkVQRUFUX1NFUV9IRUFERVIgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjYpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVZfSF9TRUFSQ0hfUkFOR0UgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjcpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVZfVl9TRUFSQ0hfUkFOR0UgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjgpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19JX0ZSQU1FX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjYzX1BfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSszMDEpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19CX0ZSQU1FX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzAyKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfTUlOX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzAzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjYzX01BWF9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzMwNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9JX0ZSQU1FX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzUwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfUF9GUkFNRV9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzM1MSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0JfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTUlOX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzUzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X01BWF9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzM1NCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0XzhYOF9UUkFOU0ZPUk0gKFY0TDJfQ0lEX01QRUdfQkFTRSszNTUpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9DUEJfU0laRSAoVjRMMl9DSURfTVBFR19CQVNFKzM1NikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9FTlRST1BZX01PREUgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9lbnRyb3B5X21vZGUgewogIFY0TDJfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERV9DQVZMQyA9IDAsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfRU5UUk9QWV9NT0RFX0NBQkFDID0gMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0lfUEVSSU9EIChWNEwyX0NJRF9NUEVHX0JBU0UrMzU4KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTEVWRUwgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTkpCiBlbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X2xldmVsIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMV8wID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMUIgPSAxLAogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFfMSA9IDIsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMV8yID0gMywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMV8zID0gNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMl8wID0gNSwKICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8yXzEgPSA2LAogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzJfMiA9IDcsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzNfMCA9IDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzNfMSA9IDksCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfM18yID0gMTAsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8wID0gMTEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzRfMSA9IDEyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF80XzIgPSAxMywKICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF81XzAgPSAxNCwKICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF81XzEgPSAxNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0xPT1BfRklMVEVSX0FMUEhBIChWNEwyX0NJRF9NUEVHX0JBU0UrMzYwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfQkVUQSAoVjRMMl9DSURfTVBFR19CQVNFKzM2MSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0xPT1BfRklMVEVSX01PREUgKFY0TDJfQ0lEX01QRUdfQkFTRSszNjIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9sb29wX2ZpbHRlcl9tb2RlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERV9FTkFCTEVEID0gMCwKICBWNEwyX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFX0RJU0FCTEVEID0gMSwKICBWNEwyX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFX0RJU0FCTEVEX0FUX1NMSUNFX0JPVU5EQVJZID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1BST0ZJTEUgKFY0TDJfQ0lEX01QRUdfQkFTRSszNjMpCiBlbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X3Byb2ZpbGUgewogIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfQkFTRUxJTkUgPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0NPTlNUUkFJTkVEX0JBU0VMSU5FID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9NQUlOID0gMiwKICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0VYVEVOREVEID0gMywKICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0ggPSA0LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfMTAgPSA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfNDIyID0gNiwKICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfNDQ0X1BSRURJQ1RJVkUgPSA3LAogIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSF8xMF9JTlRSQSA9IDgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSF80MjJfSU5UUkEgPSA5LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfNDQ0X0lOVFJBID0gMTAsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9DQVZMQ180NDRfSU5UUkEgPSAxMSwKICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NDQUxBQkxFX0JBU0VMSU5FID0gMTIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfU0NBTEFCTEVfSElHSCA9IDEzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NDQUxBQkxFX0hJR0hfSU5UUkEgPSAxNCwKICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NURVJFT19ISUdIID0gMTUsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9NVUxUSVZJRVdfSElHSCA9IDE2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX0VYVF9TQVJfSEVJR0hUIChWNEwyX0NJRF9NUEVHX0JBU0UrMzY0KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX0VYVF9TQVJfV0lEVEggKFY0TDJfQ0lEX01QRUdfQkFTRSszNjUpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0VOQUJMRSAoVjRMMl9DSURfTVBFR19CQVNFKzM2NikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQyAoVjRMMl9DSURfTVBFR19CQVNFKzM2NykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X3Z1aV9zYXJfaWRjIHsKICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ19VTlNQRUNJRklFRCA9IDAsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMXgxID0gMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTJ4MTEgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xMHgxMSA9IDMsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTZ4MTEgPSA0LAogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzQweDMzID0gNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMjR4MTEgPSA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18yMHgxMSA9IDcsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMzJ4MTEgPSA4LAogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzgweDMzID0gOSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTh4MTEgPSAxMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTV4MTEgPSAxMSwKICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ182NHgzMyA9IDEyLAogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE2MHg5OSA9IDEzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ180eDMgPSAxNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfM3gyID0gMTUsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMngxID0gMTYsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfRVhURU5ERUQgPSAxNywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1NFSV9GUkFNRV9QQUNLSU5HIChWNEwyX0NJRF9NUEVHX0JBU0UrMzY4KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfU0VJX0ZQX0NVUlJFTlRfRlJBTUVfMCAoVjRMMl9DSURfTVBFR19CQVNFKzM2OSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1NFSV9GUF9BUlJBTkdFTUVOVF9UWVBFIChWNEwyX0NJRF9NUEVHX0JBU0UrMzcwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2gyNjRfc2VpX2ZwX2FycmFuZ2VtZW50X3R5cGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9TRUlfRlBfQVJSQU5HRU1FTlRfVFlQRV9DSEVDS0VSQk9BUkQgPSAwLAogIFY0TDJfTVBFR19WSURFT19IMjY0X1NFSV9GUF9BUlJBTkdFTUVOVF9UWVBFX0NPTFVNTiA9IDEsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfU0VJX0ZQX0FSUkFOR0VNRU5UX1RZUEVfUk9XID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfU0VJX0ZQX0FSUkFOR0VNRU5UX1RZUEVfU0lERV9CWV9TSURFID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfU0VJX0ZQX0FSUkFOR0VNRU5UX1RZUEVfVE9QX0JPVFRPTSA9IDQsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfU0VJX0ZQX0FSUkFOR0VNRU5UX1RZUEVfVEVNUE9SQUwgPSA1LAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9GTU8gKFY0TDJfQ0lEX01QRUdfQkFTRSszNzEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRk1PX01BUF9UWVBFIChWNEwyX0NJRF9NUEVHX0JBU0UrMzcyKQogZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9mbW9fbWFwX3R5cGUgewogIFY0TDJfTVBFR19WSURFT19IMjY0X0ZNT19NQVBfVFlQRV9JTlRFUkxFQVZFRF9TTElDRVMgPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9GTU9fTUFQX1RZUEVfU0NBVFRFUkVEX1NMSUNFUyA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0ZNT19NQVBfVFlQRV9GT1JFR1JPVU5EX1dJVEhfTEVGVF9PVkVSID0gMiwKICBWNEwyX01QRUdfVklERU9fSDI2NF9GTU9fTUFQX1RZUEVfQk9YX09VVCA9IDMsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfRk1PX01BUF9UWVBFX1JBU1RFUl9TQ0FOID0gNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfRk1PX01BUF9UWVBFX1dJUEVfU0NBTiA9IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0ZNT19NQVBfVFlQRV9FWFBMSUNJVCA9IDYsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRk1PX1NMSUNFX0dST1VQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzczKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0ZNT19DSEFOR0VfRElSRUNUSU9OIChWNEwyX0NJRF9NUEVHX0JBU0UrMzc0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2gyNjRfZm1vX2NoYW5nZV9kaXIgewogIFY0TDJfTVBFR19WSURFT19IMjY0X0ZNT19DSEFOR0VfRElSX1JJR0hUID0gMCwKICBWNEwyX01QRUdfVklERU9fSDI2NF9GTU9fQ0hBTkdFX0RJUl9MRUZUID0gMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0ZNT19DSEFOR0VfUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzM3NSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0ZNT19SVU5fTEVOR1RIIChWNEwyX0NJRF9NUEVHX0JBU0UrMzc2KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfQVNPIChWNEwyX0NJRF9NUEVHX0JBU0UrMzc3KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0FTT19TTElDRV9PUkRFUiAoVjRMMl9DSURfTVBFR19CQVNFKzM3OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9ISUVSQVJDSElDQUxfQ09ESU5HIChWNEwyX0NJRF9NUEVHX0JBU0UrMzc5KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfSElFUkFSQ0hJQ0FMX0NPRElOR19UWVBFIChWNEwyX0NJRF9NUEVHX0JBU0UrMzgwKQogZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9oaWVyYXJjaGljYWxfY29kaW5nX3R5cGUgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9ISUVSQVJDSElDQUxfQ09ESU5HX0IgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9ISUVSQVJDSElDQUxfQ09ESU5HX1AgPSAxLAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0hJRVJBUkNISUNBTF9DT0RJTkdfTEFZRVIgKFY0TDJfQ0lEX01QRUdfQkFTRSszODEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfSElFUkFSQ0hJQ0FMX0NPRElOR19MQVlFUl9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzM4MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfSV9GUkFNRV9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzQwMCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9QX0ZSQU1FX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrNDAxKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X0JfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X01JTl9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzQwMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfTUFYX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrNDA0KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X0xFVkVMIChWNEwyX0NJRF9NUEVHX0JBU0UrNDA1KQogZW51bSB2NGwyX21wZWdfdmlkZW9fbXBlZzRfbGV2ZWwgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfMCA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8wQiA9IDEsCiAgVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzEgPSAyLAogIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8yID0gMywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzMgPSA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfM0IgPSA1LAogIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF80ID0gNiwKICBWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfNSA9IDcsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfUFJPRklMRSAoVjRMMl9DSURfTVBFR19CQVNFKzQwNikKIGVudW0gdjRsMl9tcGVnX3ZpZGVvX21wZWc0X3Byb2ZpbGUgewogIFY0TDJfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFX1NJTVBMRSA9IDAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFX0FEVkFOQ0VEX1NJTVBMRSA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFX0NPUkUgPSAyLAogIFY0TDJfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFX1NJTVBMRV9TQ0FMQUJMRSA9IDMsCiAgVjRMMl9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEVfQURWQU5DRURfQ09ESU5HX0VGRklDSUVOQ1kgPSA0LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X1FQRUwgKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDcpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX05VTV9QQVJUSVRJT05TIChWNEwyX0NJRF9NUEVHX0JBU0UrNTAwKQogZW51bSB2NGwyX3ZwOF9udW1fcGFydGl0aW9ucyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYXzFfUEFSVElUSU9OID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9DSURfTVBFR19WSURFT19WUFhfMl9QQVJUSVRJT05TID0gMSwKICBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF80X1BBUlRJVElPTlMgPSAyLAogIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYXzhfUEFSVElUSU9OUyA9IDMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX0lNRF9ESVNBQkxFXzRYNCAoVjRMMl9DSURfTVBFR19CQVNFKzUwMSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfTlVNX1JFRl9GUkFNRVMgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDIpCiBlbnVtIHY0bDJfdnA4X251bV9yZWZfZnJhbWVzIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9DSURfTVBFR19WSURFT19WUFhfMV9SRUZfRlJBTUUgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF8yX1JFRl9GUkFNRSA9IDEsCiAgVjRMMl9DSURfTVBFR19WSURFT19WUFhfM19SRUZfRlJBTUUgPSAyLAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX0ZJTFRFUl9MRVZFTCAoVjRMMl9DSURfTVBFR19CQVNFKzUwMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX0ZJTFRFUl9TSEFSUE5FU1MgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDQpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX0dPTERFTl9GUkFNRV9SRUZfUEVSSU9EIChWNEwyX0NJRF9NUEVHX0JBU0UrNTA1KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9HT0xERU5fRlJBTUVfU0VMIChWNEwyX0NJRF9NUEVHX0JBU0UrNTA2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl92cDhfZ29sZGVuX2ZyYW1lX3NlbCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX0dPTERFTl9GUkFNRV9VU0VfUFJFViA9IDAsCiAgVjRMMl9DSURfTVBFR19WSURFT19WUFhfR09MREVOX0ZSQU1FX1VTRV9SRUZfUEVSSU9EID0gMSwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9NSU5fUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9NQVhfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDgpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX0lfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDkpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX1BfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MTApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9QUk9GSUxFIChWNEwyX0NJRF9NUEVHX0JBU0UrNTExKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHgxMDAwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMCkKIGVudW0gdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fc3BhdGlhbF9maWx0ZXJfbW9kZSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREVfTUFOVUFMID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9BVVRPID0gMSwKIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUiAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEUgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb19sdW1hX3NwYXRpYWxfZmlsdGVyX3R5cGUgewogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV9PRkYgPSAwLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8xRF9IT1IgPSAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfVkVSVCA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8yRF9IVl9TRVBBUkFCTEUgPSAzLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8yRF9TWU1fTk9OX1NFUEFSQUJMRSA9IDQsCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSszKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fY2hyb21hX3NwYXRpYWxfZmlsdGVyX3R5cGUgewogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFX09GRiA9IDAsCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfSE9SID0gMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs0KQogZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb190ZW1wb3JhbF9maWx0ZXJfbW9kZSB7CiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfTUFOVUFMID0gMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfQVVUTyA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUiAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9PRkYgPSAwLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9IT1IgPSAxLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9WRVJUID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX0hPUl9WRVJUID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX0RJQUcgPSA0LAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfTUVESUFOX0ZJTFRFUl9CT1RUT00gKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX1RPUCAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9CT1RUT00gKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzkpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9UT1AgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzEwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfU1RSRUFNX0lOU0VSVF9OQVZfUEFDS0VUUyAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMTEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHgxMTAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19ERUNPREVSX0gyNjRfRElTUExBWV9ERUxBWSAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzApCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fREVDT0RFUl9IMjY0X0RJU1BMQVlfREVMQVlfRU5BQkxFIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrMSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREUgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSsyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX21mYzUxX3ZpZGVvX2ZyYW1lX3NraXBfbW9kZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREVfRElTQUJMRUQgPSAwLAogIFY0TDJfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREVfTEVWRUxfTElNSVQgPSAxLAogIFY0TDJfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREVfQlVGX0xJTUlUID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19GT1JDRV9GUkFNRV9UWVBFIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrMykKIGVudW0gdjRsMl9tcGVnX21mYzUxX3ZpZGVvX2ZvcmNlX2ZyYW1lX3R5cGUgewogIFY0TDJfTVBFR19NRkM1MV9WSURFT19GT1JDRV9GUkFNRV9UWVBFX0RJU0FCTEVEID0gMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZPUkNFX0ZSQU1FX1RZUEVfSV9GUkFNRSA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19NRkM1MV9WSURFT19GT1JDRV9GUkFNRV9UWVBFX05PVF9DT0RFRCA9IDIsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX1BBRERJTkcgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19QQURESU5HX1lVViAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX1JDX0ZJWEVEX1RBUkdFVF9CSVQgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs2KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX1JDX1JFQUNUSU9OX0NPRUZGIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrNykKICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX0FDVElWSVRZIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrNTApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfQURBUFRJVkVfUkNfREFSSyAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzUxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX1NNT09USCAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzUyKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfQURBUFRJVkVfUkNfU1RBVElDIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrNTMpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9OVU1fUkVGX1BJQ19GT1JfUCAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzU0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19DQU1FUkEgfCAweDkwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX0NBTUVSQV9DTEFTUyAoVjRMMl9DVFJMX0NMQVNTX0NBTUVSQSB8IDEpCiAjZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE8gKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzEpCiBlbnVtIHY0bDJfZXhwb3N1cmVfYXV0b190eXBlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9FWFBPU1VSRV9BVVRPID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9FWFBPU1VSRV9NQU5VQUwgPSAxLAogIFY0TDJfRVhQT1NVUkVfU0hVVFRFUl9QUklPUklUWSA9IDIsCiAgVjRMMl9FWFBPU1VSRV9BUEVSVFVSRV9QUklPUklUWSA9IDMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfRVhQT1NVUkVfQUJTT0xVVEUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzIpCiAjZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE9fUFJJT1JJVFkgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzMpCiAjZGVmaW5lIFY0TDJfQ0lEX1BBTl9SRUxBVElWRSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrNCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX1RJTFRfUkVMQVRJVkUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9QQU5fUkVTRVQgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzYpCiAjZGVmaW5lIFY0TDJfQ0lEX1RJTFRfUkVTRVQgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzcpCiAjZGVmaW5lIFY0TDJfQ0lEX1BBTl9BQlNPTFVURSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX1RJTFRfQUJTT0xVVEUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9GT0NVU19BQlNPTFVURSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTApCiAjZGVmaW5lIFY0TDJfQ0lEX0ZPQ1VTX1JFTEFUSVZFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxMSkKICNkZWZpbmUgVjRMMl9DSURfRk9DVVNfQVVUTyAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9aT09NX0FCU09MVVRFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX1pPT01fUkVMQVRJVkUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE0KQogI2RlZmluZSBWNEwyX0NJRF9aT09NX0NPTlRJTlVPVVMgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE1KQogI2RlZmluZSBWNEwyX0NJRF9QUklWQUNZIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX0lSSVNfQUJTT0xVVEUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfSVJJU19SRUxBVElWRSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTgpCiAjZGVmaW5lIFY0TDJfQ0lEX0FVVE9fRVhQT1NVUkVfQklBUyAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTkpCiAjZGVmaW5lIFY0TDJfQ0lEX0FVVE9fTl9QUkVTRVRfV0hJVEVfQkFMQU5DRSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX2F1dG9fbl9wcmVzZXRfd2hpdGVfYmFsYW5jZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfV0hJVEVfQkFMQU5DRV9NQU5VQUwgPSAwLAogIFY0TDJfV0hJVEVfQkFMQU5DRV9BVVRPID0gMSwKICBWNEwyX1dISVRFX0JBTEFOQ0VfSU5DQU5ERVNDRU5UID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9XSElURV9CQUxBTkNFX0ZMVU9SRVNDRU5UID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9XSElURV9CQUxBTkNFX0ZMVU9SRVNDRU5UX0ggPSA0LAogIFY0TDJfV0hJVEVfQkFMQU5DRV9IT1JJWk9OID0gNSwKICBWNEwyX1dISVRFX0JBTEFOQ0VfREFZTElHSFQgPSA2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX1dISVRFX0JBTEFOQ0VfRkxBU0ggPSA3LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX1dISVRFX0JBTEFOQ0VfQ0xPVURZID0gOCwKICBWNEwyX1dISVRFX0JBTEFOQ0VfU0hBREUgPSA5LAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX1dJREVfRFlOQU1JQ19SQU5HRSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9JTUFHRV9TVEFCSUxJWkFUSU9OIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyMikKICNkZWZpbmUgVjRMMl9DSURfSVNPX1NFTlNJVElWSVRZIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyMykKICNkZWZpbmUgVjRMMl9DSURfSVNPX1NFTlNJVElWSVRZX0FVVE8gKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzI0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9pc29fc2Vuc2l0aXZpdHlfYXV0b190eXBlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9JU09fU0VOU0lUSVZJVFlfTUFOVUFMID0gMCwKICBWNEwyX0lTT19TRU5TSVRJVklUWV9BVVRPID0gMSwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9FWFBPU1VSRV9NRVRFUklORyAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX2V4cG9zdXJlX21ldGVyaW5nIHsKICBWNEwyX0VYUE9TVVJFX01FVEVSSU5HX0FWRVJBR0UgPSAwLAogIFY0TDJfRVhQT1NVUkVfTUVURVJJTkdfQ0VOVEVSX1dFSUdIVEVEID0gMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9FWFBPU1VSRV9NRVRFUklOR19TUE9UID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9FWFBPU1VSRV9NRVRFUklOR19NQVRSSVggPSAzLAogfTsKICNkZWZpbmUgVjRMMl9DSURfU0NFTkVfTU9ERSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX3NjZW5lX21vZGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX1NDRU5FX01PREVfTk9ORSA9IDAsCiAgVjRMMl9TQ0VORV9NT0RFX0JBQ0tMSUdIVCA9IDEsCiAgVjRMMl9TQ0VORV9NT0RFX0JFQUNIX1NOT1cgPSAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX1NDRU5FX01PREVfQ0FORExFX0xJR0hUID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9TQ0VORV9NT0RFX0RBV05fRFVTSyA9IDQsCiAgVjRMMl9TQ0VORV9NT0RFX0ZBTExfQ09MT1JTID0gNSwKICBWNEwyX1NDRU5FX01PREVfRklSRVdPUktTID0gNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9TQ0VORV9NT0RFX0xBTkRTQ0FQRSA9IDcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfU0NFTkVfTU9ERV9OSUdIVCA9IDgsCiAgVjRMMl9TQ0VORV9NT0RFX1BBUlRZX0lORE9PUiA9IDksCiAgVjRMMl9TQ0VORV9NT0RFX1BPUlRSQUlUID0gMTAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfU0NFTkVfTU9ERV9TUE9SVFMgPSAxMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9TQ0VORV9NT0RFX1NVTlNFVCA9IDEyLAogIFY0TDJfU0NFTkVfTU9ERV9URVhUID0gMTMsCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfM0FfTE9DSyAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0xPQ0tfRVhQT1NVUkUgKDEgPDwgMCkKICNkZWZpbmUgVjRMMl9MT0NLX1dISVRFX0JBTEFOQ0UgKDEgPDwgMSkKICNkZWZpbmUgVjRMMl9MT0NLX0ZPQ1VTICgxIDw8IDIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9BVVRPX0ZPQ1VTX1NUQVJUIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX0FVVE9fRk9DVVNfU1RPUCAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjkpCiAjZGVmaW5lIFY0TDJfQ0lEX0FVVE9fRk9DVVNfU1RBVFVTIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSszMCkKICNkZWZpbmUgVjRMMl9BVVRPX0ZPQ1VTX1NUQVRVU19JRExFICgwIDw8IDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0FVVE9fRk9DVVNfU1RBVFVTX0JVU1kgKDEgPDwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQVVUT19GT0NVU19TVEFUVVNfUkVBQ0hFRCAoMSA8PCAxKQogI2RlZmluZSBWNEwyX0FVVE9fRk9DVVNfU1RBVFVTX0ZBSUxFRCAoMSA8PCAyKQogI2RlZmluZSBWNEwyX0NJRF9BVVRPX0ZPQ1VTX1JBTkdFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSszMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfYXV0b19mb2N1c19yYW5nZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfQVVUT19GT0NVU19SQU5HRV9BVVRPID0gMCwKICBWNEwyX0FVVE9fRk9DVVNfUkFOR0VfTk9STUFMID0gMSwKICBWNEwyX0FVVE9fRk9DVVNfUkFOR0VfTUFDUk8gPSAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0FVVE9fRk9DVVNfUkFOR0VfSU5GSU5JVFkgPSAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19GTV9UWCB8IDB4OTAwKQogI2RlZmluZSBWNEwyX0NJRF9GTV9UWF9DTEFTUyAoVjRMMl9DVFJMX0NMQVNTX0ZNX1RYIHwgMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9ERVZJQVRJT04gKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1BJIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMikKICNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1BUWSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDMpCiAjZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9QU19OQU1FIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhUIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfRU5BQkxFRCAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY0KQogI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX1JFTEVBU0VfVElNRSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY1KQogI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0RFVklBVElPTiAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fRU5BQkxFRCAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fR0FJTiAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDgxKQogI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9USFJFU0hPTEQgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MikKICNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fQVRUQUNLX1RJTUUgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1JFTEVBU0VfVElNRSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDg0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfUElMT1RfVE9ORV9FTkFCTEVEIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgOTYpCiAjZGVmaW5lIFY0TDJfQ0lEX1BJTE9UX1RPTkVfREVWSUFUSU9OIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgOTcpCiAjZGVmaW5lIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRlJFUVVFTkNZIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgOTgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTEyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9wcmVlbXBoYXNpcyB7CiAgVjRMMl9QUkVFTVBIQVNJU19ESVNBQkxFRCA9IDAsCiAgVjRMMl9QUkVFTVBIQVNJU181MF91UyA9IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfUFJFRU1QSEFTSVNfNzVfdVMgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX1RVTkVfUE9XRVJfTEVWRUwgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxMTMpCiAjZGVmaW5lIFY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1IgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxMTQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfRkxBU0ggfCAweDkwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX0NMQVNTIChWNEwyX0NUUkxfQ0xBU1NfRkxBU0ggfCAxKQogI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9MRURfTU9ERSAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDEpCiBlbnVtIHY0bDJfZmxhc2hfbGVkX21vZGUgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0ZMQVNIX0xFRF9NT0RFX05PTkUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfRkxBU0hfTEVEX01PREVfRkxBU0gsCiAgVjRMMl9GTEFTSF9MRURfTU9ERV9UT1JDSCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkVfU09VUkNFIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfZmxhc2hfc3Ryb2JlX3NvdXJjZSB7CiAgVjRMMl9GTEFTSF9TVFJPQkVfU09VUkNFX1NPRlRXQVJFLAogIFY0TDJfRkxBU0hfU1RST0JFX1NPVVJDRV9FWFRFUk5BTCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfRkxBU0hfU1RST0JFIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMykKICNkZWZpbmUgVjRMMl9DSURfRkxBU0hfU1RST0JFX1NUT1AgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA0KQogI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkVfU1RBVFVTIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgNSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1RJTUVPVVQgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfRkxBU0hfSU5URU5TSVRZIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgNykKICNkZWZpbmUgVjRMMl9DSURfRkxBU0hfVE9SQ0hfSU5URU5TSVRZIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgOCkKICNkZWZpbmUgVjRMMl9DSURfRkxBU0hfSU5ESUNBVE9SX0lOVEVOU0lUWSAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9GQVVMVCAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDEwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9PVkVSX1ZPTFRBR0UgKDEgPDwgMCkKICNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9USU1FT1VUICgxIDw8IDEpCiAjZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfT1ZFUl9URU1QRVJBVFVSRSAoMSA8PCAyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9TSE9SVF9DSVJDVUlUICgxIDw8IDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0ZMQVNIX0ZBVUxUX09WRVJfQ1VSUkVOVCAoMSA8PCA0KQogI2RlZmluZSBWNEwyX0ZMQVNIX0ZBVUxUX0lORElDQVRPUiAoMSA8PCA1KQotI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9DSEFSR0UgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAxMSkKKyNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9VTkRFUl9WT0xUQUdFICgxIDw8IDYpCisjZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfSU5QVVRfVk9MVEFHRSAoMSA8PCA3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9MRURfT1ZFUl9URU1QRVJBVFVSRSAoMSA8PCA4KQorI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9DSEFSR0UgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAxMSkKICNkZWZpbmUgVjRMMl9DSURfRkxBU0hfUkVBRFkgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAxMikKICNkZWZpbmUgVjRMMl9DSURfSlBFR19DTEFTU19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfSlBFRyB8IDB4OTAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfSlBFR19DTEFTUyAoVjRMMl9DVFJMX0NMQVNTX0pQRUcgfCAxKQogI2RlZmluZSBWNEwyX0NJRF9KUEVHX0NIUk9NQV9TVUJTQU1QTElORyAoVjRMMl9DSURfSlBFR19DTEFTU19CQVNFICsgMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfanBlZ19jaHJvbWFfc3Vic2FtcGxpbmcgewogIFY0TDJfSlBFR19DSFJPTUFfU1VCU0FNUExJTkdfNDQ0ID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9KUEVHX0NIUk9NQV9TVUJTQU1QTElOR180MjIgPSAxLAogIFY0TDJfSlBFR19DSFJPTUFfU1VCU0FNUExJTkdfNDIwID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9KUEVHX0NIUk9NQV9TVUJTQU1QTElOR180MTEgPSAzLAogIFY0TDJfSlBFR19DSFJPTUFfU1VCU0FNUExJTkdfNDEwID0gNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9KUEVHX0NIUk9NQV9TVUJTQU1QTElOR19HUkFZID0gNSwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9KUEVHX1JFU1RBUlRfSU5URVJWQUwgKFY0TDJfQ0lEX0pQRUdfQ0xBU1NfQkFTRSArIDIpCiAjZGVmaW5lIFY0TDJfQ0lEX0pQRUdfQ09NUFJFU1NJT05fUVVBTElUWSAoVjRMMl9DSURfSlBFR19DTEFTU19CQVNFICsgMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX0pQRUdfQUNUSVZFX01BUktFUiAoVjRMMl9DSURfSlBFR19DTEFTU19CQVNFICsgNCkKICNkZWZpbmUgVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfQVBQMCAoMSA8PCAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfQVBQMSAoMSA8PCAxKQogI2RlZmluZSBWNEwyX0pQRUdfQUNUSVZFX01BUktFUl9DT00gKDEgPDwgMTYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0pQRUdfQUNUSVZFX01BUktFUl9EUVQgKDEgPDwgMTcpCiAjZGVmaW5lIFY0TDJfSlBFR19BQ1RJVkVfTUFSS0VSX0RIVCAoMSA8PCAxOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX0lNQUdFX1NPVVJDRV9DTEFTU19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfSU1BR0VfU09VUkNFIHwgMHg5MDApCiAjZGVmaW5lIFY0TDJfQ0lEX0lNQUdFX1NPVVJDRV9DTEFTUyAoVjRMMl9DVFJMX0NMQVNTX0lNQUdFX1NPVVJDRSB8IDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9WQkxBTksgKFY0TDJfQ0lEX0lNQUdFX1NPVVJDRV9DTEFTU19CQVNFICsgMSkKICNkZWZpbmUgVjRMMl9DSURfSEJMQU5LIChWNEwyX0NJRF9JTUFHRV9TT1VSQ0VfQ0xBU1NfQkFTRSArIDIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9BTkFMT0dVRV9HQUlOIChWNEwyX0NJRF9JTUFHRV9TT1VSQ0VfQ0xBU1NfQkFTRSArIDMpCiAjZGVmaW5lIFY0TDJfQ0lEX0lNQUdFX1BST0NfQ0xBU1NfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX0lNQUdFX1BST0MgfCAweDkwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX0lNQUdFX1BST0NfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19JTUFHRV9QUk9DIHwgMSkKICNkZWZpbmUgVjRMMl9DSURfTElOS19GUkVRIChWNEwyX0NJRF9JTUFHRV9QUk9DX0NMQVNTX0JBU0UgKyAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfUElYRUxfUkFURSAoVjRMMl9DSURfSU1BR0VfUFJPQ19DTEFTU19CQVNFICsgMikKICNkZWZpbmUgVjRMMl9DSURfVEVTVF9QQVRURVJOIChWNEwyX0NJRF9JTUFHRV9QUk9DX0NMQVNTX0JBU0UgKyAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfRFZfQ0xBU1NfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX0RWIHwgMHg5MDApCiAjZGVmaW5lIFY0TDJfQ0lEX0RWX0NMQVNTIChWNEwyX0NUUkxfQ0xBU1NfRFYgfCAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfRFZfVFhfSE9UUExVRyAoVjRMMl9DSURfRFZfQ0xBU1NfQkFTRSArIDEpCiAjZGVmaW5lIFY0TDJfQ0lEX0RWX1RYX1JYU0VOU0UgKFY0TDJfQ0lEX0RWX0NMQVNTX0JBU0UgKyAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfRFZfVFhfRURJRF9QUkVTRU5UIChWNEwyX0NJRF9EVl9DTEFTU19CQVNFICsgMykKICNkZWZpbmUgVjRMMl9DSURfRFZfVFhfTU9ERSAoVjRMMl9DSURfRFZfQ0xBU1NfQkFTRSArIDQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX2R2X3R4X21vZGUgewogIFY0TDJfRFZfVFhfTU9ERV9EVklfRCA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfRFZfVFhfTU9ERV9IRE1JID0gMSwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9EVl9UWF9SR0JfUkFOR0UgKFY0TDJfQ0lEX0RWX0NMQVNTX0JBU0UgKyA1KQogZW51bSB2NGwyX2R2X3JnYl9yYW5nZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfRFZfUkdCX1JBTkdFX0FVVE8gPSAwLAogIFY0TDJfRFZfUkdCX1JBTkdFX0xJTUlURUQgPSAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0RWX1JHQl9SQU5HRV9GVUxMID0gMiwKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9EVl9SWF9QT1dFUl9QUkVTRU5UIChWNEwyX0NJRF9EVl9DTEFTU19CQVNFICsgMTAwKQogI2RlZmluZSBWNEwyX0NJRF9EVl9SWF9SR0JfUkFOR0UgKFY0TDJfQ0lEX0RWX0NMQVNTX0JBU0UgKyAxMDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9GTV9SWF9DTEFTU19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfRk1fUlggfCAweDkwMCkKICNkZWZpbmUgVjRMMl9DSURfRk1fUlhfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19GTV9SWCB8IDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9UVU5FX0RFRU1QSEFTSVMgKFY0TDJfQ0lEX0ZNX1JYX0NMQVNTX0JBU0UgKyAxKQogZW51bSB2NGwyX2RlZW1waGFzaXMgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0RFRU1QSEFTSVNfRElTQUJMRUQgPSBWNEwyX1BSRUVNUEhBU0lTX0RJU0FCTEVELAogIFY0TDJfREVFTVBIQVNJU181MF91UyA9IFY0TDJfUFJFRU1QSEFTSVNfNTBfdVMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfREVFTVBIQVNJU183NV91UyA9IFY0TDJfUFJFRU1QSEFTSVNfNzVfdVMsCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfUkRTX1JFQ0VQVElPTiAoVjRMMl9DSURfRk1fUlhfQ0xBU1NfQkFTRSArIDIpCisjZGVmaW5lIFY0TDJfQ0lEX1JGX1RVTkVSX0NMQVNTX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19SRl9UVU5FUiB8IDB4OTAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfUkZfVFVORVJfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19SRl9UVU5FUiB8IDEpCisjZGVmaW5lIFY0TDJfQ0lEX1JGX1RVTkVSX0JBTkRXSURUSF9BVVRPIChWNEwyX0NJRF9SRl9UVU5FUl9DTEFTU19CQVNFICsgMTEpCisjZGVmaW5lIFY0TDJfQ0lEX1JGX1RVTkVSX0JBTkRXSURUSCAoVjRMMl9DSURfUkZfVFVORVJfQ0xBU1NfQkFTRSArIDEyKQorI2RlZmluZSBWNEwyX0NJRF9SRl9UVU5FUl9MTkFfR0FJTl9BVVRPIChWNEwyX0NJRF9SRl9UVU5FUl9DTEFTU19CQVNFICsgNDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9SRl9UVU5FUl9MTkFfR0FJTiAoVjRMMl9DSURfUkZfVFVORVJfQ0xBU1NfQkFTRSArIDQyKQorI2RlZmluZSBWNEwyX0NJRF9SRl9UVU5FUl9NSVhFUl9HQUlOX0FVVE8gKFY0TDJfQ0lEX1JGX1RVTkVSX0NMQVNTX0JBU0UgKyA1MSkKKyNkZWZpbmUgVjRMMl9DSURfUkZfVFVORVJfTUlYRVJfR0FJTiAoVjRMMl9DSURfUkZfVFVORVJfQ0xBU1NfQkFTRSArIDUyKQorI2RlZmluZSBWNEwyX0NJRF9SRl9UVU5FUl9JRl9HQUlOX0FVVE8gKFY0TDJfQ0lEX1JGX1RVTkVSX0NMQVNTX0JBU0UgKyA2MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX1JGX1RVTkVSX0lGX0dBSU4gKFY0TDJfQ0lEX1JGX1RVTkVSX0NMQVNTX0JBU0UgKyA2MikKKyNkZWZpbmUgVjRMMl9DSURfUkZfVFVORVJfUExMX0xPQ0sgKFY0TDJfQ0lEX1JGX1RVTkVSX0NMQVNTX0JBU0UgKyA5MSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLWR2LXRpbWluZ3MuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdjRsMi1kdi10aW1pbmdzLmgKaW5kZXggYmIxMzc0YS4uMWQ5NzU4ZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLWR2LXRpbWluZ3MuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItZHYtdGltaW5ncy5oCkBAIC00NiwxMTEgKzQ2LDEyNiBAQAogI2RlZmluZSBWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBJNjAgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxOTIwLCAxMDgwLCAxLCAgIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICA3NDI1MDAwMCwgODgsIDQ0LCAxNDgsIDIsIDUsIDE1LCAyLCA1LCAxNiwgICBWNEwyX0RWX0JUX1NURF9DRUE4NjEsICAgVjRMMl9EVl9GTF9DQU5fUkVEVUNFX0ZQUyB8IFY0TDJfRFZfRkxfSEFMRl9MSU5FKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQNjAgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxOTIwLCAxMDgwLCAwLCAgIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAxNDg1MDAwMDAsIDg4LCA0NCwgMTQ4LCA0LCA1LCAzNiwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DRUE4NjEsICAgVjRMMl9EVl9GTF9DQU5fUkVEVUNFX0ZQUykgIH0KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRFZfQlRfQ0VBXzM4NDBYMjE2MFAyNCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDM4NDAsIDIxNjAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAyOTcwMDAwMDAsIDEyNzYsIDg4LCAyOTYsIDgsIDEwLCA3MiwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9DRUE4NjEsIFY0TDJfRFZfRkxfQ0FOX1JFRFVDRV9GUFMpICB9CisjZGVmaW5lIFY0TDJfRFZfQlRfQ0VBXzM4NDBYMjE2MFAyNSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDM4NDAsIDIxNjAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAyOTcwMDAwMDAsIDEwNTYsIDg4LCAyOTYsIDgsIDEwLCA3MiwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9DRUE4NjEsIDApICB9CisjZGVmaW5lIFY0TDJfRFZfQlRfQ0VBXzM4NDBYMjE2MFAzMCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDM4NDAsIDIxNjAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAyOTcwMDAwMDAsIDE3NiwgODgsIDI5NiwgOCwgMTAsIDcyLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0NFQTg2MSwgVjRMMl9EVl9GTF9DQU5fUkVEVUNFX0ZQUykgIH0KKyNkZWZpbmUgVjRMMl9EVl9CVF9DRUFfMzg0MFgyMTYwUDUwIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMzg0MCwgMjE2MCwgMCwgVjRMMl9EVl9IU1lOQ19QT1NfUE9MLCAgIDU5NDAwMDAwMCwgMTA1NiwgODgsIDI5NiwgOCwgMTAsIDcyLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0NFQTg2MSwgMCkgIH0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRFZfQlRfQ0VBXzM4NDBYMjE2MFA2MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDM4NDAsIDIxNjAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICA1OTQwMDAwMDAsIDE3NiwgODgsIDI5NiwgOCwgMTAsIDcyLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0NFQTg2MSwgVjRMMl9EVl9GTF9DQU5fUkVEVUNFX0ZQUykgIH0KKyNkZWZpbmUgVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDI0IHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoNDA5NiwgMjE2MCwgMCwgVjRMMl9EVl9IU1lOQ19QT1NfUE9MLCAgIDI5NzAwMDAwMCwgMTAyMCwgODgsIDI5NiwgOCwgMTAsIDcyLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0NFQTg2MSwgVjRMMl9EVl9GTF9DQU5fUkVEVUNFX0ZQUykgIH0KKyNkZWZpbmUgVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDI1IHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoNDA5NiwgMjE2MCwgMCwgVjRMMl9EVl9IU1lOQ19QT1NfUE9MLCAgIDI5NzAwMDAwMCwgOTY4LCA4OCwgMTI4LCA4LCAxMCwgNzIsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfQ0VBODYxLCAwKSAgfQorI2RlZmluZSBWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMzAgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUyg0MDk2LCAyMTYwLCAwLCBWNEwyX0RWX0hTWU5DX1BPU19QT0wsICAgMjk3MDAwMDAwLCA4OCwgODgsIDEyOCwgOCwgMTAsIDcyLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0NFQTg2MSwgVjRMMl9EVl9GTF9DQU5fUkVEVUNFX0ZQUykgIH0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRFZfQlRfQ0VBXzQwOTZYMjE2MFA1MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDQwOTYsIDIxNjAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICA1OTQwMDAwMDAsIDk2OCwgODgsIDEyOCwgOCwgMTAsIDcyLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0NFQTg2MSwgMCkgIH0KKyNkZWZpbmUgVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDYwIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoNDA5NiwgMjE2MCwgMCwgVjRMMl9EVl9IU1lOQ19QT1NfUE9MLCAgIDU5NDAwMDAwMCwgODgsIDg4LCAxMjgsIDgsIDEwLCA3MiwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9DRUE4NjEsIFY0TDJfRFZfRkxfQ0FOX1JFRFVDRV9GUFMpICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzY0MFgzNTBQODUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUyg2NDAsIDM1MCwgMCwgVjRMMl9EVl9IU1lOQ19QT1NfUE9MLCAgIDMxNTAwMDAwLCAzMiwgNjQsIDk2LCAzMiwgMywgNjAsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1ULCAwKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF82NDBYNDAwUDg1IHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoNjQwLCA0MDAsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAzMTUwMDAwMCwgMzIsIDY0LCA5NiwgMSwgMywgNDEsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1ULCAwKSAgfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfNzIwWDQwMFA4NSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDcyMCwgNDAwLCAwLCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgMzU1MDAwMDAsIDM2LCA3MiwgMTA4LCAxLCAzLCA0MiwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQsIDApICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzY0MFg0ODBQNjAgVjRMMl9EVl9CVF9DRUFfNjQwWDQ4MFA1OV85NAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfNjQwWDQ4MFA3MiB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDY0MCwgNDgwLCAwLCAwLCAgIDMxNTAwMDAwLCAyNCwgNDAsIDEyOCwgOSwgMywgMjgsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1ULCAwKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF82NDBYNDgwUDc1IHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoNjQwLCA0ODAsIDAsIDAsICAgMzE1MDAwMDAsIDE2LCA2NCwgMTIwLCAxLCAzLCAxNiwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQsIDApICB9CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF82NDBYNDgwUDg1IHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoNjQwLCA0ODAsIDAsIDAsICAgMzYwMDAwMDAsIDU2LCA1NiwgODAsIDEsIDMsIDI1LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfODAwWDYwMFA1NiB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDgwMCwgNjAwLCAwLCAgIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAzNjAwMDAwMCwgMjQsIDcyLCAxMjgsIDEsIDIsIDIyLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzgwMFg2MDBQNjAgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUyg4MDAsIDYwMCwgMCwgICBWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgNDAwMDAwMDAsIDQwLCAxMjgsIDg4LCAxLCA0LCAyMywgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQsIDApICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzgwMFg2MDBQNzIgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUyg4MDAsIDYwMCwgMCwgICBWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgNTAwMDAwMDAsIDU2LCAxMjAsIDY0LCAzNywgNiwgMjMsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1ULCAwKSAgfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfODAwWDYwMFA3NSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDgwMCwgNjAwLCAwLCAgIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICA0OTUwMDAwMCwgMTYsIDgwLCAxNjAsIDEsIDMsIDIxLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfODAwWDYwMFA4NSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDgwMCwgNjAwLCAwLCAgIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICA1NjI1MDAwMCwgMzIsIDY0LCAxNTIsIDEsIDMsIDI3LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzgwMFg2MDBQMTIwX1JCIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoODAwLCA2MDAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICA3MzI1MDAwMCwgNDgsIDMyLCA4MCwgMywgNCwgMjksIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1UIHwgVjRMMl9EVl9CVF9TVERfQ1ZULCAgIFY0TDJfRFZfRkxfUkVEVUNFRF9CTEFOS0lORykgIH0KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfODQ4WDQ4MFA2MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDg0OCwgNDgwLCAwLCAgIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAzMzc1MDAwMCwgMTYsIDExMiwgMTEyLCA2LCA4LCAyMywgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQsIDApICB9CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMDI0WDc2OEk0MyB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDEwMjQsIDc2OCwgMSwgICBWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgNDQ5MDAwMDAsIDgsIDE3NiwgNTYsIDAsIDQsIDIwLCAwLCA0LCAyMSwgICBWNEwyX0RWX0JUX1NURF9ETVQsIDApICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzEwMjRYNzY4UDYwIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTAyNCwgNzY4LCAwLCAwLCAgIDY1MDAwMDAwLCAyNCwgMTM2LCAxNjAsIDMsIDYsIDI5LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzEwMjRYNzY4UDcwIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTAyNCwgNzY4LCAwLCAwLCAgIDc1MDAwMDAwLCAyNCwgMTM2LCAxNDQsIDMsIDYsIDI5LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTAyNFg3NjhQNzUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMDI0LCA3NjgsIDAsICAgVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDc4NzUwMDAwLCAxNiwgOTYsIDE3NiwgMSwgMywgMjgsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1ULCAwKSAgfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTAyNFg3NjhQODUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMDI0LCA3NjgsIDAsICAgVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDk0NTAwMDAwLCA0OCwgOTYsIDIwOCwgMSwgMywgMzYsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1ULCAwKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMDI0WDc2OFAxMjBfUkIgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMDI0LCA3NjgsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAxMTU1MDAwMDAsIDQ4LCAzMiwgODAsIDMsIDQsIDM4LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMTUyWDg2NFA3NSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDExNTIsIDg2NCwgMCwgICBWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgMTA4MDAwMDAwLCA2NCwgMTI4LCAyNTYsIDEsIDMsIDMyLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTI4MFg3MjBQNjAgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQNjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzEyODBYNzY4UDYwX1JCIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTI4MCwgNzY4LCAwLCBWNEwyX0RWX0hTWU5DX1BPU19QT0wsICAgNjgyNTAwMDAsIDQ4LCAzMiwgODAsIDMsIDcsIDEyLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzEyODBYNzY4UDYwIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTI4MCwgNzY4LCAwLCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgNzk1MDAwMDAsIDY0LCAxMjgsIDE5MiwgMywgNywgMjAsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1UIHwgVjRMMl9EVl9CVF9TVERfQ1ZULCAwKSAgfQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTI4MFg3NjhQNzUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMjgwLCA3NjgsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAxMDIyNTAwMDAsIDgwLCAxMjgsIDIwOCwgMywgNywgMjcsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1UIHwgVjRMMl9EVl9CVF9TVERfQ1ZULCAwKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMjgwWDc2OFA4NSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDEyODAsIDc2OCwgMCwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDExNzUwMDAwMCwgODAsIDEzNiwgMjE2LCAzLCA3LCAzMSwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsIDApICB9CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMjgwWDc2OFAxMjBfUkIgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMjgwLCA3NjgsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAxNDAyNTAwMDAsIDQ4LCAzMiwgODAsIDMsIDcsIDM1LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzEyODBYODAwUDYwX1JCIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTI4MCwgODAwLCAwLCBWNEwyX0RWX0hTWU5DX1BPU19QT0wsICAgNzEwMDAwMDAsIDQ4LCAzMiwgODAsIDMsIDYsIDE0LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMjgwWDgwMFA2MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDEyODAsIDgwMCwgMCwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDgzNTAwMDAwLCA3MiwgMTI4LCAyMDAsIDMsIDYsIDIyLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgMCkgIH0KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTI4MFg4MDBQNzUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMjgwLCA4MDAsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAxMDY1MDAwMDAsIDgwLCAxMjgsIDIwOCwgMywgNiwgMjksIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1UIHwgVjRMMl9EVl9CVF9TVERfQ1ZULCAwKSAgfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTI4MFg4MDBQODUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMjgwLCA4MDAsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAxMjI1MDAwMDAsIDgwLCAxMzYsIDIxNiwgMywgNiwgMzQsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1UIHwgVjRMMl9EVl9CVF9TVERfQ1ZULCAwKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMjgwWDgwMFAxMjBfUkIgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMjgwLCA4MDAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAxNDYyNTAwMDAsIDQ4LCAzMiwgODAsIDMsIDYsIDM4LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMjgwWDk2MFA2MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDEyODAsIDk2MCwgMCwgICBWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgMTA4MDAwMDAwLCA5NiwgMTEyLCAzMTIsIDEsIDMsIDM2LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTI4MFg5NjBQODUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMjgwLCA5NjAsIDAsICAgVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDE0ODUwMDAwMCwgNjQsIDE2MCwgMjI0LCAxLCAzLCA0NywgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQsIDApICB9CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMjgwWDk2MFAxMjBfUkIgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMjgwLCA5NjAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAxNzU1MDAwMDAsIDQ4LCAzMiwgODAsIDMsIDQsIDUwLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzEyODBYMTAyNFA2MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDEyODAsIDEwMjQsIDAsICAgVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDEwODAwMDAwMCwgNDgsIDExMiwgMjQ4LCAxLCAzLCAzOCwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQsIDApICB9Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMjgwWDEwMjRQNzUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMjgwLCAxMDI0LCAwLCAgIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAxMzUwMDAwMDAsIDE2LCAxNDQsIDI0OCwgMSwgMywgMzgsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1ULCAwKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMjgwWDEwMjRQODUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMjgwLCAxMDI0LCAwLCAgIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAxNTc1MDAwMDAsIDY0LCAxNjAsIDIyNCwgMSwgMywgNDQsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1ULCAwKSAgfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTI4MFgxMDI0UDEyMF9SQiB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDEyODAsIDEwMjQsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAxODcyNTAwMDAsIDQ4LCAzMiwgODAsIDMsIDcsIDUwLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzEzNjBYNzY4UDYwIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTM2MCwgNzY4LCAwLCAgIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICA4NTUwMDAwMCwgNjQsIDExMiwgMjU2LCAzLCA2LCAxOCwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQsIDApICB9Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMzYwWDc2OFAxMjBfUkIgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMzYwLCA3NjgsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAxNDgyNTAwMDAsIDQ4LCAzMiwgODAsIDMsIDUsIDM3LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzEzNjZYNzY4UDYwIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTM2NiwgNzY4LCAwLCAgIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICA4NTUwMDAwMCwgNzAsIDE0MywgMjEzLCAzLCAzLCAyNCwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQsIDApICB9CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMzY2WDc2OFA2MF9SQiB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDEzNjYsIDc2OCwgMCwgICBWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgNzIwMDAwMDAsIDE0LCA1NiwgNjQsIDEsIDMsIDI4LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgVjRMMl9EVl9GTF9SRURVQ0VEX0JMQU5LSU5HKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xNDAwWDEwNTBQNjBfUkIgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxNDAwLCAxMDUwLCAwLCBWNEwyX0RWX0hTWU5DX1BPU19QT0wsICAgMTAxMDAwMDAwLCA0OCwgMzIsIDgwLCAzLCA0LCAyMywgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsICAgVjRMMl9EVl9GTF9SRURVQ0VEX0JMQU5LSU5HKSAgfQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTQwMFgxMDUwUDYwIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTQwMCwgMTA1MCwgMCwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDEyMTc1MDAwMCwgODgsIDE0NCwgMjMyLCAzLCA0LCAzMiwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsIDApICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE0MDBYMTA1MFA3NSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE0MDAsIDEwNTAsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAxNTYwMDAwMDAsIDEwNCwgMTQ0LCAyNDgsIDMsIDQsIDQyLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgMCkgIH0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE0MDBYMTA1MFA4NSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE0MDAsIDEwNTAsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAxNzk1MDAwMDAsIDEwNCwgMTUyLCAyNTYsIDMsIDQsIDQ4LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgMCkgIH0KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTQwMFgxMDUwUDEyMF9SQiB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE0MDAsIDEwNTAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAyMDgwMDAwMDAsIDQ4LCAzMiwgODAsIDMsIDQsIDU1LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xNDQwWDkwMFA2MF9SQiB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE0NDAsIDkwMCwgMCwgVjRMMl9EVl9IU1lOQ19QT1NfUE9MLCAgIDg4NzUwMDAwLCA0OCwgMzIsIDgwLCAzLCA2LCAxNywgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsICAgVjRMMl9EVl9GTF9SRURVQ0VEX0JMQU5LSU5HKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xNDQwWDkwMFA2MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE0NDAsIDkwMCwgMCwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDEwNjUwMDAwMCwgODAsIDE1MiwgMjMyLCAzLCA2LCAyNSwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsIDApICB9CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xNDQwWDkwMFA3NSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE0NDAsIDkwMCwgMCwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDEzNjc1MDAwMCwgOTYsIDE1MiwgMjQ4LCAzLCA2LCAzMywgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsIDApICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE0NDBYOTAwUDg1IHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTQ0MCwgOTAwLCAwLCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgMTU3MDAwMDAwLCAxMDQsIDE1MiwgMjU2LCAzLCA2LCAzOSwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsIDApICB9Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xNDQwWDkwMFAxMjBfUkIgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxNDQwLCA5MDAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAxODI3NTAwMDAsIDQ4LCAzMiwgODAsIDMsIDYsIDQ0LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE2MDBYOTAwUDYwX1JCIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTYwMCwgOTAwLCAwLCAgIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAxMDgwMDAwMDAsIDI0LCA4MCwgOTYsIDEsIDMsIDk2LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgVjRMMl9EVl9GTF9SRURVQ0VEX0JMQU5LSU5HKSAgfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTYwMFgxMjAwUDYwIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTYwMCwgMTIwMCwgMCwgICBWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgMTYyMDAwMDAwLCA2NCwgMTkyLCAzMDQsIDEsIDMsIDQ2LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTYwMFgxMjAwUDY1IHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTYwMCwgMTIwMCwgMCwgICBWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgMTc1NTAwMDAwLCA2NCwgMTkyLCAzMDQsIDEsIDMsIDQ2LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE2MDBYMTIwMFA3MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE2MDAsIDEyMDAsIDAsICAgVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDE4OTAwMDAwMCwgNjQsIDE5MiwgMzA0LCAxLCAzLCA0NiwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQsIDApICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE2MDBYMTIwMFA3NSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE2MDAsIDEyMDAsIDAsICAgVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDIwMjUwMDAwMCwgNjQsIDE5MiwgMzA0LCAxLCAzLCA0NiwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQsIDApICB9CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xNjAwWDEyMDBQODUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxNjAwLCAxMjAwLCAwLCAgIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAyMjk1MDAwMDAsIDY0LCAxOTIsIDMwNCwgMSwgMywgNDYsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1ULCAwKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xNjAwWDEyMDBQMTIwX1JCIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTYwMCwgMTIwMCwgMCwgVjRMMl9EVl9IU1lOQ19QT1NfUE9MLCAgIDI2ODI1MDAwMCwgNDgsIDMyLCA4MCwgMywgNCwgNjQsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1UIHwgVjRMMl9EVl9CVF9TVERfQ1ZULCAgIFY0TDJfRFZfRkxfUkVEVUNFRF9CTEFOS0lORykgIH0KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE2ODBYMTA1MFA2MF9SQiB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE2ODAsIDEwNTAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAxMTkwMDAwMDAsIDQ4LCAzMiwgODAsIDMsIDYsIDIxLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE2ODBYMTA1MFA2MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE2ODAsIDEwNTAsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAxNDYyNTAwMDAsIDEwNCwgMTc2LCAyODAsIDMsIDYsIDMwLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgMCkgIH0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE2ODBYMTA1MFA3NSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE2ODAsIDEwNTAsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAxODcwMDAwMDAsIDEyMCwgMTc2LCAyOTYsIDMsIDYsIDQwLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgMCkgIH0KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTY4MFgxMDUwUDg1IHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTY4MCwgMTA1MCwgMCwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDIxNDc1MDAwMCwgMTI4LCAxNzYsIDMwNCwgMywgNiwgNDYsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1UIHwgVjRMMl9EVl9CVF9TVERfQ1ZULCAwKSAgfQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTY4MFgxMDUwUDEyMF9SQiB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE2ODAsIDEwNTAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAyNDU1MDAwMDAsIDQ4LCAzMiwgODAsIDMsIDYsIDUzLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE3OTJYMTM0NFA2MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE3OTIsIDEzNDQsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAyMDQ3NTAwMDAsIDEyOCwgMjAwLCAzMjgsIDEsIDMsIDQ2LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE3OTJYMTM0NFA3NSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE3OTIsIDEzNDQsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAyNjEwMDAwMDAsIDk2LCAyMTYsIDM1MiwgMSwgMywgNjksIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1ULCAwKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xNzkyWDEzNDRQMTIwX1JCIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTc5MiwgMTM0NCwgMCwgVjRMMl9EVl9IU1lOQ19QT1NfUE9MLCAgIDMzMzI1MDAwMCwgNDgsIDMyLCA4MCwgMywgNCwgNzIsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1UIHwgVjRMMl9EVl9CVF9TVERfQ1ZULCAgIFY0TDJfRFZfRkxfUkVEVUNFRF9CTEFOS0lORykgIH0KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE4NTZYMTM5MlA2MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE4NTYsIDEzOTIsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAyMTgyNTAwMDAsIDk2LCAyMjQsIDM1MiwgMSwgMywgNDMsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1ULCAwKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xODU2WDEzOTJQNzUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxODU2LCAxMzkyLCAwLCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgMjg4MDAwMDAwLCAxMjgsIDIyNCwgMzUyLCAxLCAzLCAxMDQsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1ULCAwKSAgfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTg1NlgxMzkyUDEyMF9SQiB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE4NTYsIDEzOTIsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAzNTY1MDAwMDAsIDQ4LCAzMiwgODAsIDMsIDQsIDc1LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE5MjBYMTA4MFA2MCBWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQNjAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE5MjBYMTIwMFA2MF9SQiB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE5MjAsIDEyMDAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAxNTQwMDAwMDAsIDQ4LCAzMiwgODAsIDMsIDYsIDI2LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE5MjBYMTIwMFA2MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE5MjAsIDEyMDAsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAxOTMyNTAwMDAsIDEzNiwgMjAwLCAzMzYsIDMsIDYsIDM2LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgMCkgIH0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE5MjBYMTIwMFA3NSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE5MjAsIDEyMDAsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAyNDUyNTAwMDAsIDEzNiwgMjA4LCAzNDQsIDMsIDYsIDQ2LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgMCkgIH0KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTkyMFgxMjAwUDg1IHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMTkyMCwgMTIwMCwgMCwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDI4MTI1MDAwMCwgMTQ0LCAyMDgsIDM1MiwgMywgNiwgNTMsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1UIHwgVjRMMl9EVl9CVF9TVERfQ1ZULCAwKSAgfQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTkyMFgxMjAwUDEyMF9SQiB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE5MjAsIDEyMDAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAzMTcwMDAwMDAsIDQ4LCAzMiwgODAsIDMsIDYsIDYyLCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE5MjBYMTQ0MFA2MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE5MjAsIDE0NDAsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAyMzQwMDAwMDAsIDEyOCwgMjA4LCAzNDQsIDEsIDMsIDU2LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzE5MjBYMTQ0MFA3NSB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE5MjAsIDE0NDAsIDAsIFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAyOTcwMDAwMDAsIDE0NCwgMjI0LCAzNTIsIDEsIDMsIDU2LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTkyMFgxNDQwUDEyMF9SQiB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDE5MjAsIDE0NDAsIDAsIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCwgICAzODA1MDAwMDAsIDQ4LCAzMiwgODAsIDMsIDQsIDc4LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8yMDQ4WDExNTJQNjBfUkIgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMTUyLCAwLCAgIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgICAxNjIwMDAwMDAsIDI2LCA4MCwgOTYsIDEsIDMsIDQ0LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgVjRMMl9EVl9GTF9SRURVQ0VEX0JMQU5LSU5HKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8yNTYwWDE2MDBQNjBfUkIgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygyNTYwLCAxNjAwLCAwLCBWNEwyX0RWX0hTWU5DX1BPU19QT0wsICAgMjY4NTAwMDAwLCA0OCwgMzIsIDgwLCAzLCA2LCAzNywgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsICAgVjRMMl9EVl9GTF9SRURVQ0VEX0JMQU5LSU5HKSAgfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMjU2MFgxNjAwUDYwIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMjU2MCwgMTYwMCwgMCwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDM0ODUwMDAwMCwgMTkyLCAyODAsIDQ3MiwgMywgNiwgNDksIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1UIHwgVjRMMl9EVl9CVF9TVERfQ1ZULCAwKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8yNTYwWDE2MDBQNzUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygyNTYwLCAxNjAwLCAwLCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgNDQzMjUwMDAwLCAyMDgsIDI4MCwgNDg4LCAzLCA2LCA2MywgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsIDApICB9Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8yNTYwWDE2MDBQODUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygyNTYwLCAxNjAwLCAwLCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgNTA1MjUwMDAwLCAyMDgsIDI4MCwgNDg4LCAzLCA2LCA3MywgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsIDApICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzI1NjBYMTYwMFAxMjBfUkIgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygyNTYwLCAxNjAwLCAwLCBWNEwyX0RWX0hTWU5DX1BPU19QT0wsICAgNTUyNzUwMDAwLCA0OCwgMzIsIDgwLCAzLCA2LCA4NSwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsICAgVjRMMl9EVl9GTF9SRURVQ0VEX0JMQU5LSU5HKSAgfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfNDA5NlgyMTYwUDYwX1JCIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoNDA5NiwgMjE2MCwgMCwgVjRMMl9EVl9IU1lOQ19QT1NfUE9MLCAgIDU1Njc0NDAwMCwgOCwgMzIsIDQwLCA0OCwgOCwgNiwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsICAgVjRMMl9EVl9GTF9SRURVQ0VEX0JMQU5LSU5HKSAgfQorI2RlZmluZSBWNEwyX0RWX0JUX0RNVF80MDk2WDIxNjBQNTlfOTRfUkIgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUyg0MDk2LCAyMTYwLCAwLCBWNEwyX0RWX0hTWU5DX1BPU19QT0wsICAgNTU2MTg4MDAwLCA4LCAzMiwgNDAsIDQ4LCA4LCA2LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCB8IFY0TDJfRFZfQlRfU1REX0NWVCwgICBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcpICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdjRsMi1tZWRpYWJ1cy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLW1lZGlhYnVzLmgKaW5kZXggODRhYTVkMy4uNjNlYzkzNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLW1lZGlhYnVzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLW1lZGlhYnVzLmgKQEAgLTUzLDIxICs1MywzNiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01CVVNfRk1UX1lWWVU4XzJYOCA9IDB4MjAwOSwKICBWNEwyX01CVVNfRk1UX1kxMF8xWDEwID0gMHgyMDBhLAorIFY0TDJfTUJVU19GTVRfVVlWWTEwXzJYMTAgPSAweDIwMTgsCisgVjRMMl9NQlVTX0ZNVF9WWVVZMTBfMlgxMCA9IDB4MjAxOSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NQlVTX0ZNVF9ZVVlWMTBfMlgxMCA9IDB4MjAwYiwKICBWNEwyX01CVVNfRk1UX1lWWVUxMF8yWDEwID0gMHgyMDBjLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01CVVNfRk1UX1kxMl8xWDEyID0gMHgyMDEzLAogIFY0TDJfTUJVU19GTVRfVVlWWThfMVgxNiA9IDB4MjAwZiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NQlVTX0ZNVF9WWVVZOF8xWDE2ID0gMHgyMDEwLAogIFY0TDJfTUJVU19GTVRfWVVZVjhfMVgxNiA9IDB4MjAxMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NQlVTX0ZNVF9ZVllVOF8xWDE2ID0gMHgyMDEyLAogIFY0TDJfTUJVU19GTVRfWURZVVlEWVY4XzFYMTYgPSAweDIwMTQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTUJVU19GTVRfVVlWWTEwXzFYMjAgPSAweDIwMWEsCisgVjRMMl9NQlVTX0ZNVF9WWVVZMTBfMVgyMCA9IDB4MjAxYiwKICBWNEwyX01CVVNfRk1UX1lVWVYxMF8xWDIwID0gMHgyMDBkLAogIFY0TDJfTUJVU19GTVRfWVZZVTEwXzFYMjAgPSAweDIwMGUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTUJVU19GTVRfWVVWMTBfMVgzMCA9IDB4MjAxNiwKICBWNEwyX01CVVNfRk1UX0FZVVY4XzFYMzIgPSAweDIwMTcsCisgVjRMMl9NQlVTX0ZNVF9VWVZZMTJfMlgxMiA9IDB4MjAxYywKKyBWNEwyX01CVVNfRk1UX1ZZVVkxMl8yWDEyID0gMHgyMDFkLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01CVVNfRk1UX1lVWVYxMl8yWDEyID0gMHgyMDFlLAorIFY0TDJfTUJVU19GTVRfWVZZVTEyXzJYMTIgPSAweDIwMWYsCisgVjRMMl9NQlVTX0ZNVF9VWVZZMTJfMVgyNCA9IDB4MjAyMCwKKyBWNEwyX01CVVNfRk1UX1ZZVVkxMl8xWDI0ID0gMHgyMDIxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01CVVNfRk1UX1lVWVYxMl8xWDI0ID0gMHgyMDIyLAorIFY0TDJfTUJVU19GTVRfWVZZVTEyXzFYMjQgPSAweDIwMjMsCiAgVjRMMl9NQlVTX0ZNVF9TQkdHUjhfMVg4ID0gMHgzMDAxLAogIFY0TDJfTUJVU19GTVRfU0dCUkc4XzFYOCA9IDB4MzAxMywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItc3ViZGV2LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItc3ViZGV2LmgKaW5kZXggYWQ5Y2I4Yi4uNjNiNmI0NCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLXN1YmRldi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdjRsMi1zdWJkZXYuaApAQCAtOTEsMjkgKzkxLDI4IEBACiAgX191MzIgcmVzZXJ2ZWRbOF07CiB9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLXN0cnVjdCB2NGwyX3N1YmRldl9lZGlkIHsKLSBfX3UzMiBwYWQ7Ci0gX191MzIgc3RhcnRfYmxvY2s7Ci0gX191MzIgYmxvY2tzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBfX3UzMiByZXNlcnZlZFs1XTsKLSBfX3U4IF9fdXNlciAqZWRpZDsKLX07CisjZGVmaW5lIHY0bDJfc3ViZGV2X2VkaWQgdjRsMl9lZGlkCiAjZGVmaW5lIFZJRElPQ19TVUJERVZfR19GTVQgX0lPV1IoJ1YnLCA0LCBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklESU9DX1NVQkRFVl9TX0ZNVCBfSU9XUignVicsIDUsIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQpCi0jZGVmaW5lIFZJRElPQ19TVUJERVZfR19GUkFNRV9JTlRFUlZBTCAgIF9JT1dSKCdWJywgMjEsIHN0cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9pbnRlcnZhbCkKLSNkZWZpbmUgVklESU9DX1NVQkRFVl9TX0ZSQU1FX0lOVEVSVkFMICAgX0lPV1IoJ1YnLCAyMiwgc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX2ludGVydmFsKQotI2RlZmluZSBWSURJT0NfU1VCREVWX0VOVU1fTUJVU19DT0RFICAgX0lPV1IoJ1YnLCAyLCBzdHJ1Y3QgdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0pCisjZGVmaW5lIFZJRElPQ19TVUJERVZfR19GUkFNRV9JTlRFUlZBTCBfSU9XUignVicsIDIxLCBzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfaW50ZXJ2YWwpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBWSURJT0NfU1VCREVWX0VOVU1fRlJBTUVfU0laRSAgIF9JT1dSKCdWJywgNzQsIHN0cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9zaXplX2VudW0pCi0jZGVmaW5lIFZJRElPQ19TVUJERVZfRU5VTV9GUkFNRV9JTlRFUlZBTCAgIF9JT1dSKCdWJywgNzUsIHN0cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9pbnRlcnZhbF9lbnVtKQorI2RlZmluZSBWSURJT0NfU1VCREVWX1NfRlJBTUVfSU5URVJWQUwgX0lPV1IoJ1YnLCAyMiwgc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX2ludGVydmFsKQorI2RlZmluZSBWSURJT0NfU1VCREVWX0VOVU1fTUJVU19DT0RFIF9JT1dSKCdWJywgMiwgc3RydWN0IHY0bDJfc3ViZGV2X21idXNfY29kZV9lbnVtKQorI2RlZmluZSBWSURJT0NfU1VCREVWX0VOVU1fRlJBTUVfU0laRSBfSU9XUignVicsIDc0LCBzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfc2l6ZV9lbnVtKQorI2RlZmluZSBWSURJT0NfU1VCREVWX0VOVU1fRlJBTUVfSU5URVJWQUwgX0lPV1IoJ1YnLCA3NSwgc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX2ludGVydmFsX2VudW0pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURJT0NfU1VCREVWX0dfQ1JPUCBfSU9XUignVicsIDU5LCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY3JvcCkKICNkZWZpbmUgVklESU9DX1NVQkRFVl9TX0NST1AgX0lPV1IoJ1YnLCA2MCwgc3RydWN0IHY0bDJfc3ViZGV2X2Nyb3ApCisjZGVmaW5lIFZJRElPQ19TVUJERVZfR19TRUxFQ1RJT04gX0lPV1IoJ1YnLCA2MSwgc3RydWN0IHY0bDJfc3ViZGV2X3NlbGVjdGlvbikKKyNkZWZpbmUgVklESU9DX1NVQkRFVl9TX1NFTEVDVElPTiBfSU9XUignVicsIDYyLCBzdHJ1Y3QgdjRsMl9zdWJkZXZfc2VsZWN0aW9uKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVklESU9DX1NVQkRFVl9HX1NFTEVDVElPTiAgIF9JT1dSKCdWJywgNjEsIHN0cnVjdCB2NGwyX3N1YmRldl9zZWxlY3Rpb24pCi0jZGVmaW5lIFZJRElPQ19TVUJERVZfU19TRUxFQ1RJT04gICBfSU9XUignVicsIDYyLCBzdHJ1Y3QgdjRsMl9zdWJkZXZfc2VsZWN0aW9uKQotI2RlZmluZSBWSURJT0NfU1VCREVWX0dfRURJRCBfSU9XUignVicsIDQwLCBzdHJ1Y3QgdjRsMl9zdWJkZXZfZWRpZCkKLSNkZWZpbmUgVklESU9DX1NVQkRFVl9TX0VESUQgX0lPV1IoJ1YnLCA0MSwgc3RydWN0IHY0bDJfc3ViZGV2X2VkaWQpCisjZGVmaW5lIFZJRElPQ19TVUJERVZfR19FRElEIF9JT1dSKCdWJywgNDAsIHN0cnVjdCB2NGwyX2VkaWQpCisjZGVmaW5lIFZJRElPQ19TVUJERVZfU19FRElEIF9JT1dSKCdWJywgNDEsIHN0cnVjdCB2NGwyX2VkaWQpCisjZGVmaW5lIFZJRElPQ19TVUJERVZfU19EVl9USU1JTkdTIF9JT1dSKCdWJywgODcsIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MpCisjZGVmaW5lIFZJRElPQ19TVUJERVZfR19EVl9USU1JTkdTIF9JT1dSKCdWJywgODgsIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfU1VCREVWX0VOVU1fRFZfVElNSU5HUyBfSU9XUignVicsIDk4LCBzdHJ1Y3QgdjRsMl9lbnVtX2R2X3RpbWluZ3MpCisjZGVmaW5lIFZJRElPQ19TVUJERVZfUVVFUllfRFZfVElNSU5HUyBfSU9SKCdWJywgOTksIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MpCisjZGVmaW5lIFZJRElPQ19TVUJERVZfRFZfVElNSU5HU19DQVAgX0lPV1IoJ1YnLCAxMDAsIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3NfY2FwKQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92ZXJzaW9uLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZlcnNpb24uaAppbmRleCA3MWU1MzczLi4yZDY2ZWJhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZlcnNpb24uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZlcnNpb24uaApAQCAtMTYsNSArMTYsNSBAQAogICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBMSU5VWF9WRVJTSU9OX0NPREUgMjAwMTkyCisjZGVmaW5lIExJTlVYX1ZFUlNJT05fQ09ERSAyMDA3MDcKICNkZWZpbmUgS0VSTkVMX1ZFUlNJT04oYSxiLGMpICgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZmaW8uaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmZpby5oCmluZGV4IDg4Y2IwNjcuLjRmOWJmYzAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmZpby5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmZpby5oCkBAIC0yNCwxNzYgKzI0LDE3OCBAQAogI2RlZmluZSBWRklPX0FQSV9WRVJTSU9OIDAKICNkZWZpbmUgVkZJT19UWVBFMV9JT01NVSAxCiAjZGVmaW5lIFZGSU9fU1BBUFJfVENFX0lPTU1VIDIKLSNkZWZpbmUgVkZJT19UWVBFICgnOycpCisjZGVmaW5lIFZGSU9fVFlQRTF2Ml9JT01NVSAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWRklPX0RNQV9DQ19JT01NVSA0CisjZGVmaW5lIFZGSU9fVFlQRSAoJzsnKQogI2RlZmluZSBWRklPX0JBU0UgMTAwCiAjZGVmaW5lIFZGSU9fR0VUX0FQSV9WRVJTSU9OIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWRklPX0NIRUNLX0VYVEVOU0lPTiBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAxKQogI2RlZmluZSBWRklPX1NFVF9JT01NVSBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2ZmlvX2dyb3VwX3N0YXR1cyB7CiAgX191MzIgYXJnc3o7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZsYWdzOwogI2RlZmluZSBWRklPX0dST1VQX0ZMQUdTX1ZJQUJMRSAoMSA8PCAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVkZJT19HUk9VUF9GTEFHU19DT05UQUlORVJfU0VUICgxIDw8IDEpCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVkZJT19HUk9VUF9HRVRfU1RBVFVTIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDMpCiAjZGVmaW5lIFZGSU9fR1JPVVBfU0VUX0NPTlRBSU5FUiBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyA0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVkZJT19HUk9VUF9VTlNFVF9DT05UQUlORVIgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgNSkKICNkZWZpbmUgVkZJT19HUk9VUF9HRVRfREVWSUNFX0ZEIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHZmaW9fZGV2aWNlX2luZm8gewogIF9fdTMyIGFyZ3N6OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICNkZWZpbmUgVkZJT19ERVZJQ0VfRkxBR1NfUkVTRVQgKDEgPDwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZMQUdTX1BDSSAoMSA8PCAxKQogIF9fdTMyIG51bV9yZWdpb25zOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBudW1faXJxczsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWRklPX0RFVklDRV9HRVRfSU5GTyBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyA3KQogc3RydWN0IHZmaW9fcmVnaW9uX2luZm8gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhcmdzejsKICBfX3UzMiBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZGSU9fUkVHSU9OX0lORk9fRkxBR19SRUFEICgxIDw8IDApCiAjZGVmaW5lIFZGSU9fUkVHSU9OX0lORk9fRkxBR19XUklURSAoMSA8PCAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVkZJT19SRUdJT05fSU5GT19GTEFHX01NQVAgKDEgPDwgMikKICBfX3UzMiBpbmRleDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzdjsKICBfX3U2NCBzaXplOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBvZmZzZXQ7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVkZJT19ERVZJQ0VfR0VUX1JFR0lPTl9JTkZPIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDgpCiBzdHJ1Y3QgdmZpb19pcnFfaW5mbyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGFyZ3N6OwogIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVkZJT19JUlFfSU5GT19FVkVOVEZEICgxIDw8IDApCiAjZGVmaW5lIFZGSU9fSVJRX0lORk9fTUFTS0FCTEUgKDEgPDwgMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZGSU9fSVJRX0lORk9fQVVUT01BU0tFRCAoMSA8PCAyKQogI2RlZmluZSBWRklPX0lSUV9JTkZPX05PUkVTSVpFICgxIDw8IDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGluZGV4OwogIF9fdTMyIGNvdW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFZGSU9fREVWSUNFX0dFVF9JUlFfSU5GTyBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyA5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2ZmlvX2lycV9zZXQgewogIF9fdTMyIGFyZ3N6OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICNkZWZpbmUgVkZJT19JUlFfU0VUX0RBVEFfTk9ORSAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVkZJT19JUlFfU0VUX0RBVEFfQk9PTCAoMSA8PCAxKQogI2RlZmluZSBWRklPX0lSUV9TRVRfREFUQV9FVkVOVEZEICgxIDw8IDIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWRklPX0lSUV9TRVRfQUNUSU9OX01BU0sgKDEgPDwgMykKICNkZWZpbmUgVkZJT19JUlFfU0VUX0FDVElPTl9VTk1BU0sgKDEgPDwgNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZGSU9fSVJRX1NFVF9BQ1RJT05fVFJJR0dFUiAoMSA8PCA1KQogIF9fdTMyIGluZGV4OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzdGFydDsKICBfX3UzMiBjb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkYXRhW107CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVkZJT19ERVZJQ0VfU0VUX0lSUVMgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTApCiAjZGVmaW5lIFZGSU9fSVJRX1NFVF9EQVRBX1RZUEVfTUFTSyAoVkZJT19JUlFfU0VUX0RBVEFfTk9ORSB8ICAgVkZJT19JUlFfU0VUX0RBVEFfQk9PTCB8ICAgVkZJT19JUlFfU0VUX0RBVEFfRVZFTlRGRCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZGSU9fSVJRX1NFVF9BQ1RJT05fVFlQRV9NQVNLIChWRklPX0lSUV9TRVRfQUNUSU9OX01BU0sgfCAgIFZGSU9fSVJRX1NFVF9BQ1RJT05fVU5NQVNLIHwgICBWRklPX0lSUV9TRVRfQUNUSU9OX1RSSUdHRVIpCiAjZGVmaW5lIFZGSU9fREVWSUNFX1JFU0VUIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDExKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIFZGSU9fUENJX0JBUjBfUkVHSU9OX0lOREVYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWRklPX1BDSV9CQVIxX1JFR0lPTl9JTkRFWCwKICBWRklPX1BDSV9CQVIyX1JFR0lPTl9JTkRFWCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVkZJT19QQ0lfQkFSM19SRUdJT05fSU5ERVgsCiAgVkZJT19QQ0lfQkFSNF9SRUdJT05fSU5ERVgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFZGSU9fUENJX0JBUjVfUkVHSU9OX0lOREVYLAogIFZGSU9fUENJX1JPTV9SRUdJT05fSU5ERVgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFZGSU9fUENJX0NPTkZJR19SRUdJT05fSU5ERVgsCiAgVkZJT19QQ0lfVkdBX1JFR0lPTl9JTkRFWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVkZJT19QQ0lfTlVNX1JFR0lPTlMKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgVkZJT19QQ0lfSU5UWF9JUlFfSU5ERVgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsCiAgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFZGSU9fUENJX0VSUl9JUlFfSU5ERVgsCiAgVkZJT19QQ0lfTlVNX0lSUVMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHZmaW9fcGNpX2RlcGVuZGVudF9kZXZpY2UgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBncm91cF9pZDsKICBfX3UxNiBzZWdtZW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGJ1czsKICBfX3U4IGRldmZuOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdmZpb19wY2lfaG90X3Jlc2V0X2luZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhcmdzejsKICBfX3UzMiBmbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY291bnQ7CiAgc3RydWN0IHZmaW9fcGNpX2RlcGVuZGVudF9kZXZpY2UgZGV2aWNlc1tdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFZGSU9fREVWSUNFX0dFVF9QQ0lfSE9UX1JFU0VUX0lORk8gX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHZmaW9fcGNpX2hvdF9yZXNldCB7CiAgX191MzIgYXJnc3o7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZsYWdzOwogIF9fdTMyIGNvdW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBncm91cF9mZHNbXTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWRklPX0RFVklDRV9QQ0lfSE9UX1JFU0VUIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDEzKQogc3RydWN0IHZmaW9faW9tbXVfdHlwZTFfaW5mbyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGFyZ3N6OwogIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVkZJT19JT01NVV9JTkZPX1BHU0laRVMgKDEgPDwgMCkKICBfX3U2NCBpb3ZhX3Bnc2l6ZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVkZJT19JT01NVV9HRVRfSU5GTyBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAxMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfbWFwIHsKICBfX3UzMiBhcmdzejsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmxhZ3M7CiAjZGVmaW5lIFZGSU9fRE1BX01BUF9GTEFHX1JFQUQgKDEgPDwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZGSU9fRE1BX01BUF9GTEFHX1dSSVRFICgxIDw8IDEpCiAgX191NjQgdmFkZHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGlvdmE7CiAgX191NjQgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWRklPX0lPTU1VX01BUF9ETUEgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHZmaW9faW9tbXVfdHlwZTFfZG1hX3VubWFwIHsKICBfX3UzMiBhcmdzejsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmxhZ3M7CiAgX191NjQgaW92YTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgc2l6ZTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWRklPX0lPTU1VX1VOTUFQX0RNQSBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAxNCkKICNkZWZpbmUgVkZJT19JT01NVV9FTkFCTEUgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWRklPX0lPTU1VX0RJU0FCTEUgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTYpCiBzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl90Y2VfaW5mbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGFyZ3N6OwogIF9fdTMyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBkbWEzMl93aW5kb3dfc3RhcnQ7CiAgX191MzIgZG1hMzJfd2luZG93X3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVkZJT19JT01NVV9TUEFQUl9UQ0VfR0VUX0lORk8gX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92aWRlb2RldjIuaAppbmRleCBiMWM2MDQyLi5iMTkxYmVhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlkZW9kZXYyLmgKQEAgLTYyLDkzICs2Miw5OCBAQAogIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUgPSA5LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUgPSAxMCwKKyBWNEwyX0JVRl9UWVBFX1NEUl9DQVBUVVJFID0gMTEsCiAgVjRMMl9CVUZfVFlQRV9QUklWQVRFID0gMHg4MCwKIH07Ci0jZGVmaW5lIFY0TDJfVFlQRV9JU19NVUxUSVBMQU5BUih0eXBlKSAgICgodHlwZSkgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSAgIHx8ICh0eXBlKSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIodHlwZSkgICAoKHR5cGUpID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUgICB8fCAodHlwZSkgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FKQogI2RlZmluZSBWNEwyX1RZUEVfSVNfT1VUUFVUKHR5cGUpICAgKCh0eXBlKSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAgIHx8ICh0eXBlKSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUgICB8fCAodHlwZSkgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZICAgfHwgKHR5cGUpID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVkgICB8fCAodHlwZSkgPT0gVjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUICAgfHwgKHR5cGUpID09IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQpCiBlbnVtIHY0bDJfdHVuZXJfdHlwZSB7CiAgVjRMMl9UVU5FUl9SQURJTyA9IDEsCi0gVjRMMl9UVU5FUl9BTkFMT0dfVFYgPSAyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX1RVTkVSX0FOQUxPR19UViA9IDIsCiAgVjRMMl9UVU5FUl9ESUdJVEFMX1RWID0gMywKKyBWNEwyX1RVTkVSX0FEQyA9IDQsCisgVjRMMl9UVU5FUl9SRiA9IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gdjRsMl9tZW1vcnkgewogIFY0TDJfTUVNT1JZX01NQVAgPSAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01FTU9SWV9VU0VSUFRSID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NRU1PUllfT1ZFUkxBWSA9IDMsCiAgVjRMMl9NRU1PUllfRE1BQlVGID0gNCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX2NvbG9yc3BhY2UgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNID0gMSwKICBWNEwyX0NPTE9SU1BBQ0VfU01QVEUyNDBNID0gMiwKICBWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5ID0gMywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9DT0xPUlNQQUNFX0JUODc4ID0gNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fTSA9IDUsCiAgVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fQkcgPSA2LAogIFY0TDJfQ09MT1JTUEFDRV9KUEVHID0gNywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9DT0xPUlNQQUNFX1NSR0IgPSA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIHY0bDJfcHJpb3JpdHkgewogIFY0TDJfUFJJT1JJVFlfVU5TRVQgPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX1BSSU9SSVRZX0JBQ0tHUk9VTkQgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX1BSSU9SSVRZX0lOVEVSQUNUSVZFID0gMiwKICBWNEwyX1BSSU9SSVRZX1JFQ09SRCA9IDMsCiAgVjRMMl9QUklPUklUWV9ERUZBVUxUID0gVjRMMl9QUklPUklUWV9JTlRFUkFDVElWRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX3JlY3QgewogIF9fczMyIGxlZnQ7CiAgX19zMzIgdG9wOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3aWR0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGVpZ2h0OwogfTsKIHN0cnVjdCB2NGwyX2ZyYWN0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbnVtZXJhdG9yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBkZW5vbWluYXRvcjsKIH07CiBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkcml2ZXJbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGNhcmRbMzJdOwogIF9fdTggYnVzX2luZm9bMzJdOwogIF9fdTMyIHZlcnNpb247Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNhcGFiaWxpdGllczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZGV2aWNlX2NhcHM7CiAgX191MzIgcmVzZXJ2ZWRbM107CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DQVBfVklERU9fQ0FQVFVSRSAweDAwMDAwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVVRQVVQgMHgwMDAwMDAwMgogI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVkVSTEFZIDB4MDAwMDAwMDQKICNkZWZpbmUgVjRMMl9DQVBfVkJJX0NBUFRVUkUgMHgwMDAwMDAxMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DQVBfVkJJX09VVFBVVCAweDAwMDAwMDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NBUF9TTElDRURfVkJJX0NBUFRVUkUgMHgwMDAwMDA0MAogI2RlZmluZSBWNEwyX0NBUF9TTElDRURfVkJJX09VVFBVVCAweDAwMDAwMDgwCiAjZGVmaW5lIFY0TDJfQ0FQX1JEU19DQVBUVVJFIDB4MDAwMDAxMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9PVkVSTEFZIDB4MDAwMDAyMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0FQX0hXX0ZSRVFfU0VFSyAweDAwMDAwNDAwCiAjZGVmaW5lIFY0TDJfQ0FQX1JEU19PVVRQVVQgMHgwMDAwMDgwMAogI2RlZmluZSBWNEwyX0NBUF9WSURFT19DQVBUVVJFX01QTEFORSAweDAwMDAxMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVVRQVVRfTVBMQU5FIDB4MDAwMDIwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX00yTV9NUExBTkUgMHgwMDAwNDAwMAogI2RlZmluZSBWNEwyX0NBUF9WSURFT19NMk0gMHgwMDAwODAwMAogI2RlZmluZSBWNEwyX0NBUF9UVU5FUiAweDAwMDEwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NBUF9BVURJTyAweDAwMDIwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NBUF9SQURJTyAweDAwMDQwMDAwCiAjZGVmaW5lIFY0TDJfQ0FQX01PRFVMQVRPUiAweDAwMDgwMDAwCisjZGVmaW5lIFY0TDJfQ0FQX1NEUl9DQVBUVVJFIDB4MDAxMDAwMDAKICNkZWZpbmUgVjRMMl9DQVBfUkVBRFdSSVRFIDB4MDEwMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0FQX0FTWU5DSU8gMHgwMjAwMDAwMApAQCAtMzExLDYyMiArMzE2LDYzMiBAQAogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0U0MDEgdjRsMl9mb3VyY2MoJ1MnLCAnNCcsICcwJywgJzEnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfUzVDX1VZVllfSlBHIHY0bDJfZm91cmNjKCdTJywgJzUnLCAnQycsICdJJykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfU0RSX0ZNVF9DVTggdjRsMl9mb3VyY2MoJ0MnLCAnVScsICcwJywgJzgnKQorI2RlZmluZSBWNEwyX1NEUl9GTVRfQ1UxNkxFIHY0bDJfZm91cmNjKCdDJywgJ1UnLCAnMScsICc2JykKIHN0cnVjdCB2NGwyX2ZtdGRlc2MgewogIF9fdTMyIGluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIF9fdTMyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGRlc2NyaXB0aW9uWzMyXTsKICBfX3UzMiBwaXhlbGZvcm1hdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbNF07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEIDB4MDAwMQogI2RlZmluZSBWNEwyX0ZNVF9GTEFHX0VNVUxBVEVEIDB4MDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9mcm1zaXpldHlwZXMgewogIFY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRFID0gMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9GUk1TSVpFX1RZUEVfQ09OVElOVU9VUyA9IDIsCiAgVjRMMl9GUk1TSVpFX1RZUEVfU1RFUFdJU0UgPSAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl9mcm1zaXplX2Rpc2NyZXRlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgd2lkdGg7CiAgX191MzIgaGVpZ2h0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl9mcm1zaXplX3N0ZXB3aXNlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWluX3dpZHRoOwogIF9fdTMyIG1heF93aWR0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc3RlcF93aWR0aDsKICBfX3UzMiBtaW5faGVpZ2h0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfaGVpZ2h0OwogIF9fdTMyIHN0ZXBfaGVpZ2h0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl9mcm1zaXplZW51bSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGluZGV4OwogIF9fdTMyIHBpeGVsX2Zvcm1hdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHlwZTsKICB1bmlvbiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX2ZybXNpemVfZGlzY3JldGUgZGlzY3JldGU7CiAgc3RydWN0IHY0bDJfZnJtc2l6ZV9zdGVwd2lzZSBzdGVwd2lzZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKICBfX3UzMiByZXNlcnZlZFsyXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSB2NGwyX2ZybWl2YWx0eXBlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfRlJNSVZBTF9UWVBFX0RJU0NSRVRFID0gMSwKICBWNEwyX0ZSTUlWQUxfVFlQRV9DT05USU5VT1VTID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9GUk1JVkFMX1RZUEVfU1RFUFdJU0UgPSAzLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9mcm1pdmFsX3N0ZXB3aXNlIHsKICBzdHJ1Y3QgdjRsMl9mcmFjdCBtaW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX2ZyYWN0IG1heDsKICBzdHJ1Y3QgdjRsMl9mcmFjdCBzdGVwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGluZGV4OwogIF9fdTMyIHBpeGVsX2Zvcm1hdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgd2lkdGg7CiAgX191MzIgaGVpZ2h0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIHVuaW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfZnJhY3QgZGlzY3JldGU7CiAgc3RydWN0IHY0bDJfZnJtaXZhbF9zdGVwd2lzZSBzdGVwd2lzZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKICBfX3UzMiByZXNlcnZlZFsyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHY0bDJfdGltZWNvZGUgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGZyYW1lczsKICBfX3U4IHNlY29uZHM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbWludXRlczsKICBfX3U4IGhvdXJzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHVzZXJiaXRzWzRdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVENfVFlQRV8yNEZQUyAxCiAjZGVmaW5lIFY0TDJfVENfVFlQRV8yNUZQUyAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RDX1RZUEVfMzBGUFMgMwogI2RlZmluZSBWNEwyX1RDX1RZUEVfNTBGUFMgNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UQ19UWVBFXzYwRlBTIDUKICNkZWZpbmUgVjRMMl9UQ19GTEFHX0RST1BGUkFNRSAweDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVENfRkxBR19DT0xPUkZSQU1FIDB4MDAwMgogI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTX2ZpZWxkIDB4MDAwQwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UQ19VU0VSQklUU19VU0VSREVGSU5FRCAweDAwMDAKICNkZWZpbmUgVjRMMl9UQ19VU0VSQklUU184QklUQ0hBUlMgMHgwMDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uIHsKICBpbnQgcXVhbGl0eTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IEFQUG47CiAgaW50IEFQUF9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgQVBQX2RhdGFbNjBdOwogIGludCBDT01fbGVuOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIENPTV9kYXRhWzYwXTsKICBfX3UzMiBqcGVnX21hcmtlcnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RIVCAoMTw8MykKICNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9EUVQgKDE8PDQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RSSSAoMTw8NSkKICNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9DT00gKDE8PDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0FQUCAoMTw8NykKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgewogIF9fdTMyIGNvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIF9fdTMyIG1lbW9yeTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbMl07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX3BsYW5lIHsKICBfX3UzMiBieXRlc3VzZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxlbmd0aDsKICB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1lbV9vZmZzZXQ7CiAgdW5zaWduZWQgbG9uZyB1c2VycHRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBmZDsKICB9IG07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGRhdGFfb2Zmc2V0OwogIF9fdTMyIHJlc2VydmVkWzExXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHY0bDJfYnVmZmVyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5kZXg7CiAgX191MzIgdHlwZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYnl0ZXN1c2VkOwogIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmaWVsZDsKICBzdHJ1Y3QgdGltZXZhbCB0aW1lc3RhbXA7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX3RpbWVjb2RlIHRpbWVjb2RlOwogIF9fdTMyIHNlcXVlbmNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtZW1vcnk7CiAgdW5pb24gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvZmZzZXQ7CiAgdW5zaWduZWQgbG9uZyB1c2VycHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9wbGFuZSAqcGxhbmVzOwogIF9fczMyIGZkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IG07CiAgX191MzIgbGVuZ3RoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZDI7CiAgX191MzIgcmVzZXJ2ZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19NQVBQRUQgMHgwMDAxCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfUVVFVUVEIDB4MDAwMgotI2RlZmluZSBWNEwyX0JVRl9GTEFHX0RPTkUgMHgwMDA0CisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfTUFQUEVEIDB4MDAwMDAwMDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfS0VZRlJBTUUgMHgwMDA4Ci0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfUEZSQU1FIDB4MDAxMAotI2RlZmluZSBWNEwyX0JVRl9GTEFHX0JGUkFNRSAweDAwMjAKLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19FUlJPUiAweDAwNDAKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19RVUVVRUQgMHgwMDAwMDAwMgorI2RlZmluZSBWNEwyX0JVRl9GTEFHX0RPTkUgMHgwMDAwMDAwNAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX0tFWUZSQU1FIDB4MDAwMDAwMDgKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19QRlJBTUUgMHgwMDAwMDAxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19USU1FQ09ERSAweDAxMDAKLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19QUkVQQVJFRCAweDA0MDAKLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19OT19DQUNIRV9JTlZBTElEQVRFIDB4MDgwMAotI2RlZmluZSBWNEwyX0JVRl9GTEFHX05PX0NBQ0hFX0NMRUFOIDB4MTAwMAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX0JGUkFNRSAweDAwMDAwMDIwCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfRVJST1IgMHgwMDAwMDA0MAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVDT0RFIDB4MDAwMDAxMDAKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19QUkVQQVJFRCAweDAwMDAwNDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9NQVNLIDB4ZTAwMAotI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9VTktOT1dOIDB4MDAwMAotI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9NT05PVE9OSUMgMHgyMDAwCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX0NPUFkgMHg0MDAwCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfTk9fQ0FDSEVfSU5WQUxJREFURSAweDAwMDAwODAwCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfTk9fQ0FDSEVfQ0xFQU4gMHgwMDAwMTAwMAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9NQVNLIDB4MDAwMGUwMDAKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfVU5LTk9XTiAweDAwMDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9NT05PVE9OSUMgMHgwMDAwMjAwMAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9DT1BZIDB4MDAwMDQwMDAKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19UU1RBTVBfU1JDX01BU0sgMHgwMDA3MDAwMAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RTVEFNUF9TUkNfRU9GIDB4MDAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfVFNUQU1QX1NSQ19TT0UgMHgwMDAxMDAwMAogc3RydWN0IHY0bDJfZXhwb3J0YnVmZmVyIHsKICBfX3UzMiB0eXBlOwogIF9fdTMyIGluZGV4OwotIF9fdTMyIHBsYW5lOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBwbGFuZTsKICBfX3UzMiBmbGFnczsKICBfX3MzMiBmZDsKICBfX3UzMiByZXNlcnZlZFsxMV07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciB7CiAgX191MzIgY2FwYWJpbGl0eTsKICBfX3UzMiBmbGFnczsKLSB2b2lkICpiYXNlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB2b2lkICpiYXNlOwogIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZm10OwogfTsKICNkZWZpbmUgVjRMMl9GQlVGX0NBUF9FWFRFUk5PVkVSTEFZIDB4MDAwMQotI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0NIUk9NQUtFWSAweDAwMDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRkJVRl9DQVBfQ0hST01BS0VZIDB4MDAwMgogI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xJU1RfQ0xJUFBJTkcgMHgwMDA0CiAjZGVmaW5lIFY0TDJfRkJVRl9DQVBfQklUTUFQX0NMSVBQSU5HIDB4MDAwOAogI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xPQ0FMX0FMUEhBIDB4MDAxMAotI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0dMT0JBTF9BTFBIQSAweDAwMjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRkJVRl9DQVBfR0xPQkFMX0FMUEhBIDB4MDAyMAogI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xPQ0FMX0lOVl9BTFBIQSAweDAwNDAKICNkZWZpbmUgVjRMMl9GQlVGX0NBUF9TUkNfQ0hST01BS0VZIDB4MDA4MAogI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19QUklNQVJZIDB4MDAwMQotI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19PVkVSTEFZIDB4MDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWSAweDAwMDIKICNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfQ0hST01BS0VZIDB4MDAwNAogI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19MT0NBTF9BTFBIQSAweDAwMDgKICNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfR0xPQkFMX0FMUEhBIDB4MDAxMAotI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19MT0NBTF9JTlZfQUxQSEEgMHgwMDIwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19MT0NBTF9JTlZfQUxQSEEgMHgwMDIwCiAjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX1NSQ19DSFJPTUFLRVkgMHgwMDQwCiBzdHJ1Y3QgdjRsMl9jbGlwIHsKICBzdHJ1Y3QgdjRsMl9yZWN0IGM7Ci0gc3RydWN0IHY0bDJfY2xpcCBfX3VzZXIgKm5leHQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB2NGwyX2NsaXAgX191c2VyICpuZXh0OwogfTsKIHN0cnVjdCB2NGwyX3dpbmRvdyB7CiAgc3RydWN0IHY0bDJfcmVjdCB3OwotIF9fdTMyIGZpZWxkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmaWVsZDsKICBfX3UzMiBjaHJvbWFrZXk7CiAgc3RydWN0IHY0bDJfY2xpcCBfX3VzZXIgKmNsaXBzOwogIF9fdTMyIGNsaXBjb3VudDsKLSB2b2lkIF9fdXNlciAqYml0bWFwOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB2b2lkIF9fdXNlciAqYml0bWFwOwogIF9fdTggZ2xvYmFsX2FscGhhOwogfTsKIHN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtIHsKLSBfX3UzMiBjYXBhYmlsaXR5OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBjYXBhYmlsaXR5OwogIF9fdTMyIGNhcHR1cmVtb2RlOwogIHN0cnVjdCB2NGwyX2ZyYWN0IHRpbWVwZXJmcmFtZTsKICBfX3UzMiBleHRlbmRlZG1vZGU7Ci0gX191MzIgcmVhZGJ1ZmZlcnM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHJlYWRidWZmZXJzOwogIF9fdTMyIHJlc2VydmVkWzRdOwogfTsKICNkZWZpbmUgVjRMMl9NT0RFX0hJR0hRVUFMSVRZIDB4MDAwMQotI2RlZmluZSBWNEwyX0NBUF9USU1FUEVSRlJBTUUgMHgxMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NBUF9USU1FUEVSRlJBTUUgMHgxMDAwCiBzdHJ1Y3QgdjRsMl9vdXRwdXRwYXJtIHsKICBfX3UzMiBjYXBhYmlsaXR5OwogIF9fdTMyIG91dHB1dG1vZGU7Ci0gc3RydWN0IHY0bDJfZnJhY3QgdGltZXBlcmZyYW1lOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgdjRsMl9mcmFjdCB0aW1lcGVyZnJhbWU7CiAgX191MzIgZXh0ZW5kZWRtb2RlOwogIF9fdTMyIHdyaXRlYnVmZmVyczsKICBfX3UzMiByZXNlcnZlZFs0XTsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCB2NGwyX2Nyb3BjYXAgewogIF9fdTMyIHR5cGU7CiAgc3RydWN0IHY0bDJfcmVjdCBib3VuZHM7Ci0gc3RydWN0IHY0bDJfcmVjdCBkZWZyZWN0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgdjRsMl9yZWN0IGRlZnJlY3Q7CiAgc3RydWN0IHY0bDJfZnJhY3QgcGl4ZWxhc3BlY3Q7CiB9Owogc3RydWN0IHY0bDJfY3JvcCB7Ci0gX191MzIgdHlwZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdHlwZTsKICBzdHJ1Y3QgdjRsMl9yZWN0IGM7CiB9Owogc3RydWN0IHY0bDJfc2VsZWN0aW9uIHsKLSBfX3UzMiB0eXBlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0eXBlOwogIF9fdTMyIHRhcmdldDsKICBfX3UzMiBmbGFnczsKICBzdHJ1Y3QgdjRsMl9yZWN0IHI7Ci0gX191MzIgcmVzZXJ2ZWRbOV07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHJlc2VydmVkWzldOwogfTsKIHR5cGVkZWYgX191NjQgdjRsMl9zdGRfaWQ7CiAjZGVmaW5lIFY0TDJfU1REX1BBTF9CICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMSkKLSNkZWZpbmUgVjRMMl9TVERfUEFMX0IxICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CMSAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDIpCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9HICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwNCkKICNkZWZpbmUgVjRMMl9TVERfUEFMX0ggKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDA4KQogI2RlZmluZSBWNEwyX1NURF9QQUxfSSAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMTApCi0jZGVmaW5lIFY0TDJfU1REX1BBTF9EICgodjRsMl9zdGRfaWQpMHgwMDAwMDAyMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfU1REX1BBTF9EICgodjRsMl9zdGRfaWQpMHgwMDAwMDAyMCkKICNkZWZpbmUgVjRMMl9TVERfUEFMX0QxICgodjRsMl9zdGRfaWQpMHgwMDAwMDA0MCkKICNkZWZpbmUgVjRMMl9TVERfUEFMX0sgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDgwKQogI2RlZmluZSBWNEwyX1NURF9QQUxfTSAoKHY0bDJfc3RkX2lkKTB4MDAwMDAxMDApCi0jZGVmaW5lIFY0TDJfU1REX1BBTF9OICgodjRsMl9zdGRfaWQpMHgwMDAwMDIwMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfU1REX1BBTF9OICgodjRsMl9zdGRfaWQpMHgwMDAwMDIwMCkKICNkZWZpbmUgVjRMMl9TVERfUEFMX05jICgodjRsMl9zdGRfaWQpMHgwMDAwMDQwMCkKICNkZWZpbmUgVjRMMl9TVERfUEFMXzYwICgodjRsMl9zdGRfaWQpMHgwMDAwMDgwMCkKICNkZWZpbmUgVjRMMl9TVERfTlRTQ19NICgodjRsMl9zdGRfaWQpMHgwMDAwMTAwMCkKLSNkZWZpbmUgVjRMMl9TVERfTlRTQ19NX0pQICgodjRsMl9zdGRfaWQpMHgwMDAwMjAwMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfU1REX05UU0NfTV9KUCAoKHY0bDJfc3RkX2lkKTB4MDAwMDIwMDApCiAjZGVmaW5lIFY0TDJfU1REX05UU0NfNDQzICgodjRsMl9zdGRfaWQpMHgwMDAwNDAwMCkKICNkZWZpbmUgVjRMMl9TVERfTlRTQ19NX0tSICgodjRsMl9zdGRfaWQpMHgwMDAwODAwMCkKICNkZWZpbmUgVjRMMl9TVERfU0VDQU1fQiAoKHY0bDJfc3RkX2lkKTB4MDAwMTAwMDApCi0jZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0QgKCh2NGwyX3N0ZF9pZCkweDAwMDIwMDAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fRCAoKHY0bDJfc3RkX2lkKTB4MDAwMjAwMDApCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0cgKCh2NGwyX3N0ZF9pZCkweDAwMDQwMDAwKQogI2RlZmluZSBWNEwyX1NURF9TRUNBTV9IICgodjRsMl9zdGRfaWQpMHgwMDA4MDAwMCkKICNkZWZpbmUgVjRMMl9TVERfU0VDQU1fSyAoKHY0bDJfc3RkX2lkKTB4MDAxMDAwMDApCi0jZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0sxICgodjRsMl9zdGRfaWQpMHgwMDIwMDAwMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0sxICgodjRsMl9zdGRfaWQpMHgwMDIwMDAwMCkKICNkZWZpbmUgVjRMMl9TVERfU0VDQU1fTCAoKHY0bDJfc3RkX2lkKTB4MDA0MDAwMDApCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0xDICgodjRsMl9zdGRfaWQpMHgwMDgwMDAwMCkKICNkZWZpbmUgVjRMMl9TVERfQVRTQ184X1ZTQiAoKHY0bDJfc3RkX2lkKTB4MDEwMDAwMDApCi0jZGVmaW5lIFY0TDJfU1REX0FUU0NfMTZfVlNCICgodjRsMl9zdGRfaWQpMHgwMjAwMDAwMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfU1REX0FUU0NfMTZfVlNCICgodjRsMl9zdGRfaWQpMHgwMjAwMDAwMCkKICNkZWZpbmUgVjRMMl9TVERfTlRTQyAoVjRMMl9TVERfTlRTQ19NIHwgIFY0TDJfU1REX05UU0NfTV9KUCB8ICBWNEwyX1NURF9OVFNDX01fS1IpCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0RLIChWNEwyX1NURF9TRUNBTV9EIHwgIFY0TDJfU1REX1NFQ0FNX0sgfCAgVjRMMl9TVERfU0VDQU1fSzEpCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNIChWNEwyX1NURF9TRUNBTV9CIHwgIFY0TDJfU1REX1NFQ0FNX0cgfCAgVjRMMl9TVERfU0VDQU1fSCB8ICBWNEwyX1NURF9TRUNBTV9ESyB8ICBWNEwyX1NURF9TRUNBTV9MIHwgIFY0TDJfU1REX1NFQ0FNX0xDKQotI2RlZmluZSBWNEwyX1NURF9QQUxfQkcgKFY0TDJfU1REX1BBTF9CIHwgIFY0TDJfU1REX1BBTF9CMSB8ICBWNEwyX1NURF9QQUxfRykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CRyAoVjRMMl9TVERfUEFMX0IgfCAgVjRMMl9TVERfUEFMX0IxIHwgIFY0TDJfU1REX1BBTF9HKQogI2RlZmluZSBWNEwyX1NURF9QQUxfREsgKFY0TDJfU1REX1BBTF9EIHwgIFY0TDJfU1REX1BBTF9EMSB8ICBWNEwyX1NURF9QQUxfSykKICNkZWZpbmUgVjRMMl9TVERfUEFMIChWNEwyX1NURF9QQUxfQkcgfCAgVjRMMl9TVERfUEFMX0RLIHwgIFY0TDJfU1REX1BBTF9IIHwgIFY0TDJfU1REX1BBTF9JKQogI2RlZmluZSBWNEwyX1NURF9CIChWNEwyX1NURF9QQUxfQiB8ICBWNEwyX1NURF9QQUxfQjEgfCAgVjRMMl9TVERfU0VDQU1fQikKLSNkZWZpbmUgVjRMMl9TVERfRyAoVjRMMl9TVERfUEFMX0cgfCAgVjRMMl9TVERfU0VDQU1fRykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfU1REX0cgKFY0TDJfU1REX1BBTF9HIHwgIFY0TDJfU1REX1NFQ0FNX0cpCiAjZGVmaW5lIFY0TDJfU1REX0ggKFY0TDJfU1REX1BBTF9IIHwgIFY0TDJfU1REX1NFQ0FNX0gpCiAjZGVmaW5lIFY0TDJfU1REX0wgKFY0TDJfU1REX1NFQ0FNX0wgfCAgVjRMMl9TVERfU0VDQU1fTEMpCiAjZGVmaW5lIFY0TDJfU1REX0dIIChWNEwyX1NURF9HIHwgIFY0TDJfU1REX0gpCi0jZGVmaW5lIFY0TDJfU1REX0RLIChWNEwyX1NURF9QQUxfREsgfCAgVjRMMl9TVERfU0VDQU1fREspCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1NURF9ESyAoVjRMMl9TVERfUEFMX0RLIHwgIFY0TDJfU1REX1NFQ0FNX0RLKQogI2RlZmluZSBWNEwyX1NURF9CRyAoVjRMMl9TVERfQiB8ICBWNEwyX1NURF9HKQogI2RlZmluZSBWNEwyX1NURF9NTiAoVjRMMl9TVERfUEFMX00gfCAgVjRMMl9TVERfUEFMX04gfCAgVjRMMl9TVERfUEFMX05jIHwgIFY0TDJfU1REX05UU0MpCiAjZGVmaW5lIFY0TDJfU1REX01UUyAoVjRMMl9TVERfTlRTQ19NIHwgIFY0TDJfU1REX1BBTF9NIHwgIFY0TDJfU1REX1BBTF9OIHwgIFY0TDJfU1REX1BBTF9OYykKLSNkZWZpbmUgVjRMMl9TVERfNTI1XzYwIChWNEwyX1NURF9QQUxfTSB8ICBWNEwyX1NURF9QQUxfNjAgfCAgVjRMMl9TVERfTlRTQyB8ICBWNEwyX1NURF9OVFNDXzQ0MykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfU1REXzUyNV82MCAoVjRMMl9TVERfUEFMX00gfCAgVjRMMl9TVERfUEFMXzYwIHwgIFY0TDJfU1REX05UU0MgfCAgVjRMMl9TVERfTlRTQ180NDMpCiAjZGVmaW5lIFY0TDJfU1REXzYyNV81MCAoVjRMMl9TVERfUEFMIHwgIFY0TDJfU1REX1BBTF9OIHwgIFY0TDJfU1REX1BBTF9OYyB8ICBWNEwyX1NURF9TRUNBTSkKICNkZWZpbmUgVjRMMl9TVERfQVRTQyAoVjRMMl9TVERfQVRTQ184X1ZTQiB8ICBWNEwyX1NURF9BVFNDXzE2X1ZTQikKICNkZWZpbmUgVjRMMl9TVERfVU5LTk9XTiAwCi0jZGVmaW5lIFY0TDJfU1REX0FMTCAoVjRMMl9TVERfNTI1XzYwIHwgIFY0TDJfU1REXzYyNV81MCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfU1REX0FMTCAoVjRMMl9TVERfNTI1XzYwIHwgIFY0TDJfU1REXzYyNV81MCkKIHN0cnVjdCB2NGwyX3N0YW5kYXJkIHsKICBfX3UzMiBpbmRleDsKICB2NGwyX3N0ZF9pZCBpZDsKLSBfX3U4IG5hbWVbMjRdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IG5hbWVbMjRdOwogIHN0cnVjdCB2NGwyX2ZyYWN0IGZyYW1lcGVyaW9kOwogIF9fdTMyIGZyYW1lbGluZXM7CiAgX191MzIgcmVzZXJ2ZWRbNF07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgdjRsMl9idF90aW1pbmdzIHsKICBfX3UzMiB3aWR0aDsKICBfX3UzMiBoZWlnaHQ7Ci0gX191MzIgaW50ZXJsYWNlZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaW50ZXJsYWNlZDsKICBfX3UzMiBwb2xhcml0aWVzOwogIF9fdTY0IHBpeGVsY2xvY2s7CiAgX191MzIgaGZyb250cG9yY2g7Ci0gX191MzIgaHN5bmM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGhzeW5jOwogIF9fdTMyIGhiYWNrcG9yY2g7CiAgX191MzIgdmZyb250cG9yY2g7CiAgX191MzIgdnN5bmM7Ci0gX191MzIgdmJhY2twb3JjaDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdmJhY2twb3JjaDsKICBfX3UzMiBpbF92ZnJvbnRwb3JjaDsKICBfX3UzMiBpbF92c3luYzsKICBfX3UzMiBpbF92YmFja3BvcmNoOwotIF9fdTMyIHN0YW5kYXJkczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgc3RhbmRhcmRzOwogIF9fdTMyIGZsYWdzOwogIF9fdTMyIHJlc2VydmVkWzE0XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotI2RlZmluZSBWNEwyX0RWX1BST0dSRVNTSVZFIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRFZfUFJPR1JFU1NJVkUgMAogI2RlZmluZSBWNEwyX0RWX0lOVEVSTEFDRUQgMQogI2RlZmluZSBWNEwyX0RWX1ZTWU5DX1BPU19QT0wgMHgwMDAwMDAwMQogI2RlZmluZSBWNEwyX0RWX0hTWU5DX1BPU19QT0wgMHgwMDAwMDAwMgotI2RlZmluZSBWNEwyX0RWX0JUX1NURF9DRUE4NjEgKDEgPDwgMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRFZfQlRfU1REX0NFQTg2MSAoMSA8PCAwKQogI2RlZmluZSBWNEwyX0RWX0JUX1NURF9ETVQgKDEgPDwgMSkKICNkZWZpbmUgVjRMMl9EVl9CVF9TVERfQ1ZUICgxIDw8IDIpCiAjZGVmaW5lIFY0TDJfRFZfQlRfU1REX0dURiAoMSA8PCAzKQotI2RlZmluZSBWNEwyX0RWX0ZMX1JFRFVDRURfQkxBTktJTkcgKDEgPDwgMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRFZfRkxfUkVEVUNFRF9CTEFOS0lORyAoMSA8PCAwKQogI2RlZmluZSBWNEwyX0RWX0ZMX0NBTl9SRURVQ0VfRlBTICgxIDw8IDEpCiAjZGVmaW5lIFY0TDJfRFZfRkxfUkVEVUNFRF9GUFMgKDEgPDwgMikKICNkZWZpbmUgVjRMMl9EVl9GTF9IQUxGX0xJTkUgKDEgPDwgMykKLSNkZWZpbmUgVjRMMl9EVl9CVF9CTEFOS0lOR19XSURUSChidCkgICAoYnQtPmhmcm9udHBvcmNoICsgYnQtPmhzeW5jICsgYnQtPmhiYWNrcG9yY2gpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBWNEwyX0RWX0JUX0ZSQU1FX1dJRFRIKGJ0KSAgIChidC0+d2lkdGggKyBWNEwyX0RWX0JUX0JMQU5LSU5HX1dJRFRIKGJ0KSkKLSNkZWZpbmUgVjRMMl9EVl9CVF9CTEFOS0lOR19IRUlHSFQoYnQpICAgKGJ0LT52ZnJvbnRwb3JjaCArIGJ0LT52c3luYyArIGJ0LT52YmFja3BvcmNoICsgICBidC0+aWxfdmZyb250cG9yY2ggKyBidC0+aWxfdnN5bmMgKyBidC0+aWxfdmJhY2twb3JjaCkKLSNkZWZpbmUgVjRMMl9EVl9CVF9GUkFNRV9IRUlHSFQoYnQpICAgKGJ0LT5oZWlnaHQgKyBWNEwyX0RWX0JUX0JMQU5LSU5HX0hFSUdIVChidCkpCisjZGVmaW5lIFY0TDJfRFZfQlRfQkxBTktJTkdfV0lEVEgoYnQpICAgKChidCktPmhmcm9udHBvcmNoICsgKGJ0KS0+aHN5bmMgKyAoYnQpLT5oYmFja3BvcmNoKQorI2RlZmluZSBWNEwyX0RWX0JUX0ZSQU1FX1dJRFRIKGJ0KSAgICgoYnQpLT53aWR0aCArIFY0TDJfRFZfQlRfQkxBTktJTkdfV0lEVEgoYnQpKQorI2RlZmluZSBWNEwyX0RWX0JUX0JMQU5LSU5HX0hFSUdIVChidCkgICAoKGJ0KS0+dmZyb250cG9yY2ggKyAoYnQpLT52c3luYyArIChidCktPnZiYWNrcG9yY2ggKyAgIChidCktPmlsX3Zmcm9udHBvcmNoICsgKGJ0KS0+aWxfdnN5bmMgKyAoYnQpLT5pbF92YmFja3BvcmNoKQorI2RlZmluZSBWNEwyX0RWX0JUX0ZSQU1FX0hFSUdIVChidCkgICAoKGJ0KS0+aGVpZ2h0ICsgVjRMMl9EVl9CVF9CTEFOS0lOR19IRUlHSFQoYnQpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIHVuaW9uIHsKICBzdHJ1Y3QgdjRsMl9idF90aW1pbmdzIGJ0OwotIF9fdTMyIHJlc2VydmVkWzMyXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcmVzZXJ2ZWRbMzJdOwogIH07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKICNkZWZpbmUgVjRMMl9EVl9CVF82NTZfMTEyMCAwCi1zdHJ1Y3QgdjRsMl9lbnVtX2R2X3RpbWluZ3MgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB2NGwyX2VudW1fZHZfdGltaW5ncyB7CiAgX191MzIgaW5kZXg7Ci0gX191MzIgcmVzZXJ2ZWRbM107CisgX191MzIgcGFkOworIF9fdTMyIHJlc2VydmVkWzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzIHRpbWluZ3M7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2J0X3RpbWluZ3NfY2FwIHsKICBfX3UzMiBtaW5fd2lkdGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF93aWR0aDsKICBfX3UzMiBtaW5faGVpZ2h0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfaGVpZ2h0OwogIF9fdTY0IG1pbl9waXhlbGNsb2NrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBtYXhfcGl4ZWxjbG9jazsKICBfX3UzMiBzdGFuZGFyZHM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNhcGFiaWxpdGllczsKICBfX3UzMiByZXNlcnZlZFsxNl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIFY0TDJfRFZfQlRfQ0FQX0lOVEVSTEFDRUQgKDEgPDwgMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfQ0FQX1BST0dSRVNTSVZFICgxIDw8IDEpCiAjZGVmaW5lIFY0TDJfRFZfQlRfQ0FQX1JFRFVDRURfQkxBTktJTkcgKDEgPDwgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfQ0FQX0NVU1RPTSAoMSA8PCAzKQogc3RydWN0IHY0bDJfZHZfdGltaW5nc19jYXAgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwotIF9fdTMyIHJlc2VydmVkWzNdOworIF9fdTMyIHBhZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcmVzZXJ2ZWRbMl07CiAgdW5pb24gewogIHN0cnVjdCB2NGwyX2J0X3RpbWluZ3NfY2FwIGJ0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByYXdfZGF0YVszMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH07CiB9Owogc3RydWN0IHY0bDJfaW5wdXQgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpbmRleDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBuYW1lWzMyXTsKICBfX3UzMiB0eXBlOwogIF9fdTMyIGF1ZGlvc2V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0dW5lcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdjRsMl9zdGRfaWQgc3RkOwogIF9fdTMyIHN0YXR1czsKICBfX3UzMiBjYXBhYmlsaXRpZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfSU5QVVRfVFlQRV9UVU5FUiAxCiAjZGVmaW5lIFY0TDJfSU5QVVRfVFlQRV9DQU1FUkEgMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9JTl9TVF9OT19QT1dFUiAweDAwMDAwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0lOX1NUX05PX1NJR05BTCAweDAwMDAwMDAyCiAjZGVmaW5lIFY0TDJfSU5fU1RfTk9fQ09MT1IgMHgwMDAwMDAwNAogI2RlZmluZSBWNEwyX0lOX1NUX0hGTElQIDB4MDAwMDAwMTAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfSU5fU1RfVkZMSVAgMHgwMDAwMDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9JTl9TVF9OT19IX0xPQ0sgMHgwMDAwMDEwMAogI2RlZmluZSBWNEwyX0lOX1NUX0NPTE9SX0tJTEwgMHgwMDAwMDIwMAogI2RlZmluZSBWNEwyX0lOX1NUX05PX1NZTkMgMHgwMDAxMDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9JTl9TVF9OT19FUVUgMHgwMDAyMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9JTl9TVF9OT19DQVJSSUVSIDB4MDAwNDAwMDAKICNkZWZpbmUgVjRMMl9JTl9TVF9NQUNST1ZJU0lPTiAweDAxMDAwMDAwCiAjZGVmaW5lIFY0TDJfSU5fU1RfTk9fQUNDRVNTIDB4MDIwMDAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfSU5fU1RfVlRSIDB4MDQwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfSU5fQ0FQX0RWX1RJTUlOR1MgMHgwMDAwMDAwMgogI2RlZmluZSBWNEwyX0lOX0NBUF9DVVNUT01fVElNSU5HUyBWNEwyX0lOX0NBUF9EVl9USU1JTkdTCiAjZGVmaW5lIFY0TDJfSU5fQ0FQX1NURCAweDAwMDAwMDA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfb3V0cHV0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5kZXg7CiAgX191OCBuYW1lWzMyXTsKICBfX3UzMiB0eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhdWRpb3NldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbW9kdWxhdG9yOwogIHY0bDJfc3RkX2lkIHN0ZDsKICBfX3UzMiBjYXBhYmlsaXRpZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfTU9EVUxBVE9SIDEKICNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0cgMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0dWR0FPVkVSTEFZIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfT1VUX0NBUF9EVl9USU1JTkdTIDB4MDAwMDAwMDIKICNkZWZpbmUgVjRMMl9PVVRfQ0FQX0NVU1RPTV9USU1JTkdTIFY0TDJfT1VUX0NBUF9EVl9USU1JTkdTCiAjZGVmaW5lIFY0TDJfT1VUX0NBUF9TVEQgMHgwMDAwMDAwNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2NvbnRyb2wgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpZDsKICBfX3MzMiB2YWx1ZTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpZDsKICBfX3UzMiBzaXplOwogIF9fdTMyIHJlc2VydmVkMlsxXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiB2YWx1ZTsKICBfX3M2NCB2YWx1ZTY0OwogIGNoYXIgKnN0cmluZzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyB7CiAgX191MzIgY3RybF9jbGFzczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGVycm9yX2lkeDsKICBfX3UzMiByZXNlcnZlZFsyXTsKICBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY29udHJvbHM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ1RSTF9JRF9NQVNLICgweDBmZmZmZmZmKQogI2RlZmluZSBWNEwyX0NUUkxfSUQyQ0xBU1MoaWQpICgoaWQpICYgMHgwZmZmMDAwMFVMKQogI2RlZmluZSBWNEwyX0NUUkxfRFJJVkVSX1BSSVYoaWQpICgoKGlkKSAmIDB4ZmZmZikgPj0gMHgxMDAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9jdHJsX3R5cGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSID0gMSwKICBWNEwyX0NUUkxfVFlQRV9CT09MRUFOID0gMiwKICBWNEwyX0NUUkxfVFlQRV9NRU5VID0gMywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9DVFJMX1RZUEVfQlVUVE9OID0gNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjY0ID0gNSwKICBWNEwyX0NUUkxfVFlQRV9DVFJMX0NMQVNTID0gNiwKICBWNEwyX0NUUkxfVFlQRV9TVFJJTkcgPSA3LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0NUUkxfVFlQRV9CSVRNQVNLID0gOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9DVFJMX1RZUEVfSU5URUdFUl9NRU5VID0gOSwKIH07CiBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHlwZTsKICBfX3U4IG5hbWVbMzJdOwogIF9fczMyIG1pbmltdW07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIG1heGltdW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIHN0ZXA7CiAgX19zMzIgZGVmYXVsdF92YWx1ZTsKICBfX3UzMiBmbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSB7CiAgX191MzIgaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgX191OCBuYW1lWzMyXTsKICBfX3M2NCB2YWx1ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQgMHgwMDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19HUkFCQkVEIDB4MDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZIDB4MDAwNAogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19VUERBVEUgMHgwMDA4CiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFIDB4MDAxMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfU0xJREVSIDB4MDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWSAweDAwNDAKICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUgMHgwMDgwCiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTCAweDgwMDAwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NQVhfQ1RSTFMgMTAyNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfUFJJVkFURV9CQVNFIDB4MDgwMDAwMDAKIHN0cnVjdCB2NGwyX3R1bmVyIHsKICBfX3UzMiBpbmRleDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBuYW1lWzMyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHlwZTsKICBfX3UzMiBjYXBhYmlsaXR5OwogIF9fdTMyIHJhbmdlbG93OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByYW5nZWhpZ2g7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJ4c3ViY2hhbnM7CiAgX191MzIgYXVkbW9kZTsKICBfX3MzMiBzaWduYWw7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIGFmYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbNF07CiB9Owogc3RydWN0IHY0bDJfbW9kdWxhdG9yIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbmFtZVszMl07CiAgX191MzIgY2FwYWJpbGl0eTsKICBfX3UzMiByYW5nZWxvdzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmFuZ2VoaWdoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eHN1YmNoYW5zOwogIF9fdTMyIHJlc2VydmVkWzRdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xPVyAweDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX05PUk0gMHgwMDAyCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0hXU0VFS19CT1VOREVEIDB4MDAwNAogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9IV1NFRUtfV1JBUCAweDAwMDgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1NURVJFTyAweDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xBTkcyIDB4MDAyMAogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9TQVAgMHgwMDIwCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xBTkcxIDB4MDA0MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfUkRTIDB4MDA4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfUkRTX0JMT0NLX0lPIDB4MDEwMAogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9SRFNfQ09OVFJPTFMgMHgwMjAwCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0ZSRVFfQkFORFMgMHgwNDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9IV1NFRUtfUFJPR19MSU0gMHgwODAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1RVTkVSX0NBUF8xSFogMHgxMDAwCiAjZGVmaW5lIFY0TDJfVFVORVJfU1VCX01PTk8gMHgwMDAxCiAjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1NURVJFTyAweDAwMDIKICNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTEFORzIgMHgwMDA0CkBAIC0xMTg0LDYgKzExOTksMTEgQEAKICBfX3U4IG51bV9wbGFuZXM7CiAgX191OCByZXNlcnZlZFsxMV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK3N0cnVjdCB2NGwyX3Nkcl9mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBwaXhlbGZvcm1hdDsKKyBfX3U4IHJlc2VydmVkWzI4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogc3RydWN0IHY0bDJfZm9ybWF0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHlwZTsKQEAgLTExOTQsMjI1ICsxMjE0LDIzNiBAQAogIHN0cnVjdCB2NGwyX3dpbmRvdyB3aW47CiAgc3RydWN0IHY0bDJfdmJpX2Zvcm1hdCB2Ymk7CiAgc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgc2xpY2VkOwotIF9fdTggcmF3X2RhdGFbMjAwXTsKKyBzdHJ1Y3QgdjRsMl9zZHJfZm9ybWF0IHNkcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCByYXdfZGF0YVsyMDBdOwogIH0gZm10OwogfTsKIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gewotIF9fdTMyIHR5cGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHR5cGU7CiAgdW5pb24gewogIHN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtIGNhcHR1cmU7CiAgc3RydWN0IHY0bDJfb3V0cHV0cGFybSBvdXRwdXQ7Ci0gX191OCByYXdfZGF0YVsyMDBdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHJhd19kYXRhWzIwMF07CiAgfSBwYXJtOwogfTsKICNkZWZpbmUgVjRMMl9FVkVOVF9BTEwgMAotI2RlZmluZSBWNEwyX0VWRU5UX1ZTWU5DIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRVZFTlRfVlNZTkMgMQogI2RlZmluZSBWNEwyX0VWRU5UX0VPUyAyCiAjZGVmaW5lIFY0TDJfRVZFTlRfQ1RSTCAzCiAjZGVmaW5lIFY0TDJfRVZFTlRfRlJBTUVfU1lOQyA0Ci0jZGVmaW5lIFY0TDJfRVZFTlRfUFJJVkFURV9TVEFSVCAweDA4MDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0VWRU5UX1NPVVJDRV9DSEFOR0UgNQorI2RlZmluZSBWNEwyX0VWRU5UX1BSSVZBVEVfU1RBUlQgMHgwODAwMDAwMAogc3RydWN0IHY0bDJfZXZlbnRfdnN5bmMgewogIF9fdTggZmllbGQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIFY0TDJfRVZFTlRfQ1RSTF9DSF9WQUxVRSAoMSA8PCAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9FVkVOVF9DVFJMX0NIX0ZMQUdTICgxIDw8IDEpCiAjZGVmaW5lIFY0TDJfRVZFTlRfQ1RSTF9DSF9SQU5HRSAoMSA8PCAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2V2ZW50X2N0cmwgewogIF9fdTMyIGNoYW5nZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR5cGU7CiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiB2YWx1ZTsKICBfX3M2NCB2YWx1ZTY0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9OwogIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBtaW5pbXVtOwogIF9fczMyIG1heGltdW07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIHN0ZXA7CiAgX19zMzIgZGVmYXVsdF92YWx1ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHY0bDJfZXZlbnRfZnJhbWVfc3luYyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZyYW1lX3NlcXVlbmNlOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRVZFTlRfU1JDX0NIX1JFU09MVVRJT04gKDEgPDwgMCkKK3N0cnVjdCB2NGwyX2V2ZW50X3NyY19jaGFuZ2UgeworIF9fdTMyIGNoYW5nZXM7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2V2ZW50IHsKICBfX3UzMiB0eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgc3RydWN0IHY0bDJfZXZlbnRfdnN5bmMgdnN5bmM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX2V2ZW50X2N0cmwgY3RybDsKICBzdHJ1Y3QgdjRsMl9ldmVudF9mcmFtZV9zeW5jIGZyYW1lX3N5bmM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB2NGwyX2V2ZW50X3NyY19jaGFuZ2Ugc3JjX2NoYW5nZTsKICBfX3U4IGRhdGFbNjRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IHU7CiAgX191MzIgcGVuZGluZzsKICBfX3UzMiBzZXF1ZW5jZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHRpbWVzcGVjIHRpbWVzdGFtcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWQ7CiAgX191MzIgcmVzZXJ2ZWRbOF07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9FVkVOVF9TVUJfRkxfU0VORF9JTklUSUFMICgxIDw8IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0VWRU5UX1NVQl9GTF9BTExPV19GRUVEQkFDSyAoMSA8PCAxKQogc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uIHsKICBfX3UzMiB0eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmxhZ3M7CiAgX191MzIgcmVzZXJ2ZWRbNV07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSElQX01BVENIX0JSSURHRSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfU1VCREVWIDQKICNkZWZpbmUgVjRMMl9DSElQX01BVENIX0hPU1QgVjRMMl9DSElQX01BVENIX0JSSURHRQogI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUiAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSElQX01BVENIX0FDOTcgMwogc3RydWN0IHY0bDJfZGJnX21hdGNoIHsKICBfX3UzMiB0eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGFkZHI7CiAgY2hhciBuYW1lWzMyXTsKICB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciB7CiAgc3RydWN0IHY0bDJfZGJnX21hdGNoIG1hdGNoOwogIF9fdTMyIHNpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJlZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgdmFsOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIFY0TDJfQ0hJUF9GTF9SRUFEQUJMRSAoMSA8PCAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSElQX0ZMX1dSSVRBQkxFICgxIDw8IDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfZGJnX2NoaXBfaW5mbyB7CiAgc3RydWN0IHY0bDJfZGJnX21hdGNoIG1hdGNoOwogIGNoYXIgbmFtZVszMl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFszMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIHN0cnVjdCB2NGwyX2NyZWF0ZV9idWZmZXJzIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNvdW50OwogIF9fdTMyIG1lbW9yeTsKICBzdHJ1Y3QgdjRsMl9mb3JtYXQgZm9ybWF0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFs4XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWSURJT0NfUVVFUllDQVAgX0lPUignVicsIDAsIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkpCiAjZGVmaW5lIFZJRElPQ19SRVNFUlZFRCBfSU8oJ1YnLCAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklESU9DX0VOVU1fRk1UIF9JT1dSKCdWJywgMiwgc3RydWN0IHY0bDJfZm10ZGVzYykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJRElPQ19HX0ZNVCBfSU9XUignVicsIDQsIHN0cnVjdCB2NGwyX2Zvcm1hdCkKICNkZWZpbmUgVklESU9DX1NfRk1UIF9JT1dSKCdWJywgNSwgc3RydWN0IHY0bDJfZm9ybWF0KQogI2RlZmluZSBWSURJT0NfUkVRQlVGUyBfSU9XUignVicsIDgsIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklESU9DX1FVRVJZQlVGIF9JT1dSKCdWJywgOSwgc3RydWN0IHY0bDJfYnVmZmVyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklESU9DX0dfRkJVRiBfSU9SKCdWJywgMTAsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyKQogI2RlZmluZSBWSURJT0NfU19GQlVGIF9JT1coJ1YnLCAxMSwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIpCiAjZGVmaW5lIFZJRElPQ19PVkVSTEFZIF9JT1coJ1YnLCAxNCwgaW50KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklESU9DX1FCVUYgX0lPV1IoJ1YnLCAxNSwgc3RydWN0IHY0bDJfYnVmZmVyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklESU9DX0VYUEJVRiBfSU9XUignVicsIDE2LCBzdHJ1Y3QgdjRsMl9leHBvcnRidWZmZXIpCiAjZGVmaW5lIFZJRElPQ19EUUJVRiBfSU9XUignVicsIDE3LCBzdHJ1Y3QgdjRsMl9idWZmZXIpCiAjZGVmaW5lIFZJRElPQ19TVFJFQU1PTiBfSU9XKCdWJywgMTgsIGludCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJRElPQ19TVFJFQU1PRkYgX0lPVygnVicsIDE5LCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURJT0NfR19QQVJNIF9JT1dSKCdWJywgMjEsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0pCiAjZGVmaW5lIFZJRElPQ19TX1BBUk0gX0lPV1IoJ1YnLCAyMiwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSkKICNkZWZpbmUgVklESU9DX0dfU1REIF9JT1IoJ1YnLCAyMywgdjRsMl9zdGRfaWQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURJT0NfU19TVEQgX0lPVygnVicsIDI0LCB2NGwyX3N0ZF9pZCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJRElPQ19FTlVNU1REIF9JT1dSKCdWJywgMjUsIHN0cnVjdCB2NGwyX3N0YW5kYXJkKQogI2RlZmluZSBWSURJT0NfRU5VTUlOUFVUIF9JT1dSKCdWJywgMjYsIHN0cnVjdCB2NGwyX2lucHV0KQogI2RlZmluZSBWSURJT0NfR19DVFJMIF9JT1dSKCdWJywgMjcsIHN0cnVjdCB2NGwyX2NvbnRyb2wpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURJT0NfU19DVFJMIF9JT1dSKCdWJywgMjgsIHN0cnVjdCB2NGwyX2NvbnRyb2wpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURJT0NfR19UVU5FUiBfSU9XUignVicsIDI5LCBzdHJ1Y3QgdjRsMl90dW5lcikKICNkZWZpbmUgVklESU9DX1NfVFVORVIgX0lPVygnVicsIDMwLCBzdHJ1Y3QgdjRsMl90dW5lcikKICNkZWZpbmUgVklESU9DX0dfQVVESU8gX0lPUignVicsIDMzLCBzdHJ1Y3QgdjRsMl9hdWRpbykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJRElPQ19TX0FVRElPIF9JT1coJ1YnLCAzNCwgc3RydWN0IHY0bDJfYXVkaW8pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURJT0NfUVVFUllDVFJMIF9JT1dSKCdWJywgMzYsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCkKICNkZWZpbmUgVklESU9DX1FVRVJZTUVOVSBfSU9XUignVicsIDM3LCBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUpCiAjZGVmaW5lIFZJRElPQ19HX0lOUFVUIF9JT1IoJ1YnLCAzOCwgaW50KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklESU9DX1NfSU5QVVQgX0lPV1IoJ1YnLCAzOSwgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX0dfRURJRCBfSU9XUignVicsIDQwLCBzdHJ1Y3QgdjRsMl9lZGlkKQorI2RlZmluZSBWSURJT0NfU19FRElEIF9JT1dSKCdWJywgNDEsIHN0cnVjdCB2NGwyX2VkaWQpCiAjZGVmaW5lIFZJRElPQ19HX09VVFBVVCBfSU9SKCdWJywgNDYsIGludCkKICNkZWZpbmUgVklESU9DX1NfT1VUUFVUIF9JT1dSKCdWJywgNDcsIGludCkKLSNkZWZpbmUgVklESU9DX0VOVU1PVVRQVVQgX0lPV1IoJ1YnLCA0OCwgc3RydWN0IHY0bDJfb3V0cHV0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX0VOVU1PVVRQVVQgX0lPV1IoJ1YnLCA0OCwgc3RydWN0IHY0bDJfb3V0cHV0KQogI2RlZmluZSBWSURJT0NfR19BVURPVVQgX0lPUignVicsIDQ5LCBzdHJ1Y3QgdjRsMl9hdWRpb291dCkKICNkZWZpbmUgVklESU9DX1NfQVVET1VUIF9JT1coJ1YnLCA1MCwgc3RydWN0IHY0bDJfYXVkaW9vdXQpCiAjZGVmaW5lIFZJRElPQ19HX01PRFVMQVRPUiBfSU9XUignVicsIDU0LCBzdHJ1Y3QgdjRsMl9tb2R1bGF0b3IpCi0jZGVmaW5lIFZJRElPQ19TX01PRFVMQVRPUiBfSU9XKCdWJywgNTUsIHN0cnVjdCB2NGwyX21vZHVsYXRvcikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19TX01PRFVMQVRPUiBfSU9XKCdWJywgNTUsIHN0cnVjdCB2NGwyX21vZHVsYXRvcikKICNkZWZpbmUgVklESU9DX0dfRlJFUVVFTkNZIF9JT1dSKCdWJywgNTYsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSkKICNkZWZpbmUgVklESU9DX1NfRlJFUVVFTkNZIF9JT1coJ1YnLCA1Nywgc3RydWN0IHY0bDJfZnJlcXVlbmN5KQogI2RlZmluZSBWSURJT0NfQ1JPUENBUCBfSU9XUignVicsIDU4LCBzdHJ1Y3QgdjRsMl9jcm9wY2FwKQotI2RlZmluZSBWSURJT0NfR19DUk9QIF9JT1dSKCdWJywgNTksIHN0cnVjdCB2NGwyX2Nyb3ApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfR19DUk9QIF9JT1dSKCdWJywgNTksIHN0cnVjdCB2NGwyX2Nyb3ApCiAjZGVmaW5lIFZJRElPQ19TX0NST1AgX0lPVygnVicsIDYwLCBzdHJ1Y3QgdjRsMl9jcm9wKQogI2RlZmluZSBWSURJT0NfR19KUEVHQ09NUCBfSU9SKCdWJywgNjEsIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbikKICNkZWZpbmUgVklESU9DX1NfSlBFR0NPTVAgX0lPVygnVicsIDYyLCBzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24pCi0jZGVmaW5lIFZJRElPQ19RVUVSWVNURCBfSU9SKCdWJywgNjMsIHY0bDJfc3RkX2lkKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX1FVRVJZU1REIF9JT1IoJ1YnLCA2MywgdjRsMl9zdGRfaWQpCiAjZGVmaW5lIFZJRElPQ19UUllfRk1UIF9JT1dSKCdWJywgNjQsIHN0cnVjdCB2NGwyX2Zvcm1hdCkKICNkZWZpbmUgVklESU9DX0VOVU1BVURJTyBfSU9XUignVicsIDY1LCBzdHJ1Y3QgdjRsMl9hdWRpbykKICNkZWZpbmUgVklESU9DX0VOVU1BVURPVVQgX0lPV1IoJ1YnLCA2Niwgc3RydWN0IHY0bDJfYXVkaW9vdXQpCi0jZGVmaW5lIFZJRElPQ19HX1BSSU9SSVRZIF9JT1IoJ1YnLCA2NywgX191MzIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfR19QUklPUklUWSBfSU9SKCdWJywgNjcsIF9fdTMyKQogI2RlZmluZSBWSURJT0NfU19QUklPUklUWSBfSU9XKCdWJywgNjgsIF9fdTMyKQogI2RlZmluZSBWSURJT0NfR19TTElDRURfVkJJX0NBUCBfSU9XUignVicsIDY5LCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCkKICNkZWZpbmUgVklESU9DX0xPR19TVEFUVVMgX0lPKCdWJywgNzApCi0jZGVmaW5lIFZJRElPQ19HX0VYVF9DVFJMUyBfSU9XUignVicsIDcxLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfR19FWFRfQ1RSTFMgX0lPV1IoJ1YnLCA3MSwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQogI2RlZmluZSBWSURJT0NfU19FWFRfQ1RSTFMgX0lPV1IoJ1YnLCA3Miwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQogI2RlZmluZSBWSURJT0NfVFJZX0VYVF9DVFJMUyBfSU9XUignVicsIDczLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMpCiAjZGVmaW5lIFZJRElPQ19FTlVNX0ZSQU1FU0laRVMgX0lPV1IoJ1YnLCA3NCwgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0pCi0jZGVmaW5lIFZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTIF9JT1dSKCdWJywgNzUsIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFMgX0lPV1IoJ1YnLCA3NSwgc3RydWN0IHY0bDJfZnJtaXZhbGVudW0pCiAjZGVmaW5lIFZJRElPQ19HX0VOQ19JTkRFWCBfSU9SKCdWJywgNzYsIHN0cnVjdCB2NGwyX2VuY19pZHgpCiAjZGVmaW5lIFZJRElPQ19FTkNPREVSX0NNRCBfSU9XUignVicsIDc3LCBzdHJ1Y3QgdjRsMl9lbmNvZGVyX2NtZCkKICNkZWZpbmUgVklESU9DX1RSWV9FTkNPREVSX0NNRCBfSU9XUignVicsIDc4LCBzdHJ1Y3QgdjRsMl9lbmNvZGVyX2NtZCkKLSNkZWZpbmUgVklESU9DX0RCR19TX1JFR0lTVEVSIF9JT1coJ1YnLCA3OSwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX0RCR19TX1JFR0lTVEVSIF9JT1coJ1YnLCA3OSwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyKQogI2RlZmluZSBWSURJT0NfREJHX0dfUkVHSVNURVIgX0lPV1IoJ1YnLCA4MCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyKQogI2RlZmluZSBWSURJT0NfU19IV19GUkVRX1NFRUsgX0lPVygnVicsIDgyLCBzdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWspCiAjZGVmaW5lIFZJRElPQ19TX0RWX1RJTUlOR1MgX0lPV1IoJ1YnLCA4Nywgc3RydWN0IHY0bDJfZHZfdGltaW5ncykKLSNkZWZpbmUgVklESU9DX0dfRFZfVElNSU5HUyBfSU9XUignVicsIDg4LCBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX0dfRFZfVElNSU5HUyBfSU9XUignVicsIDg4LCBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzKQogI2RlZmluZSBWSURJT0NfRFFFVkVOVCBfSU9SKCdWJywgODksIHN0cnVjdCB2NGwyX2V2ZW50KQogI2RlZmluZSBWSURJT0NfU1VCU0NSSUJFX0VWRU5UIF9JT1coJ1YnLCA5MCwgc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uKQogI2RlZmluZSBWSURJT0NfVU5TVUJTQ1JJQkVfRVZFTlQgX0lPVygnVicsIDkxLCBzdHJ1Y3QgdjRsMl9ldmVudF9zdWJzY3JpcHRpb24pCi0jZGVmaW5lIFZJRElPQ19DUkVBVEVfQlVGUyBfSU9XUignVicsIDkyLCBzdHJ1Y3QgdjRsMl9jcmVhdGVfYnVmZmVycykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19DUkVBVEVfQlVGUyBfSU9XUignVicsIDkyLCBzdHJ1Y3QgdjRsMl9jcmVhdGVfYnVmZmVycykKICNkZWZpbmUgVklESU9DX1BSRVBBUkVfQlVGIF9JT1dSKCdWJywgOTMsIHN0cnVjdCB2NGwyX2J1ZmZlcikKICNkZWZpbmUgVklESU9DX0dfU0VMRUNUSU9OIF9JT1dSKCdWJywgOTQsIHN0cnVjdCB2NGwyX3NlbGVjdGlvbikKICNkZWZpbmUgVklESU9DX1NfU0VMRUNUSU9OIF9JT1dSKCdWJywgOTUsIHN0cnVjdCB2NGwyX3NlbGVjdGlvbikKLSNkZWZpbmUgVklESU9DX0RFQ09ERVJfQ01EIF9JT1dSKCdWJywgOTYsIHN0cnVjdCB2NGwyX2RlY29kZXJfY21kKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX0RFQ09ERVJfQ01EIF9JT1dSKCdWJywgOTYsIHN0cnVjdCB2NGwyX2RlY29kZXJfY21kKQogI2RlZmluZSBWSURJT0NfVFJZX0RFQ09ERVJfQ01EIF9JT1dSKCdWJywgOTcsIHN0cnVjdCB2NGwyX2RlY29kZXJfY21kKQogI2RlZmluZSBWSURJT0NfRU5VTV9EVl9USU1JTkdTIF9JT1dSKCdWJywgOTgsIHN0cnVjdCB2NGwyX2VudW1fZHZfdGltaW5ncykKICNkZWZpbmUgVklESU9DX1FVRVJZX0RWX1RJTUlOR1MgX0lPUignVicsIDk5LCBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzKQotI2RlZmluZSBWSURJT0NfRFZfVElNSU5HU19DQVAgX0lPV1IoJ1YnLCAxMDAsIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3NfY2FwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX0RWX1RJTUlOR1NfQ0FQIF9JT1dSKCdWJywgMTAwLCBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzX2NhcCkKICNkZWZpbmUgVklESU9DX0VOVU1fRlJFUV9CQU5EUyBfSU9XUignVicsIDEwMSwgc3RydWN0IHY0bDJfZnJlcXVlbmN5X2JhbmQpCiAjZGVmaW5lIFZJRElPQ19EQkdfR19DSElQX0lORk8gX0lPV1IoJ1YnLCAxMDIsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2luZm8pCiAjZGVmaW5lIEJBU0VfVklESU9DX1BSSVZBVEUgMTkyCi0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgveGF0dHIuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgveGF0dHIuaAppbmRleCBlY2FkYzZhLi42NTBjZjkzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3hhdHRyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC94YXR0ci5oCkBAIC0xNiwxMCArMTYsMTUgQEAKICAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxsaW51eC9saWJjLWNvbXBhdC5oPgogI2lmbmRlZiBfVUFQSV9MSU5VWF9YQVRUUl9ICiAjZGVmaW5lIF9VQVBJX0xJTlVYX1hBVFRSX0gKKyNpZmRlZiBfX1VBUElfREVGX1hBVFRSCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX1VTRV9LRVJORUxfWEFUVFJfREVGUwogI2RlZmluZSBYQVRUUl9DUkVBVEUgMHgxCiAjZGVmaW5lIFhBVFRSX1JFUExBQ0UgMHgyCisjZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhBVFRSX09TMl9QUkVGSVggIm9zMi4iCiAjZGVmaW5lIFhBVFRSX09TMl9QUkVGSVhfTEVOIChzaXplb2YoWEFUVFJfT1MyX1BSRUZJWCkgLSAxKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC94ZnJtLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3hmcm0uaAppbmRleCA0YjA5ZWU4Li42YTRlNjE4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3hmcm0uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3hmcm0uaApAQCAtMzExLDIyMyArMzExLDIzNCBAQAogIFhGUk1BX1JFUExBWV9FU05fVkFMLAogIFhGUk1BX1NBX0VYVFJBX0ZMQUdTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBYRlJNQV9QUk9UTywKKyBYRlJNQV9BRERSRVNTX0ZJTFRFUiwKICBfX1hGUk1BX01BWAogI2RlZmluZSBYRlJNQV9NQVggKF9fWEZSTUFfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHhmcm1fbWFyayB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHY7CiAgX191MzIgbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSB4ZnJtX3NhZGF0dHJfdHlwZV90IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgWEZSTUFfU0FEX1VOU1BFQywKICBYRlJNQV9TQURfQ05ULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBYRlJNQV9TQURfSElORk8sCiAgX19YRlJNQV9TQURfTUFYCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYRlJNQV9TQURfTUFYIChfX1hGUk1BX1NBRF9NQVggLSAxKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgeGZybXVfc2FkaGluZm8gewogIF9fdTMyIHNhZGhjbnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNhZGhtY250OwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHhmcm1fc3BkYXR0cl90eXBlX3QgewogIFhGUk1BX1NQRF9VTlNQRUMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFhGUk1BX1NQRF9JTkZPLAogIFhGUk1BX1NQRF9ISU5GTywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19YRlJNQV9TUERfTUFYCiAjZGVmaW5lIFhGUk1BX1NQRF9NQVggKF9fWEZSTUFfU1BEX01BWCAtIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB4ZnJtdV9zcGRpbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5jbnQ7CiAgX191MzIgb3V0Y250OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmd2RjbnQ7CiAgX191MzIgaW5zY250OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvdXRzY250OwogIF9fdTMyIGZ3ZHNjbnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB4ZnJtdV9zcGRoaW5mbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNwZGhjbnQ7CiAgX191MzIgc3BkaG1jbnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHhmcm1fc2VsZWN0b3Igc2VsOwogIHN0cnVjdCB4ZnJtX2lkIGlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB4ZnJtX2FkZHJlc3NfdCBzYWRkcjsKICBzdHJ1Y3QgeGZybV9saWZldGltZV9jZmcgbGZ0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgeGZybV9saWZldGltZV9jdXIgY3VybGZ0OwogIHN0cnVjdCB4ZnJtX3N0YXRzIHN0YXRzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzZXE7CiAgX191MzIgcmVxaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGZhbWlseTsKICBfX3U4IG1vZGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcmVwbGF5X3dpbmRvdzsKICBfX3U4IGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEZSTV9TVEFURV9OT0VDTiAxCiAjZGVmaW5lIFhGUk1fU1RBVEVfREVDQVBfRFNDUCAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYRlJNX1NUQVRFX05PUE1UVURJU0MgNAogI2RlZmluZSBYRlJNX1NUQVRFX1dJTERSRUNWIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhGUk1fU1RBVEVfSUNNUCAxNgogI2RlZmluZSBYRlJNX1NUQVRFX0FGX1VOU1BFQyAzMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEZSTV9TVEFURV9BTElHTjQgNjQKICNkZWZpbmUgWEZSTV9TVEFURV9FU04gMTI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgWEZSTV9TQV9YRkxBR19ET05UX0VOQ0FQX0RTQ1AgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB4ZnJtX3VzZXJzYV9pZCB7CiAgeGZybV9hZGRyZXNzX3QgZGFkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmUzMiBzcGk7CiAgX191MTYgZmFtaWx5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHByb3RvOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgeGZybV9hZXZlbnRfaWQgewogIHN0cnVjdCB4ZnJtX3VzZXJzYV9pZCBzYV9pZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgeGZybV9hZGRyZXNzX3Qgc2FkZHI7CiAgX191MzIgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlcWlkOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgeGZybV91c2Vyc3BpX2luZm8gewogIHN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvIGluZm87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1pbjsKICBfX3UzMiBtYXg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB4ZnJtX3NlbGVjdG9yIHNlbDsKICBzdHJ1Y3QgeGZybV9saWZldGltZV9jZmcgbGZ0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgeGZybV9saWZldGltZV9jdXIgY3VybGZ0OwogIF9fdTMyIHByaW9yaXR5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpbmRleDsKICBfX3U4IGRpcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBhY3Rpb247CiAjZGVmaW5lIFhGUk1fUE9MSUNZX0FMTE9XIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhGUk1fUE9MSUNZX0JMT0NLIDEKICBfX3U4IGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEZSTV9QT0xJQ1lfTE9DQUxPSyAxCiAjZGVmaW5lIFhGUk1fUE9MSUNZX0lDTVAgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHNoYXJlOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgeGZybV91c2VycG9saWN5X2lkIHsKICBzdHJ1Y3QgeGZybV9zZWxlY3RvciBzZWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGluZGV4OwogIF9fdTggZGlyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgeGZybV91c2VyX2FjcXVpcmUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgeGZybV9pZCBpZDsKICB4ZnJtX2FkZHJlc3NfdCBzYWRkcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHhmcm1fc2VsZWN0b3Igc2VsOwogIHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbyBwb2xpY3k7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGFhbGdvczsKICBfX3UzMiBlYWxnb3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNhbGdvczsKICBfX3UzMiBzZXE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB4ZnJtX3VzZXJfZXhwaXJlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHhmcm1fdXNlcnNhX2luZm8gc3RhdGU7CiAgX191OCBoYXJkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgeGZybV91c2VyX3BvbGV4cGlyZSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbyBwb2w7CiAgX191OCBoYXJkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgeGZybV91c2Vyc2FfZmx1c2ggewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHByb3RvOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgeGZybV91c2VyX3JlcG9ydCB7CiAgX191OCBwcm90bzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHhmcm1fc2VsZWN0b3Igc2VsOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgeGZybV91c2VyX2ttYWRkcmVzcyB7CiAgeGZybV9hZGRyZXNzX3QgbG9jYWw7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHhmcm1fYWRkcmVzc190IHJlbW90ZTsKICBfX3UzMiByZXNlcnZlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgZmFtaWx5OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGUgewogIHhmcm1fYWRkcmVzc190IG9sZF9kYWRkcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgeGZybV9hZGRyZXNzX3Qgb2xkX3NhZGRyOwogIHhmcm1fYWRkcmVzc190IG5ld19kYWRkcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgeGZybV9hZGRyZXNzX3QgbmV3X3NhZGRyOwogIF9fdTggcHJvdG87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbW9kZTsKICBfX3UxNiByZXNlcnZlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVxaWQ7CiAgX191MTYgb2xkX2ZhbWlseTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgbmV3X2ZhbWlseTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHhmcm1fdXNlcl9tYXBwaW5nIHsKICBzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlcWlkOwogIHhmcm1fYWRkcmVzc190IG9sZF9zYWRkcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgeGZybV9hZGRyZXNzX3QgbmV3X3NhZGRyOwogIF9fYmUxNiBvbGRfc3BvcnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmUxNiBuZXdfc3BvcnQ7CiB9Oworc3RydWN0IHhmcm1fYWRkcmVzc19maWx0ZXIgeworIHhmcm1fYWRkcmVzc190IHNhZGRyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB4ZnJtX2FkZHJlc3NfdCBkYWRkcjsKKyBfX3UxNiBmYW1pbHk7CisgX191OCBzcGxlbjsKKyBfX3U4IGRwbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFhGUk1HUlBfQUNRVUlSRSAxCiAjZGVmaW5lIFhGUk1HUlBfRVhQSVJFIDIKICNkZWZpbmUgWEZSTUdSUF9TQSA0Ci0jZGVmaW5lIFhGUk1HUlBfUE9MSUNZIDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFhGUk1HUlBfUE9MSUNZIDgKICNkZWZpbmUgWEZSTUdSUF9SRVBPUlQgMHgyMAogZW51bSB4ZnJtX25sZ3JvdXBzIHsKICBYRlJNTkxHUlBfTk9ORSwKLSNkZWZpbmUgWEZSTU5MR1JQX05PTkUgWEZSTU5MR1JQX05PTkUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFhGUk1OTEdSUF9OT05FIFhGUk1OTEdSUF9OT05FCiAgWEZSTU5MR1JQX0FDUVVJUkUsCiAjZGVmaW5lIFhGUk1OTEdSUF9BQ1FVSVJFIFhGUk1OTEdSUF9BQ1FVSVJFCiAgWEZSTU5MR1JQX0VYUElSRSwKLSNkZWZpbmUgWEZSTU5MR1JQX0VYUElSRSBYRlJNTkxHUlBfRVhQSVJFCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYRlJNTkxHUlBfRVhQSVJFIFhGUk1OTEdSUF9FWFBJUkUKICBYRlJNTkxHUlBfU0EsCiAjZGVmaW5lIFhGUk1OTEdSUF9TQSBYRlJNTkxHUlBfU0EKICBYRlJNTkxHUlBfUE9MSUNZLAotI2RlZmluZSBYRlJNTkxHUlBfUE9MSUNZIFhGUk1OTEdSUF9QT0xJQ1kKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFhGUk1OTEdSUF9QT0xJQ1kgWEZSTU5MR1JQX1BPTElDWQogIFhGUk1OTEdSUF9BRVZFTlRTLAogI2RlZmluZSBYRlJNTkxHUlBfQUVWRU5UUyBYRlJNTkxHUlBfQUVWRU5UUwogIFhGUk1OTEdSUF9SRVBPUlQsCi0jZGVmaW5lIFhGUk1OTEdSUF9SRVBPUlQgWEZSTU5MR1JQX1JFUE9SVAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWEZSTU5MR1JQX1JFUE9SVCBYRlJNTkxHUlBfUkVQT1JUCiAgWEZSTU5MR1JQX01JR1JBVEUsCiAjZGVmaW5lIFhGUk1OTEdSUF9NSUdSQVRFIFhGUk1OTEdSUF9NSUdSQVRFCiAgWEZSTU5MR1JQX01BUFBJTkcsCi0jZGVmaW5lIFhGUk1OTEdSUF9NQVBQSU5HIFhGUk1OTEdSUF9NQVBQSU5HCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYRlJNTkxHUlBfTUFQUElORyBYRlJNTkxHUlBfTUFQUElORwogIF9fWEZSTU5MR1JQX01BWAogfTsKICNkZWZpbmUgWEZSTU5MR1JQX01BWCAoX19YRlJNTkxHUlBfTUFYIC0gMSkKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9tdGQvbXRkLWFiaS5oIGIvbGliYy9rZXJuZWwvdWFwaS9tdGQvbXRkLWFiaS5oCmluZGV4IDBiYjdjNjEuLjM2NDE1NTQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbXRkL210ZC1hYmkuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL210ZC9tdGQtYWJpLmgKQEAgLTgxLDEwNSArODEsMTA2IEBACiAjZGVmaW5lIE1URF9DQVBfTk9SRkxBU0ggKE1URF9XUklURUFCTEUgfCBNVERfQklUX1dSSVRFQUJMRSkKICNkZWZpbmUgTVREX0NBUF9OQU5ERkxBU0ggKE1URF9XUklURUFCTEUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNVERfQ0FQX05WUkFNIChNVERfV1JJVEVBQkxFIHwgTVREX0JJVF9XUklURUFCTEUgfCBNVERfTk9fRVJBU0UpCiAjZGVmaW5lIE1URF9OQU5ERUNDX09GRiAwCiAjZGVmaW5lIE1URF9OQU5ERUNDX1BMQUNFIDEKICNkZWZpbmUgTVREX05BTkRFQ0NfQVVUT1BMQUNFIDIKLSNkZWZpbmUgTVREX05BTkRFQ0NfUExBQ0VPTkxZIDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1URF9OQU5ERUNDX1BMQUNFT05MWSAzCiAjZGVmaW5lIE1URF9OQU5ERUNDX0FVVE9QTF9VU1IgNAogI2RlZmluZSBNVERfT1RQX09GRiAwCiAjZGVmaW5lIE1URF9PVFBfRkFDVE9SWSAxCi0jZGVmaW5lIE1URF9PVFBfVVNFUiAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNVERfT1RQX1VTRVIgMgogc3RydWN0IG10ZF9pbmZvX3VzZXIgewogIF9fdTggdHlwZTsKICBfX3UzMiBmbGFnczsKLSBfX3UzMiBzaXplOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBzaXplOwogIF9fdTMyIGVyYXNlc2l6ZTsKICBfX3UzMiB3cml0ZXNpemU7CiAgX191MzIgb29ic2l6ZTsKLSBfX3U2NCBwYWRkaW5nOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBwYWRkaW5nOwogfTsKIHN0cnVjdCByZWdpb25faW5mb191c2VyIHsKICBfX3UzMiBvZmZzZXQ7Ci0gX191MzIgZXJhc2VzaXplOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBlcmFzZXNpemU7CiAgX191MzIgbnVtYmxvY2tzOwogIF9fdTMyIHJlZ2lvbmluZGV4OwogfTsKLXN0cnVjdCBvdHBfaW5mbyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IG90cF9pbmZvIHsKICBfX3UzMiBzdGFydDsKICBfX3UzMiBsZW5ndGg7CiAgX191MzIgbG9ja2VkOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBNRU1HRVRJTkZPIF9JT1IoJ00nLCAxLCBzdHJ1Y3QgbXRkX2luZm9fdXNlcikKICNkZWZpbmUgTUVNRVJBU0UgX0lPVygnTScsIDIsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCiAjZGVmaW5lIE1FTVdSSVRFT09CIF9JT1dSKCdNJywgMywgc3RydWN0IG10ZF9vb2JfYnVmKQotI2RlZmluZSBNRU1SRUFET09CIF9JT1dSKCdNJywgNCwgc3RydWN0IG10ZF9vb2JfYnVmKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUVNUkVBRE9PQiBfSU9XUignTScsIDQsIHN0cnVjdCBtdGRfb29iX2J1ZikKICNkZWZpbmUgTUVNTE9DSyBfSU9XKCdNJywgNSwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKICNkZWZpbmUgTUVNVU5MT0NLIF9JT1coJ00nLCA2LCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyKQogI2RlZmluZSBNRU1HRVRSRUdJT05DT1VOVCBfSU9SKCdNJywgNywgaW50KQotI2RlZmluZSBNRU1HRVRSRUdJT05JTkZPIF9JT1dSKCdNJywgOCwgc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNRU1HRVRSRUdJT05JTkZPIF9JT1dSKCdNJywgOCwgc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIpCiAjZGVmaW5lIE1FTUdFVE9PQlNFTCBfSU9SKCdNJywgMTAsIHN0cnVjdCBuYW5kX29vYmluZm8pCiAjZGVmaW5lIE1FTUdFVEJBREJMT0NLIF9JT1coJ00nLCAxMSwgX19rZXJuZWxfbG9mZl90KQogI2RlZmluZSBNRU1TRVRCQURCTE9DSyBfSU9XKCdNJywgMTIsIF9fa2VybmVsX2xvZmZfdCkKLSNkZWZpbmUgT1RQU0VMRUNUIF9JT1IoJ00nLCAxMywgaW50KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgT1RQU0VMRUNUIF9JT1IoJ00nLCAxMywgaW50KQogI2RlZmluZSBPVFBHRVRSRUdJT05DT1VOVCBfSU9XKCdNJywgMTQsIGludCkKICNkZWZpbmUgT1RQR0VUUkVHSU9OSU5GTyBfSU9XKCdNJywgMTUsIHN0cnVjdCBvdHBfaW5mbykKICNkZWZpbmUgT1RQTE9DSyBfSU9SKCdNJywgMTYsIHN0cnVjdCBvdHBfaW5mbykKLSNkZWZpbmUgRUNDR0VUTEFZT1VUIF9JT1IoJ00nLCAxNywgc3RydWN0IG5hbmRfZWNjbGF5b3V0X3VzZXIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFQ0NHRVRMQVlPVVQgX0lPUignTScsIDE3LCBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXRfdXNlcikKICNkZWZpbmUgRUNDR0VUU1RBVFMgX0lPUignTScsIDE4LCBzdHJ1Y3QgbXRkX2VjY19zdGF0cykKICNkZWZpbmUgTVRERklMRU1PREUgX0lPKCdNJywgMTkpCiAjZGVmaW5lIE1FTUVSQVNFNjQgX0lPVygnTScsIDIwLCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyNjQpCi0jZGVmaW5lIE1FTVdSSVRFT09CNjQgX0lPV1IoJ00nLCAyMSwgc3RydWN0IG10ZF9vb2JfYnVmNjQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNRU1XUklURU9PQjY0IF9JT1dSKCdNJywgMjEsIHN0cnVjdCBtdGRfb29iX2J1ZjY0KQogI2RlZmluZSBNRU1SRUFET09CNjQgX0lPV1IoJ00nLCAyMiwgc3RydWN0IG10ZF9vb2JfYnVmNjQpCiAjZGVmaW5lIE1FTUlTTE9DS0VEIF9JT1IoJ00nLCAyMywgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKICNkZWZpbmUgTUVNV1JJVEUgX0lPV1IoJ00nLCAyNCwgc3RydWN0IG10ZF93cml0ZV9yZXEpCi1zdHJ1Y3QgbmFuZF9vb2JpbmZvIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgbmFuZF9vb2JpbmZvIHsKICBfX3UzMiB1c2VlY2M7CiAgX191MzIgZWNjYnl0ZXM7CiAgX191MzIgb29iZnJlZVs4XVsyXTsKLSBfX3UzMiBlY2Nwb3NbMzJdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBlY2Nwb3NbMzJdOwogfTsKIHN0cnVjdCBuYW5kX29vYmZyZWUgewogIF9fdTMyIG9mZnNldDsKLSBfX3UzMiBsZW5ndGg7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGxlbmd0aDsKIH07CiAjZGVmaW5lIE1URF9NQVhfT09CRlJFRV9FTlRSSUVTIDgKICNkZWZpbmUgTVREX01BWF9FQ0NQT1NfRU5UUklFUyA2NAotc3RydWN0IG5hbmRfZWNjbGF5b3V0X3VzZXIgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBuYW5kX2VjY2xheW91dF91c2VyIHsKICBfX3UzMiBlY2NieXRlczsKICBfX3UzMiBlY2Nwb3NbTVREX01BWF9FQ0NQT1NfRU5UUklFU107CiAgX191MzIgb29iYXZhaWw7Ci0gc3RydWN0IG5hbmRfb29iZnJlZSBvb2JmcmVlW01URF9NQVhfT09CRlJFRV9FTlRSSUVTXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IG5hbmRfb29iZnJlZSBvb2JmcmVlW01URF9NQVhfT09CRlJFRV9FTlRSSUVTXTsKIH07CiBzdHJ1Y3QgbXRkX2VjY19zdGF0cyB7CiAgX191MzIgY29ycmVjdGVkOwotIF9fdTMyIGZhaWxlZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZmFpbGVkOwogIF9fdTMyIGJhZGJsb2NrczsKICBfX3UzMiBiYnRibG9ja3M7CiB9OwotZW51bSBtdGRfZmlsZV9tb2RlcyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBtdGRfZmlsZV9tb2RlcyB7CiAgTVREX0ZJTEVfTU9ERV9OT1JNQUwgPSBNVERfT1RQX09GRiwKICBNVERfRklMRV9NT0RFX09UUF9GQUNUT1JZID0gTVREX09UUF9GQUNUT1JZLAogIE1URF9GSUxFX01PREVfT1RQX1VTRVIgPSBNVERfT1RQX1VTRVIsCi0gTVREX0ZJTEVfTU9ERV9SQVcsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE1URF9GSUxFX01PREVfUkFXLAogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9tdGQvdWJpLXVzZXIuaCBiL2xpYmMva2VybmVsL3VhcGkvbXRkL3ViaS11c2VyLmgKaW5kZXggZmE2YmUzMi4uZGJlMTI3OSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9tdGQvdWJpLXVzZXIuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL210ZC91YmktdXNlci5oCkBAIC00Myw3NCArNDMsODEgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVCSV9JT0NFQklTTUFQIF9JT1IoVUJJX1ZPTF9JT0NfTUFHSUMsIDUsIF9fczMyKQogI2RlZmluZSBVQklfSU9DU0VUVk9MUFJPUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCA2LCAgIHN0cnVjdCB1Ymlfc2V0X3ZvbF9wcm9wX3JlcSkKKyNkZWZpbmUgVUJJX0lPQ1ZPTENSQkxLIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDcsIHN0cnVjdCB1YmlfYmxrY3JlYXRlX3JlcSkKKyNkZWZpbmUgVUJJX0lPQ1ZPTFJNQkxLIF9JTyhVQklfVk9MX0lPQ19NQUdJQywgOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1BWF9VQklfTVREX05BTUVfTEVOIDEyNwogI2RlZmluZSBVQklfTUFYX1JOVk9MIDMyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgVUJJX0RZTkFNSUNfVk9MVU1FID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVUJJX1NUQVRJQ19WT0xVTUUgPSA0LAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBVQklfVk9MX1BST1BfRElSRUNUX1dSSVRFID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHViaV9hdHRhY2hfcmVxIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgdWJpX251bTsKICBfX3MzMiBtdGRfbnVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiB2aWRfaGRyX29mZnNldDsKICBfX3MxNiBtYXhfYmViX3BlcjEwMjQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczggcGFkZGluZ1sxMF07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB1YmlfbWt2b2xfcmVxIHsKICBfX3MzMiB2b2xfaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIGFsaWdubWVudDsKICBfX3M2NCBieXRlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zOCB2b2xfdHlwZTsKICBfX3M4IHBhZGRpbmcxOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MxNiBuYW1lX2xlbjsKICBfX3M4IHBhZGRpbmcyWzRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIG5hbWVbVUJJX01BWF9WT0xVTUVfTkFNRSArIDFdOwogfSBfX3BhY2tlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdWJpX3Jzdm9sX3JlcSB7CiAgX19zNjQgYnl0ZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIHZvbF9pZDsKIH0gX19wYWNrZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHViaV9ybnZvbF9yZXEgewogIF9fczMyIGNvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3M4IHBhZGRpbmcxWzEyXTsKICBzdHJ1Y3QgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiB2b2xfaWQ7CiAgX19zMTYgbmFtZV9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczggcGFkZGluZzJbMl07CiAgY2hhciBuYW1lW1VCSV9NQVhfVk9MVU1FX05BTUUgKyAxXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBlbnRzW1VCSV9NQVhfUk5WT0xdOwogfSBfX3BhY2tlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdWJpX2xlYl9jaGFuZ2VfcmVxIHsKICBfX3MzMiBsbnVtOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBieXRlczsKICBfX3M4IGR0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3M4IHBhZGRpbmdbN107CiB9IF9fcGFja2VkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB1YmlfbWFwX3JlcSB7CiAgX19zMzIgbG51bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zOCBkdHlwZTsKICBfX3M4IHBhZGRpbmdbM107Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX3BhY2tlZDsKIHN0cnVjdCB1Ymlfc2V0X3ZvbF9wcm9wX3JlcSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcHJvcGVydHk7CiAgX191OCBwYWRkaW5nWzddOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCB2YWx1ZTsKIH0gX19wYWNrZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHViaV9ibGtjcmVhdGVfcmVxIHsKKyBfX3M4IHBhZGRpbmdbMTI4XTsKK30gX19wYWNrZWQ7CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmggYi9saWJjL2tlcm5lbC91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmgKaW5kZXggMTk1YjdmMS4uNTFhYWIyYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaApAQCAtMjEsNyArMjEsMTcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIFJETUFfTkxfUkRNQV9DTSA9IDEKKyBSRE1BX05MX1JETUFfQ00gPSAxLAorIFJETUFfTkxfTkVTLAorIFJETUFfTkxfQzRJVywKKyBSRE1BX05MX05VTV9DTElFTlRTCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK2VudW0geworIFJETUFfTkxfR1JPVVBfQ00gPSAxLAorIFJETUFfTkxfR1JPVVBfSVdQTSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUkRNQV9OTF9OVU1fR1JPVVBTCiB9OwogI2RlZmluZSBSRE1BX05MX0dFVF9DTElFTlQodHlwZSkgKCh0eXBlICYgKCgoMSA8PCA2KSAtIDEpIDw8IDEwKSkgPj4gMTApCiAjZGVmaW5lIFJETUFfTkxfR0VUX09QKHR5cGUpICh0eXBlICYgKCgxIDw8IDEwKSAtIDEpKQpAQCAtMzgsMTcgKzQ4LDEwOCBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSRE1BX05MX1JETUFfQ01fTlVNX0FUVFIsCiB9Owotc3RydWN0IHJkbWFfY21faWRfc3RhdHMgewotIF9fdTMyIHFwX251bTsKK2VudW0geworIFJETUFfTkxfSVdQTV9SRUdfUElEID0gMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gX191MzIgYm91bmRfZGV2X2lmOwotIF9fdTMyIHBvcnRfc3BhY2U7Ci0gX19zMzIgcGlkOwotIF9fdTggY21fc3RhdGU7CisgUkRNQV9OTF9JV1BNX0FERF9NQVBQSU5HLAorIFJETUFfTkxfSVdQTV9RVUVSWV9NQVBQSU5HLAorIFJETUFfTkxfSVdQTV9SRU1PVkVfTUFQUElORywKKyBSRE1BX05MX0lXUE1fSEFORExFX0VSUiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gX191OCBub2RlX3R5cGU7Ci0gX191OCBwb3J0X251bTsKLSBfX3U4IHFwX3R5cGU7CisgUkRNQV9OTF9JV1BNX01BUElORk8sCisgUkRNQV9OTF9JV1BNX01BUElORk9fTlVNLAorIFJETUFfTkxfSVdQTV9OVU1fT1BTCiB9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCByZG1hX2NtX2lkX3N0YXRzIHsKKyBfX3UzMiBxcF9udW07CisgX191MzIgYm91bmRfZGV2X2lmOworIF9fdTMyIHBvcnRfc3BhY2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczMyIHBpZDsKKyBfX3U4IGNtX3N0YXRlOworIF9fdTggbm9kZV90eXBlOworIF9fdTggcG9ydF9udW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcXBfdHlwZTsKK307CitlbnVtIHsKKyBJV1BNX05MQV9SRUdfUElEX1VOU1BFQyA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElXUE1fTkxBX1JFR19QSURfU0VRLAorIElXUE1fTkxBX1JFR19JRl9OQU1FLAorIElXUE1fTkxBX1JFR19JQkRFVl9OQU1FLAorIElXUE1fTkxBX1JFR19VTElCX05BTUUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElXUE1fTkxBX1JFR19QSURfTUFYCit9OworZW51bSB7CisgSVdQTV9OTEFfUlJFR19QSURfVU5TUEVDID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVdQTV9OTEFfUlJFR19QSURfU0VRLAorIElXUE1fTkxBX1JSRUdfSUJERVZfTkFNRSwKKyBJV1BNX05MQV9SUkVHX1VMSUJfTkFNRSwKKyBJV1BNX05MQV9SUkVHX1VMSUJfVkVSLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJV1BNX05MQV9SUkVHX1BJRF9FUlIsCisgSVdQTV9OTEFfUlJFR19QSURfTUFYCit9OworZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElXUE1fTkxBX01BTkFHRV9NQVBQSU5HX1VOU1BFQyA9IDAsCisgSVdQTV9OTEFfTUFOQUdFX01BUFBJTkdfU0VRLAorIElXUE1fTkxBX01BTkFHRV9BRERSLAorIElXUE1fTkxBX01BTkFHRV9NQVBQRURfTE9DX0FERFIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElXUE1fTkxBX1JNQU5BR0VfTUFQUElOR19FUlIsCisgSVdQTV9OTEFfUk1BTkFHRV9NQVBQSU5HX01BWAorfTsKKyNkZWZpbmUgSVdQTV9OTEFfTUFOQUdFX01BUFBJTkdfTUFYIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElXUE1fTkxBX1FVRVJZX01BUFBJTkdfTUFYIDQKKyNkZWZpbmUgSVdQTV9OTEFfTUFQSU5GT19TRU5EX01BWCAzCitlbnVtIHsKKyBJV1BNX05MQV9RVUVSWV9NQVBQSU5HX1VOU1BFQyA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElXUE1fTkxBX1FVRVJZX01BUFBJTkdfU0VRLAorIElXUE1fTkxBX1FVRVJZX0xPQ0FMX0FERFIsCisgSVdQTV9OTEFfUVVFUllfUkVNT1RFX0FERFIsCisgSVdQTV9OTEFfUlFVRVJZX01BUFBFRF9MT0NfQUREUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVdQTV9OTEFfUlFVRVJZX01BUFBFRF9SRU1fQUREUiwKKyBJV1BNX05MQV9SUVVFUllfTUFQUElOR19FUlIsCisgSVdQTV9OTEFfUlFVRVJZX01BUFBJTkdfTUFYCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0geworIElXUE1fTkxBX01BUElORk9fUkVRX1VOU1BFQyA9IDAsCisgSVdQTV9OTEFfTUFQSU5GT19VTElCX05BTUUsCisgSVdQTV9OTEFfTUFQSU5GT19VTElCX1ZFUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVdQTV9OTEFfTUFQSU5GT19SRVFfTUFYCit9OworZW51bSB7CisgSVdQTV9OTEFfTUFQSU5GT19VTlNQRUMgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJV1BNX05MQV9NQVBJTkZPX0xPQ0FMX0FERFIsCisgSVdQTV9OTEFfTUFQSU5GT19NQVBQRURfQUREUiwKKyBJV1BNX05MQV9NQVBJTkZPX01BWAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKKyBJV1BNX05MQV9NQVBJTkZPX05VTV9VTlNQRUMgPSAwLAorIElXUE1fTkxBX01BUElORk9fU0VRLAorIElXUE1fTkxBX01BUElORk9fU0VORF9OVU0sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElXUE1fTkxBX01BUElORk9fQUNLX05VTSwKKyBJV1BNX05MQV9NQVBJTkZPX05VTV9NQVgKK307CitlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVdQTV9OTEFfRVJSX1VOU1BFQyA9IDAsCisgSVdQTV9OTEFfRVJSX1NFUSwKKyBJV1BNX05MQV9FUlJfQ09ERSwKKyBJV1BNX05MQV9FUlJfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9yZG1hL3JkbWFfdXNlcl9jbS5oIGIvbGliYy9rZXJuZWwvdWFwaS9yZG1hL3JkbWFfdXNlcl9jbS5oCmluZGV4IDc0ZTVhMDUuLmQxNDIyNjEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvcmRtYS9yZG1hX3VzZXJfY20uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL3JkbWEvcmRtYV91c2VyX2NtLmgKQEAgLTE5LDI4MyArMTksMjg1IEBACiAjaWZuZGVmIFJETUFfVVNFUl9DTV9ICiAjZGVmaW5lIFJETUFfVVNFUl9DTV9ICiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAjaW5jbHVkZSA8cmRtYS9pYl91c2VyX3ZlcmJzLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl91c2VyX3NhLmg+CiAjZGVmaW5lIFJETUFfVVNFUl9DTV9BQklfVkVSU0lPTiA0Ci0jZGVmaW5lIFJETUFfTUFYX1BSSVZBVEVfREFUQSAyNTYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJETUFfTUFYX1BSSVZBVEVfREFUQSAyNTYKIGVudW0gewogIFJETUFfVVNFUl9DTV9DTURfQ1JFQVRFX0lELAogIFJETUFfVVNFUl9DTV9DTURfREVTVFJPWV9JRCwKLSBSRE1BX1VTRVJfQ01fQ01EX0JJTkRfSVAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFJETUFfVVNFUl9DTV9DTURfQklORF9JUCwKICBSRE1BX1VTRVJfQ01fQ01EX1JFU09MVkVfSVAsCiAgUkRNQV9VU0VSX0NNX0NNRF9SRVNPTFZFX1JPVVRFLAogIFJETUFfVVNFUl9DTV9DTURfUVVFUllfUk9VVEUsCi0gUkRNQV9VU0VSX0NNX0NNRF9DT05ORUNULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBSRE1BX1VTRVJfQ01fQ01EX0NPTk5FQ1QsCiAgUkRNQV9VU0VSX0NNX0NNRF9MSVNURU4sCiAgUkRNQV9VU0VSX0NNX0NNRF9BQ0NFUFQsCiAgUkRNQV9VU0VSX0NNX0NNRF9SRUpFQ1QsCi0gUkRNQV9VU0VSX0NNX0NNRF9ESVNDT05ORUNULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBSRE1BX1VTRVJfQ01fQ01EX0RJU0NPTk5FQ1QsCiAgUkRNQV9VU0VSX0NNX0NNRF9JTklUX1FQX0FUVFIsCiAgUkRNQV9VU0VSX0NNX0NNRF9HRVRfRVZFTlQsCiAgUkRNQV9VU0VSX0NNX0NNRF9HRVRfT1BUSU9OLAotIFJETUFfVVNFUl9DTV9DTURfU0VUX09QVElPTiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUkRNQV9VU0VSX0NNX0NNRF9TRVRfT1BUSU9OLAogIFJETUFfVVNFUl9DTV9DTURfTk9USUZZLAogIFJETUFfVVNFUl9DTV9DTURfSk9JTl9JUF9NQ0FTVCwKICBSRE1BX1VTRVJfQ01fQ01EX0xFQVZFX01DQVNULAotIFJETUFfVVNFUl9DTV9DTURfTUlHUkFURV9JRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUkRNQV9VU0VSX0NNX0NNRF9NSUdSQVRFX0lELAogIFJETUFfVVNFUl9DTV9DTURfUVVFUlksCiAgUkRNQV9VU0VSX0NNX0NNRF9CSU5ELAogIFJETUFfVVNFUl9DTV9DTURfUkVTT0xWRV9BRERSLAotIFJETUFfVVNFUl9DTV9DTURfSk9JTl9NQ0FTVAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBSRE1BX1VTRVJfQ01fQ01EX0pPSU5fTUNBU1QKIH07CiBzdHJ1Y3QgcmRtYV91Y21fY21kX2hkciB7CiAgX191MzIgY21kOwotIF9fdTE2IGluOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiBpbjsKICBfX3UxNiBvdXQ7CiB9Owogc3RydWN0IHJkbWFfdWNtX2NyZWF0ZV9pZCB7Ci0gX191NjQgdWlkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB1aWQ7CiAgX191NjQgcmVzcG9uc2U7CiAgX191MTYgcHM7CiAgX191OCBxcF90eXBlOwotIF9fdTggcmVzZXJ2ZWRbNV07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcmVzZXJ2ZWRbNV07CiB9Owogc3RydWN0IHJkbWFfdWNtX2NyZWF0ZV9pZF9yZXNwIHsKICBfX3UzMiBpZDsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCByZG1hX3VjbV9kZXN0cm95X2lkIHsKICBfX3U2NCByZXNwb25zZTsKICBfX3UzMiBpZDsKLSBfX3UzMiByZXNlcnZlZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcmVzZXJ2ZWQ7CiB9Owogc3RydWN0IHJkbWFfdWNtX2Rlc3Ryb3lfaWRfcmVzcCB7CiAgX191MzIgZXZlbnRzX3JlcG9ydGVkOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IHJkbWFfdWNtX2JpbmRfaXAgewogIF9fdTY0IHJlc3BvbnNlOwogIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKLSBfX3UzMiBpZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaWQ7CiB9Owogc3RydWN0IHJkbWFfdWNtX2JpbmQgewogIF9fdTMyIGlkOwotIF9fdTE2IGFkZHJfc2l6ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgYWRkcl9zaXplOwogIF9fdTE2IHJlc2VydmVkOwogIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7CiB9Owotc3RydWN0IHJkbWFfdWNtX3Jlc29sdmVfaXAgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCByZG1hX3VjbV9yZXNvbHZlX2lwIHsKICBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyY19hZGRyOwogIHN0cnVjdCBzb2NrYWRkcl9pbjYgZHN0X2FkZHI7CiAgX191MzIgaWQ7Ci0gX191MzIgdGltZW91dF9tczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdGltZW91dF9tczsKIH07CiBzdHJ1Y3QgcmRtYV91Y21fcmVzb2x2ZV9hZGRyIHsKICBfX3UzMiBpZDsKLSBfX3UzMiB0aW1lb3V0X21zOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0aW1lb3V0X21zOwogIF9fdTE2IHNyY19zaXplOwogIF9fdTE2IGRzdF9zaXplOwogIF9fdTMyIHJlc2VydmVkOwotIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNyY19hZGRyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcmNfYWRkcjsKICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBkc3RfYWRkcjsKIH07CiBzdHJ1Y3QgcmRtYV91Y21fcmVzb2x2ZV9yb3V0ZSB7Ci0gX191MzIgaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGlkOwogIF9fdTMyIHRpbWVvdXRfbXM7CiB9OwogZW51bSB7Ci0gUkRNQV9VU0VSX0NNX1FVRVJZX0FERFIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFJETUFfVVNFUl9DTV9RVUVSWV9BRERSLAogIFJETUFfVVNFUl9DTV9RVUVSWV9QQVRILAogIFJETUFfVVNFUl9DTV9RVUVSWV9HSUQKIH07Ci1zdHJ1Y3QgcmRtYV91Y21fcXVlcnkgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCByZG1hX3VjbV9xdWVyeSB7CiAgX191NjQgcmVzcG9uc2U7CiAgX191MzIgaWQ7CiAgX191MzIgb3B0aW9uOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IHJkbWFfdWNtX3F1ZXJ5X3JvdXRlX3Jlc3AgewogIF9fdTY0IG5vZGVfZ3VpZDsKICBzdHJ1Y3QgaWJfdXNlcl9wYXRoX3JlYyBpYl9yb3V0ZVsyXTsKLSBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyY19hZGRyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyY19hZGRyOwogIHN0cnVjdCBzb2NrYWRkcl9pbjYgZHN0X2FkZHI7CiAgX191MzIgbnVtX3BhdGhzOwogIF9fdTggcG9ydF9udW07Ci0gX191OCByZXNlcnZlZFszXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCByZXNlcnZlZFszXTsKIH07CiBzdHJ1Y3QgcmRtYV91Y21fcXVlcnlfYWRkcl9yZXNwIHsKICBfX3U2NCBub2RlX2d1aWQ7Ci0gX191OCBwb3J0X251bTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBwb3J0X251bTsKICBfX3U4IHJlc2VydmVkOwogIF9fdTE2IHBrZXk7CiAgX191MTYgc3JjX3NpemU7Ci0gX191MTYgZHN0X3NpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IGRzdF9zaXplOwogIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNyY19hZGRyOwogIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGRzdF9hZGRyOwogfTsKLXN0cnVjdCByZG1hX3VjbV9xdWVyeV9wYXRoX3Jlc3AgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCByZG1hX3VjbV9xdWVyeV9wYXRoX3Jlc3AgewogIF9fdTMyIG51bV9wYXRoczsKICBfX3UzMiByZXNlcnZlZDsKICBzdHJ1Y3QgaWJfcGF0aF9yZWNfZGF0YSBwYXRoX2RhdGFbMF07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgcmRtYV91Y21fY29ubl9wYXJhbSB7CiAgX191MzIgcXBfbnVtOwogIF9fdTMyIHFrZXk7Ci0gX191OCBwcml2YXRlX2RhdGFbUkRNQV9NQVhfUFJJVkFURV9EQVRBXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBwcml2YXRlX2RhdGFbUkRNQV9NQVhfUFJJVkFURV9EQVRBXTsKICBfX3U4IHByaXZhdGVfZGF0YV9sZW47CiAgX191OCBzcnE7CiAgX191OCByZXNwb25kZXJfcmVzb3VyY2VzOwotIF9fdTggaW5pdGlhdG9yX2RlcHRoOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGluaXRpYXRvcl9kZXB0aDsKICBfX3U4IGZsb3dfY29udHJvbDsKICBfX3U4IHJldHJ5X2NvdW50OwogIF9fdTggcm5yX3JldHJ5X2NvdW50OwotIF9fdTggdmFsaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggdmFsaWQ7CiB9Owogc3RydWN0IHJkbWFfdWNtX3VkX3BhcmFtIHsKICBfX3UzMiBxcF9udW07Ci0gX191MzIgcWtleTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcWtleTsKICBzdHJ1Y3QgaWJfdXZlcmJzX2FoX2F0dHIgYWhfYXR0cjsKICBfX3U4IHByaXZhdGVfZGF0YVtSRE1BX01BWF9QUklWQVRFX0RBVEFdOwogIF9fdTggcHJpdmF0ZV9kYXRhX2xlbjsKLSBfX3U4IHJlc2VydmVkWzddOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHJlc2VydmVkWzddOwogfTsKIHN0cnVjdCByZG1hX3VjbV9jb25uZWN0IHsKICBzdHJ1Y3QgcmRtYV91Y21fY29ubl9wYXJhbSBjb25uX3BhcmFtOwotIF9fdTMyIGlkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBpZDsKICBfX3UzMiByZXNlcnZlZDsKIH07CiBzdHJ1Y3QgcmRtYV91Y21fbGlzdGVuIHsKLSBfX3UzMiBpZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaWQ7CiAgX191MzIgYmFja2xvZzsKIH07CiBzdHJ1Y3QgcmRtYV91Y21fYWNjZXB0IHsKLSBfX3U2NCB1aWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHVpZDsKICBzdHJ1Y3QgcmRtYV91Y21fY29ubl9wYXJhbSBjb25uX3BhcmFtOwogIF9fdTMyIGlkOwogIF9fdTMyIHJlc2VydmVkOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IHJkbWFfdWNtX3JlamVjdCB7CiAgX191MzIgaWQ7CiAgX191OCBwcml2YXRlX2RhdGFfbGVuOwotIF9fdTggcmVzZXJ2ZWRbM107CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcmVzZXJ2ZWRbM107CiAgX191OCBwcml2YXRlX2RhdGFbUkRNQV9NQVhfUFJJVkFURV9EQVRBXTsKIH07CiBzdHJ1Y3QgcmRtYV91Y21fZGlzY29ubmVjdCB7Ci0gX191MzIgaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGlkOwogfTsKIHN0cnVjdCByZG1hX3VjbV9pbml0X3FwX2F0dHIgewogIF9fdTY0IHJlc3BvbnNlOwotIF9fdTMyIGlkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBpZDsKICBfX3UzMiBxcF9zdGF0ZTsKIH07CiBzdHJ1Y3QgcmRtYV91Y21fbm90aWZ5IHsKLSBfX3UzMiBpZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaWQ7CiAgX191MzIgZXZlbnQ7CiB9Owogc3RydWN0IHJkbWFfdWNtX2pvaW5faXBfbWNhc3QgewotIF9fdTY0IHJlc3BvbnNlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCByZXNwb25zZTsKICBfX3U2NCB1aWQ7CiAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOwogIF9fdTMyIGlkOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IHJkbWFfdWNtX2pvaW5fbWNhc3QgewogIF9fdTY0IHJlc3BvbnNlOwogIF9fdTY0IHVpZDsKLSBfX3UzMiBpZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaWQ7CiAgX191MTYgYWRkcl9zaXplOwogIF9fdTE2IHJlc2VydmVkOwogIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgcmRtYV91Y21fZ2V0X2V2ZW50IHsKICBfX3U2NCByZXNwb25zZTsKIH07Ci1zdHJ1Y3QgcmRtYV91Y21fZXZlbnRfcmVzcCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHJkbWFfdWNtX2V2ZW50X3Jlc3AgewogIF9fdTY0IHVpZDsKICBfX3UzMiBpZDsKICBfX3UzMiBldmVudDsKLSBfX3UzMiBzdGF0dXM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHN0YXR1czsKICB1bmlvbiB7CiAgc3RydWN0IHJkbWFfdWNtX2Nvbm5fcGFyYW0gY29ubjsKICBzdHJ1Y3QgcmRtYV91Y21fdWRfcGFyYW0gdWQ7Ci0gfSBwYXJhbTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfSBwYXJhbTsKIH07CiBlbnVtIHsKICBSRE1BX09QVElPTl9JRCA9IDAsCi0gUkRNQV9PUFRJT05fSUIgPSAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFJETUFfT1BUSU9OX0lCID0gMQogfTsKIGVudW0gewogIFJETUFfT1BUSU9OX0lEX1RPUyA9IDAsCi0gUkRNQV9PUFRJT05fSURfUkVVU0VBRERSID0gMSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUkRNQV9PUFRJT05fSURfUkVVU0VBRERSID0gMSwKICBSRE1BX09QVElPTl9JRF9BRk9OTFkgPSAyLAogIFJETUFfT1BUSU9OX0lCX1BBVEggPSAxCiB9Owotc3RydWN0IHJkbWFfdWNtX3NldF9vcHRpb24gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCByZG1hX3VjbV9zZXRfb3B0aW9uIHsKICBfX3U2NCBvcHR2YWw7CiAgX191MzIgaWQ7CiAgX191MzIgbGV2ZWw7Ci0gX191MzIgb3B0bmFtZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgb3B0bmFtZTsKICBfX3UzMiBvcHRsZW47CiB9Owogc3RydWN0IHJkbWFfdWNtX21pZ3JhdGVfaWQgewotIF9fdTY0IHJlc3BvbnNlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCByZXNwb25zZTsKICBfX3UzMiBpZDsKICBfX3UzMiBmZDsKIH07Ci1zdHJ1Y3QgcmRtYV91Y21fbWlncmF0ZV9yZXNwIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgcmRtYV91Y21fbWlncmF0ZV9yZXNwIHsKICBfX3UzMiBldmVudHNfcmVwb3J0ZWQ7CiB9OwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9hc291bmQuaCBiL2xpYmMva2VybmVsL3VhcGkvc291bmQvYXNvdW5kLmgKaW5kZXggOWQxODdhYS4uZWJiNGU2OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9hc291bmQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2Fzb3VuZC5oCkBAIC02OCw5MjQgKzY4LDkyNyBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9IV0RFUF9JRkFDRV9VU0JfU1RSRUFNLAogIFNORFJWX0hXREVQX0lGQUNFX0ZXX0RJQ0UsCi0gU05EUlZfSFdERVBfSUZBQ0VfTEFTVCA9IFNORFJWX0hXREVQX0lGQUNFX0ZXX0RJQ0UKLX07CisgU05EUlZfSFdERVBfSUZBQ0VfRldfRklSRVdPUktTLAorIFNORFJWX0hXREVQX0lGQUNFX0ZXX0JFQk9CLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9IV0RFUF9JRkFDRV9MQVNUID0gU05EUlZfSFdERVBfSUZBQ0VfRldfQkVCT0IKK307CiBzdHJ1Y3Qgc25kX2h3ZGVwX2luZm8gewogIHVuc2lnbmVkIGludCBkZXZpY2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBjYXJkOwogIHVuc2lnbmVkIGNoYXIgaWRbNjRdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIG5hbWVbODBdOwogIGludCBpZmFjZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyB7CiAgdW5zaWduZWQgaW50IHZlcnNpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgaWRbMzJdOwogIHVuc2lnbmVkIGludCBudW1fZHNwczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGRzcF9sb2FkZWQ7CiAgdW5zaWduZWQgaW50IGNoaXBfcmVhZHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTZdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9pbWFnZSB7CiAgdW5zaWduZWQgaW50IGluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIG5hbWVbNjRdOwogIHVuc2lnbmVkIGNoYXIgX191c2VyICppbWFnZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2l6ZV90IGxlbmd0aDsKICB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX1BWRVJTSU9OIF9JT1IgKCdIJywgMHgwMCwgaW50KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfSU5GTyBfSU9SICgnSCcsIDB4MDEsIHN0cnVjdCBzbmRfaHdkZXBfaW5mbykKICNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfRFNQX1NUQVRVUyBfSU9SKCdIJywgMHgwMiwgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfRFNQX0xPQUQgX0lPVygnSCcsIDB4MDMsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX2ltYWdlKQogI2RlZmluZSBTTkRSVl9QQ01fVkVSU0lPTiBTTkRSVl9QUk9UT0NPTF9WRVJTSU9OKDIsIDAsIDExKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBzbmRfcGNtX3VmcmFtZXNfdDsKIHR5cGVkZWYgc2lnbmVkIGxvbmcgc25kX3BjbV9zZnJhbWVzX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgU05EUlZfUENNX0NMQVNTX0dFTkVSSUMgPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9QQ01fQ0xBU1NfTVVMVEksCiAgU05EUlZfUENNX0NMQVNTX01PREVNLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9QQ01fQ0xBU1NfRElHSVRJWkVSLAogIFNORFJWX1BDTV9DTEFTU19MQVNUID0gU05EUlZfUENNX0NMQVNTX0RJR0lUSVpFUiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX1BDTV9TVUJDTEFTU19HRU5FUklDX01JWCA9IDAsCiAgU05EUlZfUENNX1NVQkNMQVNTX01VTFRJX01JWCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgU05EUlZfUENNX1NVQkNMQVNTX0xBU1QgPSBTTkRSVl9QQ01fU1VCQ0xBU1NfTVVMVElfTUlYLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLID0gMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAogIFNORFJWX1BDTV9TVFJFQU1fTEFTVCA9IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogdHlwZWRlZiBpbnQgX19iaXR3aXNlIHNuZF9wY21fYWNjZXNzX3Q7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fQUNDRVNTX01NQVBfSU5URVJMRUFWRUQgKChfX2ZvcmNlIHNuZF9wY21fYWNjZXNzX3QpIDApCiAjZGVmaW5lIFNORFJWX1BDTV9BQ0NFU1NfTU1BUF9OT05JTlRFUkxFQVZFRCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9BQ0NFU1NfTU1BUF9DT01QTEVYICgoX19mb3JjZSBzbmRfcGNtX2FjY2Vzc190KSAyKQogI2RlZmluZSBTTkRSVl9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVEICgoX19mb3JjZSBzbmRfcGNtX2FjY2Vzc190KSAzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19SV19OT05JTlRFUkxFQVZFRCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgNCkKICNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19MQVNUIFNORFJWX1BDTV9BQ0NFU1NfUldfTk9OSU5URVJMRUFWRUQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIGludCBfX2JpdHdpc2Ugc25kX3BjbV9mb3JtYXRfdDsKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TOCAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTggKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDEpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMTZfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDMpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTE2X0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMTZfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDUpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMjRfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDcpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTI0X0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjRfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDkpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzMyX0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxMSkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMzJfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDEyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMzJfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDEzKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRkxPQVRfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDE1KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjRfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDE2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9GTE9BVDY0X0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxNykKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9JRUM5NThfU1VCRlJBTUVfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDE4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9JRUM5NThfU1VCRlJBTUVfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDE5KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX01VX0xBVyAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMjApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0FfTEFXICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAyMSkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9JTUFfQURQQ00gKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDIyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9NUEVHICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAyMykKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9HU00gKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDI0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TUEVDSUFMICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzMSkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMjRfM0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzI0XzNCRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMzMpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTI0XzNMRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMzQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyNF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM1KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzNykKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjBfM0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTIwXzNCRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMzkpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzE4XzNMRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MxOF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQxKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UxOF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMThfM0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA0MykKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9HNzIzXzI0ICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA0NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRzcyM18yNF8xQiAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDUpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRzcyM180MCAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0c3MjNfNDBfMUIgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQ3KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0RTRF9VOCAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0RTRF9VMTZfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQ5KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0xBU1QgU05EUlZfUENNX0ZPUk1BVF9EU0RfVTE2X0xFCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIFNORFJWX0xJVFRMRV9FTkRJQU4KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMTYgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTE2IFNORFJWX1BDTV9GT1JNQVRfVTE2X0xFCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzI0IFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyNCBTTkRSVl9QQ01fRk9STUFUX1UyNF9MRQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MzMiBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMzIgU05EUlZfUENNX0ZPUk1BVF9VMzJfTEUKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9GTE9BVCBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0xFCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjQgU05EUlZfUENNX0ZPUk1BVF9GTE9BVDY0X0xFCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FX0xFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZkZWYgU05EUlZfQklHX0VORElBTgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMTYgU05EUlZfUENNX0ZPUk1BVF9TMTZfQkUKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMTYgU05EUlZfUENNX0ZPUk1BVF9VMTZfQkUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzI0IFNORFJWX1BDTV9GT1JNQVRfUzI0X0JFCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTI0IFNORFJWX1BDTV9GT1JNQVRfVTI0X0JFCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MzMiBTTkRSVl9QQ01fRk9STUFUX1MzMl9CRQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UzMiBTTkRSVl9QQ01fRk9STUFUX1UzMl9CRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9GTE9BVCBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0JFCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NCBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjRfQkUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FX0JFCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIGludCBfX2JpdHdpc2Ugc25kX3BjbV9zdWJmb3JtYXRfdDsKICNkZWZpbmUgU05EUlZfUENNX1NVQkZPUk1BVF9TVEQgKChfX2ZvcmNlIHNuZF9wY21fc3ViZm9ybWF0X3QpIDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fU1VCRk9STUFUX0xBU1QgU05EUlZfUENNX1NVQkZPUk1BVF9TVEQKICNkZWZpbmUgU05EUlZfUENNX0lORk9fTU1BUCAweDAwMDAwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIDB4MDAwMDAwMDIKICNkZWZpbmUgU05EUlZfUENNX0lORk9fRE9VQkxFIDB4MDAwMDAwMDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0JBVENIIDB4MDAwMDAwMTAKICNkZWZpbmUgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgMHgwMDAwMDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0lORk9fTk9OSU5URVJMRUFWRUQgMHgwMDAwMDIwMAogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19DT01QTEVYIDB4MDAwMDA0MDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIDB4MDAwMTAwMDAKICNkZWZpbmUgU05EUlZfUENNX0lORk9fT1ZFUlJBTkdFIDB4MDAwMjAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX1JFU1VNRSAweDAwMDQwMDAwCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX1BBVVNFIDB4MDAwODAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0hBTEZfRFVQTEVYIDB4MDAxMDAwMDAKICNkZWZpbmUgU05EUlZfUENNX0lORk9fSk9JTlRfRFVQTEVYIDB4MDAyMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQgMHgwMDQwMDAwMAogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19OT19QRVJJT0RfV0FLRVVQIDB4MDA4MDAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0hBU19XQUxMX0NMT0NLIDB4MDEwMDAwMDAKICNkZWZpbmUgU05EUlZfUENNX0lORk9fRklGT19JTl9GUkFNRVMgMHg4MDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgaW50IF9fYml0d2lzZSBzbmRfcGNtX3N0YXRlX3Q7CiAjZGVmaW5lIFNORFJWX1BDTV9TVEFURV9PUEVOICgoX19mb3JjZSBzbmRfcGNtX3N0YXRlX3QpIDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfU0VUVVAgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgMSkKICNkZWZpbmUgU05EUlZfUENNX1NUQVRFX1BSRVBBUkVEICgoX19mb3JjZSBzbmRfcGNtX3N0YXRlX3QpIDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfUlVOTklORyAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSAzKQogI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfWFJVTiAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSA0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX1NUQVRFX0RSQUlOSU5HICgoX19mb3JjZSBzbmRfcGNtX3N0YXRlX3QpIDUpCiAjZGVmaW5lIFNORFJWX1BDTV9TVEFURV9QQVVTRUQgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgNykKICNkZWZpbmUgU05EUlZfUENNX1NUQVRFX0RJU0NPTk5FQ1RFRCAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSA4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX1NUQVRFX0xBU1QgU05EUlZfUENNX1NUQVRFX0RJU0NPTk5FQ1RFRAogZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX1BDTV9NTUFQX09GRlNFVF9EQVRBID0gMHgwMDAwMDAwMCwKICBTTkRSVl9QQ01fTU1BUF9PRkZTRVRfU1RBVFVTID0gMHg4MDAwMDAwMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgU05EUlZfUENNX01NQVBfT0ZGU0VUX0NPTlRST0wgPSAweDgxMDAwMDAwLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB1bmlvbiBzbmRfcGNtX3N5bmNfaWQgewogIHVuc2lnbmVkIGNoYXIgaWRbMTZdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBpZDE2WzhdOwogIHVuc2lnbmVkIGludCBpZDMyWzRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3Qgc25kX3BjbV9pbmZvIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGRldmljZTsKICB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc3RyZWFtOwogIGludCBjYXJkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGlkWzY0XTsKICB1bnNpZ25lZCBjaGFyIG5hbWVbODBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHN1Ym5hbWVbMzJdOwogIGludCBkZXZfY2xhc3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBkZXZfc3ViY2xhc3M7CiAgdW5zaWduZWQgaW50IHN1YmRldmljZXNfY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBzdWJkZXZpY2VzX2F2YWlsOwogIHVuaW9uIHNuZF9wY21fc3luY19pZCBzeW5jOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBpbnQgc25kX3BjbV9od19wYXJhbV90OwogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fQUNDRVNTIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQgMQogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fU1VCRk9STUFUIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9GSVJTVF9NQVNLIFNORFJWX1BDTV9IV19QQVJBTV9BQ0NFU1MKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfTUFTSyBTTkRSVl9QQ01fSFdfUEFSQU1fU1VCRk9STUFUCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fU0FNUExFX0JJVFMgOAogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fRlJBTUVfQklUUyA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMgMTAKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUgMTEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfVElNRSAxMgogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1NJWkUgMTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfQllURVMgMTQKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMgMTUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfVElNRSAxNgogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX1NJWkUgMTcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMgMTgKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX1RJQ0tfVElNRSAxOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX0lOVEVSVkFMIFNORFJWX1BDTV9IV19QQVJBTV9TQU1QTEVfQklUUwogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fTEFTVF9JTlRFUlZBTCBTTkRSVl9QQ01fSFdfUEFSQU1fVElDS19USU1FCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1TX05PUkVTQU1QTEUgKDE8PDApCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTVNfRVhQT1JUX0JVRkZFUiAoMTw8MSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTVNfTk9fUEVSSU9EX1dBS0VVUCAoMTw8MikKIHN0cnVjdCBzbmRfaW50ZXJ2YWwgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbWluLCBtYXg7CiAgdW5zaWduZWQgaW50IG9wZW5taW46MSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgb3Blbm1heDoxLAogIGludGVnZXI6MSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZW1wdHk6MTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9NQVNLX01BWCAyNTYKIHN0cnVjdCBzbmRfbWFzayB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJpdHNbKFNORFJWX01BU0tfTUFYKzMxKS8zMl07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyB7CiAgdW5zaWduZWQgaW50IGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc25kX21hc2sgbWFza3NbU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfTUFTSyAtCiAgU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX01BU0sgKyAxXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHNuZF9tYXNrIG1yZXNbNV07CiAgc3RydWN0IHNuZF9pbnRlcnZhbCBpbnRlcnZhbHNbU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfSU5URVJWQUwgLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9QQ01fSFdfUEFSQU1fRklSU1RfSU5URVJWQUwgKyAxXTsKICBzdHJ1Y3Qgc25kX2ludGVydmFsIGlyZXNbOV07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBybWFzazsKICB1bnNpZ25lZCBpbnQgY21hc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBpbmZvOwogIHVuc2lnbmVkIGludCBtc2JpdHM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCByYXRlX251bTsKICB1bnNpZ25lZCBpbnQgcmF0ZV9kZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNuZF9wY21fdWZyYW1lc190IGZpZm9fc2l6ZTsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX1BDTV9UU1RBTVBfTk9ORSA9IDAsCiAgU05EUlZfUENNX1RTVEFNUF9FTkFCTEUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX1BDTV9UU1RBTVBfTEFTVCA9IFNORFJWX1BDTV9UU1RBTVBfRU5BQkxFLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX3BjbV9zd19wYXJhbXMgewogIGludCB0c3RhbXBfbW9kZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHBlcmlvZF9zdGVwOwogIHVuc2lnbmVkIGludCBzbGVlcF9taW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNuZF9wY21fdWZyYW1lc190IGF2YWlsX21pbjsKICBzbmRfcGNtX3VmcmFtZXNfdCB4ZmVyX2FsaWduOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzbmRfcGNtX3VmcmFtZXNfdCBzdGFydF90aHJlc2hvbGQ7CiAgc25kX3BjbV91ZnJhbWVzX3Qgc3RvcF90aHJlc2hvbGQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNuZF9wY21fdWZyYW1lc190IHNpbGVuY2VfdGhyZXNob2xkOwogIHNuZF9wY21fdWZyYW1lc190IHNpbGVuY2Vfc2l6ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc25kX3BjbV91ZnJhbWVzX3QgYm91bmRhcnk7CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBjaGFubmVsOwogIF9fa2VybmVsX29mZl90IG9mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGZpcnN0OwogIHVuc2lnbmVkIGludCBzdGVwOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3Qgc25kX3BjbV9zdGF0dXMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzbmRfcGNtX3N0YXRlX3Qgc3RhdGU7CiAgc3RydWN0IHRpbWVzcGVjIHRyaWdnZXJfdHN0YW1wOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdGltZXNwZWMgdHN0YW1wOwogIHNuZF9wY21fdWZyYW1lc190IGFwcGxfcHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzbmRfcGNtX3VmcmFtZXNfdCBod19wdHI7CiAgc25kX3BjbV9zZnJhbWVzX3QgZGVsYXk7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNuZF9wY21fdWZyYW1lc190IGF2YWlsOwogIHNuZF9wY21fdWZyYW1lc190IGF2YWlsX21heDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc25kX3BjbV91ZnJhbWVzX3Qgb3ZlcnJhbmdlOwogIHNuZF9wY21fc3RhdGVfdCBzdXNwZW5kZWRfc3RhdGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkX2FsaWdubWVudDsKICBzdHJ1Y3QgdGltZXNwZWMgYXVkaW9fdHN0YW1wOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzU2LXNpemVvZihzdHJ1Y3QgdGltZXNwZWMpXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNuZF9wY21fbW1hcF9zdGF0dXMgewogIHNuZF9wY21fc3RhdGVfdCBzdGF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHBhZDE7CiAgc25kX3BjbV91ZnJhbWVzX3QgaHdfcHRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdGltZXNwZWMgdHN0YW1wOwogIHNuZF9wY21fc3RhdGVfdCBzdXNwZW5kZWRfc3RhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0aW1lc3BlYyBhdWRpb190c3RhbXA7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzbmRfcGNtX21tYXBfY29udHJvbCB7CiAgc25kX3BjbV91ZnJhbWVzX3QgYXBwbF9wdHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNuZF9wY21fdWZyYW1lc190IGF2YWlsX21pbjsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fU1lOQ19QVFJfSFdTWU5DICgxPDwwKQogI2RlZmluZSBTTkRSVl9QQ01fU1lOQ19QVFJfQVBQTCAoMTw8MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9TWU5DX1BUUl9BVkFJTF9NSU4gKDE8PDIpCiBzdHJ1Y3Qgc25kX3BjbV9zeW5jX3B0ciB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBmbGFnczsKICB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzbmRfcGNtX21tYXBfc3RhdHVzIHN0YXR1czsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBzOwogIHVuaW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHNuZF9wY21fbW1hcF9jb250cm9sIGNvbnRyb2w7CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gYzsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNuZF94ZmVyaSB7CiAgc25kX3BjbV9zZnJhbWVzX3QgcmVzdWx0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkIF9fdXNlciAqYnVmOwogIHNuZF9wY21fdWZyYW1lc190IGZyYW1lczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHNuZF94ZmVybiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNuZF9wY21fc2ZyYW1lc190IHJlc3VsdDsKICB2b2lkIF9fdXNlciAqIF9fdXNlciAqYnVmczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBTTkRSVl9QQ01fVFNUQU1QX1RZUEVfR0VUVElNRU9GREFZID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgU05EUlZfUENNX1RTVEFNUF9UWVBFX01PTk9UT05JQywKICBTTkRSVl9QQ01fVFNUQU1QX1RZUEVfTEFTVCA9IFNORFJWX1BDTV9UU1RBTVBfVFlQRV9NT05PVE9OSUMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9DSE1BUF9VTktOT1dOID0gMCwKICBTTkRSVl9DSE1BUF9OQSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgU05EUlZfQ0hNQVBfTU9OTywKICBTTkRSVl9DSE1BUF9GTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgU05EUlZfQ0hNQVBfRlIsCiAgU05EUlZfQ0hNQVBfUkwsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX0NITUFQX1JSLAogIFNORFJWX0NITUFQX0ZDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9DSE1BUF9MRkUsCiAgU05EUlZfQ0hNQVBfU0wsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX0NITUFQX1NSLAogIFNORFJWX0NITUFQX1JDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9DSE1BUF9GTEMsCiAgU05EUlZfQ0hNQVBfRlJDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9DSE1BUF9STEMsCiAgU05EUlZfQ0hNQVBfUlJDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9DSE1BUF9GTFcsCiAgU05EUlZfQ0hNQVBfRlJXLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9DSE1BUF9GTEgsCiAgU05EUlZfQ0hNQVBfRkNILAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9DSE1BUF9GUkgsCiAgU05EUlZfQ0hNQVBfVEMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX0NITUFQX1RGTCwKICBTTkRSVl9DSE1BUF9URlIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX0NITUFQX1RGQywKICBTTkRSVl9DSE1BUF9UUkwsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX0NITUFQX1RSUiwKICBTTkRSVl9DSE1BUF9UUkMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX0NITUFQX1RGTEMsCiAgU05EUlZfQ0hNQVBfVEZSQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgU05EUlZfQ0hNQVBfVFNMLAogIFNORFJWX0NITUFQX1RTUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgU05EUlZfQ0hNQVBfTExGRSwKICBTTkRSVl9DSE1BUF9STEZFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9DSE1BUF9CQywKICBTTkRSVl9DSE1BUF9CTEMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX0NITUFQX0JSQywKICBTTkRSVl9DSE1BUF9MQVNUID0gU05EUlZfQ0hNQVBfQlJDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFNORFJWX0NITUFQX1BPU0lUSU9OX01BU0sgMHhmZmZmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DSE1BUF9QSEFTRV9JTlZFUlNFICgweDAxIDw8IDE2KQogI2RlZmluZSBTTkRSVl9DSE1BUF9EUklWRVJfU1BFQyAoMHgwMiA8PCAxNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9QVkVSU0lPTiBfSU9SKCdBJywgMHgwMCwgaW50KQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSU5GTyBfSU9SKCdBJywgMHgwMSwgc3RydWN0IHNuZF9wY21faW5mbykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9UU1RBTVAgX0lPVygnQScsIDB4MDIsIGludCkKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1RUU1RBTVAgX0lPVygnQScsIDB4MDMsIGludCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9IV19SRUZJTkUgX0lPV1IoJ0EnLCAweDEwLCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9IV19QQVJBTVMgX0lPV1IoJ0EnLCAweDExLCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdfRlJFRSBfSU8oJ0EnLCAweDEyKQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1dfUEFSQU1TIF9JT1dSKCdBJywgMHgxMywgc3RydWN0IHNuZF9wY21fc3dfcGFyYW1zKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1NUQVRVUyBfSU9SKCdBJywgMHgyMCwgc3RydWN0IHNuZF9wY21fc3RhdHVzKQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfREVMQVkgX0lPUignQScsIDB4MjEsIHNuZF9wY21fc2ZyYW1lc190KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXU1lOQyBfSU8oJ0EnLCAweDIyKQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1lOQ19QVFIgX0lPV1IoJ0EnLCAweDIzLCBzdHJ1Y3Qgc25kX3BjbV9zeW5jX3B0cikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9DSEFOTkVMX0lORk8gX0lPUignQScsIDB4MzIsIHN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbykKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1BSRVBBUkUgX0lPKCdBJywgMHg0MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRVNFVCBfSU8oJ0EnLCAweDQxKQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1RBUlQgX0lPKCdBJywgMHg0MikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9EUk9QIF9JTygnQScsIDB4NDMpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9EUkFJTiBfSU8oJ0EnLCAweDQ0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1BBVVNFIF9JT1coJ0EnLCAweDQ1LCBpbnQpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRVdJTkQgX0lPVygnQScsIDB4NDYsIHNuZF9wY21fdWZyYW1lc190KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFU1VNRSBfSU8oJ0EnLCAweDQ3KQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfWFJVTiBfSU8oJ0EnLCAweDQ4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0ZPUldBUkQgX0lPVygnQScsIDB4NDksIHNuZF9wY21fdWZyYW1lc190KQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfV1JJVEVJX0ZSQU1FUyBfSU9XKCdBJywgMHg1MCwgc3RydWN0IHNuZF94ZmVyaSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRUFESV9GUkFNRVMgX0lPUignQScsIDB4NTEsIHN0cnVjdCBzbmRfeGZlcmkpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9XUklURU5fRlJBTUVTIF9JT1coJ0EnLCAweDUyLCBzdHJ1Y3Qgc25kX3hmZXJuKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFQUROX0ZSQU1FUyBfSU9SKCdBJywgMHg1Mywgc3RydWN0IHNuZF94ZmVybikKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0xJTksgX0lPVygnQScsIDB4NjAsIGludCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9VTkxJTksgX0lPKCdBJywgMHg2MSkKICNkZWZpbmUgU05EUlZfUkFXTUlESV9WRVJTSU9OIFNORFJWX1BST1RPQ09MX1ZFUlNJT04oMiwgMCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVQgPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwKICBTTkRSVl9SQVdNSURJX1NUUkVBTV9MQVNUID0gU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCAweDAwMDAwMDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQgMHgwMDAwMDAwMgogI2RlZmluZSBTTkRSVl9SQVdNSURJX0lORk9fRFVQTEVYIDB4MDAwMDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX3Jhd21pZGlfaW5mbyB7CiAgdW5zaWduZWQgaW50IGRldmljZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHN1YmRldmljZTsKICBpbnQgc3RyZWFtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgY2FyZDsKICB1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgaWRbNjRdOwogIHVuc2lnbmVkIGNoYXIgbmFtZVs4MF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgc3VibmFtZVszMl07CiAgdW5zaWduZWQgaW50IHN1YmRldmljZXNfY291bnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBzdWJkZXZpY2VzX2F2YWlsOwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3Qgc25kX3Jhd21pZGlfcGFyYW1zIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHN0cmVhbTsKICBzaXplX3QgYnVmZmVyX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNpemVfdCBhdmFpbF9taW47CiAgdW5zaWduZWQgaW50IG5vX2FjdGl2ZV9zZW5zaW5nOiAxOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzE2XTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNuZF9yYXdtaWRpX3N0YXR1cyB7CiAgaW50IHN0cmVhbTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHRpbWVzcGVjIHRzdGFtcDsKICBzaXplX3QgYXZhaWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNpemVfdCB4cnVuczsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzE2XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX1BWRVJTSU9OIF9JT1IoJ1cnLCAweDAwLCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX0lORk8gX0lPUignVycsIDB4MDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9pbmZvKQogI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX1BBUkFNUyBfSU9XUignVycsIDB4MTAsIHN0cnVjdCBzbmRfcmF3bWlkaV9wYXJhbXMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX1NUQVRVUyBfSU9XUignVycsIDB4MjAsIHN0cnVjdCBzbmRfcmF3bWlkaV9zdGF0dXMpCiAjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfRFJPUCBfSU9XKCdXJywgMHgzMCwgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9EUkFJTiBfSU9XKCdXJywgMHgzMSwgaW50KQogI2RlZmluZSBTTkRSVl9USU1FUl9WRVJTSU9OIFNORFJWX1BST1RPQ09MX1ZFUlNJT04oMiwgMCwgNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBTTkRSVl9USU1FUl9DTEFTU19OT05FID0gLTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX1RJTUVSX0NMQVNTX1NMQVZFID0gMCwKICBTTkRSVl9USU1FUl9DTEFTU19HTE9CQUwsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX1RJTUVSX0NMQVNTX0NBUkQsCiAgU05EUlZfVElNRVJfQ0xBU1NfUENNLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9USU1FUl9DTEFTU19MQVNUID0gU05EUlZfVElNRVJfQ0xBU1NfUENNLAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBTTkRSVl9USU1FUl9TQ0xBU1NfTk9ORSA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX1RJTUVSX1NDTEFTU19BUFBMSUNBVElPTiwKICBTTkRSVl9USU1FUl9TQ0xBU1NfU0VRVUVOQ0VSLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9USU1FUl9TQ0xBU1NfT1NTX1NFUVVFTkNFUiwKICBTTkRSVl9USU1FUl9TQ0xBU1NfTEFTVCA9IFNORFJWX1RJTUVSX1NDTEFTU19PU1NfU0VRVUVOQ0VSLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFNORFJWX1RJTUVSX0dMT0JBTF9TWVNURU0gMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfVElNRVJfR0xPQkFMX1JUQyAxCiAjZGVmaW5lIFNORFJWX1RJTUVSX0dMT0JBTF9IUEVUIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1RJTUVSX0dMT0JBTF9IUlRJTUVSIDMKICNkZWZpbmUgU05EUlZfVElNRVJfRkxHX1NMQVZFICgxPDwwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzbmRfdGltZXJfaWQgewogIGludCBkZXZfY2xhc3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBkZXZfc2NsYXNzOwogIGludCBjYXJkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgZGV2aWNlOwogIGludCBzdWJkZXZpY2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBzbmRfdGltZXJfZ2luZm8gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc25kX3RpbWVyX2lkIHRpZDsKICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBjYXJkOwogIHVuc2lnbmVkIGNoYXIgaWRbNjRdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIG5hbWVbODBdOwogIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHJlc29sdXRpb247CiAgdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uX21pbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uX21heDsKICB1bnNpZ25lZCBpbnQgY2xpZW50czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFszMl07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzbmRfdGltZXJfZ3BhcmFtcyB7CiAgc3RydWN0IHNuZF90aW1lcl9pZCB0aWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgcGVyaW9kX251bTsKICB1bnNpZ25lZCBsb25nIHBlcmlvZF9kZW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMzJdOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX3RpbWVyX2dzdGF0dXMgewogIHN0cnVjdCBzbmRfdGltZXJfaWQgdGlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHJlc29sdXRpb247CiAgdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uX251bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uX2RlbjsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzMyXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHNuZF90aW1lcl9zZWxlY3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc25kX3RpbWVyX2lkIGlkOwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMzJdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3Qgc25kX3RpbWVyX2luZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgaW50IGNhcmQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgaWRbNjRdOwogIHVuc2lnbmVkIGNoYXIgbmFtZVs4MF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQwOwogIHVuc2lnbmVkIGxvbmcgcmVzb2x1dGlvbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfVElNRVJfUFNGTEdfQVVUTyAoMTw8MCkKICNkZWZpbmUgU05EUlZfVElNRVJfUFNGTEdfRVhDTFVTSVZFICgxPDwxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfVElNRVJfUFNGTEdfRUFSTFlfRVZFTlQgKDE8PDIpCiBzdHJ1Y3Qgc25kX3RpbWVyX3BhcmFtcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBmbGFnczsKICB1bnNpZ25lZCBpbnQgdGlja3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBxdWV1ZV9zaXplOwogIHVuc2lnbmVkIGludCByZXNlcnZlZDA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBmaWx0ZXI7CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs2MF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBzbmRfdGltZXJfc3RhdHVzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHRpbWVzcGVjIHRzdGFtcDsKICB1bnNpZ25lZCBpbnQgcmVzb2x1dGlvbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGxvc3Q7CiAgdW5zaWduZWQgaW50IG92ZXJydW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBxdWV1ZTsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9QVkVSU0lPTiBfSU9SKCdUJywgMHgwMCwgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfTkVYVF9ERVZJQ0UgX0lPV1IoJ1QnLCAweDAxLCBzdHJ1Y3Qgc25kX3RpbWVyX2lkKQogI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9UUkVBRCBfSU9XKCdUJywgMHgwMiwgaW50KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfR0lORk8gX0lPV1IoJ1QnLCAweDAzLCBzdHJ1Y3Qgc25kX3RpbWVyX2dpbmZvKQogI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9HUEFSQU1TIF9JT1coJ1QnLCAweDA0LCBzdHJ1Y3Qgc25kX3RpbWVyX2dwYXJhbXMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9HU1RBVFVTIF9JT1dSKCdUJywgMHgwNSwgc3RydWN0IHNuZF90aW1lcl9nc3RhdHVzKQogI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9TRUxFQ1QgX0lPVygnVCcsIDB4MTAsIHN0cnVjdCBzbmRfdGltZXJfc2VsZWN0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfSU5GTyBfSU9SKCdUJywgMHgxMSwgc3RydWN0IHNuZF90aW1lcl9pbmZvKQogI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9QQVJBTVMgX0lPVygnVCcsIDB4MTIsIHN0cnVjdCBzbmRfdGltZXJfcGFyYW1zKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU1RBVFVTIF9JT1IoJ1QnLCAweDE0LCBzdHJ1Y3Qgc25kX3RpbWVyX3N0YXR1cykKICNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU1RBUlQgX0lPKCdUJywgMHhhMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NUT1AgX0lPKCdUJywgMHhhMSkKICNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfQ09OVElOVUUgX0lPKCdUJywgMHhhMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1BBVVNFIF9JTygnVCcsIDB4YTMpCiBzdHJ1Y3Qgc25kX3RpbWVyX3JlYWQgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgcmVzb2x1dGlvbjsKICB1bnNpZ25lZCBpbnQgdGlja3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9USU1FUl9FVkVOVF9SRVNPTFVUSU9OID0gMCwKICBTTkRSVl9USU1FUl9FVkVOVF9USUNLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9USU1FUl9FVkVOVF9TVEFSVCwKICBTTkRSVl9USU1FUl9FVkVOVF9TVE9QLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9USU1FUl9FVkVOVF9DT05USU5VRSwKICBTTkRSVl9USU1FUl9FVkVOVF9QQVVTRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgU05EUlZfVElNRVJfRVZFTlRfRUFSTFksCiAgU05EUlZfVElNRVJfRVZFTlRfU1VTUEVORCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgU05EUlZfVElNRVJfRVZFTlRfUkVTVU1FLAogIFNORFJWX1RJTUVSX0VWRU5UX01TVEFSVCA9IFNORFJWX1RJTUVSX0VWRU5UX1NUQVJUICsgMTAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX1RJTUVSX0VWRU5UX01TVE9QID0gU05EUlZfVElNRVJfRVZFTlRfU1RPUCArIDEwLAogIFNORFJWX1RJTUVSX0VWRU5UX01DT05USU5VRSA9IFNORFJWX1RJTUVSX0VWRU5UX0NPTlRJTlVFICsgMTAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX1RJTUVSX0VWRU5UX01QQVVTRSA9IFNORFJWX1RJTUVSX0VWRU5UX1BBVVNFICsgMTAsCiAgU05EUlZfVElNRVJfRVZFTlRfTVNVU1BFTkQgPSBTTkRSVl9USU1FUl9FVkVOVF9TVVNQRU5EICsgMTAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX1RJTUVSX0VWRU5UX01SRVNVTUUgPSBTTkRSVl9USU1FUl9FVkVOVF9SRVNVTUUgKyAxMCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNuZF90aW1lcl90cmVhZCB7CiAgaW50IGV2ZW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdGltZXNwZWMgdHN0YW1wOwogIHVuc2lnbmVkIGludCB2YWw7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgU05EUlZfQ1RMX1ZFUlNJT04gU05EUlZfUFJPVE9DT0xfVkVSU0lPTigyLCAwLCA3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzbmRfY3RsX2NhcmRfaW5mbyB7CiAgaW50IGNhcmQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwYWQ7CiAgdW5zaWduZWQgY2hhciBpZFsxNl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgZHJpdmVyWzE2XTsKICB1bnNpZ25lZCBjaGFyIG5hbWVbMzJdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGxvbmduYW1lWzgwXTsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkX1sxNl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgbWl4ZXJuYW1lWzgwXTsKICB1bnNpZ25lZCBjaGFyIGNvbXBvbmVudHNbMTI4XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogdHlwZWRlZiBpbnQgX19iaXR3aXNlIHNuZF9jdGxfZWxlbV90eXBlX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX05PTkUgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDApCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTiAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX3R5cGVfdCkgMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUiAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX3R5cGVfdCkgMikKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEICgoX19mb3JjZSBzbmRfY3RsX2VsZW1fdHlwZV90KSAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9CWVRFUyAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX3R5cGVfdCkgNCkKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9JRUM5NTggKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI2NCAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX3R5cGVfdCkgNikKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9MQVNUIFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjY0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBpbnQgX19iaXR3aXNlIHNuZF9jdGxfZWxlbV9pZmFjZV90OwogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9DQVJEICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0lGQUNFX0hXREVQICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgMSkKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV9pZmFjZV90KSAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgMykKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUkFXTUlESSAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX2lmYWNlX3QpIDQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9USU1FUiAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX2lmYWNlX3QpIDUpCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0lGQUNFX1NFUVVFTkNFUiAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX2lmYWNlX3QpIDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9MQVNUIFNORFJWX0NUTF9FTEVNX0lGQUNFX1NFUVVFTkNFUgogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCAoMTw8MCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19XUklURSAoMTw8MSkKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSAoU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUR8U05EUlZfQ1RMX0VMRU1fQUNDRVNTX1dSSVRFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFICgxPDwyKQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVElNRVNUQU1QICgxPDwzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEICgxPDw0KQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1dSSVRFICgxPDw1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEV1JJVEUgKFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRHxTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1dSSVRFKQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX0NPTU1BTkQgKDE8PDYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkUgKDE8PDgpCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19MT0NLICgxPDw5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX09XTkVSICgxPDwxMCkKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSyAoMTw8MjgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVVNFUiAoMTw8MjkpCiAjZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EMCAweDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EMSAweDAxMDAKICNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QyIDB4MDIwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QzIDB4MDMwMAogI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDNob3QgKFNORFJWX0NUTF9QT1dFUl9EM3wweDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDNjb2xkIChTTkRSVl9DVExfUE9XRVJfRDN8MHgwMDAxKQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRF9OQU1FX01BWExFTiA0NAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQgewogIHVuc2lnbmVkIGludCBudW1pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc25kX2N0bF9lbGVtX2lmYWNlX3QgaWZhY2U7CiAgdW5zaWduZWQgaW50IGRldmljZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHN1YmRldmljZTsKICB1bnNpZ25lZCBjaGFyIG5hbWVbNDRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgaW5kZXg7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzbmRfY3RsX2VsZW1fbGlzdCB7CiAgdW5zaWduZWQgaW50IG9mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHNwYWNlOwogIHVuc2lnbmVkIGludCB1c2VkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgY291bnQ7CiAgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCBfX3VzZXIgKnBpZHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNTBdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gewogIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNuZF9jdGxfZWxlbV90eXBlX3QgdHlwZTsKICB1bnNpZ25lZCBpbnQgYWNjZXNzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgY291bnQ7CiAgX19rZXJuZWxfcGlkX3Qgb3duZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3QgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIG1pbjsKICBsb25nIG1heDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBzdGVwOwogIH0gaW50ZWdlcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICBsb25nIGxvbmcgbWluOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIGxvbmcgbWF4OwogIGxvbmcgbG9uZyBzdGVwOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGludGVnZXI2NDsKICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgaXRlbXM7CiAgdW5zaWduZWQgaW50IGl0ZW07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgbmFtZVs2NF07CiAgX191NjQgbmFtZXNfcHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbmFtZXNfbGVuZ3RoOwogIH0gZW51bWVyYXRlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFsxMjhdOwogIH0gdmFsdWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICB1bnNpZ25lZCBzaG9ydCBkWzRdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCAqZF9wdHI7CiAgfSBkaW1lbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NC00KnNpemVvZih1bnNpZ25lZCBzaG9ydCldOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlIHsKICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgaW5kaXJlY3Q6IDE7CiAgdW5pb24gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgbG9uZyB2YWx1ZVsxMjhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nICp2YWx1ZV9wdHI7CiAgfSBpbnRlZ2VyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgbG9uZyBsb25nIHZhbHVlWzY0XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBsb25nICp2YWx1ZV9wdHI7CiAgfSBpbnRlZ2VyNjQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICB1bnNpZ25lZCBpbnQgaXRlbVsxMjhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgKml0ZW1fcHRyOwogIH0gZW51bWVyYXRlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIHVuc2lnbmVkIGNoYXIgZGF0YVs1MTJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyICpkYXRhX3B0cjsKICB9IGJ5dGVzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc25kX2Flc19pZWM5NTggaWVjOTU4OwogIH0gdmFsdWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0aW1lc3BlYyB0c3RhbXA7CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFsxMjgtc2l6ZW9mKHN0cnVjdCB0aW1lc3BlYyldOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3Qgc25kX2N0bF90bHYgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbnVtaWQ7CiAgdW5zaWduZWQgaW50IGxlbmd0aDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHRsdlswXTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUFZFUlNJT04gX0lPUignVScsIDB4MDAsIGludCkKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0NBUkRfSU5GTyBfSU9SKCdVJywgMHgwMSwgc3RydWN0IHNuZF9jdGxfY2FyZF9pbmZvKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fTElTVCBfSU9XUignVScsIDB4MTAsIHN0cnVjdCBzbmRfY3RsX2VsZW1fbGlzdCkKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fSU5GTyBfSU9XUignVScsIDB4MTEsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1JFQUQgX0lPV1IoJ1UnLCAweDEyLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlKQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9XUklURSBfSU9XUignVScsIDB4MTMsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9MT0NLIF9JT1coJ1UnLCAweDE0LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9VTkxPQ0sgX0lPVygnVScsIDB4MTUsIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfU1VCU0NSSUJFX0VWRU5UUyBfSU9XUignVScsIDB4MTYsIGludCkKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fQUREIF9JT1dSKCdVJywgMHgxNywgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVQTEFDRSBfSU9XUignVScsIDB4MTgsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbykKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVNT1ZFIF9JT1dSKCdVJywgMHgxOSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9UTFZfUkVBRCBfSU9XUignVScsIDB4MWEsIHN0cnVjdCBzbmRfY3RsX3RsdikKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1RMVl9XUklURSBfSU9XUignVScsIDB4MWIsIHN0cnVjdCBzbmRfY3RsX3RsdikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9UTFZfQ09NTUFORCBfSU9XUignVScsIDB4MWMsIHN0cnVjdCBzbmRfY3RsX3RsdikKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0hXREVQX05FWFRfREVWSUNFIF9JT1dSKCdVJywgMHgyMCwgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0hXREVQX0lORk8gX0lPUignVScsIDB4MjEsIHN0cnVjdCBzbmRfaHdkZXBfaW5mbykKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9ORVhUX0RFVklDRSBfSU9SKCdVJywgMHgzMCwgaW50KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9JTkZPIF9JT1dSKCdVJywgMHgzMSwgc3RydWN0IHNuZF9wY21faW5mbykKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9QUkVGRVJfU1VCREVWSUNFIF9JT1coJ1UnLCAweDMyLCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUkFXTUlESV9ORVhUX0RFVklDRSBfSU9XUignVScsIDB4NDAsIGludCkKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfSU5GTyBfSU9XUignVScsIDB4NDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9pbmZvKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfUFJFRkVSX1NVQkRFVklDRSBfSU9XKCdVJywgMHg0MiwgaW50KQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUE9XRVIgX0lPV1IoJ1UnLCAweGQwLCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUE9XRVJfU1RBVEUgX0lPUignVScsIDB4ZDEsIGludCkKIGVudW0gc25kcnZfY3RsX2V2ZW50X3R5cGUgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9DVExfRVZFTlRfRUxFTSA9IDAsCiAgU05EUlZfQ1RMX0VWRU5UX0xBU1QgPSBTTkRSVl9DVExfRVZFTlRfRUxFTSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSAoMTw8MCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8gKDE8PDEpCiAjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX0FERCAoMTw8MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX1RMViAoMTw8MykKICNkZWZpbmUgU05EUlZfQ1RMX0VWRU5UX01BU0tfUkVNT1ZFICh+MFUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNuZF9jdGxfZXZlbnQgewogIGludCB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgc3RydWN0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IG1hc2s7CiAgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCBpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBlbGVtOwogIHVuc2lnbmVkIGNoYXIgZGF0YThbNjBdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGRhdGE7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfTk9ORSAiIgogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9QTEFZQkFDSyAiUGxheWJhY2sgIgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfQ0FQVFVSRSAiQ2FwdHVyZSAiCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9OT05FICIiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NThfU1dJVENIICJTd2l0Y2giCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9WT0xVTUUgIlZvbHVtZSIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9ERUZBVUxUICJEZWZhdWx0IgogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NThfTUFTSyAiTWFzayIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9DT05fTUFTSyAiQ29uIE1hc2siCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9QUk9fTUFTSyAiUHJvIE1hc2siCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NThfUENNX1NUUkVBTSAiUENNIFN0cmVhbSIKICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4KGV4cGwsZGlyZWN0aW9uLHdoYXQpICJJRUM5NTggIiBleHBsIFNORFJWX0NUTF9OQU1FXyMjZGlyZWN0aW9uIFNORFJWX0NUTF9OQU1FX0lFQzk1OF8jI3doYXQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvc291bmQvY29tcHJlc3Nfb2ZmbG9hZC5oIGIvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9jb21wcmVzc19vZmZsb2FkLmgKaW5kZXggNWIwNjc0MS4uMDEyMDUwMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9jb21wcmVzc19vZmZsb2FkLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9jb21wcmVzc19vZmZsb2FkLmgKQEAgLTI3LDEzICsyNywxMyBAQAogIF9fdTMyIGZyYWdtZW50X3NpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZyYWdtZW50czsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOwogc3RydWN0IHNuZF9jb21wcl9wYXJhbXMgewogIHN0cnVjdCBzbmRfY29tcHJlc3NlZF9idWZmZXIgYnVmZmVyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc25kX2NvZGVjIGNvZGVjOwogIF9fdTggbm9fd2FrZV9tb2RlOwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7CiBzdHJ1Y3Qgc25kX2NvbXByX3RzdGFtcCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJ5dGVfb2Zmc2V0OwpAQCAtNDIsMTIgKzQyLDEyIEBACiAgX191MzIgcGNtX2lvX2ZyYW1lczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc2FtcGxpbmdfcmF0ZTsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOwogc3RydWN0IHNuZF9jb21wcl9hdmFpbCB7CiAgX191NjQgYXZhaWw7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzbmRfY29tcHJfdHN0YW1wIHRzdGFtcDsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOwogZW51bSBzbmRfY29tcHJfZGlyZWN0aW9uIHsKICBTTkRfQ09NUFJFU1NfUExBWUJBQ0sgPSAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTY0LDE0ICs2NCwxNCBAQAogIF9fdTMyIG1heF9mcmFnbWVudHM7CiAgX191MzIgY29kZWNzW01BWF9OVU1fQ09ERUNTXTsKICBfX3UzMiByZXNlcnZlZFsxMV07Ci19OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX2NvbXByX2NvZGVjX2NhcHMgewogIF9fdTMyIGNvZGVjOwogIF9fdTMyIG51bV9kZXNjcmlwdG9yczsKICBzdHJ1Y3Qgc25kX2NvZGVjX2Rlc2MgZGVzY3JpcHRvcltNQVhfTlVNX0NPREVDX0RFU0NSSVBUT1JTXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi19OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKIGVudW0gewogIFNORFJWX0NPTVBSRVNTX0VOQ09ERVJfUEFERElORyA9IDEsCiAgU05EUlZfQ09NUFJFU1NfRU5DT0RFUl9ERUxBWSA9IDIsCkBAIC04MSw3ICs4MSw3IEBACiAgX191MzIga2V5OwogIF9fdTMyIHZhbHVlWzhdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOwogI2RlZmluZSBTTkRSVl9DT01QUkVTU19JT0NUTF9WRVJTSU9OIF9JT1IoJ0MnLCAweDAwLCBpbnQpCiAjZGVmaW5lIFNORFJWX0NPTVBSRVNTX0dFVF9DQVBTIF9JT1dSKCdDJywgMHgxMCwgc3RydWN0IHNuZF9jb21wcl9jYXBzKQogI2RlZmluZSBTTkRSVl9DT01QUkVTU19HRVRfQ09ERUNfQ0FQUyBfSU9XUignQycsIDB4MTEsICBzdHJ1Y3Qgc25kX2NvbXByX2NvZGVjX2NhcHMpCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2NvbXByZXNzX3BhcmFtcy5oIGIvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9jb21wcmVzc19wYXJhbXMuaAppbmRleCA4YWEwYmZlLi5lODg0ZTlhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2NvbXByZXNzX3BhcmFtcy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvc291bmQvY29tcHJlc3NfcGFyYW1zLmgKQEAgLTE4MSwyMyArMTgxLDIzIEBACiAgX191MzIgbWluX2JpdF9yYXRlOwogIF9fdTMyIGRvd25taXg7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7CiBzdHJ1Y3Qgc25kX2VuY19yZWFsIHsKICBfX3UzMiBxdWFudF9iaXRzOwogIF9fdTMyIHN0YXJ0X3JlZ2lvbjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbnVtX3JlZ2lvbnM7Ci19OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKIHN0cnVjdCBzbmRfZW5jX2ZsYWMgewogIF9fdTMyIG51bTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZ2FpbjsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOwogc3RydWN0IHNuZF9lbmNfZ2VuZXJpYyB7CiAgX191MzIgYnc7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIHJlc2VydmVkWzE1XTsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOwogdW5pb24gc25kX2NvZGVjX29wdGlvbnMgewogIHN0cnVjdCBzbmRfZW5jX3dtYSB3bWE7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtMjA2LDcgKzIwNiw3IEBACiAgc3RydWN0IHNuZF9lbmNfZmxhYyBmbGFjOwogIHN0cnVjdCBzbmRfZW5jX2dlbmVyaWMgZ2VuZXJpYzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi19OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKIHN0cnVjdCBzbmRfY29kZWNfZGVzYyB7CiAgX191MzIgbWF4X2NoOwogIF9fdTMyIHNhbXBsZV9yYXRlc1tNQVhfTlVNX1NBTVBMRV9SQVRFU107CkBAIC0yMjIsNyArMjIyLDcgQEAKICBfX3UzMiBtaW5fYnVmZmVyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFsxNV07Ci19OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKIHN0cnVjdCBzbmRfY29kZWMgewogIF9fdTMyIGlkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTI0MSw1ICsyNDEsNSBAQAogIHVuaW9uIHNuZF9jb2RlY19vcHRpb25zIG9wdGlvbnM7CiAgX191MzIgcmVzZXJ2ZWRbM107CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvc291bmQvZmlyZXdpcmUuaCBiL2xpYmMva2VybmVsL3VhcGkvc291bmQvZmlyZXdpcmUuaAppbmRleCA1ZDBmZDE0Li41NWY3MjllIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2ZpcmV3aXJlLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9maXJld2lyZS5oCkBAIC0xOSw0MCArMTksNjMgQEAKICNpZm5kZWYgX1VBUElfU09VTkRfRklSRVdJUkVfSF9JTkNMVURFRAogI2RlZmluZSBfVUFQSV9TT1VORF9GSVJFV0lSRV9IX0lOQ0xVREVECiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNkZWZpbmUgU05EUlZfRklSRVdJUkVfRVZFTlRfTE9DS19TVEFUVVMgMHgwMDAwMTBjYworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9GSVJFV0lSRV9FVkVOVF9MT0NLX1NUQVRVUyAweDAwMDAxMGNjCiAjZGVmaW5lIFNORFJWX0ZJUkVXSVJFX0VWRU5UX0RJQ0VfTk9USUZJQ0FUSU9OIDB4ZDFjZTAwNGUKKyNkZWZpbmUgU05EUlZfRklSRVdJUkVfRVZFTlRfRUZXX1JFU1BPTlNFIDB4NGU2MTc0NzUKIHN0cnVjdCBzbmRfZmlyZXdpcmVfZXZlbnRfY29tbW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHR5cGU7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzbmRfZmlyZXdpcmVfZXZlbnRfbG9ja19zdGF0dXMgewogIHVuc2lnbmVkIGludCB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgc3RhdHVzOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX2ZpcmV3aXJlX2V2ZW50X2RpY2Vfbm90aWZpY2F0aW9uIHsKICB1bnNpZ25lZCBpbnQgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IG5vdGlmaWNhdGlvbjsKIH07CisjZGVmaW5lIFNORF9FRldfVFJBTlNBQ1RJT05fVVNFUl9TRVFOVU1fTUFYICgoX191MzIpKChfX3UxNil+MCkgLSAxKQorc3RydWN0IHNuZF9lZndfdHJhbnNhY3Rpb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMzIgbGVuZ3RoOworIF9fYmUzMiB2ZXJzaW9uOworIF9fYmUzMiBzZXFudW07CisgX19iZTMyIGNhdGVnb3J5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMzIgY29tbWFuZDsKKyBfX2JlMzIgc3RhdHVzOworIF9fYmUzMiBwYXJhbXNbMF07Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBzbmRfZmlyZXdpcmVfZXZlbnRfZWZ3X3Jlc3BvbnNlIHsKKyB1bnNpZ25lZCBpbnQgdHlwZTsKKyBfX2JlMzIgcmVzcG9uc2VbMF07Cit9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHVuaW9uIHNuZF9maXJld2lyZV9ldmVudCB7CiAgc3RydWN0IHNuZF9maXJld2lyZV9ldmVudF9jb21tb24gY29tbW9uOwogIHN0cnVjdCBzbmRfZmlyZXdpcmVfZXZlbnRfbG9ja19zdGF0dXMgbG9ja19zdGF0dXM7CiAgc3RydWN0IHNuZF9maXJld2lyZV9ldmVudF9kaWNlX25vdGlmaWNhdGlvbiBkaWNlX25vdGlmaWNhdGlvbjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHNuZF9maXJld2lyZV9ldmVudF9lZndfcmVzcG9uc2UgZWZ3X3Jlc3BvbnNlOwogfTsKICNkZWZpbmUgU05EUlZfRklSRVdJUkVfSU9DVExfR0VUX0lORk8gX0lPUignSCcsIDB4ZjgsIHN0cnVjdCBzbmRfZmlyZXdpcmVfZ2V0X2luZm8pCiAjZGVmaW5lIFNORFJWX0ZJUkVXSVJFX0lPQ1RMX0xPQ0sgX0lPKCdIJywgMHhmOSkKLSNkZWZpbmUgU05EUlZfRklSRVdJUkVfSU9DVExfVU5MT0NLIF9JTygnSCcsIDB4ZmEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9GSVJFV0lSRV9JT0NUTF9VTkxPQ0sgX0lPKCdIJywgMHhmYSkKICNkZWZpbmUgU05EUlZfRklSRVdJUkVfVFlQRV9ESUNFIDEKKyNkZWZpbmUgU05EUlZfRklSRVdJUkVfVFlQRV9GSVJFV09SS1MgMgorI2RlZmluZSBTTkRSVl9GSVJFV0lSRV9UWVBFX0JFQk9CIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX2ZpcmV3aXJlX2dldF9pbmZvIHsKICB1bnNpZ25lZCBpbnQgdHlwZTsKICB1bnNpZ25lZCBpbnQgY2FyZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBndWlkWzhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIGRldmljZV9uYW1lWzE2XTsKIH07CiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvYmlvbmljX2FzbS5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19hc20uaAppbmRleCA3YzI2ODZmLi5kNTNlYmJhIDEwMDY0NAotLS0gYS9saWJjL3ByaXZhdGUvYmlvbmljX2FzbS5oCisrKyBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXNtLmgKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgRU5UUlkoZikgXAogICAgIC50ZXh0OyBcCiAgICAgLmdsb2JsIGY7IFwKLSAgICBfQUxJR05fVEVYVDsgXAorICAgIC5hbGlnbiBfX2Jpb25pY19hc21fYWxpZ247IFwKICAgICAudHlwZSBmLCBfX2Jpb25pY19hc21fZnVuY3Rpb25fdHlwZTsgXAogICAgIGY6IFwKICAgICBfX2Jpb25pY19hc21fY3VzdG9tX2VudHJ5KGYpOyBcCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvYmlvbmljX2F0b21pY19hcm0uaCBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXRvbWljX2FybS5oCmluZGV4IDIxNTZlNmEuLjBjYjgzMmYgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXRvbWljX2FybS5oCisrKyBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXRvbWljX2FybS5oCkBAIC0xNywxMiArMTcsNyBAQAogI2RlZmluZSBCSU9OSUNfQVRPTUlDX0FSTV9ICiAKIF9fQVRPTUlDX0lOTElORV9fIHZvaWQgX19iaW9uaWNfbWVtb3J5X2JhcnJpZXIoKSB7Ci0jaWYgZGVmaW5lZChBTkRST0lEX1NNUCkgJiYgQU5EUk9JRF9TTVAgPT0gMQogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJkbWIgaXNoIiA6IDogOiAibWVtb3J5IiApOwotI2Vsc2UKLSAgLyogQSBzaW1wbGUgY29tcGlsZXIgYmFycmllci4gKi8KLSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAiIiA6IDogOiAibWVtb3J5IiApOwotI2VuZGlmCiB9CiAKIC8qIENvbXBhcmUtYW5kLXN3YXAsIHdpdGhvdXQgYW55IGV4cGxpY2l0IGJhcnJpZXJzLiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY19hdG9taWNfaW5saW5lLmggYi9saWJjL3ByaXZhdGUvYmlvbmljX2F0b21pY19pbmxpbmUuaAppbmRleCBiODM0YTI3Li5mODAzMmMzIDEwMDY0NAotLS0gYS9saWJjL3ByaXZhdGUvYmlvbmljX2F0b21pY19pbmxpbmUuaAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX2F0b21pY19pbmxpbmUuaApAQCAtMzAsMTAgKzMwLDYgQEAKICAqICAgb24gU01QIHN5c3RlbXMgZW1pdHMgYW4gYXBwcm9wcmlhdGUgaW5zdHJ1Y3Rpb24uCiAgKi8KIAotI2lmICFkZWZpbmVkKEFORFJPSURfU01QKQotIyBlcnJvciAiTXVzdCBkZWZpbmUgQU5EUk9JRF9TTVAgYmVmb3JlIGluY2x1ZGluZyBhdG9taWMtaW5saW5lLmgiCi0jZW5kaWYKLQogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY19hdG9taWNfbWlwcy5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19hdG9taWNfbWlwcy5oCmluZGV4IDVlMDgxMTYuLjgzZjc1ZmUgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXRvbWljX21pcHMuaAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX2F0b21pY19taXBzLmgKQEAgLTIxLDEyICsyMSw3IEBACiAgKi8KIAogX19BVE9NSUNfSU5MSU5FX18gdm9pZCBfX2Jpb25pY19tZW1vcnlfYmFycmllcigpIHsKLSNpZiBkZWZpbmVkKEFORFJPSURfU01QKSAmJiBBTkRST0lEX1NNUCA9PSAxCiAgIF9fYXNtX18gX192b2xhdGlsZV9fICggInN5bmMiIDogOiA6ICJtZW1vcnkiICk7Ci0jZWxzZQotICAvKiBBIHNpbXBsZSBjb21waWxlciBiYXJyaWVyLiAqLwotICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICIiIDogOiA6ICJtZW1vcnkiICk7Ci0jZW5kaWYKIH0KIAogLyogQ29tcGFyZS1hbmQtc3dhcCwgd2l0aG91dCBhbnkgZXhwbGljaXQgYmFycmllcnMuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvYmlvbmljX2F0b21pY194ODYuaCBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXRvbWljX3g4Ni5oCmluZGV4IDg5NjM5YzguLmU2M2RmOTMgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXRvbWljX3g4Ni5oCisrKyBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXRvbWljX3g4Ni5oCkBAIC0yMCwxMiArMjAsNyBAQAogICogcGxhdGZvcm0gZm9yIGEgbXVsdGktY29yZSBkZXZpY2UuCiAgKi8KIF9fQVRPTUlDX0lOTElORV9fIHZvaWQgX19iaW9uaWNfbWVtb3J5X2JhcnJpZXIoKSB7Ci0jaWYgZGVmaW5lZChBTkRST0lEX1NNUCkgJiYgQU5EUk9JRF9TTVAgPT0gMQogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJtZmVuY2UiIDogOiA6ICJtZW1vcnkiICk7Ci0jZWxzZQotICAvKiBBIHNpbXBsZSBjb21waWxlciBiYXJyaWVyLiAqLwotICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICIiIDogOiA6ICJtZW1vcnkiICk7Ci0jZW5kaWYKIH0KIAogLyogQ29tcGFyZS1hbmQtc3dhcCwgd2l0aG91dCBhbnkgZXhwbGljaXQgYmFycmllcnMuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAgYi9saWJjL3ByaXZhdGUvYmlvbmljX2NvbnN0YW50cy5oCnNpbWlsYXJpdHkgaW5kZXggNzklCmNvcHkgZnJvbSB0ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAKY29weSB0byBsaWJjL3ByaXZhdGUvYmlvbmljX2NvbnN0YW50cy5oCmluZGV4IGE0ZDc1MDQuLjlhZTFjOGQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX2NvbnN0YW50cy5oCkBAIC0xNCwxMiArMTQsOSBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotZXh0ZXJuICJDIiBpbnQgZGxvcGVuX3Rlc3RfZ2V0X2Fuc3dlcigpIHsKLSAgcmV0dXJuIF9fQU5TV0VSOwotfQorI2lmbmRlZiBfQklPTklDX0NPTlNUQU5UU19IXworI2RlZmluZSBfQklPTklDX0NPTlNUQU5UU19IXwogCi0jaWZkZWYgX19BTlNXRVIyCi1leHRlcm4gIkMiIGludCBkbG9wZW5fdGVzdF9nZXRfYW5zd2VyMigpIHsKLSAgcmV0dXJuIF9fQU5TV0VSMjsKLX0KLSNlbmRpZgorI2RlZmluZSBOU19QRVJfUyAxMDAwMDAwMDAwCisKKyNlbmRpZiAvLyBfQklPTklDX0NPTlNUQU5UU19IXwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY19tYWNyb3MuaCBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmgKaW5kZXggNDkxYjNhYy4uNGYzY2Y4OSAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL2Jpb25pY19tYWNyb3MuaAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX21hY3Jvcy5oCkBAIC0xNywxMSArMTcsMTYgQEAKICNpZm5kZWYgX0JJT05JQ19NQUNST1NfSF8KICNkZWZpbmUgX0JJT05JQ19NQUNST1NfSF8KIAorLy8gRnJhbWV3b3JrcyBPcGVuR0wgY29kZSBjdXJyZW50bHkgbGVha3MgdGhpcyBoZWFkZXIgYW5kIGFsbG93cworLy8gY29sbGlzaW9ucyB3aXRoIG90aGVyIGRlY2xhcmF0aW9ucywgZS5nLiwgZnJvbSBsaWJuYXRpdmVoZWxwZXIuCisvLyBUT0RPOiBSZW1vdmUgb25jZSBjbGVhbmVkIHVwLiBiLzE4MzM0NTE2CisjaWYgIWRlZmluZWQoRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKQogLy8gRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOIGRpc2FsbG93cyB0aGUgY29weSBhbmQgb3BlcmF0b3I9IGZ1bmN0aW9ucy4KIC8vIEl0IGdvZXMgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBpbiBhIGNsYXNzLgogI2RlZmluZSBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKICAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKSA9IGRlbGV0ZTsgICAgICBcCiAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikgPSBkZWxldGUKKyNlbmRpZiAgLy8gIWRlZmluZWQoRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKQogCiAvLyBBIG1hY3JvIHRvIGRpc2FsbG93IGFsbCB0aGUgaW1wbGljaXQgY29uc3RydWN0b3JzLCBuYW1lbHkgdGhlCiAvLyBkZWZhdWx0IGNvbnN0cnVjdG9yLCBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY19wdGhyZWFkLmggYi9saWJjL3ByaXZhdGUvYmlvbmljX3B0aHJlYWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdiY2JkNC4uMDAwMDAwMAotLS0gYS9saWJjL3ByaXZhdGUvYmlvbmljX3B0aHJlYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfQklPTklDX1BUSFJFQURfSAotI2RlZmluZSBfQklPTklDX1BUSFJFQURfSAotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0KLV9fQkVHSU5fREVDTFMKLQotLyogSW50ZXJuYWwsIG5vdCBhbiBOREsgQVBJICovCi1leHRlcm4gcGlkX3QgX19wdGhyZWFkX2dldHRpZChwdGhyZWFkX3QgdGhpZCk7Ci0KLV9fRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfQklPTklDX1BUSFJFQURfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY19zeXN0cmFjZS5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19zeXN0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNDU2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX3N5c3RyYWNlLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQklPTklDX1NZU1RSQUNFX0gKKyNkZWZpbmUgQklPTklDX1NZU1RSQUNFX0gKKworI2luY2x1ZGUgImJpb25pY19tYWNyb3MuaCIKKworLy8gVHJhY2luZyBjbGFzcyBmb3IgYmlvbmljLiBUbyBiZWdpbiBhIHRyYWNlIGF0IGEgc3BlY2lmaWVkIHBvaW50OgorLy8gICBTY29wZWRUcmFjZSgiVHJhY2UgbWVzc2FnZSIpOworLy8gVGhlIHRyYWNlIHdpbGwgZW5kIHdoZW4gdGhlIGNvbnRydWN0b3IgZ29lcyBvdXQgb2Ygc2NvcGUuCisKK2NsYXNzIF9fTElCQ19ISURERU5fXyBTY29wZWRUcmFjZSB7CisgcHVibGljOgorICBleHBsaWNpdCBTY29wZWRUcmFjZShjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgflNjb3BlZFRyYWNlKCk7CisKKyBwcml2YXRlOgorICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2NvcGVkVHJhY2UpOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvYmlvbmljX3RpbWVfY29udmVyc2lvbnMuaCBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfdGltZV9jb252ZXJzaW9ucy5oCmluZGV4IDUxZjU0M2YuLmNmMDA0NmEgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfdGltZV9jb252ZXJzaW9ucy5oCisrKyBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfdGltZV9jb252ZXJzaW9ucy5oCkBAIC0zOSw2ICszOSw4IEBACiAKIF9fTElCQ19ISURERU5fXyB2b2lkIHRpbWV2YWxfZnJvbV90aW1lc3BlYyh0aW1ldmFsJiB0diwgY29uc3QgdGltZXNwZWMmIHRzKTsKIAorX19MSUJDX0hJRERFTl9fIGJvb2wgdGltZXNwZWNfZnJvbV9hYnNvbHV0ZV90aW1lc3BlYyh0aW1lc3BlYyYgdHMsIGNvbnN0IHRpbWVzcGVjJiBhYnNfdHMsIGNsb2NraWRfdCBjbG9jayk7CisKIF9fRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2tlcm5lbF9zaWdzZXRfdC5oIGIvbGliYy9wcml2YXRlL2tlcm5lbF9zaWdzZXRfdC5oCmluZGV4IGIyZDYzODYuLjk0MTVmY2YgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9rZXJuZWxfc2lnc2V0X3QuaAorKysgYi9saWJjL3ByaXZhdGUva2VybmVsX3NpZ3NldF90LmgKQEAgLTE3LDYgKzE3LDggQEAKICNpZm5kZWYgTElCQ19QUklWQVRFX0tFUk5FTF9TSUdTRVRfVF9IXwogI2RlZmluZSBMSUJDX1BSSVZBVEVfS0VSTkVMX1NJR1NFVF9UX0hfCiAKKyNpbmNsdWRlIDxzaWduYWwuaD4KKwogLy8gT3VyIHNpZ3NldF90IGlzIHdyb25nIGZvciBBUk0gYW5kIHg4Ni4gSXQncyAzMi1iaXQgYnV0IHRoZSBrZXJuZWwgZXhwZWN0cyA2NCBiaXRzLgogLy8gVGhpcyBtZWFucyB3ZSBjYW4ndCBzdXBwb3J0IHJlYWwtdGltZSBzaWduYWxzIGNvcnJlY3RseSB1bnRpbCB3ZSBjYW4gY2hhbmdlIHRoZSBBQkkuCiAvLyBJbiB0aGUgbWVhbnRpbWUsIHdlIGNhbiB1c2UgdGhpcyB1bmlvbiB0byBwYXNzIGFuIGFwcHJvcHJpYXRlbHktc2l6ZWQgYmxvY2sgb2YgbWVtb3J5CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZpbGVleHQuaCBiL2xpYmMvc3RkaW8vZmlsZWV4dC5oCmluZGV4IGMwNzRiNGIuLjI1YjdiZGEgMTAwNjQ0Ci0tLSBhL2xpYmMvc3RkaW8vZmlsZWV4dC5oCisrKyBiL2xpYmMvc3RkaW8vZmlsZWV4dC5oCkBAIC00NSw4ICs0NSw2IEBACiAJcHRocmVhZF9tdXRleF90IF9sb2NrOyAvKiBmaWxlIGxvY2sgKi8KIH07CiAKLSNkZWZpbmUgX0ZJTEVFWFRfSU5JVElBTElaRVIgIHt7TlVMTCwwfSx7MH0sUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVJ9Ci0KICNkZWZpbmUgX0VYVChmcCkgKChzdHJ1Y3QgX19zZmlsZWV4dCAqKSgoZnApLT5fZXh0Ll9iYXNlKSkKICNkZWZpbmUgX1VCKGZwKSBfRVhUKGZwKS0+X3ViCiAjZGVmaW5lIF9GTE9DSyhmcCkgIF9FWFQoZnApLT5fbG9jawpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9maW5kZnAuYyBiL2xpYmMvc3RkaW8vZmluZGZwLmMKaW5kZXggMGMyZWU3Yy4uNWU1MTE5OCAxMDA2NDQKLS0tIGEvbGliYy9zdGRpby9maW5kZnAuYworKysgYi9saWJjL3N0ZGlvL2ZpbmRmcC5jCkBAIC00OSw4ICs0OSw4IEBACiAjZGVmaW5lCU5EWU5BTUlDIDEwCQkvKiBhZGQgdGVuIG1vcmUgd2hlbmV2ZXIgbmVjZXNzYXJ5ICovCiAKICNkZWZpbmUJc3RkKGZsYWdzLCBmaWxlKSBcCi0JezAsMCwwLGZsYWdzLGZpbGUsezB9LDAsX19zRitmaWxlLF9fc2Nsb3NlLF9fc3JlYWQsX19zc2VlayxfX3N3cml0ZSwgXAotCSAgICB7KHVuc2lnbmVkIGNoYXIgKikoX19zRmV4dCtmaWxlKSwgMH0sTlVMTCwwLHswfSx7MH0sezB9LDAsMH0KKwl7MCwwLDAsZmxhZ3MsZmlsZSx7MCwwfSwwLF9fc0YrZmlsZSxfX3NjbG9zZSxfX3NyZWFkLF9fc3NlZWssX19zd3JpdGUsIFwKKwkgICAgeyh1bnNpZ25lZCBjaGFyICopKF9fc0ZleHQrZmlsZSksIDB9LE5VTEwsMCx7MH0sezB9LHswLDB9LDAsMH0KIAogCQkJCS8qIHRoZSB1c3VhbCAtIChzdGRpbiArIHN0ZG91dCArIHN0ZGVycikgKi8KIHN0YXRpYyBGSUxFIHVzdWFsW0ZPUEVOX01BWCAtIDNdOwpAQCAtNjUsNiArNjUsOSBAQAogCXN0ZChfX1NXUiwgU1RET1VUX0ZJTEVOTyksCQkvKiBzdGRvdXQgKi8KIAlzdGQoX19TV1J8X19TTkJGLCBTVERFUlJfRklMRU5PKQkvKiBzdGRlcnIgKi8KIH07CitGSUxFKiBzdGRpbiA9ICZfX3NGWzBdOworRklMRSogc3Rkb3V0ID0gJl9fc0ZbMV07CitGSUxFKiBzdGRlcnIgPSAmX19zRlsyXTsKIHN0cnVjdCBnbHVlIF9fc2dsdWUgPSB7ICZ1Z2x1ZSwgMywgX19zRiB9OwogCiBzdGF0aWMgc3RydWN0IGdsdWUgKgpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9zdGRpb19leHQuY3BwIGIvbGliYy9zdGRpby9zdGRpb19leHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZGVjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3N0ZGlvX2V4dC5jcHAKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKyNkZWZpbmUgRlNFVExPQ0tJTkdfUVVFUlkgMAorI2RlZmluZSBGU0VUTE9DS0lOR19JTlRFUk5BTCAxCisjZGVmaW5lIEZTRVRMT0NLSU5HX0JZQ0FMTEVSIDIKKworc2l6ZV90IF9fZmJ1ZnNpemUoRklMRSogZnApIHsKKyAgcmV0dXJuIGZwLT5fYmYuX3NpemU7Cit9CisKKy8qIEZvciBhIF9TUlcgc3RyZWFtLCB3ZSBkb24ndCBrbm93IHdoZXRoZXIgd2UgbGFzdCByZWFkIG9yIHdyb3RlLgoraW50IF9fZnJlYWRpbmcoRklMRSogZnApIHsKKyAgcmV0dXJuIChmcC0+X2ZsYWdzICYgX1NSRCkgIT0gMCB8fCAuLi47Cit9CisqLworCisvKiBGb3IgYSBfU1JXIHN0cmVhbSwgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGxhc3QgcmVhZCBvciB3cm90ZS4KK2ludCBfX2Z3cml0aW5nKEZJTEUqKSB7CisgIHJldHVybiAoZnAtPl9mbGFncyAmIF9TV1IpICE9IDAgfHwgLi4uOworfQorKi8KKworaW50IF9fZnJlYWRhYmxlKEZJTEUqIGZwKSB7CisgIHJldHVybiAoZnAtPl9mbGFncyAmIChfX1NSRHxfX1NSVykpICE9IDA7Cit9CisKK2ludCBfX2Z3cml0YWJsZShGSUxFKiBmcCkgeworICByZXR1cm4gKGZwLT5fZmxhZ3MgJiAoX19TV1J8X19TUlcpKSAhPSAwOworfQorCitpbnQgX19mbGJmKEZJTEUqIGZwKSB7CisgIHJldHVybiAoZnAtPl9mbGFncyAmIF9fU0xCRikgIT0gMDsKK30KKwordm9pZCBfX2ZwdXJnZShGSUxFKiBmcCkgeworICBmcHVyZ2UoZnApOworfQorCitzaXplX3QgX19mcGVuZGluZyhGSUxFKiBmcCkgeworICByZXR1cm4gZnAtPl9wIC0gZnAtPl9iZi5fYmFzZTsKK30KKwordm9pZCBfZmx1c2hsYmYoKSB7CisgIC8vIElmIHdlIGZsdXNoIGFsbCBzdHJlYW1zLCB3ZSBrbm93IHdlJ3ZlIGZsdXNoZWQgYWxsIHRoZSBsaW5lLWJ1ZmZlcmVkIHN0cmVhbXMuCisgIGZmbHVzaChOVUxMKTsKK30KKworaW50IF9fZnNldGxvY2tpbmcoRklMRSosIGludCkgeworICAvLyBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IHdvdWxkIG9iZXkgdGhpcywKKyAgLy8gc28gbWFrZSBzZXR0aW5nIHRoZSBzdGF0ZSBhIG5vLW9wIGFuZCBhbHdheXMgcmV0dXJuICJ3ZSBoYW5kbGUgbG9ja2luZyBmb3IgeW91Ii4KKyAgLy8gaHR0cDovL2IvMTcxNTQ3NDAgc3VnZ2VzdHMgd2F5cyB3ZSBjb3VsZCBmaXggdGhpcy4KKyAgcmV0dXJuIEZTRVRMT0NLSU5HX0lOVEVSTkFMOworfQorCit2b2lkIGNsZWFyZXJyX3VubG9ja2VkKEZJTEUqIGZwKSB7CisgIHJldHVybiBfX3NjbGVhcmVycihmcCk7Cit9CisKK2ludCBmZW9mX3VubG9ja2VkKEZJTEUqIGZwKSB7CisgIHJldHVybiBfX3NmZW9mKGZwKTsKK30KKworaW50IGZlcnJvcl91bmxvY2tlZChGSUxFKiBmcCkgeworICByZXR1cm4gX19zZmVycm9yKGZwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdG9vbHMvYmlvbmljX3V0aWxzLnB5IGIvbGliYy90b29scy9iaW9uaWNfdXRpbHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOGVmYjUuLjAwMDAwMDAKLS0tIGEvbGliYy90b29scy9iaW9uaWNfdXRpbHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotIyBjb21tb24gcHl0aG9uIHV0aWxpdHkgcm91dGluZXMgZm9yIHRoZSBCaW9uaWMgdG9vbCBzY3JpcHRzCi0KLWltcG9ydCBzeXMsIG9zLCBjb21tYW5kcywgc3RyaW5nCi0KLWFsbF9hcmNoZXMgPSBbICJhcm0iLCAiYXJtNjQiLCAibWlwcyIsICJtaXBzNjQiLCAieDg2IiwgIng4Nl82NCIgXQotCi0jIGJhc2ljIGRlYnVnZ2luZyB0cmFjZSBzdXBwb3J0Ci0jIGNhbGwgRF9zZXRsZXZlbCB0byBzZXQgdGhlIHZlcmJvc2l0eSBsZXZlbAotIyBhbmQgRCgpLCBEMigpLCBEMygpLCBENCgpIHRvIGFkZCB0cmFjZXMKLSMKLXZlcmJvc2UgPSAwCi0KLWRlZiBEKG1zZyk6Ci0gICAgZ2xvYmFsIHZlcmJvc2UKLSAgICBpZiB2ZXJib3NlID4gMDoKLSAgICAgICAgcHJpbnQgbXNnCi0KLWRlZiBEMihtc2cpOgotICAgIGdsb2JhbCB2ZXJib3NlCi0gICAgaWYgdmVyYm9zZSA+PSAyOgotICAgICAgICBwcmludCBtc2cKLQotZGVmIEQzKG1zZyk6Ci0gICAgZ2xvYmFsIHZlcmJvc2UKLSAgICBpZiB2ZXJib3NlID49IDM6Ci0gICAgICAgIHByaW50IG1zZwotCi1kZWYgRDQobXNnKToKLSAgICBnbG9iYWwgdmVyYm9zZQotICAgIGlmIHZlcmJvc2UgPj0gNDoKLSAgICAgICAgcHJpbnQgbXNnCi0KLWRlZiBEX3NldGxldmVsKGxldmVsKToKLSAgICBnbG9iYWwgdmVyYm9zZQotICAgIHZlcmJvc2UgPSBsZXZlbAotCi0KLSMgcGFyc2VyIGZvciB0aGUgU1lTQ0FMTFMuVFhUIGZpbGUKLSMKLWNsYXNzIFN5c0NhbGxzVHh0UGFyc2VyOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5zeXNjYWxscyA9IFtdCi0gICAgICAgIHNlbGYubGluZW5vICAgPSAwCi0KLSAgICBkZWYgRShzZWxmLCBtc2cpOgotICAgICAgICBwcmludCAiJWQ6ICVzIiAlIChzZWxmLmxpbmVubywgbXNnKQotCi0gICAgZGVmIHBhcnNlX2xpbmUoc2VsZiwgbGluZSk6Ci0gICAgICAgICIiIiBwYXJzZSBhIHN5c2NhbGwgc3BlYyBsaW5lLgotCi0gICAgICAgIGxpbmUgcHJvY2Vzc2luZywgZm9ybWF0IGlzCi0gICAgICAgICAgIHJldHVybiB0eXBlICAgIGZ1bmNfbmFtZVt8YWxpYXNfbGlzdF1bOnN5c2NhbGxfbmFtZVs6c29ja2V0Y2FsbF9pZF1dICggW3BhcmFtbGlzdF0gKSBhcmNoaXRlY3R1cmVfbGlzdAotICAgICAgICAiIiIKLSAgICAgICAgcG9zX2xwYXJlbiA9IGxpbmUuZmluZCgnKCcpCi0gICAgICAgIEUgICAgICAgICAgPSBzZWxmLkUKLSAgICAgICAgaWYgcG9zX2xwYXJlbiA8IDA6Ci0gICAgICAgICAgICBFKCJtaXNzaW5nIGxlZnQgcGFyZW50aGVzaXMgaW4gJyVzJyIgJSBsaW5lKQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgcG9zX3JwYXJlbiA9IGxpbmUucmZpbmQoJyknKQotICAgICAgICBpZiBwb3NfcnBhcmVuIDwgMCBvciBwb3NfcnBhcmVuIDw9IHBvc19scGFyZW46Ci0gICAgICAgICAgICBFKCJtaXNzaW5nIG9yIG1pc3BsYWNlZCByaWdodCBwYXJlbnRoZXNpcyBpbiAnJXMnIiAlIGxpbmUpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICByZXR1cm5fdHlwZSA9IGxpbmVbOnBvc19scGFyZW5dLnN0cmlwKCkuc3BsaXQoKQotICAgICAgICBpZiBsZW4ocmV0dXJuX3R5cGUpIDwgMjoKLSAgICAgICAgICAgIEUoIm1pc3NpbmcgcmV0dXJuIHR5cGUgaW4gJyVzJyIgJSBsaW5lKQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgc3lzY2FsbF9mdW5jID0gcmV0dXJuX3R5cGVbLTFdCi0gICAgICAgIHJldHVybl90eXBlICA9IHN0cmluZy5qb2luKHJldHVybl90eXBlWzotMV0sJyAnKQotICAgICAgICBzb2NrZXRjYWxsX2lkID0gLTEKLQotICAgICAgICBwb3NfY29sb24gPSBzeXNjYWxsX2Z1bmMuZmluZCgnOicpCi0gICAgICAgIGlmIHBvc19jb2xvbiA8IDA6Ci0gICAgICAgICAgICBzeXNjYWxsX25hbWUgPSBzeXNjYWxsX2Z1bmMKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHBvc19jb2xvbiA9PSAwIG9yIHBvc19jb2xvbisxID49IGxlbihzeXNjYWxsX2Z1bmMpOgotICAgICAgICAgICAgICAgIEUoIm1pc3BsYWNlZCBjb2xvbiBpbiAnJXMnIiAlIGxpbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgICMgbm93IGZpbmQgaWYgdGhlcmUgaXMgYSBzb2NrZXRjYWxsX2lkIGZvciBhIGRpc3BhdGNoLXR5cGUgc3lzY2FsbAotICAgICAgICAgICAgIyBhZnRlciB0aGUgb3B0aW9uYWwgMm5kIGNvbG9uCi0gICAgICAgICAgICBwb3NfY29sb24yID0gc3lzY2FsbF9mdW5jLmZpbmQoJzonLCBwb3NfY29sb24gKyAxKQotICAgICAgICAgICAgaWYgcG9zX2NvbG9uMiA8IDA6Ci0gICAgICAgICAgICAgICAgc3lzY2FsbF9uYW1lID0gc3lzY2FsbF9mdW5jW3Bvc19jb2xvbisxOl0KLSAgICAgICAgICAgICAgICBzeXNjYWxsX2Z1bmMgPSBzeXNjYWxsX2Z1bmNbOnBvc19jb2xvbl0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgcG9zX2NvbG9uMisxID49IGxlbihzeXNjYWxsX2Z1bmMpOgotICAgICAgICAgICAgICAgICAgICBFKCJtaXNwbGFjZWQgY29sb24yIGluICclcyciICUgbGluZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgc3lzY2FsbF9uYW1lID0gc3lzY2FsbF9mdW5jWyhwb3NfY29sb24rMSk6cG9zX2NvbG9uMl0KLSAgICAgICAgICAgICAgICBzb2NrZXRjYWxsX2lkID0gaW50KHN5c2NhbGxfZnVuY1twb3NfY29sb24yKzE6XSkKLSAgICAgICAgICAgICAgICBzeXNjYWxsX2Z1bmMgPSBzeXNjYWxsX2Z1bmNbOnBvc19jb2xvbl0KLQotICAgICAgICBhbGlhc19kZWxpbSA9IHN5c2NhbGxfZnVuYy5maW5kKCd8JykKLSAgICAgICAgaWYgYWxpYXNfZGVsaW0gPiAwOgotICAgICAgICAgICAgYWxpYXNfbGlzdCA9IHN5c2NhbGxfZnVuY1thbGlhc19kZWxpbSsxOl0uc3RyaXAoKQotICAgICAgICAgICAgc3lzY2FsbF9mdW5jID0gc3lzY2FsbF9mdW5jWzphbGlhc19kZWxpbV0KLSAgICAgICAgICAgIGFsaWFzX2RlbGltID0gc3lzY2FsbF9uYW1lLmZpbmQoJ3wnKQotICAgICAgICAgICAgaWYgYWxpYXNfZGVsaW0gPiAwOgotICAgICAgICAgICAgICAgIHN5c2NhbGxfbmFtZSA9IHN5c2NhbGxfbmFtZVs6YWxpYXNfZGVsaW1dCi0gICAgICAgICAgICBzeXNjYWxsX2FsaWFzZXMgPSBzdHJpbmcuc3BsaXQoYWxpYXNfbGlzdCwgJywnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc3lzY2FsbF9hbGlhc2VzID0gW10KLQotICAgICAgICBpZiBwb3NfcnBhcmVuID4gcG9zX2xwYXJlbisxOgotICAgICAgICAgICAgc3lzY2FsbF9wYXJhbXMgPSBsaW5lW3Bvc19scGFyZW4rMTpwb3NfcnBhcmVuXS5zcGxpdCgnLCcpCi0gICAgICAgICAgICBwYXJhbXMgICAgICAgICA9IHN0cmluZy5qb2luKHN5c2NhbGxfcGFyYW1zLCcsJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHN5c2NhbGxfcGFyYW1zID0gW10KLSAgICAgICAgICAgIHBhcmFtcyAgICAgICAgID0gInZvaWQiCi0KLSAgICAgICAgdCA9IHsKLSAgICAgICAgICAgICAgIm5hbWUiICAgIDogc3lzY2FsbF9uYW1lLAotICAgICAgICAgICAgICAiZnVuYyIgICAgOiBzeXNjYWxsX2Z1bmMsCi0gICAgICAgICAgICAgICJhbGlhc2VzIiA6IHN5c2NhbGxfYWxpYXNlcywKLSAgICAgICAgICAgICAgInBhcmFtcyIgIDogc3lzY2FsbF9wYXJhbXMsCi0gICAgICAgICAgICAgICJkZWNsIiAgICA6ICIlLTE1cyAgJXMgKCVzKTsiICUgKHJldHVybl90eXBlLCBzeXNjYWxsX2Z1bmMsIHBhcmFtcyksCi0gICAgICAgICAgICAgICJzb2NrZXRjYWxsX2lkIiA6IHNvY2tldGNhbGxfaWQKLSAgICAgICAgfQotCi0gICAgICAgICMgUGFyc2UgdGhlIGFyY2hpdGVjdHVyZSBsaXN0LgotICAgICAgICBhcmNoX2xpc3QgPSBsaW5lW3Bvc19ycGFyZW4rMTpdLnN0cmlwKCkKLSAgICAgICAgaWYgYXJjaF9saXN0ID09ICJhbGwiOgotICAgICAgICAgICAgZm9yIGFyY2ggaW4gYWxsX2FyY2hlczoKLSAgICAgICAgICAgICAgICB0W2FyY2hdID0gVHJ1ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm9yIGFyY2ggaW4gc3RyaW5nLnNwbGl0KGFyY2hfbGlzdCwgJywnKToKLSAgICAgICAgICAgICAgICBpZiBhcmNoIGluIGFsbF9hcmNoZXM6Ci0gICAgICAgICAgICAgICAgICAgIHRbYXJjaF0gPSBUcnVlCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgRSgiaW52YWxpZCBzeXNjYWxsIGFyY2hpdGVjdHVyZSAnJXMnIGluICclcyciICUgKGFyY2gsIGxpbmUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBzZWxmLnN5c2NhbGxzLmFwcGVuZCh0KQotCi0gICAgICAgIGdsb2JhbCB2ZXJib3NlCi0gICAgICAgIGlmIHZlcmJvc2UgPj0gMjoKLSAgICAgICAgICAgIHByaW50IHQKLQotCi0gICAgZGVmIHBhcnNlX2ZpbGUoc2VsZiwgZmlsZV9wYXRoKToKLSAgICAgICAgRDIoInBhcnNlX2ZpbGU6ICVzIiAlIGZpbGVfcGF0aCkKLSAgICAgICAgZnAgPSBvcGVuKGZpbGVfcGF0aCkKLSAgICAgICAgZm9yIGxpbmUgaW4gZnAueHJlYWRsaW5lcygpOgotICAgICAgICAgICAgc2VsZi5saW5lbm8gKz0gMQotICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgaWYgbm90IGxpbmU6IGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBsaW5lWzBdID09ICcjJzogY29udGludWUKLSAgICAgICAgICAgIHNlbGYucGFyc2VfbGluZShsaW5lKQotCi0gICAgICAgIGZwLmNsb3NlKCkKLQotCi1jbGFzcyBTdHJpbmdPdXRwdXQ6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLmxpbmUgPSAiIgotCi0gICAgZGVmIHdyaXRlKHNlbGYsbXNnKToKLSAgICAgICAgc2VsZi5saW5lICs9IG1zZwotICAgICAgICBEMigid3JpdGUgJyVzJyIgJSBtc2cpCi0KLSAgICBkZWYgZ2V0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5saW5lCmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL2NoZWNrLXN5bWJvbHMtZ2xpYmMucHkgYi9saWJjL3Rvb2xzL2NoZWNrLXN5bWJvbHMtZ2xpYmMucHkKaW5kZXggNThhMTBlMC4uMGM3ZTI4ZSAxMDA3NTUKLS0tIGEvbGliYy90b29scy9jaGVjay1zeW1ib2xzLWdsaWJjLnB5CisrKyBiL2xpYmMvdG9vbHMvY2hlY2stc3ltYm9scy1nbGliYy5weQpAQCAtMywxMiArMywyNiBAQAogaW1wb3J0IGdsb2IKIGltcG9ydCBvcwogaW1wb3J0IHJlCi1pbXBvcnQgc3RyaW5nCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogCitvbmx5X3Vud2FudGVkID0gRmFsc2UKK2lmIGxlbihzeXMuYXJndikgPiAxOgorICBpZiBzeXMuYXJndlsxXSBpbiAoJy11JywgJy0tdW53YW50ZWQnKToKKyAgICBvbmx5X3Vud2FudGVkID0gVHJ1ZQorCiB0b29sY2hhaW4gPSBvcy5lbnZpcm9uWydBTkRST0lEX1RPT0xDSEFJTiddCiBhcmNoID0gcmUuc3ViKHInLiovbGludXgteDg2LyhbXi9dKykvLionLCByJ1wxJywgdG9vbGNoYWluKQoraWYgYXJjaCA9PSAnYWFyY2g2NCc6CisgIGFyY2ggPSAnYXJtNjQnCisKK2RlZiBHZXRTeW1ib2xzRnJvbVR4dCh0eHRfZmlsZSk6CisgIHN5bWJvbHMgPSBzZXQoKQorICBmID0gb3Blbih0eHRfZmlsZSwgJ3InKQorICBmb3IgbGluZSBpbiBmLnJlYWQoKS5zcGxpdGxpbmVzKCk6CisgICAgc3ltYm9scy5hZGQobGluZSkKKyAgZi5jbG9zZSgpCisgIHJldHVybiBzeW1ib2xzCiAKIGRlZiBHZXRTeW1ib2xzRnJvbVNvKHNvX2ZpbGUpOgogICAjIEV4YW1wbGUgcmVhZGVsZiBvdXRwdXQ6CkBAIC01MCwxNSArNjQsMjcgQEAKICAgICByZXR1cm4gZ2xpYmNfdG9fYmlvbmljX25hbWVzW25hbWVdCiAgIHJldHVybiBuYW1lCiAKK2RlZiBHZXROZGtJZ25vcmVkKCk6CisgIGdsb2JhbCBhcmNoCisgIHN5bWJvbHMgPSBzZXQoKQorICBmaWxlcyA9IGdsb2IuZ2xvYignJXMvbmRrL2J1aWxkL3Rvb2xzL3Vud2FudGVkLXN5bWJvbHMvJXMvKicgJQorICAgICAgICAgICAgICAgICAgICAob3MuZ2V0ZW52KCdBTkRST0lEX0JVSUxEX1RPUCcpLCBhcmNoKSkKKyAgZm9yIGYgaW4gZmlsZXM6CisgICAgc3ltYm9scyB8PSBzZXQob3BlbihmLCAncicpLnJlYWQoKS5zcGxpdGxpbmVzKCkpCisgIHJldHVybiBzeW1ib2xzCisKIGdsaWJjX3RvX2Jpb25pY19uYW1lcyA9IHsKICAgJ19fcmVzX2luaXQnOiAncmVzX2luaXQnLAogICAnX19yZXNfbWtxdWVyeSc6ICdyZXNfbWtxdWVyeScsCiAgICdfX3Jlc19xdWVyeSc6ICdyZXNfcXVlcnknLAogICAnX19yZXNfc2VhcmNoJzogJ3Jlc19zZWFyY2gnLAorICAnX194cGdfYmFzZW5hbWUnOiAnX19nbnVfYmFzZW5hbWUnLAogfQogCiBnbGliYyA9IEdldFN5bWJvbHNGcm9tU3lzdGVtU28oJ2xpYmMuc28uKicsICdsaWJydC5zby4qJywgJ2xpYnB0aHJlYWQuc28uKicsICdsaWJyZXNvbHYuc28uKicsICdsaWJtLnNvLionKQogYmlvbmljID0gR2V0U3ltYm9sc0Zyb21BbmRyb2lkU28oJ2xpYmMuc28nLCAnbGlibS5zbycpCitwb3NpeCA9IEdldFN5bWJvbHNGcm9tVHh0KG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpLCAncG9zaXgtMjAxMy50eHQnKSkKK25ka19pZ25vcmVkID0gR2V0TmRrSWdub3JlZCgpCiAKIGdsaWJjID0gbWFwKE1hbmdsZUdsaWJjTmFtZVRvQmlvbmljLCBnbGliYykKIApAQCAtMTAwLDYgKzEyNiwxNiBAQAogICAnX19lcnJubycsCiAgICdfX2ZlX2RmbF9lbnYnLAogICAnX19nZXRfaF9lcnJubycsCisgICdfX2ZwY2xhc3NpZnlkJywKKyAgJ19faXNmaW5pdGUnLAorICAnX19pc2Zpbml0ZWYnLAorICAnX19pc2Zpbml0ZWwnLAorICAnX19pc25vcm1hbCcsCisgICdfX2lzbm9ybWFsZicsCisgICdfX2lzbm9ybWFsbCcsCisgICdfX3NGJywKKyAgJ19fcHRocmVhZF9jbGVhbnVwX3BvcCcsCisgICdfX3B0aHJlYWRfY2xlYW51cF9wdXNoJywKIF0pCiAjIGJpb25pYyBleHBvc2VzIHZhcmlvdXMgTGludXggZmVhdHVyZXMgdGhhdCBnbGliYyBkb2Vzbid0LgogbGludXhfc3R1ZmYgPSBzZXQoWwpAQCAtMTMzLDIxICsxNjksNDggQEAKICAgJ21rbm9kYXQnLAogICAnc3RhdCcsCiAgICdzdGF0NjQnLAorICAnb3B0cmVzZXQnLAorICAnc2lnc2V0am1wJywKK10pCisjIFRoZXNlIGV4aXN0IGluIGdsaWJjLCBidXQgdW5kZXIgc2xpZ2h0bHkgZGlmZmVyZW50IG5hbWVzIChnZW5lcmFsbHkgb25lIGV4dHJhCisjIG9yIG9uZSBmZXdlciBfKS4gVE9ETzogY2hlY2sgYWdhaW5zdCBnbGliYyBuYW1lcy4KK2xpYnJlc29sdl9zdHVmZiA9IHNldChbCisgICdfX3Jlc19zZW5kX3NldHFob29rJywKKyAgJ19fcmVzX3NlbmRfc2V0cmhvb2snLAorICAnX3Jlc29sdl9mbHVzaF9jYWNoZV9mb3JfbmV0JywKKyAgJ19yZXNvbHZfc2V0X25hbWVzZXJ2ZXJzX2Zvcl9uZXQnLAorICAnZG5fZXhwYW5kJywKKyAgJ25zZGlzcGF0Y2gnLAorXSkKKyMgSW1wbGVtZW50YXRpb24gZGV0YWlscyB3ZSBrbm93IHdlIGV4cG9ydCAoYW5kIGNhbid0IGdldCBhd2F5IGZyb20pLgora25vd24gPSBzZXQoWworICAnX2N0eXBlXycsCisgICdfX2xpYmNfaW5pdCcsCiBdKQogCi1wcmludCAnZ2xpYmM6JwotZm9yIHN5bWJvbCBpbiBzb3J0ZWQoZ2xpYmMpOgotICBwcmludCBzeW1ib2wKK2lmIG5vdCBvbmx5X3Vud2FudGVkOgorICBwcmludCAnZ2xpYmM6JworICBmb3Igc3ltYm9sIGluIHNvcnRlZChnbGliYyk6CisgICAgcHJpbnQgc3ltYm9sCiAKLXByaW50Ci1wcmludCAnYmlvbmljOicKLWZvciBzeW1ib2wgaW4gc29ydGVkKGJpb25pYyk6Ci0gIHByaW50IHN5bWJvbAorICBwcmludAorICBwcmludCAnYmlvbmljOicKKyAgZm9yIHN5bWJvbCBpbiBzb3J0ZWQoYmlvbmljKToKKyAgICBwcmludCBzeW1ib2wKIAotcHJpbnQKLXByaW50ICdpbiBiaW9uaWMgYnV0IG5vdCBnbGliYzonCi1hbGxvd2VkX3N0dWZmID0gKGJzZF9zdHVmZiB8IEZPUlRJRllfc3R1ZmYgfCBsaW51eF9zdHVmZiB8IG1hY3JvX3N0dWZmIHwgc3RkX3N0dWZmIHwgd2VpcmRfc3R1ZmYpCisgIHByaW50CisgIHByaW50ICdpbiBwb3NpeCBidXQgbm90IGJpb25pYzonCisgIGZvciBzeW1ib2wgaW4gc29ydGVkKHBvc2l4LmRpZmZlcmVuY2UoYmlvbmljKSk6CisgICAgcHJpbnQgc3ltYm9sCisKKyAgcHJpbnQKKyAgcHJpbnQgJ2luIGJpb25pYyBidXQgbm90IGdsaWJjOicKKworYWxsb3dlZF9zdHVmZiA9IChic2Rfc3R1ZmYgfCBGT1JUSUZZX3N0dWZmIHwgbGludXhfc3R1ZmYgfCBtYWNyb19zdHVmZiB8CisgICAgICAgICAgICAgICAgIHN0ZF9zdHVmZiB8IHdlaXJkX3N0dWZmIHwgbGlicmVzb2x2X3N0dWZmIHwga25vd24pCiBmb3Igc3ltYm9sIGluIHNvcnRlZCgoYmlvbmljIC0gYWxsb3dlZF9zdHVmZikuZGlmZmVyZW5jZShnbGliYykpOgorICBpZiBzeW1ib2wgaW4gbmRrX2lnbm9yZWQ6CisgICAgc3ltYm9sICs9ICcqJwogICBwcmludCBzeW1ib2wKIAogc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL2xpYmMvdG9vbHMvZ2VuZXJhdGUtTk9USUNFLnB5IGIvbGliYy90b29scy9nZW5lcmF0ZS1OT1RJQ0UucHkKaW5kZXggOGNkNzVhMy4uM2VkYzI5OSAxMDA3NTUKLS0tIGEvbGliYy90b29scy9nZW5lcmF0ZS1OT1RJQ0UucHkKKysrIGIvbGliYy90b29scy9nZW5lcmF0ZS1OT1RJQ0UucHkKQEAgLTEyMSw3ICsxMjEsNiBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBvcGVuKHBhdGgsICdyJykucmVhZCgpLmRlY29kZSgndXRmLTgnKQogICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICMgVE9ETzogdXBkYXRlIGhhc2guaCwgbWQ1LmMsIGFuZCBtZDUuaDsgdXBzdHJlYW0gaXMgcHJvYmFibHkgVVRGLTggYWxyZWFkeS4KICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCd3YXJuaW5nOiBiYWQgVVRGLTggaW4gJXNcbicgJSBwYXRoKQogICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBvcGVuKHBhdGgsICdyJykucmVhZCgpLmRlY29kZSgnaXNvLTg4NTktMScpCiAKZGlmZiAtLWdpdCBhL2xpYmMvdG9vbHMvZ2Vuc3lzY2FsbHMucHkgYi9saWJjL3Rvb2xzL2dlbnN5c2NhbGxzLnB5CmluZGV4IGU4ZWM2MzYuLjRlMjQwNzcgMTAwNzU1Ci0tLSBhL2xpYmMvdG9vbHMvZ2Vuc3lzY2FsbHMucHkKKysrIGIvbGliYy90b29scy9nZW5zeXNjYWxscy5weQpAQCAtNCwyMSArNCwyOSBAQAogIyB0aGUgaGVhZGVyIGZpbGVzIGxpc3RpbmcgYWxsIGF2YWlsYWJsZSBzeXN0ZW0gY2FsbHMsIGFuZCB0aGUKICMgbWFrZWZpbGVzIHVzZWQgdG8gYnVpbGQgYWxsIHRoZSBzdHVicy4KIAoraW1wb3J0IGF0ZXhpdAogaW1wb3J0IGNvbW1hbmRzCiBpbXBvcnQgZmlsZWNtcAogaW1wb3J0IGdsb2IKK2ltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHJlCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3RhdAoraW1wb3J0IHN0cmluZwogaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCiAKLWZyb20gYmlvbmljX3V0aWxzIGltcG9ydCAqCiAKLWJpb25pY19saWJjX3Jvb3QgPSBvcy5lbnZpcm9uWyJBTkRST0lEX0JVSUxEX1RPUCJdICsgIi9iaW9uaWMvbGliYy8iCithbGxfYXJjaGVzID0gWyAiYXJtIiwgImFybTY0IiwgIm1pcHMiLCAibWlwczY0IiwgIng4NiIsICJ4ODZfNjQiIF0KKwogCiAjIHRlbXAgZGlyZWN0b3J5IHdoZXJlIHdlIHN0b3JlIGFsbCBpbnRlcm1lZGlhdGUgZmlsZXMKLWJpb25pY190ZW1wID0gIi90bXAvYmlvbmljX2dlbnN5c2NhbGxzLyIKK2Jpb25pY190ZW1wID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9ImJpb25pY19nZW5zeXNjYWxscyIpOworIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBpcyBkZWxldGVkIHdoZW4gdGhlIHNjcmlwdCBleGl0cy4KK2F0ZXhpdC5yZWdpc3RlcihzaHV0aWwucm10cmVlLCBiaW9uaWNfdGVtcCkKKworYmlvbmljX2xpYmNfcm9vdCA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWyJBTkRST0lEX0JVSUxEX1RPUCJdLCAiYmlvbmljL2xpYmMiKQogCiB3YXJuaW5nID0gIkdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuIgogCkBAIC0zNCw5ICs0MiwxMCBAQAogCiAKIGRlZiBjcmVhdGVfZmlsZShyZWxwYXRoKToKLSAgICBkaXIgPSBvcy5wYXRoLmRpcm5hbWUoYmlvbmljX3RlbXAgKyByZWxwYXRoKQorICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihiaW9uaWNfdGVtcCwgcmVscGF0aCkKKyAgICBkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZnVsbF9wYXRoKQogICAgIG1ha2VfZGlyKGRpcikKLSAgICByZXR1cm4gb3BlbihiaW9uaWNfdGVtcCArIHJlbHBhdGgsICJ3IikKKyAgICByZXR1cm4gb3BlbihmdWxsX3BhdGgsICJ3IikKIAogCiBzeXNjYWxsX3N0dWJfaGVhZGVyID0gIi8qICIgKyB3YXJuaW5nICsgIiAqL1xuIiArIFwKQEAgLTI2NSw3ICsyNzQsNyBAQAogIyBUaGlzIGxldHMgdXMgc3VwcG9ydCByZWd1bGFyIHN5c3RlbSBjYWxscyBsaWtlIF9fTlJfd3JpdGUgYW5kIGFsc28gd2VpcmQKICMgb25lcyBsaWtlIF9fQVJNX05SX2NhY2hlZmx1c2gsIHdoZXJlIHRoZSBOUiBkb2Vzbid0IGNvbWUgYXQgdGhlIHN0YXJ0LgogZGVmIG1ha2VfX05SX25hbWUobmFtZSk6Ci0gICAgaWYgbmFtZS5zdGFydHN3aXRoKCJfXyIpOgorICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiX19BUk1fTlJfIik6CiAgICAgICAgIHJldHVybiBuYW1lCiAgICAgZWxzZToKICAgICAgICAgcmV0dXJuICJfX05SXyVzIiAlIChuYW1lKQpAQCAtMzgwLDYgKzM4OSwxMjAgQEAKICAgICByZXR1cm4gcmVzdWx0CiAKIAorY2xhc3MgU3lzQ2FsbHNUeHRQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnN5c2NhbGxzID0gW10KKyAgICAgICAgc2VsZi5saW5lbm8gICA9IDAKKworICAgIGRlZiBFKHNlbGYsIG1zZyk6CisgICAgICAgIHByaW50ICIlZDogJXMiICUgKHNlbGYubGluZW5vLCBtc2cpCisKKyAgICBkZWYgcGFyc2VfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiIHBhcnNlIGEgc3lzY2FsbCBzcGVjIGxpbmUuCisKKyAgICAgICAgbGluZSBwcm9jZXNzaW5nLCBmb3JtYXQgaXMKKyAgICAgICAgICAgcmV0dXJuIHR5cGUgICAgZnVuY19uYW1lW3xhbGlhc19saXN0XVs6c3lzY2FsbF9uYW1lWzpzb2NrZXRjYWxsX2lkXV0gKCBbcGFyYW1saXN0XSApIGFyY2hpdGVjdHVyZV9saXN0CisgICAgICAgICIiIgorICAgICAgICBwb3NfbHBhcmVuID0gbGluZS5maW5kKCcoJykKKyAgICAgICAgRSAgICAgICAgICA9IHNlbGYuRQorICAgICAgICBpZiBwb3NfbHBhcmVuIDwgMDoKKyAgICAgICAgICAgIEUoIm1pc3NpbmcgbGVmdCBwYXJlbnRoZXNpcyBpbiAnJXMnIiAlIGxpbmUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwb3NfcnBhcmVuID0gbGluZS5yZmluZCgnKScpCisgICAgICAgIGlmIHBvc19ycGFyZW4gPCAwIG9yIHBvc19ycGFyZW4gPD0gcG9zX2xwYXJlbjoKKyAgICAgICAgICAgIEUoIm1pc3Npbmcgb3IgbWlzcGxhY2VkIHJpZ2h0IHBhcmVudGhlc2lzIGluICclcyciICUgbGluZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHJldHVybl90eXBlID0gbGluZVs6cG9zX2xwYXJlbl0uc3RyaXAoKS5zcGxpdCgpCisgICAgICAgIGlmIGxlbihyZXR1cm5fdHlwZSkgPCAyOgorICAgICAgICAgICAgRSgibWlzc2luZyByZXR1cm4gdHlwZSBpbiAnJXMnIiAlIGxpbmUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzeXNjYWxsX2Z1bmMgPSByZXR1cm5fdHlwZVstMV0KKyAgICAgICAgcmV0dXJuX3R5cGUgID0gc3RyaW5nLmpvaW4ocmV0dXJuX3R5cGVbOi0xXSwnICcpCisgICAgICAgIHNvY2tldGNhbGxfaWQgPSAtMQorCisgICAgICAgIHBvc19jb2xvbiA9IHN5c2NhbGxfZnVuYy5maW5kKCc6JykKKyAgICAgICAgaWYgcG9zX2NvbG9uIDwgMDoKKyAgICAgICAgICAgIHN5c2NhbGxfbmFtZSA9IHN5c2NhbGxfZnVuYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcG9zX2NvbG9uID09IDAgb3IgcG9zX2NvbG9uKzEgPj0gbGVuKHN5c2NhbGxfZnVuYyk6CisgICAgICAgICAgICAgICAgRSgibWlzcGxhY2VkIGNvbG9uIGluICclcyciICUgbGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgIyBub3cgZmluZCBpZiB0aGVyZSBpcyBhIHNvY2tldGNhbGxfaWQgZm9yIGEgZGlzcGF0Y2gtdHlwZSBzeXNjYWxsCisgICAgICAgICAgICAjIGFmdGVyIHRoZSBvcHRpb25hbCAybmQgY29sb24KKyAgICAgICAgICAgIHBvc19jb2xvbjIgPSBzeXNjYWxsX2Z1bmMuZmluZCgnOicsIHBvc19jb2xvbiArIDEpCisgICAgICAgICAgICBpZiBwb3NfY29sb24yIDwgMDoKKyAgICAgICAgICAgICAgICBzeXNjYWxsX25hbWUgPSBzeXNjYWxsX2Z1bmNbcG9zX2NvbG9uKzE6XQorICAgICAgICAgICAgICAgIHN5c2NhbGxfZnVuYyA9IHN5c2NhbGxfZnVuY1s6cG9zX2NvbG9uXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBwb3NfY29sb24yKzEgPj0gbGVuKHN5c2NhbGxfZnVuYyk6CisgICAgICAgICAgICAgICAgICAgIEUoIm1pc3BsYWNlZCBjb2xvbjIgaW4gJyVzJyIgJSBsaW5lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBzeXNjYWxsX25hbWUgPSBzeXNjYWxsX2Z1bmNbKHBvc19jb2xvbisxKTpwb3NfY29sb24yXQorICAgICAgICAgICAgICAgIHNvY2tldGNhbGxfaWQgPSBpbnQoc3lzY2FsbF9mdW5jW3Bvc19jb2xvbjIrMTpdKQorICAgICAgICAgICAgICAgIHN5c2NhbGxfZnVuYyA9IHN5c2NhbGxfZnVuY1s6cG9zX2NvbG9uXQorCisgICAgICAgIGFsaWFzX2RlbGltID0gc3lzY2FsbF9mdW5jLmZpbmQoJ3wnKQorICAgICAgICBpZiBhbGlhc19kZWxpbSA+IDA6CisgICAgICAgICAgICBhbGlhc19saXN0ID0gc3lzY2FsbF9mdW5jW2FsaWFzX2RlbGltKzE6XS5zdHJpcCgpCisgICAgICAgICAgICBzeXNjYWxsX2Z1bmMgPSBzeXNjYWxsX2Z1bmNbOmFsaWFzX2RlbGltXQorICAgICAgICAgICAgYWxpYXNfZGVsaW0gPSBzeXNjYWxsX25hbWUuZmluZCgnfCcpCisgICAgICAgICAgICBpZiBhbGlhc19kZWxpbSA+IDA6CisgICAgICAgICAgICAgICAgc3lzY2FsbF9uYW1lID0gc3lzY2FsbF9uYW1lWzphbGlhc19kZWxpbV0KKyAgICAgICAgICAgIHN5c2NhbGxfYWxpYXNlcyA9IHN0cmluZy5zcGxpdChhbGlhc19saXN0LCAnLCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeXNjYWxsX2FsaWFzZXMgPSBbXQorCisgICAgICAgIGlmIHBvc19ycGFyZW4gPiBwb3NfbHBhcmVuKzE6CisgICAgICAgICAgICBzeXNjYWxsX3BhcmFtcyA9IGxpbmVbcG9zX2xwYXJlbisxOnBvc19ycGFyZW5dLnNwbGl0KCcsJykKKyAgICAgICAgICAgIHBhcmFtcyAgICAgICAgID0gc3RyaW5nLmpvaW4oc3lzY2FsbF9wYXJhbXMsJywnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3lzY2FsbF9wYXJhbXMgPSBbXQorICAgICAgICAgICAgcGFyYW1zICAgICAgICAgPSAidm9pZCIKKworICAgICAgICB0ID0geworICAgICAgICAgICAgICAibmFtZSIgICAgOiBzeXNjYWxsX25hbWUsCisgICAgICAgICAgICAgICJmdW5jIiAgICA6IHN5c2NhbGxfZnVuYywKKyAgICAgICAgICAgICAgImFsaWFzZXMiIDogc3lzY2FsbF9hbGlhc2VzLAorICAgICAgICAgICAgICAicGFyYW1zIiAgOiBzeXNjYWxsX3BhcmFtcywKKyAgICAgICAgICAgICAgImRlY2wiICAgIDogIiUtMTVzICAlcyAoJXMpOyIgJSAocmV0dXJuX3R5cGUsIHN5c2NhbGxfZnVuYywgcGFyYW1zKSwKKyAgICAgICAgICAgICAgInNvY2tldGNhbGxfaWQiIDogc29ja2V0Y2FsbF9pZAorICAgICAgICB9CisKKyAgICAgICAgIyBQYXJzZSB0aGUgYXJjaGl0ZWN0dXJlIGxpc3QuCisgICAgICAgIGFyY2hfbGlzdCA9IGxpbmVbcG9zX3JwYXJlbisxOl0uc3RyaXAoKQorICAgICAgICBpZiBhcmNoX2xpc3QgPT0gImFsbCI6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhbGxfYXJjaGVzOgorICAgICAgICAgICAgICAgIHRbYXJjaF0gPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBzdHJpbmcuc3BsaXQoYXJjaF9saXN0LCAnLCcpOgorICAgICAgICAgICAgICAgIGlmIGFyY2ggaW4gYWxsX2FyY2hlczoKKyAgICAgICAgICAgICAgICAgICAgdFthcmNoXSA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBFKCJpbnZhbGlkIHN5c2NhbGwgYXJjaGl0ZWN0dXJlICclcycgaW4gJyVzJyIgJSAoYXJjaCwgbGluZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuc3lzY2FsbHMuYXBwZW5kKHQpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1Zyh0KQorCisKKyAgICBkZWYgcGFyc2VfZmlsZShzZWxmLCBmaWxlX3BhdGgpOgorICAgICAgICBsb2dnaW5nLmRlYnVnKCJwYXJzZV9maWxlOiAlcyIgJSBmaWxlX3BhdGgpCisgICAgICAgIGZwID0gb3BlbihmaWxlX3BhdGgpCisgICAgICAgIGZvciBsaW5lIGluIGZwLnhyZWFkbGluZXMoKToKKyAgICAgICAgICAgIHNlbGYubGluZW5vICs9IDEKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBjb250aW51ZQorICAgICAgICAgICAgaWYgbGluZVswXSA9PSAnIyc6IGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLnBhcnNlX2xpbmUobGluZSkKKworICAgICAgICBmcC5jbG9zZSgpCisKKwogY2xhc3MgU3RhdGU6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzZWxmLm9sZF9zdHVicyA9IFtdCkBAIC00MzcsMjIgKzU2MCwyMiBAQAogICAgIGRlZiBnZW5fZ2xpYmNfc3lzY2FsbHNfaChzZWxmKToKICAgICAgICAgIyBUT0RPOiBnZW5lcmF0ZSBhIHNlcGFyYXRlIGZpbGUgZm9yIGVhY2ggYXJjaGl0ZWN0dXJlLCBsaWtlIGdsaWJjJ3MgYml0cy9zeXNjYWxsLmguCiAgICAgICAgIGdsaWJjX3N5c2NhbGxzX2hfcGF0aCA9ICJpbmNsdWRlL3N5cy9nbGliYy1zeXNjYWxscy5oIgotICAgICAgICBEKCJnZW5lcmF0aW5nICIgKyBnbGliY19zeXNjYWxsc19oX3BhdGgpCisgICAgICAgIGxvZ2dpbmcuaW5mbygiZ2VuZXJhdGluZyAiICsgZ2xpYmNfc3lzY2FsbHNfaF9wYXRoKQogICAgICAgICBnbGliY19mcCA9IGNyZWF0ZV9maWxlKGdsaWJjX3N5c2NhbGxzX2hfcGF0aCkKICAgICAgICAgZ2xpYmNfZnAud3JpdGUoIi8qICVzICovXG4iICUgd2FybmluZykKICAgICAgICAgZ2xpYmNfZnAud3JpdGUoIiNpZm5kZWYgX0JJT05JQ19HTElCQ19TWVNDQUxMU19IX1xuIikKICAgICAgICAgZ2xpYmNfZnAud3JpdGUoIiNkZWZpbmUgX0JJT05JQ19HTElCQ19TWVNDQUxMU19IX1xuIikKIAogICAgICAgICBnbGliY19mcC53cml0ZSgiI2lmIGRlZmluZWQoX19hYXJjaDY0X18pXG4iKQotICAgICAgICBzZWxmLnNjYW5fbGludXhfdW5pc3RkX2goZ2xpYmNfZnAsIGJpb25pY19saWJjX3Jvb3QgKyAiL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oIikKKyAgICAgICAgc2VsZi5zY2FuX2xpbnV4X3VuaXN0ZF9oKGdsaWJjX2ZwLCBvcy5wYXRoLmpvaW4oYmlvbmljX2xpYmNfcm9vdCwgImtlcm5lbC91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oIikpCiAgICAgICAgIGdsaWJjX2ZwLndyaXRlKCIjZWxpZiBkZWZpbmVkKF9fYXJtX18pXG4iKQotICAgICAgICBzZWxmLnNjYW5fbGludXhfdW5pc3RkX2goZ2xpYmNfZnAsIGJpb25pY19saWJjX3Jvb3QgKyAiL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3VuaXN0ZC5oIikKKyAgICAgICAgc2VsZi5zY2FuX2xpbnV4X3VuaXN0ZF9oKGdsaWJjX2ZwLCBvcy5wYXRoLmpvaW4oYmlvbmljX2xpYmNfcm9vdCwgImtlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3VuaXN0ZC5oIikpCiAgICAgICAgIGdsaWJjX2ZwLndyaXRlKCIjZWxpZiBkZWZpbmVkKF9fbWlwc19fKVxuIikKLSAgICAgICAgc2VsZi5zY2FuX2xpbnV4X3VuaXN0ZF9oKGdsaWJjX2ZwLCBiaW9uaWNfbGliY19yb290ICsgIi9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vdW5pc3RkLmgiKQorICAgICAgICBzZWxmLnNjYW5fbGludXhfdW5pc3RkX2goZ2xpYmNfZnAsIG9zLnBhdGguam9pbihiaW9uaWNfbGliY19yb290LCAia2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3VuaXN0ZC5oIikpCiAgICAgICAgIGdsaWJjX2ZwLndyaXRlKCIjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKVxuIikKLSAgICAgICAgc2VsZi5zY2FuX2xpbnV4X3VuaXN0ZF9oKGdsaWJjX2ZwLCBiaW9uaWNfbGliY19yb290ICsgIi9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfMzIuaCIpCisgICAgICAgIHNlbGYuc2Nhbl9saW51eF91bmlzdGRfaChnbGliY19mcCwgb3MucGF0aC5qb2luKGJpb25pY19saWJjX3Jvb3QsICJrZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfMzIuaCIpKQogICAgICAgICBnbGliY19mcC53cml0ZSgiI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxuIikKLSAgICAgICAgc2VsZi5zY2FuX2xpbnV4X3VuaXN0ZF9oKGdsaWJjX2ZwLCBiaW9uaWNfbGliY19yb290ICsgIi9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfNjQuaCIpCisgICAgICAgIHNlbGYuc2Nhbl9saW51eF91bmlzdGRfaChnbGliY19mcCwgb3MucGF0aC5qb2luKGJpb25pY19saWJjX3Jvb3QsICJrZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfNjQuaCIpKQogICAgICAgICBnbGliY19mcC53cml0ZSgiI2VuZGlmXG4iKQogCiAgICAgICAgIGdsaWJjX2ZwLndyaXRlKCIjZW5kaWYgLyogX0JJT05JQ19HTElCQ19TWVNDQUxMU19IXyAqL1xuIikKQEAgLTQ2Niw3ICs1ODksNyBAQAogICAgICAgICAgICAgZm9yIGFyY2ggaW4gYWxsX2FyY2hlczoKICAgICAgICAgICAgICAgICBpZiBzeXNjYWxsLmhhc19rZXkoImFzbS0lcyIgJSBhcmNoKToKICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSAiYXJjaC0lcy9zeXNjYWxscy8lcy5TIiAlIChhcmNoLCBzeXNjYWxsWyJmdW5jIl0pCi0gICAgICAgICAgICAgICAgICAgIEQyKCI+Pj4gZ2VuZXJhdGluZyAiICsgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiPj4+IGdlbmVyYXRpbmcgIiArIGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICBmcCA9IGNyZWF0ZV9maWxlKGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICBmcC53cml0ZShzeXNjYWxsWyJhc20tJXMiICUgYXJjaF0pCiAgICAgICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKQEAgLTQ3NCw0OCArNTk3LDQ5IEBACiAKIAogICAgIGRlZiByZWdlbmVyYXRlKHNlbGYpOgotICAgICAgICBEKCJzY2FubmluZyBmb3IgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN0dWIgZmlsZXMuLi4iKQotCi0gICAgICAgIGJpb25pY19saWJjX3Jvb3RfbGVuID0gbGVuKGJpb25pY19saWJjX3Jvb3QpCisgICAgICAgIGxvZ2dpbmcuaW5mbygic2Nhbm5pbmcgZm9yIGV4aXN0aW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdHViIGZpbGVzLi4uIikKIAogICAgICAgICBmb3IgYXJjaCBpbiBhbGxfYXJjaGVzOgotICAgICAgICAgICAgYXJjaF9wYXRoID0gYmlvbmljX2xpYmNfcm9vdCArICJhcmNoLSIgKyBhcmNoCi0gICAgICAgICAgICBEKCJzY2FubmluZyAiICsgYXJjaF9wYXRoKQotICAgICAgICAgICAgZmlsZXMgPSBnbG9iLmdsb2IoYXJjaF9wYXRoICsgIi9zeXNjYWxscy8qLlMiKQotICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6Ci0gICAgICAgICAgICAgICAgc2VsZi5vbGRfc3R1YnMuYXBwZW5kKGZbYmlvbmljX2xpYmNfcm9vdF9sZW46XSkKKyAgICAgICAgICAgIGFyY2hfZGlyID0gImFyY2gtIiArIGFyY2gKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygic2Nhbm5pbmcgIiArIG9zLnBhdGguam9pbihiaW9uaWNfbGliY19yb290LCBhcmNoX2RpcikpCisgICAgICAgICAgICByZWxfcGF0aCA9IG9zLnBhdGguam9pbihhcmNoX2RpciwgInN5c2NhbGxzIikKKyAgICAgICAgICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIob3MucGF0aC5qb2luKGJpb25pY19saWJjX3Jvb3QsIHJlbF9wYXRoKSk6CisgICAgICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgiLlMiKToKKyAgICAgICAgICAgICAgICAgIHNlbGYub2xkX3N0dWJzLmFwcGVuZChvcy5wYXRoLmpvaW4ocmVsX3BhdGgsIGZpbGUpKQogCi0gICAgICAgIEQoImZvdW5kICVkIHN0dWIgZmlsZXMiICUgbGVuKHNlbGYub2xkX3N0dWJzKSkKKyAgICAgICAgbG9nZ2luZy5pbmZvKCJmb3VuZCAlZCBzdHViIGZpbGVzIiAlIGxlbihzZWxmLm9sZF9zdHVicykpCiAKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJpb25pY190ZW1wKToKLSAgICAgICAgICAgIEQoImNyZWF0aW5nICVzLi4uIiAlIGJpb25pY190ZW1wKQorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJjcmVhdGluZyAlcy4uLiIgJSBiaW9uaWNfdGVtcCkKICAgICAgICAgICAgIG1ha2VfZGlyKGJpb25pY190ZW1wKQogCi0gICAgICAgIEQoInJlLWdlbmVyYXRpbmcgc3R1YnMgYW5kIHN1cHBvcnQgZmlsZXMuLi4iKQorICAgICAgICBsb2dnaW5nLmluZm8oInJlLWdlbmVyYXRpbmcgc3R1YnMgYW5kIHN1cHBvcnQgZmlsZXMuLi4iKQogCiAgICAgICAgIHNlbGYuZ2VuX2dsaWJjX3N5c2NhbGxzX2goKQogICAgICAgICBzZWxmLmdlbl9zeXNjYWxsX3N0dWJzKCkKIAotICAgICAgICBEKCJjb21wYXJpbmcgZmlsZXMuLi4iKQorICAgICAgICBsb2dnaW5nLmluZm8oImNvbXBhcmluZyBmaWxlcy4uLiIpCiAgICAgICAgIGFkZHMgICAgPSBbXQogICAgICAgICBlZGl0cyAgID0gW10KIAogICAgICAgICBmb3Igc3R1YiBpbiBzZWxmLm5ld19zdHVicyArIHNlbGYub3RoZXJfZmlsZXM6Ci0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYmlvbmljX2xpYmNfcm9vdCArIHN0dWIpOgorICAgICAgICAgICAgdG1wX2ZpbGUgPSBvcy5wYXRoLmpvaW4oYmlvbmljX3RlbXAsIHN0dWIpCisgICAgICAgICAgICBsaWJjX2ZpbGUgPSBvcy5wYXRoLmpvaW4oYmlvbmljX2xpYmNfcm9vdCwgc3R1YikKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsaWJjX2ZpbGUpOgogICAgICAgICAgICAgICAgICMgbmV3IGZpbGUsIGdpdCBhZGQgaXQKLSAgICAgICAgICAgICAgICBEKCJuZXcgZmlsZTogICAgICIgKyBzdHViKQotICAgICAgICAgICAgICAgIGFkZHMuYXBwZW5kKGJpb25pY19saWJjX3Jvb3QgKyBzdHViKQotICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShiaW9uaWNfdGVtcCArIHN0dWIsIGJpb25pY19saWJjX3Jvb3QgKyBzdHViKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygibmV3IGZpbGU6ICAgICAiICsgc3R1YikKKyAgICAgICAgICAgICAgICBhZGRzLmFwcGVuZChsaWJjX2ZpbGUpCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHRtcF9maWxlLCBsaWJjX2ZpbGUpCiAKLSAgICAgICAgICAgIGVsaWYgbm90IGZpbGVjbXAuY21wKGJpb25pY190ZW1wICsgc3R1YiwgYmlvbmljX2xpYmNfcm9vdCArIHN0dWIpOgotICAgICAgICAgICAgICAgIEQoImNoYW5nZWQgZmlsZTogIiArIHN0dWIpCisgICAgICAgICAgICBlbGlmIG5vdCBmaWxlY21wLmNtcCh0bXBfZmlsZSwgbGliY19maWxlKToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oImNoYW5nZWQgZmlsZTogIiArIHN0dWIpCiAgICAgICAgICAgICAgICAgZWRpdHMuYXBwZW5kKHN0dWIpCiAKICAgICAgICAgZGVsZXRlcyA9IFtdCiAgICAgICAgIGZvciBzdHViIGluIHNlbGYub2xkX3N0dWJzOgogICAgICAgICAgICAgaWYgbm90IHN0dWIgaW4gc2VsZi5uZXdfc3R1YnM6Ci0gICAgICAgICAgICAgICAgRCgiZGVsZXRlZCBmaWxlOiAiICsgc3R1YikKLSAgICAgICAgICAgICAgICBkZWxldGVzLmFwcGVuZChiaW9uaWNfbGliY19yb290ICsgc3R1YikKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oImRlbGV0ZWQgZmlsZTogIiArIHN0dWIpCisgICAgICAgICAgICAgICAgZGVsZXRlcy5hcHBlbmQob3MucGF0aC5qb2luKGJpb25pY19saWJjX3Jvb3QsIHN0dWIpKQogCiAgICAgICAgIGlmIG5vdCBEUllfUlVOOgogICAgICAgICAgICAgaWYgYWRkczoKQEAgLTUyNCwxOCArNjQ4LDE5IEBACiAgICAgICAgICAgICAgICAgY29tbWFuZHMuZ2V0b3V0cHV0KCJnaXQgcm0gIiArICIgIi5qb2luKGRlbGV0ZXMpKQogICAgICAgICAgICAgaWYgZWRpdHM6CiAgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gZWRpdHM6Ci0gICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShiaW9uaWNfdGVtcCArIGZpbGUsIGJpb25pY19saWJjX3Jvb3QgKyBmaWxlKQotICAgICAgICAgICAgICAgIGNvbW1hbmRzLmdldG91dHB1dCgiZ2l0IGFkZCAiICsgIiAiLmpvaW4oKGJpb25pY19saWJjX3Jvb3QgKyBmaWxlKSBmb3IgZmlsZSBpbiBlZGl0cykpCisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4oYmlvbmljX3RlbXAsIGZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGJpb25pY19saWJjX3Jvb3QsIGZpbGUpKQorICAgICAgICAgICAgICAgIGNvbW1hbmRzLmdldG91dHB1dCgiZ2l0IGFkZCAiICsgIiAiLmpvaW4oKG9zLnBhdGguam9pbihiaW9uaWNfbGliY19yb290LCBmaWxlKSkgZm9yIGZpbGUgaW4gZWRpdHMpKQogCi0gICAgICAgICAgICBjb21tYW5kcy5nZXRvdXRwdXQoImdpdCBhZGQgJXMlcyIgJSAoYmlvbmljX2xpYmNfcm9vdCwiU1lTQ0FMTFMuVFhUIikpCisgICAgICAgICAgICBjb21tYW5kcy5nZXRvdXRwdXQoImdpdCBhZGQgJXMiICUgKG9zLnBhdGguam9pbihiaW9uaWNfbGliY19yb290LCAiU1lTQ0FMTFMuVFhUIikpKQogCiAgICAgICAgIGlmIChub3QgYWRkcykgYW5kIChub3QgZGVsZXRlcykgYW5kIChub3QgZWRpdHMpOgotICAgICAgICAgICAgRCgibm8gY2hhbmdlcyBkZXRlY3RlZCEiKQorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJubyBjaGFuZ2VzIGRldGVjdGVkISIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBEKCJyZWFkeSB0byBnbyEhIikKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygicmVhZHkgdG8gZ28hISIpCiAKLURfc2V0bGV2ZWwoMSkKK2xvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5JTkZPKQogCiBzdGF0ZSA9IFN0YXRlKCkKLXN0YXRlLnByb2Nlc3NfZmlsZShiaW9uaWNfbGliY19yb290KyJTWVNDQUxMUy5UWFQiKQorc3RhdGUucHJvY2Vzc19maWxlKG9zLnBhdGguam9pbihiaW9uaWNfbGliY19yb290LCAiU1lTQ0FMTFMuVFhUIikpCiBzdGF0ZS5yZWdlbmVyYXRlKCkKZGlmZiAtLWdpdCBhL2xpYmMvdG9vbHMvcG9zaXgtMjAxMy50eHQgYi9saWJjL3Rvb2xzL3Bvc2l4LTIwMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NzJjODEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Rvb2xzL3Bvc2l4LTIwMTMudHh0CkBAIC0wLDAgKzEsMTE5MSBAQAorRkRfQ0xSCitGRF9JU1NFVAorRkRfU0VUCitGRF9aRVJPCitfRXhpdAorX2V4aXQKK19sb25nam1wCitfc2V0am1wCitfdG9sb3dlcgorX3RvdXBwZXIKK2E2NGwKK2Fib3J0CithYnMKK2FjY2VwdAorYWNjZXNzCithY29zZgorYWNvc2hmCithY29zaAorYWNvc2hsCithY29zCithY29zbAorYWlvX2NhbmNlbAorYWlvX2Vycm9yCithaW9fZnN5bmMKK2Fpb19yZWFkCithaW9fcmV0dXJuCithaW9fc3VzcGVuZAorYWlvX3dyaXRlCithbGFybQorYWxwaGFzb3J0Cithc2N0aW1lCithc2N0aW1lX3IKK2FzaW5mCithc2luaGYKK2FzaW5oCithc2luaGwKK2FzaW4KK2FzaW5sCithc3NlcnQKK2F0YW4yZgorYXRhbjIKK2F0YW4ybAorYXRhbmYKK2F0YW5oZgorYXRhbmgKK2F0YW5obAorYXRhbgorYXRhbmwKK2F0ZXhpdAorYXRvZgorYXRvaQorYXRvbAorYXRvbGwKK2Jhc2VuYW1lCitiaW5kCitic2VhcmNoCitidG93YworY2Fic2YKK2NhYnMKK2NhYnNsCitjYWNvc2YKK2NhY29zaGYKK2NhY29zaAorY2Fjb3NobAorY2Fjb3MKK2NhY29zbAorY2FsbG9jCitjYXJnZgorY2FyZworY2FyZ2wKK2Nhc2luZgorY2FzaW5oZgorY2FzaW5oCitjYXNpbmhsCitjYXNpbgorY2FzaW5sCitjYXRhbmYKK2NhdGFuaGYKK2NhdGFuaAorY2F0YW5obAorY2F0YW4KK2NhdGFubAorY2F0Y2xvc2UKK2NhdGdldHMKK2NhdG9wZW4KK2NicnRmCitjYnJ0CitjYnJ0bAorY2Nvc2YKK2Njb3NoZgorY2Nvc2gKK2Njb3NobAorY2NvcworY2Nvc2wKK2NlaWxmCitjZWlsCitjZWlsbAorY2V4cGYKK2NleHAKK2NleHBsCitjZmdldGlzcGVlZAorY2ZnZXRvc3BlZWQKK2Nmc2V0aXNwZWVkCitjZnNldG9zcGVlZAorY2hkaXIKK2NobW9kCitjaG93bgorY2ltYWdmCitjaW1hZworY2ltYWdsCitjbGVhcmVycgorY2xvY2tfZ2V0Y3B1Y2xvY2tpZAorY2xvY2tfZ2V0cmVzCitjbG9ja19nZXR0aW1lCitjbG9jaworY2xvY2tfbmFub3NsZWVwCitjbG9ja19zZXR0aW1lCitjbG9nZgorY2xvZworY2xvZ2wKK2Nsb3NlZGlyCitjbG9zZQorY2xvc2Vsb2cKK2NvbmZzdHIKK2NvbmpmCitjb25qCitjb25qbAorY29ubmVjdAorY29weXNpZ25mCitjb3B5c2lnbgorY29weXNpZ25sCitjb3NmCitjb3NoZgorY29zaAorY29zaGwKK2NvcworY29zbAorY3Bvd2YKK2Nwb3cKK2Nwb3dsCitjcHJvamYKK2Nwcm9qCitjcHJvamwKK2NyZWFsZgorY3JlYWwKK2NyZWFsbAorY3JlYXQKK2NyeXB0Citjc2luZgorY3NpbmhmCitjc2luaAorY3NpbmhsCitjc2luCitjc2lubAorY3NxcnRmCitjc3FydAorY3NxcnRsCitjdGFuZgorY3RhbmhmCitjdGFuaAorY3RhbmhsCitjdGFuCitjdGFubAorY3Rlcm1pZAorY3RpbWUKK2N0aW1lX3IKK2RheWxpZ2h0CitkYm1fY2xlYXJlcnIKK2RibV9jbG9zZQorZGJtX2RlbGV0ZQorZGJtX2Vycm9yCitkYm1fZmV0Y2gKK2RibV9maXJzdGtleQorZGJtX25leHRrZXkKK2RibV9vcGVuCitkYm1fc3RvcmUKK2RpZmZ0aW1lCitkaXJmZAorZGlybmFtZQorZGl2CitkbGNsb3NlCitkbGVycm9yCitkbG9wZW4KK2Rsc3ltCitkcHJpbnRmCitkcmFuZDQ4CitkdXAyCitkdXAKK2R1cGxvY2FsZQorZW5jcnlwdAorZW5kZ3JlbnQKK2VuZGhvc3RlbnQKK2VuZG5ldGVudAorZW5kcHJvdG9lbnQKK2VuZHB3ZW50CitlbmRzZXJ2ZW50CitlbmR1dHhlbnQKK2Vudmlyb24KK2VyYW5kNDgKK2VyZmNmCitlcmZjCitlcmZjbAorZXJmZgorZXJmCitlcmZsCitlcnJubworZXhlY2xlCitleGVjbAorZXhlY2xwCitleGVjdmUKK2V4ZWN2CitleGVjdnAKK2V4aXQKK2V4cDJmCitleHAyCitleHAybAorZXhwZgorZXhwCitleHBsCitleHBtMWYKK2V4cG0xCitleHBtMWwKK2ZhYnNmCitmYWJzCitmYWJzbAorZmFjY2Vzc2F0CitmYXR0YWNoCitmY2hkaXIKK2ZjaG1vZGF0CitmY2htb2QKK2ZjaG93bmF0CitmY2hvd24KK2ZjbG9zZQorZmNudGwKK2ZkYXRhc3luYworZmRldGFjaAorZmRpbWYKK2ZkaW0KK2ZkaW1sCitmZG9wZW5kaXIKK2Zkb3BlbgorZmVjbGVhcmV4Y2VwdAorZmVnZXRlbnYKK2ZlZ2V0ZXhjZXB0ZmxhZworZmVnZXRyb3VuZAorZmVob2xkZXhjZXB0CitmZW9mCitmZXJhaXNlZXhjZXB0CitmZXJyb3IKK2Zlc2V0ZW52CitmZXNldGV4Y2VwdGZsYWcKK2Zlc2V0cm91bmQKK2ZldGVzdGV4Y2VwdAorZmV1cGRhdGVlbnYKK2ZleGVjdmUKK2ZmbHVzaAorZmZzCitmZ2V0YworZmdldHBvcworZmdldHMKK2ZnZXR3YworZmdldHdzCitmaWxlbm8KK2Zsb2NrZmlsZQorZmxvb3JmCitmbG9vcgorZmxvb3JsCitmbWFmCitmbWEKK2ZtYWwKK2ZtYXhmCitmbWF4CitmbWF4bAorZm1lbW9wZW4KK2ZtaW5mCitmbWluCitmbWlubAorZm1vZGYKK2Ztb2QKK2Ztb2RsCitmbXRtc2cKK2ZubWF0Y2gKK2ZvcGVuCitmb3JrCitmcGF0aGNvbmYKK2ZwY2xhc3NpZnkKK2ZwcmludGYKK2ZwdXRjCitmcHV0cworZnB1dHdjCitmcHV0d3MKK2ZyZWFkCitmcmVlYWRkcmluZm8KK2ZyZWUKK2ZyZWVsb2NhbGUKK2ZyZW9wZW4KK2ZyZXhwZgorZnJleHAKK2ZyZXhwbAorZnNjYW5mCitmc2VlaworZnNlZWtvCitmc2V0cG9zCitmc3RhdGF0Citmc3RhdAorZnN0YXR2ZnMKK2ZzeW5jCitmdGVsbAorZnRlbGxvCitmdG9rCitmdHJ1bmNhdGUKK2Z0cnlsb2NrZmlsZQorZnR3CitmdW5sb2NrZmlsZQorZnV0aW1lbnMKK2Z3aWRlCitmd3ByaW50ZgorZndyaXRlCitmd3NjYW5mCitnYWlfc3RyZXJyb3IKK2dldGFkZHJpbmZvCitnZXRjaGFyCitnZXRjaGFyX3VubG9ja2VkCitnZXRjCitnZXRjX3VubG9ja2VkCitnZXRjd2QKK2dldGRhdGVfZXJyCitnZXRkYXRlCitnZXRkZWxpbQorZ2V0ZWdpZAorZ2V0ZW52CitnZXRldWlkCitnZXRnaWQKK2dldGdyZW50CitnZXRncmdpZAorZ2V0Z3JnaWRfcgorZ2V0Z3JuYW0KK2dldGdybmFtX3IKK2dldGdyb3VwcworZ2V0aG9zdGVudAorZ2V0aG9zdGlkCitnZXRob3N0bmFtZQorZ2V0aXRpbWVyCitnZXRsaW5lCitnZXRsb2dpbgorZ2V0bG9naW5fcgorZ2V0bXNnCitnZXRuYW1laW5mbworZ2V0bmV0YnlhZGRyCitnZXRuZXRieW5hbWUKK2dldG5ldGVudAorZ2V0b3B0CitnZXRwZWVybmFtZQorZ2V0cGdpZAorZ2V0cGdycAorZ2V0cGlkCitnZXRwbXNnCitnZXRwcGlkCitnZXRwcmlvcml0eQorZ2V0cHJvdG9ieW5hbWUKK2dldHByb3RvYnludW1iZXIKK2dldHByb3RvZW50CitnZXRwd2VudAorZ2V0cHduYW0KK2dldHB3bmFtX3IKK2dldHB3dWlkCitnZXRwd3VpZF9yCitnZXRybGltaXQKK2dldHJ1c2FnZQorZ2V0c2VydmJ5bmFtZQorZ2V0c2VydmJ5cG9ydAorZ2V0c2VydmVudAorZ2V0cworZ2V0c2lkCitnZXRzb2NrbmFtZQorZ2V0c29ja29wdAorZ2V0c3Vib3B0CitnZXR0aW1lb2ZkYXkKK2dldHVpZAorZ2V0dXR4ZW50CitnZXR1dHhpZAorZ2V0dXR4bGluZQorZ2V0d2NoYXIKK2dldHdjCitnbG9iZnJlZQorZ2xvYgorZ210aW1lCitnbXRpbWVfcgorZ3JhbnRwdAoraGNyZWF0ZQoraGRlc3Ryb3kKK2hzZWFyY2gKK2h0b25sCitodG9ucworaHlwb3RmCitoeXBvdAoraHlwb3RsCitpY29udl9jbG9zZQoraWNvbnYKK2ljb252X29wZW4KK2lmX2ZyZWVuYW1laW5kZXgKK2lmX2luZGV4dG9uYW1lCitpZl9uYW1laW5kZXgKK2lmX25hbWV0b2luZGV4CitpbG9nYmYKK2lsb2diCitpbG9nYmwKK2ltYXhhYnMKK2ltYXhkaXYKK2luZXRfYWRkcgoraW5ldF9udG9hCitpbmV0X250b3AKK2luZXRfcHRvbgoraW5pdHN0YXRlCitpbnNxdWUKK2lvY3RsCitpc2FsbnVtCitpc2FsbnVtX2wKK2lzYWxwaGEKK2lzYWxwaGFfbAoraXNhc2NpaQoraXNhc3RyZWFtCitpc2F0dHkKK2lzYmxhbmsKK2lzYmxhbmtfbAoraXNjbnRybAoraXNjbnRybF9sCitpc2RpZ2l0Citpc2RpZ2l0X2wKK2lzZmluaXRlCitpc2dyYXBoCitpc2dyYXBoX2wKK2lzZ3JlYXRlcmVxdWFsCitpc2dyZWF0ZXIKK2lzaW5mCitpc2xlc3NlcXVhbAoraXNsZXNzZ3JlYXRlcgoraXNsZXNzCitpc2xvd2VyCitpc2xvd2VyX2wKK2lzbmFuCitpc25vcm1hbAoraXNwcmludAoraXNwcmludF9sCitpc3B1bmN0Citpc3B1bmN0X2wKK2lzc3BhY2UKK2lzc3BhY2VfbAoraXN1bm9yZGVyZWQKK2lzdXBwZXIKK2lzdXBwZXJfbAoraXN3YWxudW0KK2lzd2FsbnVtX2wKK2lzd2FscGhhCitpc3dhbHBoYV9sCitpc3dibGFuaworaXN3YmxhbmtfbAoraXN3Y250cmwKK2lzd2NudHJsX2wKK2lzd2N0eXBlCitpc3djdHlwZV9sCitpc3dkaWdpdAoraXN3ZGlnaXRfbAoraXN3Z3JhcGgKK2lzd2dyYXBoX2wKK2lzd2xvd2VyCitpc3dsb3dlcl9sCitpc3dwcmludAoraXN3cHJpbnRfbAoraXN3cHVuY3QKK2lzd3B1bmN0X2wKK2lzd3NwYWNlCitpc3dzcGFjZV9sCitpc3d1cHBlcgoraXN3dXBwZXJfbAoraXN3eGRpZ2l0Citpc3d4ZGlnaXRfbAoraXN4ZGlnaXQKK2lzeGRpZ2l0X2wKK2owCitqMQoram4KK2pyYW5kNDgKK2tpbGwKK2tpbGxwZworbDY0YQorbGFicworbGNob3duCitsY29uZzQ4CitsZGV4cGYKK2xkZXhwCitsZGV4cGwKK2xkaXYKK2xmaW5kCitsZ2FtbWFmCitsZ2FtbWEKK2xnYW1tYWwKK2xpbmthdAorbGluaworbGlvX2xpc3RpbworbGlzdGVuCitsbGFicworbGxkaXYKK2xscmludGYKK2xscmludAorbGxyaW50bAorbGxyb3VuZGYKK2xscm91bmQKK2xscm91bmRsCitsb2NhbGVjb252Citsb2NhbHRpbWUKK2xvY2FsdGltZV9yCitsb2NrZgorbG9nMTBmCitsb2cxMAorbG9nMTBsCitsb2cxcGYKK2xvZzFwCitsb2cxcGwKK2xvZzJmCitsb2cyCitsb2cybAorbG9nYmYKK2xvZ2IKK2xvZ2JsCitsb2dmCitsb2cKK2xvZ2wKK2xvbmdqbXAKK2xyYW5kNDgKK2xyaW50ZgorbHJpbnQKK2xyaW50bAorbHJvdW5kZgorbHJvdW5kCitscm91bmRsCitsc2VhcmNoCitsc2VlaworbHN0YXQKK21hbGxvYworbWJsZW4KK21icmxlbgorbWJydG93YworbWJzaW5pdAorbWJzbnJ0b3djcworbWJzcnRvd2NzCittYnN0b3djcworbWJ0b3djCittZW1jY3B5CittZW1jaHIKK21lbWNtcAorbWVtY3B5CittZW1tb3ZlCittZW1zZXQKK21rZGlyYXQKK21rZGlyCitta2R0ZW1wCitta2ZpZm9hdAorbWtmaWZvCitta25vZGF0Citta25vZAorbWtzdGVtcAorbWt0aW1lCittbG9ja2FsbAorbWxvY2sKK21tYXAKK21vZGZmCittb2RmCittb2RmbAorbXByb3RlY3QKK21xX2Nsb3NlCittcV9nZXRhdHRyCittcV9ub3RpZnkKK21xX29wZW4KK21xX3JlY2VpdmUKK21xX3NlbmQKK21xX3NldGF0dHIKK21xX3RpbWVkcmVjZWl2ZQorbXFfdGltZWRzZW5kCittcV91bmxpbmsKK21yYW5kNDgKK21zZ2N0bAorbXNnZ2V0Cittc2dyY3YKK21zZ3NuZAorbXN5bmMKK211bmxvY2thbGwKK211bmxvY2sKK211bm1hcAorbmFuZgorbmFuCituYW5sCituYW5vc2xlZXAKK25lYXJieWludGYKK25lYXJieWludAorbmVhcmJ5aW50bAorbmV3bG9jYWxlCituZXh0YWZ0ZXJmCituZXh0YWZ0ZXIKK25leHRhZnRlcmwKK25leHR0b3dhcmRmCituZXh0dG93YXJkCituZXh0dG93YXJkbAorbmZ0dworbmljZQorbmxfbGFuZ2luZm8KK25sX2xhbmdpbmZvX2wKK25yYW5kNDgKK250b2hsCitudG9ocworb3BlbmF0CitvcGVuZGlyCitvcGVuCitvcGVubG9nCitvcGVuX21lbXN0cmVhbQorb3Blbl93bWVtc3RyZWFtCitvcHRhcmcKK29wdGVycgorb3B0aW5kCitvcHRvcHQKK3BhdGhjb25mCitwYXVzZQorcGNsb3NlCitwZXJyb3IKK3BpcGUKK3BvbGwKK3BvcGVuCitwb3NpeF9mYWR2aXNlCitwb3NpeF9mYWxsb2NhdGUKK3Bvc2l4X21hZHZpc2UKK3Bvc2l4X21lbWFsaWduCitwb3NpeF9tZW1fb2Zmc2V0Citwb3NpeF9vcGVucHQKK3Bvc2l4X3NwYXduYXR0cl9kZXN0cm95Citwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MKK3Bvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAKK3Bvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtCitwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3kKK3Bvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0Citwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnbWFzaworcG9zaXhfc3Bhd25hdHRyX2luaXQKK3Bvc2l4X3NwYXduYXR0cl9zZXRmbGFncworcG9zaXhfc3Bhd25hdHRyX3NldHBncm91cAorcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0KK3Bvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeQorcG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQKK3Bvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrCitwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UKK3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyCitwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbgorcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kKK3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0Citwb3NpeF9zcGF3bgorcG9zaXhfc3Bhd25wCitwb3NpeF90cmFjZV9hdHRyX2Rlc3Ryb3kKK3Bvc2l4X3RyYWNlX2F0dHJfZ2V0Y2xvY2tyZXMKK3Bvc2l4X3RyYWNlX2F0dHJfZ2V0Y3JlYXRldGltZQorcG9zaXhfdHJhY2VfYXR0cl9nZXRnZW52ZXJzaW9uCitwb3NpeF90cmFjZV9hdHRyX2dldGluaGVyaXRlZAorcG9zaXhfdHJhY2VfYXR0cl9nZXRsb2dmdWxscG9saWN5Citwb3NpeF90cmFjZV9hdHRyX2dldGxvZ3NpemUKK3Bvc2l4X3RyYWNlX2F0dHJfZ2V0bWF4ZGF0YXNpemUKK3Bvc2l4X3RyYWNlX2F0dHJfZ2V0bWF4c3lzdGVtZXZlbnRzaXplCitwb3NpeF90cmFjZV9hdHRyX2dldG1heHVzZXJldmVudHNpemUKK3Bvc2l4X3RyYWNlX2F0dHJfZ2V0bmFtZQorcG9zaXhfdHJhY2VfYXR0cl9nZXRzdHJlYW1mdWxscG9saWN5Citwb3NpeF90cmFjZV9hdHRyX2dldHN0cmVhbXNpemUKK3Bvc2l4X3RyYWNlX2F0dHJfaW5pdAorcG9zaXhfdHJhY2VfYXR0cl9zZXRpbmhlcml0ZWQKK3Bvc2l4X3RyYWNlX2F0dHJfc2V0bG9nZnVsbHBvbGljeQorcG9zaXhfdHJhY2VfYXR0cl9zZXRsb2dzaXplCitwb3NpeF90cmFjZV9hdHRyX3NldG1heGRhdGFzaXplCitwb3NpeF90cmFjZV9hdHRyX3NldG5hbWUKK3Bvc2l4X3RyYWNlX2F0dHJfc2V0c3RyZWFtZnVsbHBvbGljeQorcG9zaXhfdHJhY2VfYXR0cl9zZXRzdHJlYW1zaXplCitwb3NpeF90cmFjZV9jbGVhcgorcG9zaXhfdHJhY2VfY2xvc2UKK3Bvc2l4X3RyYWNlX2NyZWF0ZQorcG9zaXhfdHJhY2VfY3JlYXRlX3dpdGhsb2cKK3Bvc2l4X3RyYWNlX2V2ZW50Citwb3NpeF90cmFjZV9ldmVudGlkX2VxdWFsCitwb3NpeF90cmFjZV9ldmVudGlkX2dldF9uYW1lCitwb3NpeF90cmFjZV9ldmVudGlkX29wZW4KK3Bvc2l4X3RyYWNlX2V2ZW50c2V0X2FkZAorcG9zaXhfdHJhY2VfZXZlbnRzZXRfZGVsCitwb3NpeF90cmFjZV9ldmVudHNldF9lbXB0eQorcG9zaXhfdHJhY2VfZXZlbnRzZXRfZmlsbAorcG9zaXhfdHJhY2VfZXZlbnRzZXRfaXNtZW1iZXIKK3Bvc2l4X3RyYWNlX2V2ZW50dHlwZWxpc3RfZ2V0bmV4dF9pZAorcG9zaXhfdHJhY2VfZXZlbnR0eXBlbGlzdF9yZXdpbmQKK3Bvc2l4X3RyYWNlX2ZsdXNoCitwb3NpeF90cmFjZV9nZXRfYXR0cgorcG9zaXhfdHJhY2VfZ2V0X2ZpbHRlcgorcG9zaXhfdHJhY2VfZ2V0bmV4dF9ldmVudAorcG9zaXhfdHJhY2VfZ2V0X3N0YXR1cworcG9zaXhfdHJhY2Vfb3BlbgorcG9zaXhfdHJhY2VfcmV3aW5kCitwb3NpeF90cmFjZV9zZXRfZmlsdGVyCitwb3NpeF90cmFjZV9zaHV0ZG93bgorcG9zaXhfdHJhY2Vfc3RhcnQKK3Bvc2l4X3RyYWNlX3N0b3AKK3Bvc2l4X3RyYWNlX3RpbWVkZ2V0bmV4dF9ldmVudAorcG9zaXhfdHJhY2VfdHJpZF9ldmVudGlkX29wZW4KK3Bvc2l4X3RyYWNlX3RyeWdldG5leHRfZXZlbnQKK3Bvc2l4X3R5cGVkX21lbV9nZXRfaW5mbworcG9zaXhfdHlwZWRfbWVtX29wZW4KK3Bvd2YKK3BvdworcG93bAorcHJlYWQKK3ByaW50ZgorcHNlbGVjdAorcHNpZ2luZm8KK3BzaWduYWwKK3B0aHJlYWRfYXRmb3JrCitwdGhyZWFkX2F0dHJfZGVzdHJveQorcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlCitwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplCitwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkCitwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbQorcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5CitwdGhyZWFkX2F0dHJfZ2V0c2NvcGUKK3B0aHJlYWRfYXR0cl9nZXRzdGFjaworcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZQorcHRocmVhZF9hdHRyX2luaXQKK3B0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZQorcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZQorcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZAorcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0KK3B0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeQorcHRocmVhZF9hdHRyX3NldHNjb3BlCitwdGhyZWFkX2F0dHJfc2V0c3RhY2sKK3B0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUKK3B0aHJlYWRfYmFycmllcmF0dHJfZGVzdHJveQorcHRocmVhZF9iYXJyaWVyYXR0cl9nZXRwc2hhcmVkCitwdGhyZWFkX2JhcnJpZXJhdHRyX2luaXQKK3B0aHJlYWRfYmFycmllcmF0dHJfc2V0cHNoYXJlZAorcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kKK3B0aHJlYWRfYmFycmllcl9pbml0CitwdGhyZWFkX2JhcnJpZXJfd2FpdAorcHRocmVhZF9jYW5jZWwKK3B0aHJlYWRfY2xlYW51cF9wb3AKK3B0aHJlYWRfY2xlYW51cF9wdXNoCitwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kKK3B0aHJlYWRfY29uZGF0dHJfZ2V0Y2xvY2sKK3B0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZAorcHRocmVhZF9jb25kYXR0cl9pbml0CitwdGhyZWFkX2NvbmRhdHRyX3NldGNsb2NrCitwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQKK3B0aHJlYWRfY29uZF9icm9hZGNhc3QKK3B0aHJlYWRfY29uZF9kZXN0cm95CitwdGhyZWFkX2NvbmRfaW5pdAorcHRocmVhZF9jb25kX3NpZ25hbAorcHRocmVhZF9jb25kX3RpbWVkd2FpdAorcHRocmVhZF9jb25kX3dhaXQKK3B0aHJlYWRfY3JlYXRlCitwdGhyZWFkX2RldGFjaAorcHRocmVhZF9lcXVhbAorcHRocmVhZF9leGl0CitwdGhyZWFkX2dldGNvbmN1cnJlbmN5CitwdGhyZWFkX2dldGNwdWNsb2NraWQKK3B0aHJlYWRfZ2V0c2NoZWRwYXJhbQorcHRocmVhZF9nZXRzcGVjaWZpYworcHRocmVhZF9qb2luCitwdGhyZWFkX2tleV9jcmVhdGUKK3B0aHJlYWRfa2V5X2RlbGV0ZQorcHRocmVhZF9raWxsCitwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95CitwdGhyZWFkX211dGV4YXR0cl9nZXRwcmlvY2VpbGluZworcHRocmVhZF9tdXRleGF0dHJfZ2V0cHJvdG9jb2wKK3B0aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQKK3B0aHJlYWRfbXV0ZXhhdHRyX2dldHJvYnVzdAorcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZQorcHRocmVhZF9tdXRleGF0dHJfaW5pdAorcHRocmVhZF9tdXRleGF0dHJfc2V0cHJpb2NlaWxpbmcKK3B0aHJlYWRfbXV0ZXhhdHRyX3NldHByb3RvY29sCitwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hhcmVkCitwdGhyZWFkX211dGV4YXR0cl9zZXRyb2J1c3QKK3B0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUKK3B0aHJlYWRfbXV0ZXhfY29uc2lzdGVudAorcHRocmVhZF9tdXRleF9kZXN0cm95CitwdGhyZWFkX211dGV4X2dldHByaW9jZWlsaW5nCitwdGhyZWFkX211dGV4X2luaXQKK3B0aHJlYWRfbXV0ZXhfbG9jaworcHRocmVhZF9tdXRleF9zZXRwcmlvY2VpbGluZworcHRocmVhZF9tdXRleF90aW1lZGxvY2sKK3B0aHJlYWRfbXV0ZXhfdHJ5bG9jaworcHRocmVhZF9tdXRleF91bmxvY2sKK3B0aHJlYWRfb25jZQorcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kKK3B0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkCitwdGhyZWFkX3J3bG9ja2F0dHJfaW5pdAorcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQKK3B0aHJlYWRfcndsb2NrX2Rlc3Ryb3kKK3B0aHJlYWRfcndsb2NrX2luaXQKK3B0aHJlYWRfcndsb2NrX3JkbG9jaworcHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2sKK3B0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrCitwdGhyZWFkX3J3bG9ja190cnlyZGxvY2sKK3B0aHJlYWRfcndsb2NrX3RyeXdybG9jaworcHRocmVhZF9yd2xvY2tfdW5sb2NrCitwdGhyZWFkX3J3bG9ja193cmxvY2sKK3B0aHJlYWRfc2VsZgorcHRocmVhZF9zZXRjYW5jZWxzdGF0ZQorcHRocmVhZF9zZXRjYW5jZWx0eXBlCitwdGhyZWFkX3NldGNvbmN1cnJlbmN5CitwdGhyZWFkX3NldHNjaGVkcGFyYW0KK3B0aHJlYWRfc2V0c2NoZWRwcmlvCitwdGhyZWFkX3NldHNwZWNpZmljCitwdGhyZWFkX3NpZ21hc2sKK3B0aHJlYWRfc3Bpbl9kZXN0cm95CitwdGhyZWFkX3NwaW5faW5pdAorcHRocmVhZF9zcGluX2xvY2sKK3B0aHJlYWRfc3Bpbl90cnlsb2NrCitwdGhyZWFkX3NwaW5fdW5sb2NrCitwdGhyZWFkX3Rlc3RjYW5jZWwKK3B0c25hbWUKK3B1dGNoYXIKK3B1dGNoYXJfdW5sb2NrZWQKK3B1dGMKK3B1dGNfdW5sb2NrZWQKK3B1dGVudgorcHV0bXNnCitwdXRwbXNnCitwdXRzCitwdXR1dHhsaW5lCitwdXR3Y2hhcgorcHV0d2MKK3B3cml0ZQorcXNvcnQKK3JhaXNlCityYW5kCityYW5kb20KK3JhbmRfcgorcmVhZGRpcgorcmVhZGRpcl9yCityZWFkCityZWFkbGlua2F0CityZWFkbGluaworcmVhZHYKK3JlYWxsb2MKK3JlYWxwYXRoCityZWN2ZnJvbQorcmVjdgorcmVjdm1zZworcmVnY29tcAorcmVnZXJyb3IKK3JlZ2V4ZWMKK3JlZ2ZyZWUKK3JlbWFpbmRlcmYKK3JlbWFpbmRlcgorcmVtYWluZGVybAorcmVtb3ZlCityZW1xdWUKK3JlbXF1b2YKK3JlbXF1bworcmVtcXVvbAorcmVuYW1lYXQKK3JlbmFtZQorcmV3aW5kZGlyCityZXdpbmQKK3JpbnRmCityaW50CityaW50bAorcm1kaXIKK3JvdW5kZgorcm91bmQKK3JvdW5kbAorc2NhbGJsbmYKK3NjYWxibG4KK3NjYWxibG5sCitzY2FsYm5mCitzY2FsYm4KK3NjYWxibmwKK3NjYW5kaXIKK3NjYW5mCitzY2hlZF9nZXRwYXJhbQorc2NoZWRfZ2V0X3ByaW9yaXR5X21heAorc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgorc2NoZWRfZ2V0c2NoZWR1bGVyCitzY2hlZF9ycl9nZXRfaW50ZXJ2YWwKK3NjaGVkX3NldHBhcmFtCitzY2hlZF9zZXRzY2hlZHVsZXIKK3NjaGVkX3lpZWxkCitzZWVkNDgKK3NlZWtkaXIKK3NlbGVjdAorc2VtX2Nsb3NlCitzZW1jdGwKK3NlbV9kZXN0cm95CitzZW1nZXQKK3NlbV9nZXR2YWx1ZQorc2VtX2luaXQKK3NlbV9vcGVuCitzZW1vcAorc2VtX3Bvc3QKK3NlbV90aW1lZHdhaXQKK3NlbV90cnl3YWl0CitzZW1fdW5saW5rCitzZW1fd2FpdAorc2VuZAorc2VuZG1zZworc2VuZHRvCitzZXRidWYKK3NldGVnaWQKK3NldGVudgorc2V0ZXVpZAorc2V0Z2lkCitzZXRncmVudAorc2V0aG9zdGVudAorc2V0aXRpbWVyCitzZXRqbXAKK3NldGtleQorc2V0bG9jYWxlCitzZXRsb2dtYXNrCitzZXRuZXRlbnQKK3NldHBnaWQKK3NldHBncnAKK3NldHByaW9yaXR5CitzZXRwcm90b2VudAorc2V0cHdlbnQKK3NldHJlZ2lkCitzZXRyZXVpZAorc2V0cmxpbWl0CitzZXRzZXJ2ZW50CitzZXRzaWQKK3NldHNvY2tvcHQKK3NldHN0YXRlCitzZXR1aWQKK3NldHV0eGVudAorc2V0dmJ1Zgorc2htYXQKK3NobWN0bAorc2htZHQKK3NobWdldAorc2htX29wZW4KK3NobV91bmxpbmsKK3NodXRkb3duCitzaWdhY3Rpb24KK3NpZ2FkZHNldAorc2lnYWx0c3RhY2sKK3NpZ2RlbHNldAorc2lnZW1wdHlzZXQKK3NpZ2ZpbGxzZXQKK3NpZ2hvbGQKK3NpZ2lnbm9yZQorc2lnaW50ZXJydXB0CitzaWdpc21lbWJlcgorc2lnbG9uZ2ptcAorc2lnbmFsCitzaWduYml0CitzaWduZ2FtCitzaWdwYXVzZQorc2lncGVuZGluZworc2lncHJvY21hc2sKK3NpZ3F1ZXVlCitzaWdyZWxzZQorc2lnc2V0CitzaWdzZXRqbXAKK3NpZ3N1c3BlbmQKK3NpZ3RpbWVkd2FpdAorc2lnd2FpdAorc2lnd2FpdGluZm8KK3NpbmYKK3NpbmhmCitzaW5oCitzaW5obAorc2luCitzaW5sCitzbGVlcAorc25wcmludGYKK3NvY2thdG1hcmsKK3NvY2tldAorc29ja2V0cGFpcgorc3ByaW50Zgorc3FydGYKK3NxcnQKK3NxcnRsCitzcmFuZDQ4CitzcmFuZAorc3JhbmRvbQorc3NjYW5mCitzdGF0CitzdGF0dmZzCitzdGRlcnIKK3N0ZGluCitzdGRvdXQKK3N0cGNweQorc3RwbmNweQorc3RyY2FzZWNtcAorc3RyY2FzZWNtcF9sCitzdHJjYXQKK3N0cmNocgorc3RyY21wCitzdHJjb2xsCitzdHJjb2xsX2wKK3N0cmNweQorc3RyY3Nwbgorc3RyZHVwCitzdHJlcnJvcgorc3RyZXJyb3JfbAorc3RyZXJyb3Jfcgorc3RyZm1vbgorc3RyZm1vbl9sCitzdHJmdGltZQorc3RyZnRpbWVfbAorc3RybGVuCitzdHJuY2FzZWNtcAorc3RybmNhc2VjbXBfbAorc3RybmNhdAorc3RybmNtcAorc3RybmNweQorc3RybmR1cAorc3Rybmxlbgorc3RycGJyaworc3RycHRpbWUKK3N0cnJjaHIKK3N0cnNpZ25hbAorc3Ryc3BuCitzdHJzdHIKK3N0cnRvZAorc3RydG9mCitzdHJ0b2ltYXgKK3N0cnRvaworc3RydG9rX3IKK3N0cnRvbGQKK3N0cnRvbAorc3RydG9sbAorc3RydG91bAorc3RydG91bGwKK3N0cnRvdW1heAorc3RyeGZybQorc3RyeGZybV9sCitzd2FiCitzd3ByaW50Zgorc3dzY2FuZgorc3ltbGlua2F0CitzeW1saW5rCitzeW5jCitzeXNjb25mCitzeXNsb2cKK3N5c3RlbQordGFuZgordGFuaGYKK3RhbmgKK3RhbmhsCit0YW4KK3RhbmwKK3RjZHJhaW4KK3RjZmxvdwordGNmbHVzaAordGNnZXRhdHRyCit0Y2dldHBncnAKK3RjZ2V0c2lkCit0Y3NlbmRicmVhawordGNzZXRhdHRyCit0Y3NldHBncnAKK3RkZWxldGUKK3RlbGxkaXIKK3RlbXBuYW0KK3RmaW5kCit0Z2FtbWFmCit0Z2FtbWEKK3RnYW1tYWwKK3RpbWUKK3RpbWVyX2NyZWF0ZQordGltZXJfZGVsZXRlCit0aW1lcl9nZXRvdmVycnVuCit0aW1lcl9nZXR0aW1lCit0aW1lcl9zZXR0aW1lCit0aW1lcwordGltZXpvbmUKK3RtcGZpbGUKK3RtcG5hbQordG9hc2NpaQordG9sb3dlcgordG9sb3dlcl9sCit0b3VwcGVyCit0b3VwcGVyX2wKK3Rvd2N0cmFucwordG93Y3RyYW5zX2wKK3Rvd2xvd2VyCit0b3dsb3dlcl9sCit0b3d1cHBlcgordG93dXBwZXJfbAordHJ1bmNhdGUKK3RydW5jZgordHJ1bmMKK3RydW5jbAordHNlYXJjaAordHR5bmFtZQordHR5bmFtZV9yCit0d2FsawordHpuYW1lCit0enNldAordWxpbWl0Cit1bWFzawordW5hbWUKK3VuZ2V0YwordW5nZXR3YwordW5saW5rYXQKK3VubGluawordW5sb2NrcHQKK3Vuc2V0ZW52Cit1c2Vsb2NhbGUKK3V0aW1lCit1dGltZW5zYXQKK3V0aW1lcwordmFfYXJnCit2YV9jb3B5Cit2YV9lbmQKK3ZhX3N0YXJ0Cit2ZHByaW50ZgordmZwcmludGYKK3Zmc2NhbmYKK3Zmd3ByaW50ZgordmZ3c2NhbmYKK3ZwcmludGYKK3ZzY2FuZgordnNucHJpbnRmCit2c3ByaW50ZgordnNzY2FuZgordnN3cHJpbnRmCit2c3dzY2FuZgordndwcmludGYKK3Z3c2NhbmYKK3dhaXQKK3dhaXRpZAord2FpdHBpZAord2NwY3B5Cit3Y3BuY3B5Cit3Y3J0b21iCit3Y3NjYXNlY21wCit3Y3NjYXNlY21wX2wKK3djc2NhdAord2NzY2hyCit3Y3NjbXAKK3djc2NvbGwKK3djc2NvbGxfbAord2NzY3B5Cit3Y3Njc3BuCit3Y3NkdXAKK3djc2Z0aW1lCit3Y3NsZW4KK3djc25jYXNlY21wCit3Y3NuY2FzZWNtcF9sCit3Y3NuY2F0Cit3Y3NuY21wCit3Y3NuY3B5Cit3Y3NubGVuCit3Y3NucnRvbWJzCit3Y3NwYnJrCit3Y3NyY2hyCit3Y3NydG9tYnMKK3djc3Nwbgord2Nzc3RyCit3Y3N0b2QKK3djc3RvZgord2NzdG9pbWF4Cit3Y3N0b2sKK3djc3RvbGQKK3djc3RvbAord2NzdG9sbAord2NzdG9tYnMKK3djc3RvdWwKK3djc3RvdWxsCit3Y3N0b3VtYXgKK3djc3dpZHRoCit3Y3N4ZnJtCit3Y3N4ZnJtX2wKK3djdG9iCit3Y3RvbWIKK3djdHJhbnMKK3djdHJhbnNfbAord2N0eXBlCit3Y3R5cGVfbAord2N3aWR0aAord21lbWNocgord21lbWNtcAord21lbWNweQord21lbW1vdmUKK3dtZW1zZXQKK3dvcmRleHAKK3dvcmRmcmVlCit3cHJpbnRmCit3cml0ZQord3JpdGV2Cit3c2NhbmYKK3kwCit5MQoreW4KZGlmZiAtLWdpdCBhL2xpYmMvdHpjb2RlL2FzY3RpbWUuYyBiL2xpYmMvdHpjb2RlL2FzY3RpbWUuYwppbmRleCAxNTJiMGRiLi5mZWEyNGU0IDEwMDY0NAotLS0gYS9saWJjL3R6Y29kZS9hc2N0aW1lLmMKKysrIGIvbGliYy90emNvZGUvYXNjdGltZS5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkvKgogCSoqIFdlIGF2b2lkIHVzaW5nIHNucHJpbnRmIHNpbmNlIGl0J3Mgbm90IGF2YWlsYWJsZSBvbiBhbGwgc3lzdGVtcy4KIAkqLwotCSh2b2lkKSBzcHJpbnRmKHJlc3VsdCwKKwkodm9pZCkgc25wcmludGYocmVzdWx0LCBzaXplb2YocmVzdWx0KSwgLyogQW5kcm9pZCBjaGFuZ2U6IHVzZSBzbnByaW50Zi4gKi8KIAkJKChzdHJsZW4oeWVhcikgPD0gNCkgPyBBU0NUSU1FX0ZNVCA6IEFTQ1RJTUVfRk1UX0IpLAogCQl3biwgbW4sCiAJCXRpbWVwdHItPnRtX21kYXksIHRpbWVwdHItPnRtX2hvdXIsCmRpZmYgLS1naXQgYS9saWJjL3R6Y29kZS9sb2NhbHRpbWUuYyBiL2xpYmMvdHpjb2RlL2xvY2FsdGltZS5jCmluZGV4IDI4ZDEzZjQuLjI5ZjYwNWMgMTAwNjQ0Ci0tLSBhL2xpYmMvdHpjb2RlL2xvY2FsdGltZS5jCisrKyBiL2xpYmMvdHpjb2RlL2xvY2FsdGltZS5jCkBAIC0xMjU3LDYgKzEyNTcsNyBAQAogICAgICAgICBsY2xwdHItPnR0aXNbMF0udHRfZ210b2ZmID0gMDsKICAgICAgICAgbGNscHRyLT50dGlzWzBdLnR0X2FiYnJpbmQgPSAwOwogICAgICAgICAodm9pZCkgc3RyY3B5KGxjbHB0ci0+Y2hhcnMsIGdtdCk7CisgICAgICAgIGxjbHB0ci0+ZGVmYXVsdHR5cGUgPSAwOwogICAgIH0gZWxzZSBpZiAodHpsb2FkKG5hbWUsIGxjbHB0ciwgVFJVRSkgIT0gMCkKICAgICAgICAgaWYgKG5hbWVbMF0gPT0gJzonIHx8IHR6cGFyc2UobmFtZSwgbGNscHRyLCBGQUxTRSkgIT0gMCkKICAgICAgICAgICAgICh2b2lkKSBnbXRsb2FkKGxjbHB0cik7CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvYW5kcm9pZC9pbmNsdWRlL2ZyZWVic2QtY29tcGF0LmggYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvYW5kcm9pZC9pbmNsdWRlL2ZyZWVic2QtY29tcGF0LmgKaW5kZXggZDVmMTQyNS4uN2FjZGY3YyAxMDA2NDQKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZS9mcmVlYnNkLWNvbXBhdC5oCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9hbmRyb2lkL2luY2x1ZGUvZnJlZWJzZC1jb21wYXQuaApAQCAtMTcsNyArMTcsNyBAQAogI2lmbmRlZiBfQklPTklDX0ZSRUVCU0RfQ09NUEFUX0hfaW5jbHVkZWQKICNkZWZpbmUgX0JJT05JQ19GUkVFQlNEX0NPTVBBVF9IX2luY2x1ZGVkCiAKLSNkZWZpbmUgX19VU0VfQlNECisjZGVmaW5lIF9CU0RfU09VUkNFCiAjZGVmaW5lIFJFUExBQ0VfR0VUT1BUCiAKIC8qCkBAIC0zOCwxNyArMzgsNiBAQAogI2RlZmluZSBfX3VzbGVlcCB1c2xlZXAKIAogLyogUmVkaXJlY3QgaW50ZXJuYWwgQyBsaWJyYXJ5IGNhbGxzIHRvIHRoZSBwdWJsaWMgZnVuY3Rpb24uICovCi0jZGVmaW5lIF9jbG9zZSBjbG9zZQotI2RlZmluZSBfZmNudGwgZmNudGwKLSNkZWZpbmUgX2ZzdGF0IGZzdGF0CiAjZGVmaW5lIF9uYW5vc2xlZXAgbmFub3NsZWVwCi0jZGVmaW5lIF9vcGVuIG9wZW4KLQotLyogVGhpcyBvbmUgaXMgb25seSBuZWVkZWQgYXMgbG9uZyBhcyB3ZSBoYXZlIGEgbWl4IG9mIE9wZW5CU0QgYW5kIEZyZWVCU0Qgc3RkaW8uICovCi0jZGVmaW5lIF9zc2VlayBfX3NzZWVrCi0KLS8qIFRoaXMgaXMgaW4gQlNEJ3MgPHN0ZGxpYi5oPi4gKi8KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLWV4dGVybiB1aW50MzJfdCBhcmM0cmFuZG9tX3VuaWZvcm0odWludDMyX3QgdXBwZXJfYm91bmQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9hbmRyb2lkL2luY2x1ZGUvbGliY19wcml2YXRlLmggYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvYW5kcm9pZC9pbmNsdWRlL2xpYmNfcHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmE2NDMzLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9hbmRyb2lkL2luY2x1ZGUvbGliY19wcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBfQklPTklDX0ZSRUVCU0RfTElCQ19QUklWQVRFX0hfaW5jbHVkZWQKLSNkZWZpbmUgX0JJT05JQ19GUkVFQlNEX0xJQkNfUFJJVkFURV9IX2luY2x1ZGVkCi0KLSNkZWZpbmUgU1RESU9fVEhSRUFEX0xPQ0soKSAgIC8qIFRPRE86IHVudGlsIHdlIGhhdmUgdGhlIEZyZWVCU0QgZmluZGZwLmMsIHRoaXMgaXMgdXNlbGVzcy4gKi8KLSNkZWZpbmUgU1RESU9fVEhSRUFEX1VOTE9DSygpIC8qIFRPRE86IHVudGlsIHdlIGhhdmUgdGhlIEZyZWVCU0QgZmluZGZwLmMsIHRoaXMgaXMgdXNlbGVzcy4gKi8KLQotI2RlZmluZSBPUklFTlQoZnAsIG8pIC8qIE9ubHkgbmVlZGVkIGZvciB3aWRlLWNoYXJhY3RlciBzdHJlYW0gc3VwcG9ydC4gKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL2dldG9wdF9sb25nLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL2dldG9wdF9sb25nLmMKaW5kZXggOWY3ZjZkNS4uOTUzNGEyYSAxMDA2NDQKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGxpYi9nZXRvcHRfbG9uZy5jCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvZ2V0b3B0X2xvbmcuYwpAQCAtMSw0ICsxLDQgQEAKLS8qCSRPcGVuQlNEOiBnZXRvcHRfbG9uZy5jLHYgMS4yMiAyMDA2LzEwLzA0IDIxOjI5OjA0IGptYyBFeHAgJAkqLworLyoJJE9wZW5CU0Q6IGdldG9wdF9sb25nLmMsdiAxLjI2IDIwMTMvMDYvMDggMjI6NDc6NTYgbWlsbGVydCBFeHAgJAkqLwogLyoJJE5ldEJTRDogZ2V0b3B0X2xvbmcuYyx2IDEuMTUgMjAwMi8wMS8zMSAyMjo0Mzo0MCB0diBFeHAgJAkqLwogCiAvKgpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJCWlmIChzaG9ydF90b28gJiYgY3VycmVudF9hcmd2X2xlbiA9PSAxKQogCQkJY29udGludWU7CiAKLQkJaWYgKG1hdGNoID09IC0xKSAgICAgICAgLyogZmlyc3QgcGFydGlhbCBtYXRjaCAqLworCQlpZiAobWF0Y2ggPT0gLTEpCS8qIGZpcnN0IHBhcnRpYWwgbWF0Y2ggKi8KIAkJCW1hdGNoID0gaTsKIAkJZWxzZSBpZiAoKGZsYWdzICYgRkxBR19MT05HT05MWSkgfHwKIAkJCSBsb25nX29wdGlvbnNbaV0uaGFzX2FyZyAhPQpAQCAtMzU5LDM3ICszNTksMzEgQEAKIHsKIAljaGFyICpvbGk7CQkJCS8qIG9wdGlvbiBsZXR0ZXIgbGlzdCBpbmRleCAqLwogCWludCBvcHRjaGFyLCBzaG9ydF90b287Ci0JaW50IHBvc2l4bHlfY29ycmVjdDsJLyogbm8gc3RhdGljLCBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgZmx5ICovCisJc3RhdGljIGludCBwb3NpeGx5X2NvcnJlY3QgPSAtMTsKIAogCWlmIChvcHRpb25zID09IE5VTEwpCiAJCXJldHVybiAoLTEpOwogCiAJLyoKLQkgKiBEaXNhYmxlIEdOVSBleHRlbnNpb25zIGlmIFBPU0lYTFlfQ09SUkVDVCBpcyBzZXQgb3Igb3B0aW9ucwotCSAqIHN0cmluZyBiZWdpbnMgd2l0aCBhICcrJy4KLQkgKi8KLQlwb3NpeGx5X2NvcnJlY3QgPSAoZ2V0ZW52KCJQT1NJWExZX0NPUlJFQ1QiKSAhPSBOVUxMKTsKLSNpZmRlZiBHTlVfQ09NUEFUSUJMRQotCWlmICgqb3B0aW9ucyA9PSAnLScpCi0JCWZsYWdzIHw9IEZMQUdfQUxMQVJHUzsKLQllbHNlIGlmIChwb3NpeGx5X2NvcnJlY3QgfHwgKm9wdGlvbnMgPT0gJysnKQotCQlmbGFncyAmPSB+RkxBR19QRVJNVVRFOwotI2Vsc2UKLQlpZiAocG9zaXhseV9jb3JyZWN0IHx8ICpvcHRpb25zID09ICcrJykKLQkJZmxhZ3MgJj0gfkZMQUdfUEVSTVVURTsKLQllbHNlIGlmICgqb3B0aW9ucyA9PSAnLScpCi0JCWZsYWdzIHw9IEZMQUdfQUxMQVJHUzsKLSNlbmRpZgotCWlmICgqb3B0aW9ucyA9PSAnKycgfHwgKm9wdGlvbnMgPT0gJy0nKQotCQlvcHRpb25zKys7Ci0KLQkvKgogCSAqIFhYWCBTb21lIEdOVSBwcm9ncmFtcyAobGlrZSBjdnMpIHNldCBvcHRpbmQgdG8gMCBpbnN0ZWFkIG9mCiAJICogWFhYIHVzaW5nIG9wdHJlc2V0LiAgV29yayBhcm91bmQgdGhpcyBicmFpbmRhbWFnZS4KIAkgKi8KIAlpZiAob3B0aW5kID09IDApCiAJCW9wdGluZCA9IG9wdHJlc2V0ID0gMTsKIAorCS8qCisJICogRGlzYWJsZSBHTlUgZXh0ZW5zaW9ucyBpZiBQT1NJWExZX0NPUlJFQ1QgaXMgc2V0IG9yIG9wdGlvbnMKKwkgKiBzdHJpbmcgYmVnaW5zIHdpdGggYSAnKycuCisJICovCisJaWYgKHBvc2l4bHlfY29ycmVjdCA9PSAtMSB8fCBvcHRyZXNldCkKKwkJcG9zaXhseV9jb3JyZWN0ID0gKGdldGVudigiUE9TSVhMWV9DT1JSRUNUIikgIT0gTlVMTCk7CisJaWYgKCpvcHRpb25zID09ICctJykKKwkJZmxhZ3MgfD0gRkxBR19BTExBUkdTOworCWVsc2UgaWYgKHBvc2l4bHlfY29ycmVjdCB8fCAqb3B0aW9ucyA9PSAnKycpCisJCWZsYWdzICY9IH5GTEFHX1BFUk1VVEU7CisJaWYgKCpvcHRpb25zID09ICcrJyB8fCAqb3B0aW9ucyA9PSAnLScpCisJCW9wdGlvbnMrKzsKKwogCW9wdGFyZyA9IE5VTEw7CiAJaWYgKG9wdHJlc2V0KQogCQlub25vcHRfc3RhcnQgPSBub25vcHRfZW5kID0gLTE7CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL3JlYWxwYXRoLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL3JlYWxwYXRoLmMKaW5kZXggOGZkNTQ1Ny4uYzRiZDk1MyAxMDA2NDQKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGxpYi9yZWFscGF0aC5jCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvcmVhbHBhdGguYwpAQCAtMTMyLDI2ICsxMzIsNyBAQAogCQkJcmVzb2x2ZWRbcmVzb2x2ZWRfbGVuXSA9ICdcMCc7CiAJCX0KIAkJaWYgKG5leHRfdG9rZW5bMF0gPT0gJ1wwJykgewotCQkJLyoKLQkJCSAqIEhhbmRsZSBjb25zZXF1ZW50aWFsIHNsYXNoZXMuICBUaGUgcGF0aAotCQkJICogYmVmb3JlIHNsYXNoIHNoYWxsIHBvaW50IHRvIGEgZGlyZWN0b3J5LgotCQkJICoKLQkJCSAqIE9ubHkgdGhlIHRyYWlsaW5nIHNsYXNoZXMgYXJlIG5vdCBjb3ZlcmVkCi0JCQkgKiBieSBvdGhlciBjaGVja3MgaW4gdGhlIGxvb3AsIGJ1dCB3ZSB2ZXJpZnkKLQkJCSAqIHRoZSBwcmVmaXggZm9yIGFueSAocmFyZSkgIi8vIiBvciAiL1wwIgotCQkJICogb2NjdXJlbmNlIHRvIG5vdCBpbXBsZW1lbnQgbG9va2FoZWFkLgotCQkJICovCi0JCQlpZiAobHN0YXQocmVzb2x2ZWQsICZzYikgIT0gMCkgewotCQkJCWlmIChtKQotCQkJCQlmcmVlKHJlc29sdmVkKTsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJaWYgKCFTX0lTRElSKHNiLnN0X21vZGUpKSB7Ci0JCQkJaWYgKG0pCi0JCQkJCWZyZWUocmVzb2x2ZWQpOwotCQkJCWVycm5vID0gRU5PVERJUjsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQorCQkJLyogSGFuZGxlIGNvbnNlcXVlbnRpYWwgc2xhc2hlcy4gKi8KIAkJCWNvbnRpbnVlOwogCQl9CiAJCWVsc2UgaWYgKHN0cmNtcChuZXh0X3Rva2VuLCAiLiIpID09IDApCkBAIC0yMzYsNiArMjE3LDExIEBACiAJCQkJfQogCQkJfQogCQkJbGVmdF9sZW4gPSBzdHJsY3B5KGxlZnQsIHN5bWxpbmssIHNpemVvZihsZWZ0KSk7CisJCX0gZWxzZSBpZiAoIVNfSVNESVIoc2Iuc3RfbW9kZSkgJiYgcCAhPSBOVUxMKSB7CisJCQlpZiAobSkKKwkJCQlmcmVlKHJlc29sdmVkKTsKKwkJCWVycm5vID0gRU5PVERJUjsKKwkJCXJldHVybiAoTlVMTCk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9uYW1lc3BhY2UuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9uYW1lc3BhY2UuaAppbmRleCA1ZGY1NDNjLi42MzBlYTliIDEwMDY0NAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvbmFtZXNwYWNlLmgKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL25hbWVzcGFjZS5oCkBAIC0xNywxMSArMTcsNiBAQAogI2lmbmRlZiBfQklPTklDX05FVEJTRF9OQU1FU1BBQ0VfSF9pbmNsdWRlZAogI2RlZmluZSBfQklPTklDX05FVEJTRF9OQU1FU1BBQ0VfSF9pbmNsdWRlZAogCi0vLyBOZXRCU0QgdXNlcyBfX3dlYWtfYWxpYXMgb24gYSBsb3Qgb2YgZnVuY3Rpb25zLiBXZSBkb24ndCB3YW50IHRoYXQuCi0jaWYgZGVmaW5lZChfX3dlYWtfYWxpYXMpCi0jdW5kZWYgX193ZWFrX2FsaWFzCi0jZW5kaWYKLQogX19MSUJDX0hJRERFTl9fIGludCBfX3Jlc19lbmFibGVfbXQodm9pZCk7CiBfX0xJQkNfSElEREVOX18gaW50IF9fcmVzX2Rpc2FibGVfbXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9uZXRic2QtY29tcGF0LmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvbmV0YnNkLWNvbXBhdC5oCmluZGV4IDg0YmU5MzEuLjA0YmM3MjggMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9uZXRic2QtY29tcGF0LmgKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL25ldGJzZC1jb21wYXQuaApAQCAtMTcsNiArMTcsOSBAQAogI2lmbmRlZiBfQklPTklDX05FVEJTRF9DT01QQVRfSF9pbmNsdWRlZAogI2RlZmluZSBfQklPTklDX05FVEJTRF9DT01QQVRfSF9pbmNsdWRlZAogCisjZGVmaW5lIF9CU0RfU09VUkNFCisjZGVmaW5lIF9HTlVfU09VUkNFCisKIC8vIE5ldEJTRCB1c2VzIF9ESUFHQVNTRVJUIHRvIG51bGwtY2hlY2sgYXJndW1lbnRzIGFuZCB0aGUgbGlrZS4KICNpbmNsdWRlIDxhc3NlcnQuaD4KICNkZWZpbmUgX0RJQUdBU1NFUlQoZSkgKChlKSA/ICh2b2lkKSAwIDogX19hc3NlcnQyKF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sICNlKSkKQEAgLTI0LDkgKzI3LDYgQEAKIC8vIFRPRE86IHVwZGF0ZSBvdXIgPHN5cy9jZGVmcy5oPiB0byBzdXBwb3J0IHRoaXMgcHJvcGVybHkuCiAjZGVmaW5lIF9fdHlwZV9maXQodCwgYSkgKDAgPT0gMCkKIAotI2RlZmluZSBfR05VX1NPVVJDRQotI2RlZmluZSBfX1VTRV9CU0QKLQogLy8gVE9ETzogd2UgZG9uJ3QgeWV0IGhhdmUgdGhyZWFkLXNhZmUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgogI2RlZmluZSBfX3JlYWRsb2NrZW52KCkgMAogI2RlZmluZSBfX3VubG9ja2VudigpIDAKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9sY29uZzQ4LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvbGNvbmc0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyY2U5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvbGNvbmc0OC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCSROZXRCU0Q6IGxjb25nNDguYyx2IDEuOCAyMDA1LzA2LzEyIDA1OjIxOjI4IGx1a2VtIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiBsY29uZzQ4LmMsdiAxLjggMjAwNS8wNi8xMiAwNToyMToyOCBsdWtlbSBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICJyYW5kNDguaCIKKworI2lmZGVmIF9fd2Vha19hbGlhcworX193ZWFrX2FsaWFzKGxjb25nNDgsX2xjb25nNDgpCisjZW5kaWYKKwordm9pZAorbGNvbmc0OCh1bnNpZ25lZCBzaG9ydCBwWzddKQoreworCV9ESUFHQVNTRVJUKHAgIT0gTlVMTCk7CisKKwlfX3JhbmQ0OF9zZWVkWzBdID0gcFswXTsKKwlfX3JhbmQ0OF9zZWVkWzFdID0gcFsxXTsKKwlfX3JhbmQ0OF9zZWVkWzJdID0gcFsyXTsKKwlfX3JhbmQ0OF9tdWx0WzBdID0gcFszXTsKKwlfX3JhbmQ0OF9tdWx0WzFdID0gcFs0XTsKKwlfX3JhbmQ0OF9tdWx0WzJdID0gcFs1XTsKKwlfX3JhbmQ0OF9hZGQgPSBwWzZdOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvaW5jbHVkZS9vcGVuYnNkLWNvbXBhdC5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvaW5jbHVkZS9vcGVuYnNkLWNvbXBhdC5oCmluZGV4IDM0YWQyYzUuLjgzODZiYTUgMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9hbmRyb2lkL2luY2x1ZGUvb3BlbmJzZC1jb21wYXQuaAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvYW5kcm9pZC9pbmNsdWRlL29wZW5ic2QtY29tcGF0LmgKQEAgLTE3LDEwICsxNywyMyBAQAogI2lmbmRlZiBfQklPTklDX09QRU5CU0RfQ09NUEFUX0hfaW5jbHVkZWQKICNkZWZpbmUgX0JJT05JQ19PUEVOQlNEX0NPTVBBVF9IX2luY2x1ZGVkCiAKKyNkZWZpbmUgX0JTRF9TT1VSQ0UKKwogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPiAvLyBGb3Igc2l6ZV90LgogCi0jZGVmaW5lIF9fVVNFX0JTRAorLyogUmVkaXJlY3QgaW50ZXJuYWwgQyBsaWJyYXJ5IGNhbGxzIHRvIHRoZSBwdWJsaWMgZnVuY3Rpb24uICovCisjZGVmaW5lIF9lcnIgZXJyCisjZGVmaW5lIF9lcnJ4IGVycngKKyNkZWZpbmUgX3ZlcnIgdmVycgorI2RlZmluZSBfdmVycnggdmVycngKKyNkZWZpbmUgX3Z3YXJuIHZ3YXJuCisjZGVmaW5lIF92d2Fybnggdndhcm54CisjZGVmaW5lIF93YXJuIHdhcm4KKyNkZWZpbmUgX3dhcm54IHdhcm54CisKKy8qIElnbm9yZSBhbGwgX193ZWFrX2FsaWFzIGluIE9wZW5CU0QuICovCisjZGVmaW5lIF9fd2Vha19hbGlhcyhhbGlhcyxzeW0pCiAKIC8qIE9wZW5CU0QncyA8Y3R5cGUuaD4gdXNlcyB0aGVzZSBuYW1lcywgd2hpY2ggY29uZmxpY3RlZCB3aXRoIHN0bHBvcnQuCiAgKiBBZGRpdGlvbmFsbHksIHdlIGNoYW5nZWQgdGhlIG51bWVyaWMvZGlnaXQgdHlwZSBmcm9tIE4gdG8gRCBmb3IgbGliY3h4LgpAQCAtMzksOSArNTIsMTYgQEAKIAogI2RlZmluZSBleHBsaWNpdF9iemVybyhwLCBzKSBtZW1zZXQocCwgMCwgcykKIAorLyogT3BlbkJTRCBoYXMgdGhlc2UgaW4gPHN5cy9wYXJhbS5oPiwgYnV0ICJBTElHTiIgaXNuJ3Qgc29tZXRoaW5nIHdlIHdhbnQgdG8gcmVzZXJ2ZS4gKi8KKyNkZWZpbmUgQUxJR05CWVRFUyAoc2l6ZW9mKHVpbnRwdHJfdCkgLSAxKQorI2RlZmluZSBBTElHTihwKSAoKCh1aW50cHRyX3QpKHApICsgQUxJR05CWVRFUykgJn4gQUxJR05CWVRFUykKKwogLyogV2UgaGF2ZSBPcGVuQlNEJ3MgZ2V0ZW50cm9weV9saW51eC5jLCBidXQgd2UgZG9uJ3QgbWVudGlvbiBnZXRlbnRyb3B5IGluIGFueSBoZWFkZXIuICovCiBfX0xJQkNfSElEREVOX18gZXh0ZXJuIGludCBnZXRlbnRyb3B5KHZvaWQqLCBzaXplX3QpOwogCisvKiBPcGVuQlNEIGhhcyB0aGlzIGFzIEFQSSwgYnV0IHdlIGp1c3QgdXNlIGl0IGludGVybmFsbHkuICovCitfX0xJQkNfSElEREVOX18gdm9pZCogcmVhbGxvY2FycmF5KHZvaWQqLCBzaXplX3QsIHNpemVfdCk7CisKIC8qIExQMzIgTkRLIGN0eXBlLmggY29udGFpbmVkIHJlZmVyZW5jZXMgdG8gdGhlc2UuICovCiBfX0xJQkM2NF9ISURERU5fXyBleHRlcm4gY29uc3Qgc2hvcnQqIF90b2xvd2VyX3RhYl87CiBfX0xJQkM2NF9ISURERU5fXyBleHRlcm4gY29uc3Qgc2hvcnQqIF90b3VwcGVyX3RhYl87CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy91bmlzdGQva2lsbHBnLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvY29tcGF0LTQzL2tpbGxwZy5jCnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2NvbXBhdC00My9raWxscGcuYwppbmRleCBjZWFjM2Y0Li43NWIxYWQ5IDEwMDY0NAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy91bmlzdGQva2lsbHBnLmMKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2NvbXBhdC00My9raWxscGcuYwpAQCAtMSw4ICsxLDYgQEAKLS8qCSROZXRCU0Q6IGtpbGxwZy5jLHYgMS44IDIwMDMvMDgvMDcgMTY6NDI6MzkgYWdjIEV4cCAkCSovCi0KIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTg5IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxNSArMjcsNiBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylraWxscGcuYwk4LjEgKEJlcmtlbGV5KSA2LzIvOTMiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IGtpbGxwZy5jLHYgMS44IDIwMDMvMDgvMDcgMTY6NDI6MzkgYWdjIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxlcnJuby5oPgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2xkdG9hLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvbGR0b2EuYwppbmRleCA3OTNkNzFjLi4xNmY2ZjljIDEwMDY0NAotLS0gYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvbGR0b2EuYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvbGR0b2EuYwpAQCAtMSw0ICsxLDQgQEAKLS8qCSRPcGVuQlNEOiBsZHRvYS5jLHYgMS4xIDIwMDgvMDkvMDcgMjA6MzY6MDggbWFydHluYXMgRXhwICQJKi8KKy8qCSRPcGVuQlNEOiBsZHRvYS5jLHYgMS4yIDIwMTQvMDgvMTAgMDI6MTU6MTggZ3VlbnRoZXIgRXhwICQJKi8KIC8qLQogICogQ29weXJpZ2h0IChjKSAyMDAzIERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8bWFjaGluZS9pZWVlLmg+CiAjZW5kaWYgLyogIV9fdmF4X18gKi8KICNpbmNsdWRlIDxmbG9hdC5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9kYWVtb24uYwpzaW1pbGFyaXR5IGluZGV4IDczJQpjb3B5IGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jCmNvcHkgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9kYWVtb24uYwppbmRleCBjZWFjM2Y0Li43OWY0MjY0IDEwMDY0NAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy91bmlzdGQva2lsbHBnLmMKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9kYWVtb24uYwpAQCAtMSw3ICsxLDYgQEAKLS8qCSROZXRCU0Q6IGtpbGxwZy5jLHYgMS44IDIwMDMvMDgvMDcgMTY6NDI6MzkgYWdjIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKKy8qCSRPcGVuQlNEOiBkYWVtb24uYyx2IDEuNyAyMDEwLzA3LzI3IDIyOjI5OjA5IG1hcmNvIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwogICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yOSwyOCArMjgsMzcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLSNpZiAwCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpa2lsbHBnLmMJOC4xIChCZXJrZWxleSkgNi8yLzkzIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBraWxscGcuYyx2IDEuOCAyMDAzLzA4LzA3IDE2OjQyOjM5IGFnYyBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8cGF0aHMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KIAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLS8qCi0gKiBCYWNrd2FyZHMtY29tcGF0aWJsZSBraWxscGcoKS4KLSAqLwogaW50Ci1raWxscGcocGlkX3QgcGdpZCwgaW50IHNpZykKK2RhZW1vbihpbnQgbm9jaGRpciwgaW50IG5vY2xvc2UpCiB7Ci0JaWYgKHBnaWQgPT0gMSkgewotCQllcnJubyA9IEVTUkNIOworCWludCBmZDsKKworCXN3aXRjaCAoZm9yaygpKSB7CisJY2FzZSAtMToKIAkJcmV0dXJuICgtMSk7CisJY2FzZSAwOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlfZXhpdCgwKTsKIAl9Ci0JcmV0dXJuIChraWxsKC1wZ2lkLCBzaWcpKTsKKworCWlmIChzZXRzaWQoKSA9PSAtMSkKKwkJcmV0dXJuICgtMSk7CisKKwlpZiAoIW5vY2hkaXIpCisJCSh2b2lkKWNoZGlyKCIvIik7CisKKwlpZiAoIW5vY2xvc2UgJiYgKGZkID0gb3BlbihfUEFUSF9ERVZOVUxMLCBPX1JEV1IsIDApKSAhPSAtMSkgeworCQkodm9pZClkdXAyKGZkLCBTVERJTl9GSUxFTk8pOworCQkodm9pZClkdXAyKGZkLCBTVERPVVRfRklMRU5PKTsKKwkJKHZvaWQpZHVwMihmZCwgU1RERVJSX0ZJTEVOTyk7CisJCWlmIChmZCA+IDIpCisJCQkodm9pZCljbG9zZShmZCk7CisJfQorCXJldHVybiAoMCk7CiB9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy91bmlzdGQva2lsbHBnLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2Vyci5jCnNpbWlsYXJpdHkgaW5kZXggNzMlCmNvcHkgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy91bmlzdGQva2lsbHBnLmMKY29weSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2Vyci5jCmluZGV4IGNlYWMzZjQuLmU3ZWMyOWQgMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2Vyci5jCkBAIC0xLDcgKzEsNiBAQAotLyoJJE5ldEJTRDoga2lsbHBnLmMsdiAxLjggMjAwMy8wOC8wNyAxNjo0MjozOSBhZ2MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MworLyoJJE9wZW5CU0Q6IGVyci5jLHYgMS4xMSAyMDEyLzEyLzA1IDIzOjE5OjU5IGRlcmFhZHQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkzCiAgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI5LDI4ICsyOCwyMCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylraWxscGcuYwk4LjEgKEJlcmtlbGV5KSA2LzIvOTMiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IGtpbGxwZy5jLHYgMS44IDIwMDMvMDgvMDcgMTY6NDI6MzkgYWdjIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CiAKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0vKgotICogQmFja3dhcmRzLWNvbXBhdGlibGUga2lsbHBnKCkuCi0gKi8KLWludAota2lsbHBnKHBpZF90IHBnaWQsIGludCBzaWcpCisvKiBQUklOVEZMSUtFMiAqLworX19kZWFkIHZvaWQKK19lcnIoaW50IGV2YWwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewotCWlmIChwZ2lkID09IDEpIHsKLQkJZXJybm8gPSBFU1JDSDsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXJldHVybiAoa2lsbCgtcGdpZCwgc2lnKSk7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCV92ZXJyKGV2YWwsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CiB9CisKKy8qIFBSSU5URkxJS0UyICovCitfX3dlYWtfYWxpYXMoZXJyLCBfZXJyKTsKKwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9lcnJ4LmMKc2ltaWxhcml0eSBpbmRleCA3MyUKY29weSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYwpjb3B5IHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vZXJyeC5jCmluZGV4IGNlYWMzZjQuLmQyMTM0MzUgMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2VycnguYwpAQCAtMSw3ICsxLDYgQEAKLS8qCSROZXRCU0Q6IGtpbGxwZy5jLHYgMS44IDIwMDMvMDgvMDcgMTY6NDI6MzkgYWdjIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKKy8qCSRPcGVuQlNEOiBlcnJ4LmMsdiAxLjEwIDIwMTIvMTIvMDUgMjM6MTk6NTkgZGVyYWFkdCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMKICAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjksMjggKzI4LDIwIEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWYgMAotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWtpbGxwZy5jCTguMSAoQmVya2VsZXkpIDYvMi85MyI7Ci0jZWxzZQotX19SQ1NJRCgiJE5ldEJTRDoga2lsbHBnLmMsdiAxLjggMjAwMy8wOC8wNyAxNjo0MjozOSBhZ2MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KIAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLS8qCi0gKiBCYWNrd2FyZHMtY29tcGF0aWJsZSBraWxscGcoKS4KLSAqLwotaW50Ci1raWxscGcocGlkX3QgcGdpZCwgaW50IHNpZykKKy8qIFBSSU5URkxJS0UyICovCitfX2RlYWQgdm9pZAorX2VycngoaW50IGV2YWwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewotCWlmIChwZ2lkID09IDEpIHsKLQkJZXJybm8gPSBFU1JDSDsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXJldHVybiAoa2lsbCgtcGdpZCwgc2lnKSk7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCV92ZXJyeChldmFsLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOwogfQorCisvKiBQUklOVEZMSUtFMiAqLworX193ZWFrX2FsaWFzKGVycngsIF9lcnJ4KTsKKwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi92ZXJyLmMKc2ltaWxhcml0eSBpbmRleCA3MyUKY29weSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYwpjb3B5IHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdmVyci5jCmluZGV4IGNlYWMzZjQuLmRjZDhlZGMgMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3ZlcnIuYwpAQCAtMSw3ICsxLDYgQEAKLS8qCSROZXRCU0Q6IGtpbGxwZy5jLHYgMS44IDIwMDMvMDgvMDcgMTY6NDI6MzkgYWdjIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKKy8qCSRPcGVuQlNEOiB2ZXJyLmMsdiAxLjkgMjAxMi8xMi8wNSAyMzoyMDowMCBkZXJhYWR0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MwogICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yOSwyOCArMjgsMjkgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLSNpZiAwCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpa2lsbHBnLmMJOC4xIChCZXJrZWxleSkgNi8yLzkzIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBraWxscGcuYyx2IDEuOCAyMDAzLzA4LzA3IDE2OjQyOjM5IGFnYyBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8ZXJyLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgogCi0vKgotICogQmFja3dhcmRzLWNvbXBhdGlibGUga2lsbHBnKCkuCi0gKi8KLWludAota2lsbHBnKHBpZF90IHBnaWQsIGludCBzaWcpCitleHRlcm4gY2hhciAqX19wcm9nbmFtZTsJCS8qIFByb2dyYW0gbmFtZSwgZnJvbSBjcnQwLiAqLworCitfX2RlYWQgdm9pZAorX3ZlcnIoaW50IGV2YWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKIHsKLQlpZiAocGdpZCA9PSAxKSB7Ci0JCWVycm5vID0gRVNSQ0g7Ci0JCXJldHVybiAoLTEpOworCWludCBzdmVycm5vOworCisJc3ZlcnJubyA9IGVycm5vOworCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiJXM6ICIsIF9fcHJvZ25hbWUpOworCWlmIChmbXQgIT0gTlVMTCkgeworCQkodm9pZCl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIjogIik7CiAJfQotCXJldHVybiAoa2lsbCgtcGdpZCwgc2lnKSk7CisJKHZvaWQpZnByaW50ZihzdGRlcnIsICIlc1xuIiwgc3RyZXJyb3Ioc3ZlcnJubykpOworCWV4aXQoZXZhbCk7CiB9CisKK19fd2Vha19hbGlhcyh2ZXJyLCBfdmVycik7CisKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdmVycnguYwpzaW1pbGFyaXR5IGluZGV4IDczJQpjb3B5IGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jCmNvcHkgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi92ZXJyeC5jCmluZGV4IGNlYWMzZjQuLjYwZGEwNjIgMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3ZlcnJ4LmMKQEAgLTEsNyArMSw2IEBACi0vKgkkTmV0QlNEOiBraWxscGcuYyx2IDEuOCAyMDAzLzA4LzA3IDE2OjQyOjM5IGFnYyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCisvKgkkT3BlbkJTRDogdmVycnguYyx2IDEuOSAyMDEyLzEyLzA1IDIzOjIwOjAwIGRlcmFhZHQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkzCiAgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI5LDI4ICsyOCwyMiBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylraWxscGcuYwk4LjEgKEJlcmtlbGV5KSA2LzIvOTMiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IGtpbGxwZy5jLHYgMS44IDIwMDMvMDgvMDcgMTY6NDI6MzkgYWdjIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KIAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPGVycm5vLmg+CitleHRlcm4gY2hhciAqX19wcm9nbmFtZTsJCS8qIFByb2dyYW0gbmFtZSwgZnJvbSBjcnQwLiAqLwogCi0vKgotICogQmFja3dhcmRzLWNvbXBhdGlibGUga2lsbHBnKCkuCi0gKi8KLWludAota2lsbHBnKHBpZF90IHBnaWQsIGludCBzaWcpCitfX2RlYWQgdm9pZAorX3ZlcnJ4KGludCBldmFsLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCiB7Ci0JaWYgKHBnaWQgPT0gMSkgewotCQllcnJubyA9IEVTUkNIOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JcmV0dXJuIChraWxsKC1wZ2lkLCBzaWcpKTsKKwkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzOiAiLCBfX3Byb2duYW1lKTsKKwlpZiAoZm10ICE9IE5VTEwpCisJCSh2b2lkKXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisJKHZvaWQpZnByaW50ZihzdGRlcnIsICJcbiIpOworCWV4aXQoZXZhbCk7CiB9CisKK19fd2Vha19hbGlhcyh2ZXJyeCwgX3ZlcnJ4KTsKKwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi92d2Fybi5jCnNpbWlsYXJpdHkgaW5kZXggNzQlCmNvcHkgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy91bmlzdGQva2lsbHBnLmMKY29weSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3Z3YXJuLmMKaW5kZXggY2VhYzNmNC4uMjZiNjBmMyAxMDA2NDQKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdndhcm4uYwpAQCAtMSw3ICsxLDYgQEAKLS8qCSROZXRCU0Q6IGtpbGxwZy5jLHYgMS44IDIwMDMvMDgvMDcgMTY6NDI6MzkgYWdjIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKKy8qCSRPcGVuQlNEOiB2d2Fybi5jLHYgMS45IDIwMTIvMTIvMDUgMjM6MjA6MDAgZGVyYWFkdCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMKICAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjksMjggKzI4LDI3IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWYgMAotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWtpbGxwZy5jCTguMSAoQmVya2VsZXkpIDYvMi85MyI7Ci0jZWxzZQotX19SQ1NJRCgiJE5ldEJTRDoga2lsbHBnLmMsdiAxLjggMjAwMy8wOC8wNyAxNjo0MjozOSBhZ2MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPGVyci5oPgogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KIAotLyoKLSAqIEJhY2t3YXJkcy1jb21wYXRpYmxlIGtpbGxwZygpLgotICovCi1pbnQKLWtpbGxwZyhwaWRfdCBwZ2lkLCBpbnQgc2lnKQorZXh0ZXJuIGNoYXIgKl9fcHJvZ25hbWU7CQkvKiBQcm9ncmFtIG5hbWUsIGZyb20gY3J0MC4gKi8KKwordm9pZAorX3Z3YXJuKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKIHsKLQlpZiAocGdpZCA9PSAxKSB7Ci0JCWVycm5vID0gRVNSQ0g7Ci0JCXJldHVybiAoLTEpOworCWludCBzdmVycm5vOworCisJc3ZlcnJubyA9IGVycm5vOworCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiJXM6ICIsIF9fcHJvZ25hbWUpOworCWlmIChmbXQgIT0gTlVMTCkgeworCQkodm9pZCl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIjogIik7CiAJfQotCXJldHVybiAoa2lsbCgtcGdpZCwgc2lnKSk7CisJKHZvaWQpZnByaW50ZihzdGRlcnIsICIlc1xuIiwgc3RyZXJyb3Ioc3ZlcnJubykpOwogfQorCitfX3dlYWtfYWxpYXModndhcm4sIF92d2Fybik7CisKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdndhcm54LmMKc2ltaWxhcml0eSBpbmRleCA3MyUKY29weSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYwpjb3B5IHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdndhcm54LmMKaW5kZXggY2VhYzNmNC4uZTZiMTk1NyAxMDA2NDQKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdndhcm54LmMKQEAgLTEsNyArMSw2IEBACi0vKgkkTmV0QlNEOiBraWxscGcuYyx2IDEuOCAyMDAzLzA4LzA3IDE2OjQyOjM5IGFnYyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCisvKgkkT3BlbkJTRDogdndhcm54LmMsdiAxLjkgMjAxMi8xMi8wNSAyMzoyMDowMCBkZXJhYWR0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MwogICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yOSwyOCArMjgsMjAgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLSNpZiAwCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpa2lsbHBnLmMJOC4xIChCZXJrZWxleSkgNi8yLzkzIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBraWxscGcuYyx2IDEuOCAyMDAzLzA4LzA3IDE2OjQyOjM5IGFnYyBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPGVyci5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CiAKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgorZXh0ZXJuIGNoYXIgKl9fcHJvZ25hbWU7CQkvKiBQcm9ncmFtIG5hbWUsIGZyb20gY3J0MC4gKi8KIAotLyoKLSAqIEJhY2t3YXJkcy1jb21wYXRpYmxlIGtpbGxwZygpLgotICovCi1pbnQKLWtpbGxwZyhwaWRfdCBwZ2lkLCBpbnQgc2lnKQordm9pZAorX3Z3YXJueChjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCiB7Ci0JaWYgKHBnaWQgPT0gMSkgewotCQllcnJubyA9IEVTUkNIOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JcmV0dXJuIChraWxsKC1wZ2lkLCBzaWcpKTsKKwkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzOiAiLCBfX3Byb2duYW1lKTsKKwlpZiAoZm10ICE9IE5VTEwpCisJCSh2b2lkKXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisJKHZvaWQpZnByaW50ZihzdGRlcnIsICJcbiIpOwogfQorCitfX3dlYWtfYWxpYXModndhcm54LCBfdndhcm54KTsKKwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi93YXJuLmMKc2ltaWxhcml0eSBpbmRleCA3MyUKY29weSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYwpjb3B5IHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vd2Fybi5jCmluZGV4IGNlYWMzZjQuLmMxYjQ3YTYgMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3dhcm4uYwpAQCAtMSw3ICsxLDYgQEAKLS8qCSROZXRCU0Q6IGtpbGxwZy5jLHYgMS44IDIwMDMvMDgvMDcgMTY6NDI6MzkgYWdjIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKKy8qCSRPcGVuQlNEOiB3YXJuLmMsdiAxLjEwIDIwMTIvMTIvMDUgMjM6MjA6MDAgZGVyYWFkdCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMKICAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjksMjggKzI4LDIwIEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWYgMAotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWtpbGxwZy5jCTguMSAoQmVya2VsZXkpIDYvMi85MyI7Ci0jZWxzZQotX19SQ1NJRCgiJE5ldEJTRDoga2lsbHBnLmMsdiAxLjggMjAwMy8wOC8wNyAxNjo0MjozOSBhZ2MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KIAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLS8qCi0gKiBCYWNrd2FyZHMtY29tcGF0aWJsZSBraWxscGcoKS4KLSAqLwotaW50Ci1raWxscGcocGlkX3QgcGdpZCwgaW50IHNpZykKKy8qIFBSSU5URkxJS0UxICovCit2b2lkCitfd2Fybihjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKLQlpZiAocGdpZCA9PSAxKSB7Ci0JCWVycm5vID0gRVNSQ0g7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlyZXR1cm4gKGtpbGwoLXBnaWQsIHNpZykpOworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlfdndhcm4oZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKIH0KKworLyogUFJJTlRGTElLRTEgKi8KK19fd2Vha19hbGlhcyh3YXJuLCBfd2Fybik7CisKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vd2FybnguYwpzaW1pbGFyaXR5IGluZGV4IDczJQpjb3B5IGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jCmNvcHkgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi93YXJueC5jCmluZGV4IGNlYWMzZjQuLmFmMmFiNjYgMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3VuaXN0ZC9raWxscGcuYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3dhcm54LmMKQEAgLTEsNyArMSw2IEBACi0vKgkkTmV0QlNEOiBraWxscGcuYyx2IDEuOCAyMDAzLzA4LzA3IDE2OjQyOjM5IGFnYyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCisvKgkkT3BlbkJTRDogd2FybnguYyx2IDEuOSAyMDEyLzEyLzA1IDIzOjIwOjAwIGRlcmFhZHQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkzCiAgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI5LDI4ICsyOCwyMCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylraWxscGcuYwk4LjEgKEJlcmtlbGV5KSA2LzIvOTMiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IGtpbGxwZy5jLHYgMS44IDIwMDMvMDgvMDcgMTY6NDI6MzkgYWdjIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CiAKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0vKgotICogQmFja3dhcmRzLWNvbXBhdGlibGUga2lsbHBnKCkuCi0gKi8KLWludAota2lsbHBnKHBpZF90IHBnaWQsIGludCBzaWcpCisvKiBQUklOVEZMSUtFMSAqLwordm9pZAorX3dhcm54KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewotCWlmIChwZ2lkID09IDEpIHsKLQkJZXJybm8gPSBFU1JDSDsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXJldHVybiAoa2lsbCgtcGdpZCwgc2lnKSk7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCV92d2FybngoZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKIH0KKworLyogUFJJTlRGTElLRTEgKi8KK19fd2Vha19hbGlhcyh3YXJueCwgX3dhcm54KTsKKwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9odG9ubC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9odG9ubC5jCmluZGV4IDVhYjQxODkuLjZlZTZlN2UgMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaHRvbmwuYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2h0b25sLmMKQEAgLTEsMTEgKzEsMTEgQEAKLS8qCSRPcGVuQlNEOiBodG9ubC5jLHYgMS42IDIwMDUvMDgvMDYgMjA6MzA6MDMgZXNwaWUgRXhwICQgKi8KKy8qCSRPcGVuQlNEOiBodG9ubC5jLHYgMS43IDIwMTQvMDcvMjEgMDE6NTE6MTAgZ3VlbnRoZXIgRXhwICQgKi8KIC8qCiAgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgogICogUHVibGljIGRvbWFpbi4KICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KKyNpbmNsdWRlIDxlbmRpYW4uaD4KIAogI3VuZGVmIGh0b25sCiAKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaHRvbnMuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaHRvbnMuYwppbmRleCBjOGI3M2ZkLi5mNDhkOTFlIDEwMDY0NAotLS0gYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2h0b25zLmMKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9odG9ucy5jCkBAIC0xLDExICsxLDExIEBACi0vKgkkT3BlbkJTRDogaHRvbnMuYyx2IDEuOCAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkICovCisvKgkkT3BlbkJTRDogaHRvbnMuYyx2IDEuOSAyMDE0LzA3LzIxIDAxOjUxOjEwIGd1ZW50aGVyIEV4cCAkICovCiAvKgogICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KICAqIFB1YmxpYyBkb21haW4uCiAgKi8KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPG1hY2hpbmUvZW5kaWFuLmg+CisjaW5jbHVkZSA8ZW5kaWFuLmg+CiAKICN1bmRlZiBodG9ucwogCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L250b2hsLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L250b2hsLmMKaW5kZXggMzY0MTRiNy4uMGQwNWJhYyAxMDA2NDQKLS0tIGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9udG9obC5jCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvbnRvaGwuYwpAQCAtMSwxMSArMSwxMSBAQAotLyoJJE9wZW5CU0Q6IG50b2hsLmMsdiAxLjYgMjAwNS8wOC8wNiAyMDozMDowMyBlc3BpZSBFeHAgJCAqLworLyoJJE9wZW5CU0Q6IG50b2hsLmMsdiAxLjcgMjAxNC8wNy8yMSAwMTo1MToxMCBndWVudGhlciBFeHAgJCAqLwogLyoKICAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCiAgKiBQdWJsaWMgZG9tYWluLgogICovCiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2VuZGlhbi5oPgorI2luY2x1ZGUgPGVuZGlhbi5oPgogCiAjdW5kZWYgbnRvaGwKIApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9udG9ocy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9udG9ocy5jCmluZGV4IDhmMzQ1ZTguLmI1ZWEzNjEgMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvbnRvaHMuYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L250b2hzLmMKQEAgLTEsMTEgKzEsMTEgQEAKLS8qCSRPcGVuQlNEOiBudG9ocy5jLHYgMS44IDIwMDUvMDgvMDYgMjA6MzA6MDMgZXNwaWUgRXhwICQgKi8KKy8qCSRPcGVuQlNEOiBudG9ocy5jLHYgMS45IDIwMTQvMDcvMjEgMDE6NTE6MTAgZ3VlbnRoZXIgRXhwICQgKi8KIC8qCiAgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgogICogUHVibGljIGRvbWFpbi4KICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KKyNpbmNsdWRlIDxlbmRpYW4uaD4KIAogI3VuZGVmIG50b2hzCiAKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvcmVzX3JhbmRvbS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9yZXNfcmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4NjkyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvcmVzX3JhbmRvbS5jCkBAIC0wLDAgKzEsMjc1IEBACisvKiAkT3BlbkJTRDogcmVzX3JhbmRvbS5jLHYgMS4yMSAyMDE0LzA3LzIwIDA0OjIyOjM0IGd1ZW50aGVyIEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgMTk5NyBOaWVscyBQcm92b3MgPHByb3Zvc0BwaHlzbmV0LnVuaS1oYW1idXJnLmRlPgorICogQ29weXJpZ2h0IDIwMDggRGFtaWVuIE1pbGxlciA8ZGptQG9wZW5ic2Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGVvIGRlIFJhYWR0IDxkZXJhYWR0QG9wZW5ic2Qub3JnPiBjYW1lIHVwIHdpdGggdGhlIGlkZWEgb2YgdXNpbmcKKyAqIHN1Y2ggYSBtYXRoZW1hdGljYWwgc3lzdGVtIHRvIGdlbmVyYXRlIG1vcmUgcmFuZG9tICh5ZXQgbm9uLXJlcGVhdGluZykKKyAqIGlkcyB0byBzb2x2ZSB0aGUgcmVzb2x2ZXIvbmFtZWQgcHJvYmxlbS4gIEJ1dCBOaWVscyBkZXNpZ25lZCB0aGUKKyAqIGFjdHVhbCBzeXN0ZW0gYmFzZWQgb24gdGhlIGNvbnN0cmFpbnRzLgorICoKKyAqIExhdGVyIG1vZGlmaWVkIGJ5IERhbWllbiBNaWxsZXIgdG8gd3JhcCB0aGUgTENHIG91dHB1dCBpbiBhIDE1LWJpdAorICogcGVybXV0YXRpb24gZ2VuZXJhdG9yIGJhc2VkIG9uIGEgTHVieS1SYWNrb2ZmIGJsb2NrIGNpcGhlci4gVGhpcworICogZW5zdXJlcyB0aGUgb3V0cHV0IGlzIG5vbi1yZXBlYXRpbmcgYW5kIHByZXNlcnZlcyB0aGUgTVNCIHR3aWRkbGUKKyAqIHRyaWNrLCBidXQgbWFrZXMgaXQgbW9yZSByZXNpc3RhbnQgdG8gTENHIHByZWRpY3Rpb24uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIAorICogc2VlZCA9IHJhbmRvbSAxNWJpdAorICogbiA9IHByaW1lLCBnMCA9IGdlbmVyYXRvciB0byBuLAorICogaiA9IHJhbmRvbSBzbyB0aGF0IGdjZChqLG4tMSkgPT0gMQorICogZyA9IGcwXmogbW9kIG4gd2lsbCBiZSBhIGdlbmVyYXRvciBhZ2Fpbi4KKyAqCisgKiBYWzBdID0gcmFuZG9tIHNlZWQuCisgKiBYW25dID0gYSpYW24tMV0rYiBtb2QgbSBpcyBhIExpbmVhciBDb25ncnVlbnRpYWwgR2VuZXJhdG9yCisgKiB3aXRoIGEgPSA3XihldmVuIHJhbmRvbSkgbW9kIG0sIAorICogICAgICBiID0gcmFuZG9tIHdpdGggZ2NkKGIsbSkgPT0gMQorICogICAgICBtID0gMzExMDQgYW5kIGEgbWF4aW1hbCBwZXJpb2Qgb2YgbS0xLgorICoKKyAqIFRoZSB0cmFuc2FjdGlvbiBpZCBpcyBkZXRlcm1pbmVkIGJ5OgorICogaWRbbl0gPSBzZWVkIHhvciAoZ15YW25dIG1vZCBuKQorICoKKyAqIEVmZmVjdGl2bHkgdGhlIGlkIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIGxvd2VyIDE1IGJpdHMsIHRodXMKKyAqIHlpZWxkaW5nIHR3byBkaWZmZXJlbnQgY3ljbGVzIGJ5IHRvZ2dsaW5nIHRoZSBtc2Igb24gYW5kIG9mZi4KKyAqIFRoaXMgYXZvaWRzIHJldXNlIGlzc3VlcyBjYXVzZWQgYnkgcmVzZWVkaW5nLgorICoKKyAqIFRoZSBvdXRwdXQgb2YgdGhpcyBnZW5lcmF0b3IgaXMgdGhlbiByYW5kb21seSBwZXJtdXRlZCB0aG91Z2ggYQorICogY3VzdG9tIDE1IGJpdCBMdWJ5LVJhY2tvZmYgYmxvY2sgY2lwaGVyLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxyZXNvbHYuaD4KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAidGhyZWFkX3ByaXZhdGUuaCIKKworI2RlZmluZSBSVV9PVVQgIAkxODAJLyogVGltZSBhZnRlciB3aWNoIHdpbGwgYmUgcmVzZWVkZWQgKi8KKyNkZWZpbmUgUlVfTUFYCQkzMDAwMAkvKiBVbmlxIGN5Y2xlLCBhdm9pZCBibGFja2phY2sgcHJlZGljdGlvbiAqLworI2RlZmluZSBSVV9HRU4JCTIJLyogU3RhcnRpbmcgZ2VuZXJhdG9yICovCisjZGVmaW5lIFJVX04JCTMyNzQ5CS8qIFJVX04tMSA9IDIqMiozKjI3MjkgKi8KKyNkZWZpbmUgUlVfQUdFTgkJNwkvKiBkZXRlcm1pbmUgcnVfYSBhcyBSVV9BR0VOXigyKnJhbmQpICovCisjZGVmaW5lIFJVX00JCTMxMTA0CS8qIFJVX00gPSAyXjcqM141IC0gZG9uJ3QgY2hhbmdlICovCisjZGVmaW5lIFJVX1JPVU5EUwkxMQkvKiBOdW1iZXIgb2Ygcm91bmRzIGZvciBwZXJtdXRlIChvZGQpICovCisKK3N0cnVjdCBwcmZfY3R4IHsKKwkvKiBQUkYgbG9va3VwIHRhYmxlIGZvciBvZGQgcm91bmRzICg3IGJpdHMgaW5wdXQgdG8gOCBiaXRzIG91dHB1dCkgKi8KKwl1X2NoYXIgcHJmN1soUlVfUk9VTkRTIC8gMikgKiAoMSA8PCA3KV07CisKKwkvKiBQUkYgbG9va3VwIHRhYmxlIGZvciBldmVuIHJvdW5kcyAoOCBiaXRzIGlucHV0IHRvIDcgYml0cyBvdXRwdXQpICovCisJdV9jaGFyIHByZjhbKChSVV9ST1VORFMgKyAxKSAvIDIpICogKDEgPDwgOCldOworfTsKKworI2RlZmluZSBQRkFDX04gMworc3RhdGljIGNvbnN0IHVfaW50MTZfdCBwZmFjdHNbUEZBQ19OXSA9IHsKKwkyLCAKKwkzLAorCTI3MjkKK307CisKK3N0YXRpYyB1X2ludDE2X3QgcnVfeDsKK3N0YXRpYyB1X2ludDE2X3QgcnVfc2VlZCwgcnVfc2VlZDI7CitzdGF0aWMgdV9pbnQxNl90IHJ1X2EsIHJ1X2I7CitzdGF0aWMgdV9pbnQxNl90IHJ1X2c7CitzdGF0aWMgdV9pbnQxNl90IHJ1X2NvdW50ZXIgPSAwOworc3RhdGljIHVfaW50MTZfdCBydV9tc2IgPSAwOworc3RhdGljIHN0cnVjdCBwcmZfY3R4ICpydV9wcmYgPSBOVUxMOworc3RhdGljIHRpbWVfdCBydV9yZXNlZWQ7CisKK3N0YXRpYyB1X2ludDE2X3QgcG1vZCh1X2ludDE2X3QsIHVfaW50MTZfdCwgdV9pbnQxNl90KTsKK3N0YXRpYyB2b2lkIHJlc19pbml0aWQodm9pZCk7CisKKy8qCisgKiBEbyBhIGZhc3QgbW9kdWxhciBleHBvbmF0aW9uLCByZXR1cm5lZCB2YWx1ZSB3aWxsIGJlIGluIHRoZSByYW5nZQorICogb2YgMCAtIChtb2QtMSkKKyAqLworc3RhdGljIHVfaW50MTZfdAorcG1vZCh1X2ludDE2X3QgZ2VuLCB1X2ludDE2X3QgZXhwLCB1X2ludDE2X3QgbW9kKQoreworCXVfaW50MTZfdCBzLCB0LCB1OworCisJcyA9IDE7CisJdCA9IGdlbjsKKwl1ID0gZXhwOworCisJd2hpbGUgKHUpIHsKKwkJaWYgKHUgJiAxKQorCQkJcyA9IChzICogdCkgJSBtb2Q7CisJCXUgPj49IDE7CisJCXQgPSAodCAqIHQpICUgbW9kOworCX0KKwlyZXR1cm4gKHMpOworfQorCisvKgorICogMTUtYml0IHBlcm11dGF0aW9uIGJhc2VkIG9uIEx1YnktUmFja29mZiBibG9jayBjaXBoZXIKKyAqLworc3RhdGljIHVfaW50CitwZXJtdXRlMTUodV9pbnQgaW4pCit7CisJaW50IGk7CisJdV9pbnQgbGVmdCwgcmlnaHQsIHRtcDsKKworCWlmIChydV9wcmYgPT0gTlVMTCkKKwkJcmV0dXJuIGluOworCisJbGVmdCA9IChpbiA+PiA4KSAmIDB4N2Y7CisJcmlnaHQgPSBpbiAmIDB4ZmY7CisKKwkvKgorCSAqIEVhY2ggcm91bmQgc3dhcHMgdGhlIHdpZHRoIG9mIGxlZnQgYW5kIHJpZ2h0LiBFdmVuIHJvdW5kcyBoYXZlCisJICogYSA3LWJpdCBsZWZ0LCBvZGQgcm91bmRzIGhhdmUgYW4gOC1iaXQgbGVmdC4JU2luY2UgdGhpcyB1c2VzIGFuCisJICogb2RkIG51bWJlciBvZiByb3VuZHMsIGxlZnQgaXMgYWx3YXlzIDggYml0cyB3aWRlIGF0IHRoZSBlbmQuCisJICovCisJZm9yIChpID0gMDsgaSA8IFJVX1JPVU5EUzsgaSsrKSB7CisJCWlmICgoaSAmIDEpID09IDApCisJCQl0bXAgPSBydV9wcmYtPnByZjhbKGkgPDwgKDggLSAxKSkgfCByaWdodF0gJiAweDdmOworCQllbHNlCisJCQl0bXAgPSBydV9wcmYtPnByZjdbKChpIC0gMSkgPDwgKDcgLSAxKSkgfCByaWdodF07CisJCXRtcCBePSBsZWZ0OworCQlsZWZ0ID0gcmlnaHQ7CisJCXJpZ2h0ID0gdG1wOworCX0KKworCXJldHVybiAocmlnaHQgPDwgOCkgfCBsZWZ0OworfQorCisvKiAKKyAqIEluaXRpYWxpemVzIHRoZSBzZWVkIGFuZCBjaG9vc2VzIGEgc3VpdGFibGUgZ2VuZXJhdG9yLiBBbHNvIHRvZ2dsZXMgCisgKiB0aGUgbXNiIGZsYWcuIFRoZSBtc2IgZmxhZyBpcyB1c2VkIHRvIGdlbmVyYXRlIHR3byBkaXN0aW5jdAorICogY3ljbGVzIG9mIHJhbmRvbSBudW1iZXJzIGFuZCB0aHVzIGF2b2lkaW5nIHJldXNlIG9mIGlkcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHJlc19yYW5kb21pZCgpIHdoZW4gbmVlZGVkLCBhbiAKKyAqIGFwcGxpY2F0aW9uIGRvZXMgbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgaXQuCisgKi8KK3N0YXRpYyB2b2lkIAorcmVzX2luaXRpZCh2b2lkKQoreworCXVfaW50MTZfdCBqLCBpOworCXVfaW50MzJfdCB0bXA7CisJaW50IG5vcHJpbWUgPSAxOworCXN0cnVjdCB0aW1lc3BlYyB0czsKKworCXJ1X3ggPSBhcmM0cmFuZG9tX3VuaWZvcm0oUlVfTSk7CisKKwkvKiAxNSBiaXRzIG9mIHJhbmRvbSBzZWVkICovCisJdG1wID0gYXJjNHJhbmRvbSgpOworCXJ1X3NlZWQgPSAodG1wID4+IDE2KSAmIDB4N0ZGRjsKKwlydV9zZWVkMiA9IHRtcCAmIDB4N0ZGRjsKKworCS8qIERldGVybWluZSB0aGUgTENHIHdlIHVzZSAqLworCXRtcCA9IGFyYzRyYW5kb20oKTsKKwlydV9iID0gKHRtcCAmIDB4ZmZmZSkgfCAxOworCXJ1X2EgPSBwbW9kKFJVX0FHRU4sICh0bXAgPj4gMTYpICYgMHhmZmZlLCBSVV9NKTsKKwl3aGlsZSAocnVfYiAlIDMgPT0gMCkKKwkJcnVfYiArPSAyOworCQorCWogPSBhcmM0cmFuZG9tX3VuaWZvcm0oUlVfTik7CisKKwkvKiAKKwkgKiBEbyBhIGZhc3QgZ2NkKGosUlVfTi0xKSwgc28gd2UgY2FuIGZpbmQgYSBqIHdpdGgKKwkgKiBnY2QoaiwgUlVfTi0xKSA9PSAxLCBnaXZpbmcgYSBuZXcgZ2VuZXJhdG9yIGZvcgorCSAqIFJVX0dFTl5qIG1vZCBSVV9OCisJICovCisKKwl3aGlsZSAobm9wcmltZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgUEZBQ19OOyBpKyspCisJCQlpZiAoaiAlIHBmYWN0c1tpXSA9PSAwKQorCQkJCWJyZWFrOworCisJCWlmIChpID49IFBGQUNfTikKKwkJCW5vcHJpbWUgPSAwOworCQllbHNlIAorCQkJaiA9IChqICsgMSkgJSBSVV9OOworCX0KKworCXJ1X2cgPSBwbW9kKFJVX0dFTiwgaiwgUlVfTik7CisJcnVfY291bnRlciA9IDA7CisKKwkvKiBJbml0aWFsaXNlIFBSRiBmb3IgTHVieS1SYWNrb2ZmIHBlcm11dGF0aW9uICovCisJaWYgKHJ1X3ByZiA9PSBOVUxMKQorCQlydV9wcmYgPSBtYWxsb2Moc2l6ZW9mKCpydV9wcmYpKTsKKwlpZiAocnVfcHJmICE9IE5VTEwpCisJCWFyYzRyYW5kb21fYnVmKHJ1X3ByZiwgc2l6ZW9mKCpydV9wcmYpKTsKKworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpOworCXJ1X3Jlc2VlZCA9IHRzLnR2X3NlYyArIFJVX09VVDsKKwlydV9tc2IgPSBydV9tc2IgPT0gMHg4MDAwID8gMCA6IDB4ODAwMDsgCit9CisKK3VfaW50CityZXNfcmFuZG9taWQodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJdV9pbnQgcjsKKwlfVEhSRUFEX1BSSVZBVEVfTVVURVgocmFuZG9tKTsKKworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpOworCisJX1RIUkVBRF9QUklWQVRFX01VVEVYX0xPQ0socmFuZG9tKTsKKworCWlmIChydV9jb3VudGVyID49IFJVX01BWCB8fCB0cy50dl9zZWMgPiBydV9yZXNlZWQpCisJCXJlc19pbml0aWQoKTsKKworCS8qIExpbmVhciBDb25ncnVlbnRpYWwgR2VuZXJhdG9yICovCisJcnVfeCA9IChydV9hICogcnVfeCArIHJ1X2IpICUgUlVfTTsKKwlydV9jb3VudGVyKys7CisKKwlyID0gcGVybXV0ZTE1KHJ1X3NlZWQgXiBwbW9kKHJ1X2csIHJ1X3NlZWQyICsgcnVfeCwgUlVfTikpIHwgcnVfbXNiOworCisJX1RIUkVBRF9QUklWQVRFX01VVEVYX1VOTE9DSyhyYW5kb20pOworCisJcmV0dXJuIChyKTsKK30KKworI2lmIDAKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGksIG47CisJdV9pbnQxNl90IHdlcnQ7CisKKwlyZXNfaW5pdGlkKCk7CisKKwlwcmludGYoIkdlbmVyYXRvcjogJXVcbiIsIHJ1X2cpOworCXByaW50ZigiU2VlZDogJXVcbiIsIHJ1X3NlZWQpOworCXByaW50ZigiUmVzZWVkIGF0ICVsZFxuIiwgcnVfcmVzZWVkKTsKKwlwcmludGYoIlJ1X1g6ICV1XG4iLCBydV94KTsKKwlwcmludGYoIlJ1X0E6ICV1XG4iLCBydV9hKTsKKwlwcmludGYoIlJ1X0I6ICV1XG4iLCBydV9iKTsKKworCW4gPSBhcmdjID4gMSA/IGF0b2koYXJndlsxXSkgOiA2MDAwMTsKKwlmb3IgKGk9MDtpPG47aSsrKSB7CisJCXdlcnQgPSByZXNfcmFuZG9taWQoKTsKKwkJcHJpbnRmKCIldVxuIiwgd2VydCk7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mY2xvc2UuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mY2xvc2UuYwpzaW1pbGFyaXR5IGluZGV4IDc1JQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmNsb3NlLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mY2xvc2UuYwppbmRleCA1ZWQ4YjJjLi5jNzJhZjU0IDEwMDY0NAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmNsb3NlLmMKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZjbG9zZS5jCkBAIC0xLDMgKzEsNCBAQAorLyoJJE9wZW5CU0Q6IGZjbG9zZS5jLHYgMS45IDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJCAqLwogLyotCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKICAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMzAsMTkgKzMxLDkgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmY2xvc2UuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzcGlubG9jay5oPgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImxvY2FsLmgiCiAKIGludApAQCAtNTUsNiArNDYsNyBAQAogCQlyZXR1cm4gKEVPRik7CiAJfQogCUZMT0NLRklMRShmcCk7CisJV0NJT19GUkVFKGZwKTsKIAlyID0gZnAtPl9mbGFncyAmIF9fU1dSID8gX19zZmx1c2goZnApIDogMDsKIAlpZiAoZnAtPl9jbG9zZSAhPSBOVUxMICYmICgqZnAtPl9jbG9zZSkoZnAtPl9jb29raWUpIDwgMCkKIAkJciA9IEVPRjsKQEAgLTY0LDIyICs1Niw4IEBACiAJCUZSRUVVQihmcCk7CiAJaWYgKEhBU0xCKGZwKSkKIAkJRlJFRUxCKGZwKTsKLQlmcC0+X2ZpbGUgPSAtMTsKIAlmcC0+X3IgPSBmcC0+X3cgPSAwOwkvKiBNZXNzIHVwIGlmIHJlYWNjZXNzZWQuICovCi0KLQkvKgotCSAqIExvY2sgdGhlIHNwaW5sb2NrIHVzZWQgdG8gcHJvdGVjdCBfX3NnbHVlIGxpc3Qgd2FsayBpbgotCSAqIF9fc2ZwKCkuICBUaGUgX19zZnAoKSB1c2VzIGZwLT5fZmxhZ3MgPT0gMCB0ZXN0IGFzIGFuCi0JICogaW5kaWNhdGlvbiBvZiB0aGUgdW51c2VkIEZJTEUuCi0JICoKLQkgKiBUYWtpbmcgdGhlIGxvY2sgcHJldmVudHMgcG9zc2libGUgY29tcGlsZXIgb3IgcHJvY2Vzc29yCi0JICogcmVvcmRlcmluZyBvZiB0aGUgd3JpdGVzIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGZpbmFsIF9mbGFncwotCSAqIGNsZWFudXAsIG1ha2luZyBzdXJlIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCB0aGUgRklMRSBiZWZvcmUKLQkgKiBpdCBpcyBjb25zaWRlcmVkIGF2YWlsYWJsZS4KLQkgKi8KLQlTVERJT19USFJFQURfTE9DSygpOwogCWZwLT5fZmxhZ3MgPSAwOwkJLyogUmVsZWFzZSB0aGlzIEZJTEUgZm9yIHJldXNlLiAqLwotCVNURElPX1RIUkVBRF9VTkxPQ0soKTsKIAlGVU5MT0NLRklMRShmcCk7CiAJcmV0dXJuIChyKTsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZG9wZW4uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZG9wZW4uYwppbmRleCAzZTQ3ZjJjLi4xYzBjODEzIDEwMDY0NAotLS0gYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmRvcGVuLmMKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Zkb3Blbi5jCkBAIC0xLDQgKzEsNCBAQAotLyoJJE9wZW5CU0Q6IGZkb3Blbi5jLHYgMS42IDIwMDgvMDQvMjEgMTI6Mjg6MzUgb3R0byBFeHAgJCAqLworLyoJJE9wZW5CU0Q6IGZkb3Blbi5jLHYgMS43IDIwMTQvMDgvMzEgMDI6MjE6MTggZ3VlbnRoZXIgRXhwICQgKi8KIC8qLQogICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCiAgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTY2LDYgKzY2LDcgQEAKIAlpZiAoKGZwID0gX19zZnAoKSkgPT0gTlVMTCkKIAkJcmV0dXJuIChOVUxMKTsKIAlmcC0+X2ZsYWdzID0gZmxhZ3M7CisKIAkvKgogCSAqIElmIG9wZW5lZCBmb3IgYXBwZW5kaW5nLCBidXQgdW5kZXJseWluZyBkZXNjcmlwdG9yIGRvZXMgbm90IGhhdmUKIAkgKiBPX0FQUEVORCBiaXQgc2V0LCBhc3NlcnQgX19TQVBQIHNvIHRoYXQgX19zd3JpdGUoKSB3aWxsIGxzZWVrIHRvCkBAIC03Myw2ICs3NCwxMyBAQAogCSAqLwogCWlmICgob2ZsYWdzICYgT19BUFBFTkQpICYmICEoZmRmbGFncyAmIE9fQVBQRU5EKSkKIAkJZnAtPl9mbGFncyB8PSBfX1NBUFA7CisKKwkvKgorCSAqIElmIGNsb3NlLW9uLWV4ZWMgd2FzIHJlcXVlc3RlZCwgdGhlbiB0dXJuIGl0IG9uIGlmIG5vdCBhbHJlYWR5CisJICovCisJaWYgKChvZmxhZ3MgJiBPX0NMT0VYRUMpICYmICEoKHRtcCA9IGZjbnRsKGZkLCBGX0dFVEZEKSkgJiBGRF9DTE9FWEVDKSkKKwkJZmNudGwoZmQsIEZfU0VURkQsIHRtcCB8IEZEX0NMT0VYRUMpOworCiAJZnAtPl9maWxlID0gZmQ7CiAJZnAtPl9jb29raWUgPSBmcDsKIAlmcC0+X3JlYWQgPSBfX3NyZWFkOwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZsYWdzLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmxhZ3MuYwpzaW1pbGFyaXR5IGluZGV4IDc3JQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmxhZ3MuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZsYWdzLmMKaW5kZXggMTg3OGMyZi4uZDZkZjZkYSAxMDA2NDQKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZsYWdzLmMKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZsYWdzLmMKQEAgLTEsMyArMSw0IEBACisvKgkkT3BlbkJTRDogZmxhZ3MuYyx2IDEuOCAyMDE0LzA4LzMxIDAyOjIxOjE4IGd1ZW50aGVyIEV4cCAkICovCiAvKi0KICAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwogICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0zMCwyMiArMzEsMTUgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmbGFncy5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGVycm5vLmg+Ci0KICNpbmNsdWRlICJsb2NhbC5oIgogCiAvKgogICogUmV0dXJuIHRoZSAoc3RkaW8pIGZsYWdzIGZvciBhIGdpdmVuIG1vZGUuICBTdG9yZSB0aGUgZmxhZ3MKLSAqIHRvIGJlIHBhc3NlZCB0byBhbiBfb3BlbigpIHN5c2NhbGwgdGhyb3VnaCAqb3B0ci4KKyAqIHRvIGJlIHBhc3NlZCB0byBhbiBvcGVuKCkgc3lzY2FsbCB0aHJvdWdoICpvcHRyLgogICogUmV0dXJuIDAgb24gZXJyb3IuCiAgKi8KIGludApAQCAtNzgsMzQgKzcyLDMzIEBACiAJCXJldHVybiAoMCk7CiAJfQogCi0JLyogJ2InIChiaW5hcnkpIGlzIGlnbm9yZWQgKi8KLQlpZiAoKm1vZGUgPT0gJ2InKQotCQltb2RlKys7Ci0KLQkvKiBbcndhXVtiXVwrIG1lYW5zIHJlYWQgYW5kIHdyaXRlICovCi0JaWYgKCptb2RlID09ICcrJykgewotCQltb2RlKys7Ci0JCXJldCA9IF9fU1JXOwotCQltID0gT19SRFdSOwotCX0KLQotCS8qICdiJyAoYmluYXJ5KSBjYW4gYXBwZWFyIGhlcmUsIHRvbyAtLSBhbmQgaXMgaWdub3JlZCBhZ2FpbiAqLwotCWlmICgqbW9kZSA9PSAnYicpCi0JCW1vZGUrKzsKLQotCS8qICd4JyBtZWFucyBleGNsdXNpdmUgKGZhaWwgaWYgdGhlIGZpbGUgZXhpc3RzKSAqLwotCWlmICgqbW9kZSA9PSAneCcpIHsKLQkJbW9kZSsrOwotCQlpZiAobSA9PSBPX1JET05MWSkgeworCXdoaWxlICgqbW9kZSAhPSAnXDAnKSAKKwkJc3dpdGNoICgqbW9kZSsrKSB7CisJCWNhc2UgJ2InOgorCQkJYnJlYWs7CisJCWNhc2UgJysnOgorCQkJcmV0ID0gX19TUlc7CisJCQltID0gT19SRFdSOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJbyB8PSBPX0NMT0VYRUM7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlpZiAobyAmIE9fQ1JFQVQpCisJCQkJbyB8PSBPX0VYQ0w7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qCisJCQkgKiBMb3RzIG9mIHNvZnR3YXJlIHBhc3NlcyBvdGhlciBleHRlbnNpb24gbW9kZQorCQkJICogbGV0dGVycywgbGlrZSBXaW5kb3cncyAndCcKKwkJCSAqLworI2lmIDAKIAkJCWVycm5vID0gRUlOVkFMOwogCQkJcmV0dXJuICgwKTsKKyNlbHNlCisJCQlicmVhazsKKyNlbmRpZgogCQl9Ci0JCW8gfD0gT19FWENMOwotCX0KLQotCS8qIHNldCBjbG9zZS1vbi1leGVjICovCi0JaWYgKCptb2RlID09ICdlJykKLQkJbyB8PSBPX0NMT0VYRUM7CiAKIAkqb3B0ciA9IG0gfCBvOwogCXJldHVybiAocmV0KTsKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mbWVtb3Blbi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZtZW1vcGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNkYTA0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mbWVtb3Blbi5jCkBAIC0wLDAgKzEsMTgzIEBACisvKgkkT3BlbkJTRDogZm1lbW9wZW4uYyx2IDEuMiAyMDEzLzAzLzI3IDE1OjA2OjI1IG1waSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDExIE1hcnRpbiBQaWV1Y2hvdCA8bXBpQG9wZW5ic2Qub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA5IFRlZCBVbmFuZ3N0CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK3N0cnVjdCBzdGF0ZSB7CisJY2hhcgkJKnN0cmluZzsJLyogYWN0dWFsIHN0cmVhbSAqLworCXNpemVfdAkJIHBvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gKi8KKwlzaXplX3QJCSBzaXplOwkJLyogYWxsb2NhdGVkIHNpemUgKi8KKwlzaXplX3QJCSBsZW47CQkvKiBsZW5ndGggb2YgdGhlIGRhdGEgKi8KKwlpbnQJCSB1cGRhdGU7CS8qIG9wZW4gZm9yIHVwZGF0ZSAqLworfTsKKworc3RhdGljIGludAorZm1lbW9wZW5fcmVhZCh2b2lkICp2LCBjaGFyICpiLCBpbnQgbCkKK3sKKwlzdHJ1Y3Qgc3RhdGUJKnN0ID0gdjsKKwlpbnQJCSBpOworCisJZm9yIChpID0gMDsgaSA8IGwgJiYgaSArIHN0LT5wb3MgPCBzdC0+bGVuOyBpKyspCisJCWJbaV0gPSBzdC0+c3RyaW5nW3N0LT5wb3MgKyBpXTsKKwlzdC0+cG9zICs9IGk7CisKKwlyZXR1cm4gKGkpOworfQorCitzdGF0aWMgaW50CitmbWVtb3Blbl93cml0ZSh2b2lkICp2LCBjb25zdCBjaGFyICpiLCBpbnQgbCkKK3sKKwlzdHJ1Y3Qgc3RhdGUJKnN0ID0gdjsKKwlpbnQJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbCAmJiBpICsgc3QtPnBvcyA8IHN0LT5zaXplOyBpKyspCisJCXN0LT5zdHJpbmdbc3QtPnBvcyArIGldID0gYltpXTsKKwlzdC0+cG9zICs9IGk7CisKKwlpZiAoc3QtPnBvcyA+PSBzdC0+bGVuKSB7CisJCXN0LT5sZW4gPSBzdC0+cG9zOworCisJCWlmIChzdC0+bGVuIDwgc3QtPnNpemUpCisJCQlzdC0+c3RyaW5nW3N0LT5sZW5dID0gJ1wwJzsKKwkJZWxzZSBpZiAoIXN0LT51cGRhdGUpCisJCQlzdC0+c3RyaW5nW3N0LT5zaXplIC0gMV0gPSAnXDAnOworCX0KKworCXJldHVybiAoaSk7Cit9CisKK3N0YXRpYyBmcG9zX3QKK2ZtZW1vcGVuX3NlZWsodm9pZCAqdiwgZnBvc190IG9mZiwgaW50IHdoZW5jZSkKK3sKKwlzdHJ1Y3Qgc3RhdGUJKnN0ID0gdjsKKwlzc2l6ZV90CQkgYmFzZSA9IDA7CisKKwlzd2l0Y2ggKHdoZW5jZSkgeworCWNhc2UgU0VFS19TRVQ6CisJCWJyZWFrOworCWNhc2UgU0VFS19DVVI6CisJCWJhc2UgPSBzdC0+cG9zOworCQlicmVhazsKKwljYXNlIFNFRUtfRU5EOgorCQliYXNlID0gc3QtPmxlbjsKKwkJYnJlYWs7CisJfQorCisJaWYgKG9mZiA+IHN0LT5zaXplIC0gYmFzZSB8fCBvZmYgPCAtYmFzZSkgeworCQllcnJubyA9IEVPVkVSRkxPVzsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJc3QtPnBvcyA9IGJhc2UgKyBvZmY7CisKKwlyZXR1cm4gKHN0LT5wb3MpOworfQorCitzdGF0aWMgaW50CitmbWVtb3Blbl9jbG9zZSh2b2lkICp2KQoreworCWZyZWUodik7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitmbWVtb3Blbl9jbG9zZV9mcmVlKHZvaWQgKnYpCit7CisJc3RydWN0IHN0YXRlCSpzdCA9IHY7CisKKwlmcmVlKHN0LT5zdHJpbmcpOworCWZyZWUoc3QpOworCisJcmV0dXJuICgwKTsKK30KKworRklMRSAqCitmbWVtb3Blbih2b2lkICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICptb2RlKQoreworCXN0cnVjdCBzdGF0ZQkqc3Q7CisJRklMRQkJKmZwOworCWludAkJIGZsYWdzLCBvZmxhZ3M7CisKKwlpZiAoc2l6ZSA9PSAwKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCWlmICgoZmxhZ3MgPSBfX3NmbGFncyhtb2RlLCAmb2ZsYWdzKSkgPT0gMCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlpZiAoYnVmID09IE5VTEwgJiYgKChvZmxhZ3MgJiBPX1JEV1IpID09IDApKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCWlmICgoc3QgPSBtYWxsb2Moc2l6ZW9mKCpzdCkpKSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJaWYgKChmcCA9IF9fc2ZwKCkpID09IE5VTEwpIHsKKwkJZnJlZShzdCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJc3QtPnBvcyA9IDA7CisJc3QtPmxlbiA9IChvZmxhZ3MgJiBPX1dST05MWSkgPyAwIDogc2l6ZTsKKwlzdC0+c2l6ZSA9IHNpemU7CisJc3QtPnVwZGF0ZSA9IG9mbGFncyAmIE9fUkRXUjsKKworCWlmIChidWYgPT0gTlVMTCkgeworCQlpZiAoKHN0LT5zdHJpbmcgPSBtYWxsb2Moc2l6ZSkpID09IE5VTEwpIHsKKwkJCWZyZWUoc3QpOworCQkJZnAtPl9mbGFncyA9IDA7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCSpzdC0+c3RyaW5nID0gJ1wwJzsKKwl9IGVsc2UgeworCQlzdC0+c3RyaW5nID0gKGNoYXIgKilidWY7CisKKwkJaWYgKG9mbGFncyAmIE9fVFJVTkMpCisJCQkqc3QtPnN0cmluZyA9ICdcMCc7CisKKwkJaWYgKG9mbGFncyAmIE9fQVBQRU5EKSB7CisJCQljaGFyCSpwOworCisJCQlpZiAoKHAgPSBtZW1jaHIoc3QtPnN0cmluZywgJ1wwJywgc2l6ZSkpICE9IE5VTEwpCisJCQkJc3QtPnBvcyA9IHN0LT5sZW4gPSAocCAtIHN0LT5zdHJpbmcpOworCQkJZWxzZQorCQkJCXN0LT5wb3MgPSBzdC0+bGVuID0gc2l6ZTsKKwkJfQorCX0KKworCWZwLT5fZmxhZ3MgPSAoc2hvcnQpZmxhZ3M7CisJZnAtPl9maWxlID0gLTE7CisJZnAtPl9jb29raWUgPSAodm9pZCAqKXN0OworCWZwLT5fcmVhZCA9IChmbGFncyAmIF9fU1dSKSA/IE5VTEwgOiBmbWVtb3Blbl9yZWFkOworCWZwLT5fd3JpdGUgPSAoZmxhZ3MgJiBfX1NSRCkgPyBOVUxMIDogZm1lbW9wZW5fd3JpdGU7CisJZnAtPl9zZWVrID0gZm1lbW9wZW5fc2VlazsKKwlmcC0+X2Nsb3NlID0gKGJ1ZiA9PSBOVUxMKSA/IGZtZW1vcGVuX2Nsb3NlX2ZyZWUgOiBmbWVtb3Blbl9jbG9zZTsKKworCXJldHVybiAoZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZvcGVuLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZm9wZW4uYwpzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZm9wZW4uYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZvcGVuLmMKaW5kZXggYjA4ZTMzNi4uMTQ2NTA1MiAxMDA2NDQKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZvcGVuLmMKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZvcGVuLmMKQEAgLTEsMyArMSw0IEBACisvKgkkT3BlbkJTRDogZm9wZW4uYyx2IDEuNyAyMDA4LzA1LzAzIDE4OjQ2OjQxIGNobCBFeHAgJCAqLwogLyotCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKICAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMzAsMjYgKzMxLDE3IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZm9wZW4uYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0KKyNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlICJsb2NhbC5oIgogCiBGSUxFICoKLWZvcGVuKGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IGZpbGUsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IG1vZGUpCitmb3Blbihjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICptb2RlKQogewogCUZJTEUgKmZwOwogCWludCBmOwpAQCAtNTksMjMgKzUxLDE5IEBACiAJCXJldHVybiAoTlVMTCk7CiAJaWYgKChmcCA9IF9fc2ZwKCkpID09IE5VTEwpCiAJCXJldHVybiAoTlVMTCk7Ci0JaWYgKChmID0gX29wZW4oZmlsZSwgb2ZsYWdzLCBERUZGSUxFTU9ERSkpIDwgMCkgeworCWlmICgoZiA9IG9wZW4oZmlsZSwgb2ZsYWdzLCBERUZGSUxFTU9ERSkpIDwgMCkgewogCQlmcC0+X2ZsYWdzID0gMDsJCQkvKiByZWxlYXNlICovCiAJCXJldHVybiAoTlVMTCk7CiAJfQotCS8qCi0JICogRmlsZSBkZXNjcmlwdG9ycyBhcmUgYSBmdWxsIGludCwgYnV0IF9maWxlIGlzIG9ubHkgYSBzaG9ydC4KLQkgKiBJZiB3ZSBnZXQgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IgdGhhdCBpcyBncmVhdGVyIHRoYW4KLQkgKiBTSFJUX01BWCwgdGhlbiB0aGUgZmQgd2lsbCBnZXQgc2lnbi1leHRlbmRlZCBpbnRvIGFuCi0JICogaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IuICBIYW5kbGUgdGhpcyBjYXNlIGJ5IGZhaWxpbmcgdGhlCi0JICogb3Blbi4KLQkgKi8KKworCS8qIF9maWxlIGlzIG9ubHkgYSBzaG9ydCAqLwogCWlmIChmID4gU0hSVF9NQVgpIHsKIAkJZnAtPl9mbGFncyA9IDA7CQkJLyogcmVsZWFzZSAqLwotCQlfY2xvc2UoZik7CisJCWNsb3NlKGYpOwogCQllcnJubyA9IEVNRklMRTsKIAkJcmV0dXJuIChOVUxMKTsKIAl9CisKIAlmcC0+X2ZpbGUgPSBmOwogCWZwLT5fZmxhZ3MgPSBmbGFnczsKIAlmcC0+X2Nvb2tpZSA9IGZwOwpAQCAtODMsNiArNzEsNyBAQAogCWZwLT5fd3JpdGUgPSBfX3N3cml0ZTsKIAlmcC0+X3NlZWsgPSBfX3NzZWVrOwogCWZwLT5fY2xvc2UgPSBfX3NjbG9zZTsKKwogCS8qCiAJICogV2hlbiBvcGVuaW5nIGluIGFwcGVuZCBtb2RlLCBldmVuIHRob3VnaCB3ZSB1c2UgT19BUFBFTkQsCiAJICogd2UgbmVlZCB0byBzZWVrIHRvIHRoZSBlbmQgc28gdGhhdCBmdGVsbCgpIGdldHMgdGhlIHJpZ2h0CkBAIC05Miw2ICs4MSw2IEBACiAJICogZnNlZWsgYW5kIGZ0ZWxsLikKIAkgKi8KIAlpZiAob2ZsYWdzICYgT19BUFBFTkQpCi0JCSh2b2lkKV9zc2VlayhmcCwgKGZwb3NfdCkwLCBTRUVLX0VORCk7CisJCSh2b2lkKSBfX3NzZWVrKCh2b2lkICopZnAsIChmcG9zX3QpMCwgU0VFS19FTkQpOwogCXJldHVybiAoZnApOwogfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZyZW9wZW4uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcmVvcGVuLmMKaW5kZXggMzE1OGZiMS4uODI3MTdiMSAxMDA2NDQKLS0tIGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZyZW9wZW4uYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnJlb3Blbi5jCkBAIC0xLDQgKzEsNCBAQAotLyoJJE9wZW5CU0Q6IGZyZW9wZW4uYyx2IDEuMTMgMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkICovCisvKgkkT3BlbkJTRDogZnJlb3Blbi5jLHYgMS4xNCAyMDE0LzA4LzMxIDAyOjIxOjE4IGd1ZW50aGVyIEV4cCAkICovCiAvKi0KICAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwogICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0xMzQsNyArMTM0LDcgQEAKIAkgKiBhc3N1bWUgc3RkZXJyIGlzIGFsd2F5cyBmZCBTVERFUlJfRklMRU5PLCBldmVuIGlmIGJlaW5nIGZyZW9wZW4nZC4KIAkgKi8KIAlpZiAod2FudGZkID49IDAgJiYgZiAhPSB3YW50ZmQpIHsKLQkJaWYgKGR1cDIoZiwgd2FudGZkKSA+PSAwKSB7CisJCWlmIChkdXAzKGYsIHdhbnRmZCwgb2ZsYWdzICYgT19DTE9FWEVDKSA+PSAwKSB7CiAJCQkodm9pZCkgY2xvc2UoZik7CiAJCQlmID0gd2FudGZkOwogCQl9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vbWt0ZW1wLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vbWt0ZW1wLmMKaW5kZXggY2IxNTRjNC4uMmExN2U1MiAxMDA2NDQKLS0tIGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL21rdGVtcC5jCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9ta3RlbXAuYwpAQCAtMSw0ICsxLDQgQEAKLS8qCSRPcGVuQlNEOiBta3RlbXAuYyx2IDEuMzMgMjAxNC8wNS8wNiAyMjo1NToyNyBtaWxsZXJ0IEV4cCAkICovCisvKgkkT3BlbkJTRDogbWt0ZW1wLmMsdiAxLjM0IDIwMTQvMDgvMzEgMDI6MjE6MTggZ3VlbnRoZXIgRXhwICQgKi8KIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OCwgMjAwOCBUaGVvIGRlIFJhYWR0CiAgKiBDb3B5cmlnaHQgKGMpIDE5OTcsIDIwMDgtMjAwOSBUb2RkIEMuIE1pbGxlcgpAQCAtMzUsMTIgKzM1LDE0IEBACiAjZGVmaW5lIE5VTV9DSEFSUwkoc2l6ZW9mKFRFTVBDSEFSUykgLSAxKQogI2RlZmluZSBNSU5fWAkJNgogCisjZGVmaW5lIE1LT1RFTVBfRkxBR1MJKE9fQVBQRU5EIHwgT19DTE9FWEVDIHwgT19EU1lOQyB8IE9fUlNZTkMgfCBPX1NZTkMpCisKICNpZm5kZWYgbml0ZW1zCiAjZGVmaW5lIG5pdGVtcyhfYSkJKHNpemVvZigoX2EpKSAvIHNpemVvZigoX2EpWzBdKSkKICNlbmRpZgogCiBzdGF0aWMgaW50Ci1ta3RlbXBfaW50ZXJuYWwoY2hhciAqcGF0aCwgaW50IHNsZW4sIGludCBtb2RlKQorbWt0ZW1wX2ludGVybmFsKGNoYXIgKnBhdGgsIGludCBzbGVuLCBpbnQgbW9kZSwgaW50IGZsYWdzKQogewogCWNoYXIgKnN0YXJ0LCAqY3AsICplcDsKIAljb25zdCBjaGFyICp0ZW1wY2hhcnMgPSBURU1QQ0hBUlM7CkBAIC02Myw2ICs2NSwxMiBAQAogCQlyZXR1cm4oLTEpOwogCX0KIAorCWlmIChmbGFncyAmIH5NS09URU1QX0ZMQUdTKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4oLTEpOworCX0KKwlmbGFncyB8PSBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSOworCiAJdHJpZXMgPSBJTlRfTUFYOwogCWRvIHsKIAkJY3AgPSBzdGFydDsKQEAgLTg1LDcgKzkzLDcgQEAKIAkJCQlyZXR1cm4oZXJybm8gPT0gRU5PRU5UID8gMCA6IC0xKTsKIAkJCWJyZWFrOwogCQljYXNlIE1LVEVNUF9GSUxFOgotCQkJZmQgPSBvcGVuKHBhdGgsIE9fQ1JFQVR8T19FWENMfE9fUkRXUiwgU19JUlVTUnxTX0lXVVNSKTsKKwkJCWZkID0gb3BlbihwYXRoLCBmbGFncywgU19JUlVTUnxTX0lXVVNSKTsKIAkJCWlmIChmZCAhPSAtMSB8fCBlcnJubyAhPSBFRVhJU1QpCiAJCQkJcmV0dXJuKGZkKTsKIAkJCWJyZWFrOwpAQCAtMTA3LDcgKzExNSw3IEBACiBjaGFyICoKIF9ta3RlbXAoY2hhciAqcGF0aCkKIHsKLQlpZiAobWt0ZW1wX2ludGVybmFsKHBhdGgsIDAsIE1LVEVNUF9OQU1FKSA9PSAtMSkKKwlpZiAobWt0ZW1wX2ludGVybmFsKHBhdGgsIDAsIE1LVEVNUF9OQU1FLCAwKSA9PSAtMSkKIAkJcmV0dXJuKE5VTEwpOwogCXJldHVybihwYXRoKTsKIH0KQEAgLTEyMiwxNSArMTMwLDI3IEBACiB9CiAKIGludAorbWtvc3RlbXBzKGNoYXIgKnBhdGgsIGludCBzbGVuLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuKG1rdGVtcF9pbnRlcm5hbChwYXRoLCBzbGVuLCBNS1RFTVBfRklMRSwgZmxhZ3MpKTsKK30KKworaW50CiBta3N0ZW1wKGNoYXIgKnBhdGgpCiB7Ci0JcmV0dXJuKG1rdGVtcF9pbnRlcm5hbChwYXRoLCAwLCBNS1RFTVBfRklMRSkpOworCXJldHVybihta3RlbXBfaW50ZXJuYWwocGF0aCwgMCwgTUtURU1QX0ZJTEUsIDApKTsKK30KKworaW50Citta29zdGVtcChjaGFyICpwYXRoLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuKG1rdGVtcF9pbnRlcm5hbChwYXRoLCAwLCBNS1RFTVBfRklMRSwgZmxhZ3MpKTsKIH0KIAogaW50CiBta3N0ZW1wcyhjaGFyICpwYXRoLCBpbnQgc2xlbikKIHsKLQlyZXR1cm4obWt0ZW1wX2ludGVybmFsKHBhdGgsIHNsZW4sIE1LVEVNUF9GSUxFKSk7CisJcmV0dXJuKG1rdGVtcF9pbnRlcm5hbChwYXRoLCBzbGVuLCBNS1RFTVBfRklMRSwgMCkpOwogfQogCiBjaGFyICoKQEAgLTEzOCw2ICsxNTgsNiBAQAogewogCWludCBlcnJvcjsKIAotCWVycm9yID0gbWt0ZW1wX2ludGVybmFsKHBhdGgsIDAsIE1LVEVNUF9ESVIpOworCWVycm9yID0gbWt0ZW1wX2ludGVybmFsKHBhdGgsIDAsIE1LVEVNUF9ESVIsIDApOwogCXJldHVybihlcnJvciA/IE5VTEwgOiBwYXRoKTsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9vcGVuX21lbXN0cmVhbS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL29wZW5fbWVtc3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxMDUzNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9vcGVuX21lbXN0cmVhbS5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgkkT3BlbkJTRDogb3Blbl9tZW1zdHJlYW0uYyx2IDEuMyAyMDEzLzA0LzAzIDAzOjExOjUzIGd1ZW50aGVyIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgTWFydGluIFBpZXVjaG90IDxtcGlAb3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworc3RydWN0IHN0YXRlIHsKKwljaGFyCQkgKnN0cmluZzsJLyogYWN0dWFsIHN0cmVhbSAqLworCWNoYXIJCSoqcGJ1ZjsJCS8qIHBvaW50IHRvIHRoZSBzdHJlYW0gKi8KKwlzaXplX3QJCSAqcHNpemU7CS8qIHBvaW50IHRvIG1pbihwb3MsIGxlbikgKi8KKwlzaXplX3QJCSAgcG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiAqLworCXNpemVfdAkJICBzaXplOwkJLyogbnVtYmVyIG9mIGFsbG9jYXRlZCBjaGFyICovCisJc2l6ZV90CQkgIGxlbjsJCS8qIGxlbmd0aCBvZiB0aGUgZGF0YSAqLworfTsKKworc3RhdGljIGludAorbWVtc3RyZWFtX3dyaXRlKHZvaWQgKnYsIGNvbnN0IGNoYXIgKmIsIGludCBsKQoreworCXN0cnVjdCBzdGF0ZQkqc3QgPSB2OworCWNoYXIJCSpwOworCXNpemVfdAkJIGksIGVuZDsKKworCWVuZCA9IChzdC0+cG9zICsgbCk7CisKKwlpZiAoZW5kID49IHN0LT5zaXplKSB7CisJCS8qIDEuNiBpcyAodmVyeSkgY2xvc2UgdG8gdGhlIGdvbGRlbiByYXRpby4gKi8KKwkJc2l6ZV90CXN6ID0gc3QtPnNpemUgKiA4IC8gNTsKKworCQlpZiAoc3ogPCBlbmQgKyAxKQorCQkJc3ogPSBlbmQgKyAxOworCQlwID0gcmVhbGxvYyhzdC0+c3RyaW5nLCBzeik7CisJCWlmICghcCkKKwkJCXJldHVybiAoLTEpOworCQliemVybyhwICsgc3QtPnNpemUsIHN6IC0gc3QtPnNpemUpOworCQkqc3QtPnBidWYgPSBzdC0+c3RyaW5nID0gcDsKKwkJc3QtPnNpemUgPSBzejsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKQorCQlzdC0+c3RyaW5nW3N0LT5wb3MgKyBpXSA9IGJbaV07CisJc3QtPnBvcyArPSBsOworCisJaWYgKHN0LT5wb3MgPiBzdC0+bGVuKSB7CisJCXN0LT5sZW4gPSBzdC0+cG9zOworCQlzdC0+c3RyaW5nW3N0LT5sZW5dID0gJ1wwJzsKKwl9CisKKwkqc3QtPnBzaXplID0gc3QtPnBvczsKKworCXJldHVybiAoaSk7Cit9CisKK3N0YXRpYyBmcG9zX3QKK21lbXN0cmVhbV9zZWVrKHZvaWQgKnYsIGZwb3NfdCBvZmYsIGludCB3aGVuY2UpCit7CisJc3RydWN0IHN0YXRlCSpzdCA9IHY7CisJc3NpemVfdAkJIGJhc2UgPSAwOworCisJc3dpdGNoICh3aGVuY2UpIHsKKwljYXNlIFNFRUtfU0VUOgorCQlicmVhazsKKwljYXNlIFNFRUtfQ1VSOgorCQliYXNlID0gc3QtPnBvczsKKwkJYnJlYWs7CisJY2FzZSBTRUVLX0VORDoKKwkJYmFzZSA9IHN0LT5sZW47CisJCWJyZWFrOworCX0KKworCWlmIChvZmYgPiBTSVpFX01BWCAtIGJhc2UgfHwgb2ZmIDwgLWJhc2UpIHsKKwkJZXJybm8gPSBFT1ZFUkZMT1c7CisJCXJldHVybiAoLTEpOworCX0KKworCXN0LT5wb3MgPSBiYXNlICsgb2ZmOworCSpzdC0+cHNpemUgPSBNSU4oc3QtPnBvcywgc3QtPmxlbik7CisKKwlyZXR1cm4gKHN0LT5wb3MpOworfQorCitzdGF0aWMgaW50CittZW1zdHJlYW1fY2xvc2Uodm9pZCAqdikKK3sKKwlzdHJ1Y3Qgc3RhdGUJKnN0ID0gdjsKKworCWZyZWUoc3QpOworCisJcmV0dXJuICgwKTsKK30KKworRklMRSAqCitvcGVuX21lbXN0cmVhbShjaGFyICoqcGJ1Ziwgc2l6ZV90ICpwc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3RhdGUJKnN0OworCUZJTEUJCSpmcDsKKworCWlmIChwYnVmID09IE5VTEwgfHwgcHNpemUgPT0gTlVMTCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlpZiAoKHN0ID0gbWFsbG9jKHNpemVvZigqc3QpKSkgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCWlmICgoZnAgPSBfX3NmcCgpKSA9PSBOVUxMKSB7CisJCWZyZWUoc3QpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCXN0LT5zaXplID0gQlVGU0laOworCWlmICgoc3QtPnN0cmluZyA9IGNhbGxvYygxLCBzdC0+c2l6ZSkpID09IE5VTEwpIHsKKwkJZnJlZShzdCk7CisJCWZwLT5fZmxhZ3MgPSAwOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCSpzdC0+c3RyaW5nID0gJ1wwJzsKKwlzdC0+cG9zID0gMDsKKwlzdC0+bGVuID0gMDsKKwlzdC0+cGJ1ZiA9IHBidWY7CisJc3QtPnBzaXplID0gcHNpemU7CisKKwkqcGJ1ZiA9IHN0LT5zdHJpbmc7CisJKnBzaXplID0gc3QtPmxlbjsKKworCWZwLT5fZmxhZ3MgPSBfX1NXUjsKKwlmcC0+X2ZpbGUgPSAtMTsKKwlmcC0+X2Nvb2tpZSA9IHN0OworCWZwLT5fcmVhZCA9IE5VTEw7CisJZnAtPl93cml0ZSA9IG1lbXN0cmVhbV93cml0ZTsKKwlmcC0+X3NlZWsgPSBtZW1zdHJlYW1fc2VlazsKKwlmcC0+X2Nsb3NlID0gbWVtc3RyZWFtX2Nsb3NlOworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKworCXJldHVybiAoZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL29wZW5fd21lbXN0cmVhbS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL29wZW5fd21lbXN0cmVhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MTQxODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vb3Blbl93bWVtc3RyZWFtLmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCSRPcGVuQlNEOiBvcGVuX3dtZW1zdHJlYW0uYyx2IDEuMyAyMDE0LzAzLzA2IDA3OjI4OjIxIGdlcmhhcmQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBNYXJ0aW4gUGlldWNob3QgPG1waUBvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK3N0cnVjdCBzdGF0ZSB7CisJd2NoYXJfdAkJICpzdHJpbmc7CS8qIGFjdHVhbCBzdHJlYW0gKi8KKwl3Y2hhcl90CQkqKnBidWY7CQkvKiBwb2ludCB0byB0aGUgc3RyZWFtICovCisJc2l6ZV90CQkgKnBzaXplOwkvKiBwb2ludCB0byBtaW4ocG9zLCBsZW4pICovCisJc2l6ZV90CQkgIHBvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gKi8KKwlzaXplX3QJCSAgc2l6ZTsJCS8qIG51bWJlciBvZiBhbGxvY2F0ZWQgd2NoYXJfdCAqLworCXNpemVfdAkJICBsZW47CQkvKiBsZW5ndGggb2YgdGhlIGRhdGEgKi8KKwltYnN0YXRlX3QJICBtYnM7CQkvKiBjb252ZXJzaW9uIHN0YXRlIG9mIHRoZSBzdHJlYW0gKi8KK307CisKK3N0YXRpYyBpbnQKK3dtZW1zdHJlYW1fd3JpdGUodm9pZCAqdiwgY29uc3QgY2hhciAqYiwgaW50IGwpCit7CisJc3RydWN0IHN0YXRlCSpzdCA9IHY7CisJd2NoYXJfdAkJKnA7CisJc2l6ZV90CQkgbm1jLCBsZW4sIGVuZDsKKworCWVuZCA9IChzdC0+cG9zICsgbCk7CisKKwlpZiAoZW5kID49IHN0LT5zaXplKSB7CisJCS8qIDEuNiBpcyAodmVyeSkgY2xvc2UgdG8gdGhlIGdvbGRlbiByYXRpby4gKi8KKwkJc2l6ZV90CXN6ID0gc3QtPnNpemUgKiA4IC8gNTsKKworCQlpZiAoc3ogPCBlbmQgKyAxKQorCQkJc3ogPSBlbmQgKyAxOworCQlwID0gcmVhbGxvYyhzdC0+c3RyaW5nLCBzeiAqIHNpemVvZih3Y2hhcl90KSk7CisJCWlmICghcCkKKwkJCXJldHVybiAoLTEpOworCQliemVybyhwICsgc3QtPnNpemUsIChzeiAtIHN0LT5zaXplKSAqIHNpemVvZih3Y2hhcl90KSk7CisJCSpzdC0+cGJ1ZiA9IHN0LT5zdHJpbmcgPSBwOworCQlzdC0+c2l6ZSA9IHN6OworCX0KKworCW5tYyA9IChzdC0+c2l6ZSAtIHN0LT5wb3MpICogc2l6ZW9mKHdjaGFyX3QpOworCWxlbiA9IG1ic25ydG93Y3Moc3QtPnN0cmluZyArIHN0LT5wb3MsICZiLCBubWMsIGwsICZzdC0+bWJzKTsKKwlpZiAobGVuID09IChzaXplX3QpLTEpCisJCXJldHVybiAoLTEpOworCXN0LT5wb3MgKz0gbGVuOworCisJaWYgKHN0LT5wb3MgPiBzdC0+bGVuKSB7CisJCXN0LT5sZW4gPSBzdC0+cG9zOworCQlzdC0+c3RyaW5nW3N0LT5sZW5dID0gTCdcMCc7CisJfQorCisJKnN0LT5wc2l6ZSA9IHN0LT5wb3M7CisKKwlyZXR1cm4gKGxlbik7Cit9CisKK3N0YXRpYyBmcG9zX3QKK3dtZW1zdHJlYW1fc2Vlayh2b2lkICp2LCBmcG9zX3Qgb2ZmLCBpbnQgd2hlbmNlKQoreworCXN0cnVjdCBzdGF0ZQkqc3QgPSB2OworCXNzaXplX3QJCSBiYXNlID0gMDsKKworCXN3aXRjaCAod2hlbmNlKSB7CisJY2FzZSBTRUVLX1NFVDoKKwkJYnJlYWs7CisJY2FzZSBTRUVLX0NVUjoKKwkJYmFzZSA9IHN0LT5wb3M7CisJCWJyZWFrOworCWNhc2UgU0VFS19FTkQ6CisJCWJhc2UgPSBzdC0+bGVuOworCQlicmVhazsKKwl9CisKKwlpZiAob2ZmID4gKFNJWkVfTUFYIC8gc2l6ZW9mKHdjaGFyX3QpKSAtIGJhc2UgfHwgb2ZmIDwgLWJhc2UpIHsKKwkJZXJybm8gPSBFT1ZFUkZMT1c7CisJCXJldHVybiAoLTEpOworCX0KKworCS8qCisJICogWFhYIENsZWFyaW5nIG1icyBoZXJlIGludmFsaWRhdGVzIHNoaWZ0IHN0YXRlIGZvciBzdGF0ZS0KKwkgKiBkZXBlbmRlbnQgZW5jb2RpbmdzLCBidXQgdGhleSBhcmUgbm90ICh5ZXQpIHN1cHBvcnRlZC4KKwkgKi8KKwliemVybygmc3QtPm1icywgc2l6ZW9mKHN0LT5tYnMpKTsKKworCXN0LT5wb3MgPSBiYXNlICsgb2ZmOworCSpzdC0+cHNpemUgPSBNSU4oc3QtPnBvcywgc3QtPmxlbik7CisKKwlyZXR1cm4gKHN0LT5wb3MpOworfQorCitzdGF0aWMgaW50Cit3bWVtc3RyZWFtX2Nsb3NlKHZvaWQgKnYpCit7CisJc3RydWN0IHN0YXRlCSpzdCA9IHY7CisKKwlmcmVlKHN0KTsKKworCXJldHVybiAoMCk7Cit9CisKK0ZJTEUgKgorb3Blbl93bWVtc3RyZWFtKHdjaGFyX3QgKipwYnVmLCBzaXplX3QgKnBzaXplKQoreworCXN0cnVjdCBzdGF0ZQkqc3Q7CisJRklMRQkJKmZwOworCisJaWYgKHBidWYgPT0gTlVMTCB8fCBwc2l6ZSA9PSBOVUxMKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCWlmICgoc3QgPSBtYWxsb2Moc2l6ZW9mKCpzdCkpKSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJaWYgKChmcCA9IF9fc2ZwKCkpID09IE5VTEwpIHsKKwkJZnJlZShzdCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJc3QtPnNpemUgPSBCVUZTSVogKiBzaXplb2Yod2NoYXJfdCk7CisJaWYgKChzdC0+c3RyaW5nID0gY2FsbG9jKDEsIHN0LT5zaXplKSkgPT0gTlVMTCkgeworCQlmcmVlKHN0KTsKKwkJZnAtPl9mbGFncyA9IDA7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJKnN0LT5zdHJpbmcgPSBMJ1wwJzsKKwlzdC0+cG9zID0gMDsKKwlzdC0+bGVuID0gMDsKKwlzdC0+cGJ1ZiA9IHBidWY7CisJc3QtPnBzaXplID0gcHNpemU7CisJYnplcm8oJnN0LT5tYnMsIHNpemVvZihzdC0+bWJzKSk7CisKKwkqcGJ1ZiA9IHN0LT5zdHJpbmc7CisJKnBzaXplID0gc3QtPmxlbjsKKworCWZwLT5fZmxhZ3MgPSBfX1NXUjsKKwlmcC0+X2ZpbGUgPSAtMTsKKwlmcC0+X2Nvb2tpZSA9IHN0OworCWZwLT5fcmVhZCA9IE5VTEw7CisJZnAtPl93cml0ZSA9IHdtZW1zdHJlYW1fd3JpdGU7CisJZnAtPl9zZWVrID0gd21lbXN0cmVhbV9zZWVrOworCWZwLT5fY2xvc2UgPSB3bWVtc3RyZWFtX2Nsb3NlOworCV9TRVRfT1JJRU5UQVRJT04oZnAsIDEpOworCisJcmV0dXJuIChmcCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvaW5zcXVlLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2luc3F1ZS5jCnNpbWlsYXJpdHkgaW5kZXggODElCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9pbnNxdWUuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9pbnNxdWUuYwppbmRleCAwOTAyMGFlLi41OTBmZjgzIDEwMDY0NAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvaW5zcXVlLmMKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9pbnNxdWUuYwpAQCAtMSw3ICsxLDkgQEAKKy8qCSRPcGVuQlNEOiBpbnNxdWUuYyx2IDEuMyAyMDE0LzA4LzE1IDA0OjE0OjM2IGd1ZW50aGVyIEV4cCAkCSovCisKIC8qCiAgKiAgQ29weXJpZ2h0IChjKSAxOTkzIEpvaG4gQnJlemFrCiAgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCisgKiAKICAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqICBhcmUgbWV0OgpAQCAtMTIsNyArMTQsNyBAQAogICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKiAgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKICAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCisgKiAKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKICAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECiAgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCkBAIC0yNiwxMiArMjgsNyBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotX19SQ1NJRCgiJE5ldEJTRDogaW5zcXVlLmMsdiAxLjMgMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQiKTsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzZWFyY2guaD4KIAogc3RydWN0IHFlbGVtIHsKQEAgLTQyLDE3ICszOSwxNiBAQAogdm9pZAogaW5zcXVlKHZvaWQgKmVudHJ5LCB2b2lkICpwcmVkKQogewotCXN0cnVjdCBxZWxlbSAqZSA9IChzdHJ1Y3QgcWVsZW0gKikgZW50cnk7Ci0Jc3RydWN0IHFlbGVtICpwID0gKHN0cnVjdCBxZWxlbSAqKSBwcmVkOworCXN0cnVjdCBxZWxlbSAqZSA9IGVudHJ5OworCXN0cnVjdCBxZWxlbSAqcCA9IHByZWQ7CiAKLQlfRElBR0FTU0VSVChlICE9IDApOwotCi0JZS0+cV9iYWNrID0gcDsKLQlpZiAocCkgeworCWlmIChwID09IE5VTEwpCisJCWUtPnFfZm9ydyA9IGUtPnFfYmFjayA9IE5VTEw7CisJZWxzZSB7CiAJCWUtPnFfZm9ydyA9IHAtPnFfZm9ydzsKLQkJaWYgKHAtPnFfZm9ydykKKwkJZS0+cV9iYWNrID0gcDsKKwkJaWYgKHAtPnFfZm9ydyAhPSBOVUxMKQogCQkJcC0+cV9mb3J3LT5xX2JhY2sgPSBlOwogCQlwLT5xX2ZvcncgPSBlOwotCX0gZWxzZQotCQllLT5xX2ZvcncgPSAwOworCX0KIH0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvcmVhbGxvY2FycmF5LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3JlYWxsb2NhcnJheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhY2NkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3JlYWxsb2NhcnJheS5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCSRPcGVuQlNEOiByZWFsbG9jYXJyYXkuYyx2IDEuMSAyMDE0LzA1LzA4IDIxOjQzOjQ5IGRlcmFhZHQgRXhwICQJKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggT3R0byBNb2VyYmVlayA8b3R0b0BkcmlqZi5uZXQ+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qCisgKiBUaGlzIGlzIHNxcnQoU0laRV9NQVgrMSksIGFzIHMxKnMyIDw9IFNJWkVfTUFYCisgKiBpZiBib3RoIHMxIDwgTVVMX05PX09WRVJGTE9XIGFuZCBzMiA8IE1VTF9OT19PVkVSRkxPVworICovCisjZGVmaW5lIE1VTF9OT19PVkVSRkxPVwkoMVVMIDw8IChzaXplb2Yoc2l6ZV90KSAqIDQpKQorCit2b2lkICoKK3JlYWxsb2NhcnJheSh2b2lkICpvcHRyLCBzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKQoreworCWlmICgobm1lbWIgPj0gTVVMX05PX09WRVJGTE9XIHx8IHNpemUgPj0gTVVMX05PX09WRVJGTE9XKSAmJgorCSAgICBubWVtYiA+IDAgJiYgU0laRV9NQVggLyBubWVtYiA8IHNpemUpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gcmVhbGxvYyhvcHRyLCBzaXplICogbm1lbWIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3JlbXF1ZS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9yZW1xdWUuYwpzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvcmVtcXVlLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvcmVtcXVlLmMKaW5kZXggNjA2MGFkOC4uNzFiNzRiMiAxMDA2NDQKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3JlbXF1ZS5jCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvcmVtcXVlLmMKQEAgLTEsNyArMSw5IEBACisvKgkkT3BlbkJTRDogcmVtcXVlLmMsdiAxLjMgMjAxNC8wOC8xNSAwNDoxNDozNiBndWVudGhlciBFeHAgJAkqLworCiAvKgogICogIENvcHlyaWdodCAoYykgMTk5MyBKb2huIEJyZXphawogICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgorICogCiAgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiAgYXJlIG1ldDoKQEAgLTEyLDcgKzE0LDcgQEAKICAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICogIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCiAgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgorICogCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAogICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpAQCAtMjYsMTIgKzI4LDcgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IHJlbXF1ZS5jLHYgMS4zIDIwMTIvMDYvMjUgMjI6MzI6NDUgYWJzIEV4cCAkIik7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c2VhcmNoLmg+CiAKIHN0cnVjdCBxZWxlbSB7CkBAIC00MiwxMiArMzksMTAgQEAKIHZvaWQKIHJlbXF1ZSh2b2lkICplbGVtZW50KQogewotCXN0cnVjdCBxZWxlbSAqZSA9IChzdHJ1Y3QgcWVsZW0gKikgZWxlbWVudDsKKwlzdHJ1Y3QgcWVsZW0gKmUgPSBlbGVtZW50OwogCi0JX0RJQUdBU1NFUlQoZSAhPSAwKTsKLQotCWlmIChlLT5xX2ZvcncpCisJaWYgKGUtPnFfZm9ydyAhPSBOVUxMKQogCQllLT5xX2ZvcnctPnFfYmFjayA9IGUtPnFfYmFjazsKLQlpZiAoZS0+cV9iYWNrKQorCWlmIChlLT5xX2JhY2sgIT0gTlVMTCkKIAkJZS0+cV9iYWNrLT5xX2ZvcncgPSBlLT5xX2Zvcnc7CiB9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvaW1heC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2ltYXguYwppbmRleCAyYzc3ZjQxLi4yZmMwNGU0IDEwMDY0NAotLS0gYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvaW1heC5jCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG9pbWF4LmMKQEAgLTEsNiArMSw1IEBACi0vKgkkT3BlbkJTRDogc3RydG9pbWF4LmMsdiAxLjEgMjAwNi8wMS8xMyAxNzo1ODowOSBtaWxsZXJ0IEV4cCAkCSovCi0KLS8qLQorLyoJJE9wZW5CU0Q6IHN0cnRvaW1heC5jLHYgMS4yIDIwMTQvMDkvMTMgMjA6MTA6MTIgc2Nod2FyemUgRXhwICQJKi8KKy8qCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtNDgsNiArNDcsMTcgQEAKIAlpbnQgbmVnLCBhbnksIGN1dGxpbTsKIAogCS8qCisJICogRW5zdXJlIHRoYXQgYmFzZSBpcyBiZXR3ZWVuIDIgYW5kIDM2IGluY2x1c2l2ZSwgb3IgdGhlIHNwZWNpYWwKKwkgKiB2YWx1ZSBvZiAwLgorCSAqLworCWlmIChiYXNlIDwgMCB8fCBiYXNlID09IDEgfHwgYmFzZSA+IDM2KSB7CisJCWlmIChlbmRwdHIgIT0gMCkKKwkJCSplbmRwdHIgPSAoY2hhciAqKW5wdHI7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgogCSAqIFNraXAgd2hpdGUgc3BhY2UgYW5kIHBpY2sgdXAgbGVhZGluZyArLy0gc2lnbiBpZiBhbnkuCiAJICogSWYgYmFzZSBpcyAwLCBhbGxvdyAweCBmb3IgaGV4IGFuZCAwIGZvciBvY3RhbCwgZWxzZQogCSAqIGFzc3VtZSBkZWNpbWFsOyBpZiBiYXNlIGlzIGFscmVhZHkgMTYsIGFsbG93IDB4LgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2wuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG9sLmMKaW5kZXggZGMyY2Y4OC4uODZjZWMzNSAxMDA2NDQKLS0tIGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2wuYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvbC5jCkBAIC0xLDUgKzEsNSBAQAotLyoJJE9wZW5CU0Q6IHN0cnRvbC5jLHYgMS45IDIwMTMvMDQvMTcgMTc6NDA6MzUgdGVkdSBFeHAgJCAqLwotLyotCisvKgkkT3BlbkJTRDogc3RydG9sLmMsdiAxLjEwIDIwMTQvMDkvMTMgMjA6MTA6MTIgc2Nod2FyemUgRXhwICQgKi8KKy8qCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0KIC8qCiAgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgbG9uZyBpbnRlZ2VyLgogICoKQEAgLTUyLDcgKzUxLDcgQEAKIAkgKiBFbnN1cmUgdGhhdCBiYXNlIGlzIGJldHdlZW4gMiBhbmQgMzYgaW5jbHVzaXZlLCBvciB0aGUgc3BlY2lhbAogCSAqIHZhbHVlIG9mIDAuCiAJICovCi0JaWYgKGJhc2UgIT0gMCAmJiAoYmFzZSA8IDIgfHwgYmFzZSA+IDM2KSkgeworCWlmIChiYXNlIDwgMCB8fCBiYXNlID09IDEgfHwgYmFzZSA+IDM2KSB7CiAJCWlmIChlbmRwdHIgIT0gMCkKIAkJCSplbmRwdHIgPSAoY2hhciAqKW5wdHI7CiAJCWVycm5vID0gRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2xsLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvbGwuYwppbmRleCA0YmNjNTU2Li5jZjgyYzhlIDEwMDY0NAotLS0gYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvbGwuYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvbGwuYwpAQCAtMSw1ICsxLDUgQEAKLS8qICRPcGVuQlNEOiBzdHJ0b2xsLmMsdiAxLjcgMjAxMy8wMy8yOCAxODowOTozOCBtYXJ0eW5hcyBFeHAgJCAqLwotLyotCisvKgkkT3BlbkJTRDogc3RydG9sbC5jLHYgMS44IDIwMTQvMDkvMTMgMjA6MTA6MTIgc2Nod2FyemUgRXhwICQgKi8KKy8qCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtNTAsNiArNTAsMTcgQEAKIAlpbnQgbmVnLCBhbnksIGN1dGxpbTsKIAogCS8qCisJICogRW5zdXJlIHRoYXQgYmFzZSBpcyBiZXR3ZWVuIDIgYW5kIDM2IGluY2x1c2l2ZSwgb3IgdGhlIHNwZWNpYWwKKwkgKiB2YWx1ZSBvZiAwLgorCSAqLworCWlmIChiYXNlIDwgMCB8fCBiYXNlID09IDEgfHwgYmFzZSA+IDM2KSB7CisJCWlmIChlbmRwdHIgIT0gMCkKKwkJCSplbmRwdHIgPSAoY2hhciAqKW5wdHI7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgogCSAqIFNraXAgd2hpdGUgc3BhY2UgYW5kIHBpY2sgdXAgbGVhZGluZyArLy0gc2lnbiBpZiBhbnkuCiAJICogSWYgYmFzZSBpcyAwLCBhbGxvdyAweCBmb3IgaGV4IGFuZCAwIGZvciBvY3RhbCwgZWxzZQogCSAqIGFzc3VtZSBkZWNpbWFsOyBpZiBiYXNlIGlzIGFscmVhZHkgMTYsIGFsbG93IDB4LgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b3VsLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvdWwuYwppbmRleCBhMjM2MzY1Li4yYWE0MWI3IDEwMDY0NAotLS0gYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvdWwuYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvdWwuYwpAQCAtMSw2ICsxLDYgQEAKLS8qCSRPcGVuQlNEOiBzdHJ0b3VsLmMsdiAxLjggMjAxMy8wNC8xNyAxNzo0MDozNSB0ZWR1IEV4cCAkICovCisvKgkkT3BlbkJTRDogc3RydG91bC5jLHYgMS45IDIwMTQvMDkvMTMgMjA6MTA6MTIgc2Nod2FyemUgRXhwICQgKi8KIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTAsNiArNTAsMTMgQEAKIAkvKgogCSAqIFNlZSBzdHJ0b2wgZm9yIGNvbW1lbnRzIGFzIHRvIHRoZSBsb2dpYyB1c2VkLgogCSAqLworCWlmIChiYXNlIDwgMCB8fCBiYXNlID09IDEgfHwgYmFzZSA+IDM2KSB7CisJCWlmIChlbmRwdHIgIT0gMCkKKwkJCSplbmRwdHIgPSAoY2hhciAqKW5wdHI7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gMDsKKwl9CisKIAlzID0gbnB0cjsKIAlkbyB7CiAJCWMgPSAodW5zaWduZWQgY2hhcikgKnMrKzsKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG91bGwuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG91bGwuYwppbmRleCAyOGY2MTNhLi44NDY0MTc2IDEwMDY0NAotLS0gYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvdWxsLmMKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b3VsbC5jCkBAIC0xLDUgKzEsNSBAQAotLyoJJE9wZW5CU0Q6IHN0cnRvdWxsLmMsdiAxLjYgMjAxMy8wMy8yOCAxODowOTozOCBtYXJ0eW5hcyBFeHAgJCAqLwotLyotCisvKgkkT3BlbkJTRDogc3RydG91bGwuYyx2IDEuNyAyMDE0LzA5LzEzIDIwOjEwOjEyIHNjaHdhcnplIEV4cCAkICovCisvKgogICogQ29weXJpZ2h0IChjKSAxOTkyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTUwLDggKzUwLDE1IEBACiAJaW50IG5lZywgYW55LCBjdXRsaW07CiAKIAkvKgotCSAqIFNlZSBzdHJ0b3EgZm9yIGNvbW1lbnRzIGFzIHRvIHRoZSBsb2dpYyB1c2VkLgorCSAqIFNlZSBzdHJ0b2xsIGZvciBjb21tZW50cyBhcyB0byB0aGUgbG9naWMgdXNlZC4KIAkgKi8KKwlpZiAoYmFzZSA8IDAgfHwgYmFzZSA9PSAxIHx8IGJhc2UgPiAzNikgeworCQlpZiAoZW5kcHRyICE9IDApCisJCQkqZW5kcHRyID0gKGNoYXIgKilucHRyOworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIDA7CisJfQorCiAJcyA9IG5wdHI7CiAJZG8gewogCQljID0gKHVuc2lnbmVkIGNoYXIpICpzKys7CkBAIC01OSw3ICs2Niw3IEBACiAJaWYgKGMgPT0gJy0nKSB7CiAJCW5lZyA9IDE7CiAJCWMgPSAqcysrOwotCX0gZWxzZSB7IAorCX0gZWxzZSB7CiAJCW5lZyA9IDA7CiAJCWlmIChjID09ICcrJykKIAkJCWMgPSAqcysrOwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b3VtYXguYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG91bWF4LmMKaW5kZXggY2U2ZTJjMC4uYzczZjdlNSAxMDA2NDQKLS0tIGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b3VtYXguYworKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvdW1heC5jCkBAIC0xLDYgKzEsNSBAQAotLyoJJE9wZW5CU0Q6IHN0cnRvdW1heC5jLHYgMS4xIDIwMDYvMDEvMTMgMTc6NTg6MDkgbWlsbGVydCBFeHAgJAkqLwotCi0vKi0KKy8qCSRPcGVuQlNEOiBzdHJ0b3VtYXguYyx2IDEuMiAyMDE0LzA5LzEzIDIwOjEwOjEyIHNjaHdhcnplIEV4cCAkCSovCisvKgogICogQ29weXJpZ2h0IChjKSAxOTkyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTQ4LDggKzQ3LDE1IEBACiAJaW50IG5lZywgYW55LCBjdXRsaW07CiAKIAkvKgotCSAqIFNlZSBzdHJ0b3EgZm9yIGNvbW1lbnRzIGFzIHRvIHRoZSBsb2dpYyB1c2VkLgorCSAqIFNlZSBzdHJ0b2ltYXggZm9yIGNvbW1lbnRzIGFzIHRvIHRoZSBsb2dpYyB1c2VkLgogCSAqLworCWlmIChiYXNlIDwgMCB8fCBiYXNlID09IDEgfHwgYmFzZSA+IDM2KSB7CisJCWlmIChlbmRwdHIgIT0gMCkKKwkJCSplbmRwdHIgPSAoY2hhciAqKW5wdHI7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gMDsKKwl9CisKIAlzID0gbnB0cjsKIAlkbyB7CiAJCWMgPSAodW5zaWduZWQgY2hhcikgKnMrKzsKQEAgLTU3LDcgKzYzLDcgQEAKIAlpZiAoYyA9PSAnLScpIHsKIAkJbmVnID0gMTsKIAkJYyA9ICpzKys7Ci0JfSBlbHNlIHsgCisJfSBlbHNlIHsKIAkJbmVnID0gMDsKIAkJaWYgKGMgPT0gJysnKQogCQkJYyA9ICpzKys7CmRpZmYgLS1naXQgYS9saWJkbC9BbmRyb2lkLm1rIGIvbGliZGwvQW5kcm9pZC5tawppbmRleCBjYjFjYjdkLi5jOWZjYTBlIDEwMDY0NAotLS0gYS9saWJkbC9BbmRyb2lkLm1rCisrKyBiL2xpYmRsL0FuZHJvaWQubWsKQEAgLTIzLDYgKzIzLDcgQEAKIAogTE9DQUxfU1JDX0ZJTEVTOj0gbGliZGwuYwogTE9DQUxfQ0ZMQUdTIDo9IC1XYWxsIC1XZXh0cmEgLVd1bnVzZWQgLVdlcnJvcgorTE9DQUxfQ1hYX1NUTCA6PSBub25lCiAKIExPQ0FMX01PRFVMRSA6PSBsaWJkbAogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCkBAIC0zNiwzICszNywxNSBAQAogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KIAogaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQorCisjIEEgZHVtbXkgbGliZGwuYS4gTmVlZCBmb3Igc3RhdGljIGV4ZWN1dGFibGVzIHVzaW5nIHRoZSBMTFZNIHVud2luZGVyLiBNb3N0CisjIGZ1bmN0aW9ucyBkZWZhdWx0IHRvIGZhaWx1cmUsIG90aGVycyB1c2UgYSBzZW5zaWJsZSBkZWZhdWx0IChkbF9pdGVyYXRlX3BoZHIoKQorIyByZXR1cm5zIDAsIGFzIHdvdWxkIGhhcHBlbiBpZiB0aGUgdXNlciBpdGVyYXRlZCBvdmVyIGV2ZXJ5IHBoZHIpLgoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9TUkNfRklMRVM6PSBsaWJkbC5jCitMT0NBTF9DRkxBR1MgOj0gLVdhbGwgLVdleHRyYSAtV3VudXNlZCAtV2Vycm9yCitMT0NBTF9DWFhfU1RMIDo9IG5vbmUKKworTE9DQUxfTU9EVUxFIDo9IGxpYmRsCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKZGlmZiAtLWdpdCBhL2xpYm0vQW5kcm9pZC5tayBiL2xpYm0vQW5kcm9pZC5tawppbmRleCA5OTRjYWEwLi5kNGNkN2MzIDEwMDY0NAotLS0gYS9saWJtL0FuZHJvaWQubWsKKysrIGIvbGlibS9BbmRyb2lkLm1rCkBAIC0xLDYgKzEsOCBAQAogaWZuZXEgKCQoVEFSR0VUX1VTRV9QUklWQVRFX0xJQk0pLHRydWUpCiBMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKIAorYmlvbmljX2NvdmVyYWdlIDo9IGZhbHNlCisKICMgVE9ETzogdGhpcyBjb21lcyBmcm9tIGZyb20gdXBzdHJlYW0ncyBsaWJjLCBub3QgbGlibSwgYnV0IGl0J3MgYW4KICMgaW1wbGVtZW50YXRpb24gZGV0YWlsIHRoYXQgc2hvdWxkIGhhdmUgaGlkZGVuIHZpc2liaWxpdHksIHNvIGl0IG5lZWRzCiAjIHRvIGJlIGluIHdoYXRldmVyIGxpYnJhcnkgdGhlIG1hdGggY29kZSBpcyBpbi4KQEAgLTE2LDYgKzE4LDggQEAKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2JzZHNyYy9iX2V4cC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2JzZHNyYy9iX2xvZy5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2JzZHNyYy9iX3RnYW1tYS5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9jYXRyaWcuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvY2F0cmlnZi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Fjb3MuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zZi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Fjb3NoLmMgXApAQCAtODIsNiArODYsNyBAQAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfYXRhbmYuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jYXJnLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2FyZ2YuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jYXJnbC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NicnQuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jYnJ0Zi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Njb3NoLmMgXApAQCAtOTIsMjAgKzk3LDI1IEBACiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jZXhwZi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NpbWFnLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2ltYWdmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2ltYWdsLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29uai5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NvbmpmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29uamwuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb3B5c2lnbi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NvcHlzaWduZi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nvcy5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nvc2YuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jcHJvai5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nwcm9qZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nwcm9qbC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NyZWFsLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3JlYWxmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3JlYWxsLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3NpbmguYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jc2luaGYuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jc3FydC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NzcXJ0Zi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NzcXJ0bC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2N0YW5oLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3RhbmhmLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZXJmLmMgXApAQCAtMTcyLDYgKzE4Miw3IEBACiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190cnVuY2YuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvd19jYWJzLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3dfY2Fic2YuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvd19jYWJzbC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy93X2RyZW0uYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvd19kcmVtZi5jIFwKIApAQCAtMTc5LDcgKzE5MCw3IEBACiAgICAgZmFrZV9sb25nX2RvdWJsZS5jIFwKICAgICBzaWduYml0LmMgXAogCi1saWJtX2xkX3NyY19maWxlcyA9IFwKK2xpYm1fbGQxMjhfc3JjX2ZpbGVzID0gXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvc2wuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zaGwuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hc2lubC5jIFwKQEAgLTE4Nyw2ICsxOTgsNyBAQAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbmhsLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfZm1vZGwuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9oeXBvdGwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sZ2FtbWFsLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcmVtYWluZGVybC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NxcnRsLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfYXNpbmhsLmMgXApAQCAtMTk0LDYgKzIwNiw3IEBACiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jYnJ0bC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NlaWxsLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29weXNpZ25sLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfY29zaGwuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb3NsLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmFic2wuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbG9vcmwuYyBcCkBAIC0yMTUsMTUgKzIyOCwxOSBAQAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludGwuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yb3VuZGwuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zY2FsYm5sLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc2luaGwuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zaW5sLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdGFuaGwuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW5sLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdHJ1bmNsLmMgXAogCi1saWJtX2xkX3NyY19maWxlcyArPSBcCitsaWJtX2xkMTI4X3NyY19maWxlcyArPSBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9pbnZ0cmlnLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvZV9sZ2FtbWFsX3IuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX2Nvc2wuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX3NpbmwuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX3RhbmwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2VyZmwuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2V4cDJsLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19leHBsLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19sb2dsLmMgXApAQCAtMjU1LDYgKzI3MiwxMCBAQAogIyBsaWJtLmEgZm9yIHRhcmdldC4KICMKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQoraWZuZXEgKCwkKGZpbHRlciAkKFRBUkdFVF9BUkNIKSx4ODYgeDg2XzY0KSkKKyMgQ2xhbmcgaGFzIHdyb25nIGxvbmcgZG91YmxlIHNpemVzIGZvciB4ODYuCitMT0NBTF9DTEFORyA6PSBmYWxzZQorZW5kaWYKIExPQ0FMX01PRFVMRTo9IGxpYm0KIExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawogTE9DQUxfQVJNX01PREUgOj0gYXJtCkBAIC0yNjMsMzUgKzI4NCw0NiBAQAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGlibV9jb21tb25fc3JjX2ZpbGVzKQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliYwogCitMT0NBTF9OQVRJVkVfQ09WRVJBR0UgOj0gJChiaW9uaWNfY292ZXJhZ2UpCisKICMgYXJjaC1zcGVjaWZpYyBzZXR0aW5ncwogTE9DQUxfQ19JTkNMVURFU19hcm0gOj0gJChMT0NBTF9QQVRIKS9hcm0KIExPQ0FMX1NSQ19GSUxFU19hcm0gOj0gYXJtL2ZlbnYuYwogCiBMT0NBTF9DX0lOQ0xVREVTX2FybTY0IDo9ICQobGlibV9sZF9pbmNsdWRlcykKLUxPQ0FMX1NSQ19GSUxFU19hcm02NCA6PSBhcm02NC9mZW52LmMgJChsaWJtX2xkX3NyY19maWxlcykKK0xPQ0FMX1NSQ19GSUxFU19hcm02NCA6PSBhcm02NC9mZW52LmMgJChsaWJtX2xkMTI4X3NyY19maWxlcykKIAogTE9DQUxfQ19JTkNMVURFU194ODYgOj0gJChMT0NBTF9QQVRIKS9pMzg3CiBMT0NBTF9TUkNfRklMRVNfeDg2IDo9IGkzODcvZmVudi5jCiAKIExPQ0FMX0NfSU5DTFVERVNfeDg2XzY0IDo9ICQobGlibV9sZF9pbmNsdWRlcykKLUxPQ0FMX1NSQ19GSUxFU194ODZfNjQgOj0gYW1kNjQvZmVudi5jICQobGlibV9sZF9zcmNfZmlsZXMpCitMT0NBTF9TUkNfRklMRVNfeDg2XzY0IDo9IGFtZDY0L2ZlbnYuYyAkKGxpYm1fbGQxMjhfc3JjX2ZpbGVzKQogCiBMT0NBTF9TUkNfRklMRVNfbWlwcyA6PSBtaXBzL2ZlbnYuYwogCiBMT0NBTF9DX0lOQ0xVREVTX21pcHM2NCA6PSAkKGxpYm1fbGRfaW5jbHVkZXMpCi1MT0NBTF9TUkNfRklMRVNfbWlwczY0IDo9IG1pcHMvZmVudi5jICQobGlibV9sZF9zcmNfZmlsZXMpCitMT0NBTF9TUkNfRklMRVNfbWlwczY0IDo9IG1pcHMvZmVudi5jICQobGlibV9sZDEyOF9zcmNfZmlsZXMpCiAKK0xPQ0FMX0NYWF9TVEwgOj0gbm9uZQogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQogCiAjCiAjIGxpYm0uc28gZm9yIHRhcmdldC4KICMKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQoraWZuZXEgKCwkKGZpbHRlciAkKFRBUkdFVF9BUkNIKSx4ODYgeDg2XzY0KSkKKyMgQ2xhbmcgaGFzIHdyb25nIGxvbmcgZG91YmxlIHNpemVzIGZvciB4ODYuCitMT0NBTF9DTEFORyA6PSBmYWxzZQorZW5kaWYKIExPQ0FMX01PRFVMRTo9IGxpYm0KIExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliYwogTE9DQUxfV0hPTEVfU1RBVElDX0xJQlJBUklFUyA6PSBsaWJtCiAKK0xPQ0FMX05BVElWRV9DT1ZFUkFHRSA6PSAkKGJpb25pY19jb3ZlcmFnZSkKKworTE9DQUxfQ1hYX1NUTCA6PSBub25lCisKICMgV2UnZCByZWFsbHkgbGlrZSB0byBkbyB0aGlzIGZvciBhbGwgYXJjaGl0ZWN0dXJlcywgYnV0IHNpbmNlIHRoaXMgd2Fzbid0IGRvbmUKICMgYmVmb3JlLCB0aGVzZSBzeW1ib2xzIG11c3QgY29udGludWUgdG8gYmUgZXhwb3J0ZWQgb24gTFAzMiBmb3IgYmluYXJ5CiAjIGNvbXBhdGliaWxpdHkuCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9mcHUuaCBiL2xpYm0vaW5jbHVkZS9hbWQ2NC9tYWNoaW5lL2ZwdS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9mcHUuaApyZW5hbWUgdG8gbGlibS9pbmNsdWRlL2FtZDY0L21hY2hpbmUvZnB1LmgKZGlmZiAtLWdpdCBhL2xpYm0vaW5jbHVkZS9jb21wbGV4LmggYi9saWJtL2luY2x1ZGUvY29tcGxleC5oCmluZGV4IDA3MDI1NDEuLmZmNmIxNjYgMTAwNjQ0Ci0tLSBhL2xpYm0vaW5jbHVkZS9jb21wbGV4LmgKKysrIGIvbGlibS9pbmNsdWRlL2NvbXBsZXguaApAQCAtNDYsMTQgKzQ2LDM5IEBACiAjZGVmaW5lCWNvbXBsZXgJCV9Db21wbGV4CiAjZGVmaW5lCUkJCV9Db21wbGV4X0kKIAorI2lmIF9fSVNPX0NfVklTSUJMRSA+PSAyMDExCisjaWZkZWYgX19jbGFuZ19fCisjZGVmaW5lCUNNUExYKHgsIHkpCSgoZG91YmxlIGNvbXBsZXgpeyB4LCB5IH0pCisjZGVmaW5lCUNNUExYRih4LCB5KQkoKGZsb2F0IGNvbXBsZXgpeyB4LCB5IH0pCisjZGVmaW5lCUNNUExYTCh4LCB5KQkoKGxvbmcgZG91YmxlIGNvbXBsZXgpeyB4LCB5IH0pCisjZWxpZiBfX0dOVUNfUFJFUkVRX18oNCwgNykKKyNkZWZpbmUJQ01QTFgoeCwgeSkJX19idWlsdGluX2NvbXBsZXgoKGRvdWJsZSkoeCksIChkb3VibGUpKHkpKQorI2RlZmluZQlDTVBMWEYoeCwgeSkJX19idWlsdGluX2NvbXBsZXgoKGZsb2F0KSh4KSwgKGZsb2F0KSh5KSkKKyNkZWZpbmUJQ01QTFhMKHgsIHkpCV9fYnVpbHRpbl9jb21wbGV4KChsb25nIGRvdWJsZSkoeCksIChsb25nIGRvdWJsZSkoeSkpCisjZW5kaWYKKyNlbmRpZiAvKiBfX0lTT19DX1ZJU0lCTEUgPj0gMjAxMSAqLworCiBfX0JFR0lOX0RFQ0xTCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKIAogZG91YmxlCQljYWJzKGRvdWJsZSBjb21wbGV4KTsKIGZsb2F0CQljYWJzZihmbG9hdCBjb21wbGV4KTsKIGxvbmcgZG91YmxlCWNhYnNsKGxvbmcgZG91YmxlIGNvbXBsZXgpOworZG91YmxlIGNvbXBsZXgJY2Fjb3MoZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleAljYWNvc2YoZmxvYXQgY29tcGxleCk7Citkb3VibGUgY29tcGxleAljYWNvc2goZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleAljYWNvc2hmKGZsb2F0IGNvbXBsZXgpOwogZG91YmxlCQljYXJnKGRvdWJsZSBjb21wbGV4KTsKIGZsb2F0CQljYXJnZihmbG9hdCBjb21wbGV4KTsKIGxvbmcgZG91YmxlCWNhcmdsKGxvbmcgZG91YmxlIGNvbXBsZXgpOworZG91YmxlIGNvbXBsZXgJY2FzaW4oZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleAljYXNpbmYoZmxvYXQgY29tcGxleCk7Citkb3VibGUgY29tcGxleAljYXNpbmgoZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleAljYXNpbmhmKGZsb2F0IGNvbXBsZXgpOworZG91YmxlIGNvbXBsZXgJY2F0YW4oZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleAljYXRhbmYoZmxvYXQgY29tcGxleCk7Citkb3VibGUgY29tcGxleAljYXRhbmgoZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleAljYXRhbmhmKGZsb2F0IGNvbXBsZXgpOwogZG91YmxlIGNvbXBsZXgJY2Nvcyhkb3VibGUgY29tcGxleCk7CiBmbG9hdCBjb21wbGV4CWNjb3NmKGZsb2F0IGNvbXBsZXgpOwogZG91YmxlIGNvbXBsZXgJY2Nvc2goZG91YmxlIGNvbXBsZXgpOwpAQCAtODcsNiArMTEyLDcgQEAKIGRvdWJsZSBjb21wbGV4CWN0YW5oKGRvdWJsZSBjb21wbGV4KTsKIGZsb2F0IGNvbXBsZXgJY3RhbmhmKGZsb2F0IGNvbXBsZXgpOwogCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAogX19FTkRfREVDTFMKIAogI2VuZGlmIC8qIF9DT01QTEVYX0ggKi8KZGlmZiAtLWdpdCBhL2xpYm0vaW5jbHVkZS9tYXRoLmggYi9saWJtL2luY2x1ZGUvbWF0aC5oCmluZGV4IDNlY2ExNDAuLjE1NDIzNzQgMTAwNjQ0Ci0tLSBhL2xpYm0vaW5jbHVkZS9tYXRoLmgKKysrIGIvbGlibS9pbmNsdWRlL21hdGguaApAQCAtNDU5LDE0ICs0NTksMTcgQEAKIGxvbmcgZG91YmxlCXRhbmwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJdGdhbW1hbChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQl0cnVuY2wobG9uZyBkb3VibGUpOwotCiAjZW5kaWYgLyogX19JU09fQ19WSVNJQkxFID49IDE5OTkgKi8KIAotI2lmIGRlZmluZWQoX0dOVV9TT1VSQ0UpCisjaWYgX19CU0RfVklTSUJMRQorbG9uZyBkb3VibGUJbGdhbW1hbF9yKGxvbmcgZG91YmxlLCBpbnQgKik7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19VU0VfR05VKQogdm9pZCBzaW5jb3MoZG91YmxlLCBkb3VibGUqLCBkb3VibGUqKTsKIHZvaWQgc2luY29zZihmbG9hdCwgZmxvYXQqLCBmbG9hdCopOwogdm9pZCBzaW5jb3NsKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSosIGxvbmcgZG91YmxlKik7Ci0jZW5kaWYgLyogX0dOVV9TT1VSQ0UgKi8KKyNlbmRpZiAvKiBfX1VTRV9HTlUgKi8KIAogI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKIF9fRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9saWJtL3NpbmNvcy5jIGIvbGlibS9zaW5jb3MuYwppbmRleCBhZDc1NTQ5Li5hNTYwOGNmIDEwMDY0NAotLS0gYS9saWJtL3NpbmNvcy5jCisrKyBiL2xpYm0vc2luY29zLmMKQEAgLTIyLDggKzIyLDggQEAKICAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKICAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgotICoKICAqLworCiAjZGVmaW5lIF9HTlVfU09VUkNFIDEKICNpbmNsdWRlIDxtYXRoLmg+CiAKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9lX2xnYW1tYWxfci5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2VfbGdhbW1hbF9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkM2FmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9lX2xnYW1tYWxfci5jCkBAIC0wLDAgKzEsMzMwIEBACisvKiBAKCMpZV9sZ2FtbWFfci5jIDEuMyA5NS8wMS8xOCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogU2VlIGVfbGdhbW1hX3IuYyBmb3IgY29tcGxldGUgY29tbWVudHMuCisgKgorICogQ29udmVydGVkIHRvIGxvbmcgZG91YmxlIGJ5IFN0ZXZlbiBHLiBLYXJnbC4KKyAqLworCisjaW5jbHVkZSAiZnBtYXRoLmgiCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3Qgdm9sYXRpbGUgZG91YmxlIHZ6ZXJvID0gMDsKKworc3RhdGljIGNvbnN0IGRvdWJsZQoremVybz0gIDAsCitoYWxmPSAgMC41LAorb25lID0gIDE7CisKK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQorcGkgID0gIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODhlKzAwTDsKKy8qCisgKiBEb21haW4geSBpbiBbMHgxcC0xMTksIDAuMjhdLCByYW5nZSB+Wy0xLjQwNjVlLTM2LCAxLjQwNjVlLTM2XToKKyAqIHwobGdhbW1hKDIgLSB5KSArIHkgLyAyKSAvIHkgLSBhKHkpfCA8IDIqKi0xMTkuMQorICovCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK2EwICA9ICA3LjcyMTU2NjQ5MDE1MzI4NjA2MDY1MTIwOTAwODI0MDI0Mjk2ZS0wMkwsCithMSAgPSAgMy4yMjQ2NzAzMzQyNDExMzIxODIzNjIwNzU4MzMyMzAxODQ5OGUtMDFMLAorYTIgID0gIDYuNzM1MjMwMTA1MzE5ODA5NTEzMzI0NjA1MzgzMzAyODIyMTdlLTAyTCwKK2EzICA9ICAyLjA1ODA4MDg0Mjc3ODQ1NDc4NzkwMDA5MjUyODAzNDYzMTI5ZS0wMkwsCithNCAgPSAgNy4zODU1NTEwMjg2NzM5ODUyNjYyNzI5MjgzOTI5NjAwMTYyNmUtMDNMLAorYTUgID0gIDIuODkwNTEwMzMwNzQxNTIzMjg1NzY4Mjk1MDk1MjI0ODM0NjhlLTAzTCwKK2E2ICA9ICAxLjE5Mjc1MzkxMTcwMzI2MDk3NjE4MzU3MzQ5ODgxODQyOTEzZS0wM0wsCithNyAgPSAgNS4wOTY2OTUyNDc0MzA0MjQ2MjUxNTI1NjM0MDIwNjIwMzAxOWUtMDRMLAorYTggID0gIDIuMjMxNTQ3NTg0NTM1NzgwOTYxNDM2MDkyNTU1NTk1NzYwMTdlLTA0TCwKK2E5ICA9ICA5Ljk0NTc1MTI3ODE4Mzk3NjMyMTI2OTc4NzMxNTQyNzU1MTI5ZS0wNUwsCithMTAgPSAgNC40OTI2MjM2NzM3NTQyMDQ3MTI4NzU0NTg5NTAyNzA5ODE0NWUtMDVMLAorYTExID0gIDIuMDUwNzIxMjc4NDUxMTc5OTU0MjY1MTk2NzE0ODE2Mjg4NDllLTA1TCwKK2ExMiA9ICA5LjQzOTQ4ODE2OTU5MDk2NzQ4NDU0MDg3MTQxNDQ3OTM5NTEzZS0wNkwsCithMTMgPSAgNC4zNzQ4Njc4MDY5NzM1OTMzMDMwMzg1MjA1MDcxODI4NzQxOWUtMDZMLAorYTE0ID0gIDIuMDM5MjA3ODM4OTIzNjI1NTgyNzYwMzczNjM4NDc2NTE4MDllLTA2TCwKK2ExNSA9ICA5LjU1MTkxMDcwMDU3OTY3Mjg3ODc3OTIzMDczMjAwMzI0NjQ5ZS0wN0wsCithMTYgPSAgNC40ODk5MzI4NjE4NTc0MDg1MzE3MDY1NzEzOTQ4NzYyMDU2MGUtMDdMLAorYTE3ID0gIDIuMTMxMDc1NDM1OTc2MjA5MTE2NzUzMTY3MjgxNzk1NjM1MjJlLTA3TCwKK2ExOCA9ICA5LjcwNzQ1Mzc5ODU1MzA0NDk5ODY3NTQ2NTQ5NTUxMDIzNDczZS0wOEwsCithMTkgPSAgNS42MTg4OTk3MDM5MDI5MDI1NzkyNjQ4NzczNDY5NTQwMjA3NWUtMDhMLAorYTIwID0gIDYuNDI3Mzk2NTMwMjQxMzAwNzE4NjY2ODQzNTg5NjA5NjA5NTFlLTA5TCwKK2EyMSA9ICAzLjM0NDkxMDYyMTQzNjQ5MjkxNzQ2MTk1NjEyOTkxODcwMTE5ZS0wOEwsCithMjIgPSAtMS41NzA2ODU0NzM5NDMxNTIyMzkzNDY1MzAxMTQ0MDY0MTQ3MmUtMDhMLAorYTIzID0gIDEuMzA4MTI4MjU0MjI0MTU4NDEyMTM3MzM0ODc3NDUyMDA2MzJlLTA4TDsKKy8qCisgKiBEb21haW4geCBpbiBbdGMtMC4yNCwgdGMrMC4yOF0sIHJhbmdlIH5bLTYuMzIwMWUtMzcsIDYuMzIwMWUtMzddOgorICogfChsZ2FtbWEoeCkgLSB0ZikgLSB0KHggLSB0Yyl8IDwgMioqLTEyMC4zLgorICovCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK3RjICA9ICAxLjQ2MTYzMjE0NDk2ODM2MjM0MTI2MjY1OTU0MjMyNTcyMTMzZSswMEwsCit0ZiAgPSAtMS4yMTQ4NjI5MDUzNTg0OTYwODA5NTUxNDU1NzE3NzY5MTU4NGUtMDFMLAordHQgID0gIDEuNTcwNjE3Mzk5NDUwNzc2NzU0ODQyMzc4Mzc5OTI5NTE3MDRlLTM2TCwKK3QwICA9IC0xLjk5MjM4MzI5NDk5MzE0NjkyNzI4NjU1NjIzNzY3MDE5MjQwZS0zNkwsCit0MSAgPSAtNi4wODQ1MzQzMDcxMTcxMTQwNDExNjg4NzQ1NzY2MzI4MTQxNmUtMzVMLAordDIgID0gIDQuODM4MzYxMjI3MjM4MTA1ODUyMTM3MjIzODA4NTQ4Mjg5MDRlLTAxTCwKK3QzICA9IC0xLjQ3NTg3NzIyOTk0NTMwNzAyMDMwOTU1MDkzOTUwNjY4Mjc1ZS0wMUwsCit0NCAgPSAgNi40NjI0OTQwMjM4OTEyNzUyNjU2MTAwMzQ2NDIwMjY3MTkyM2UtMDJMLAordDUgID0gLTMuMjc4ODU0MTA4ODQ4MTMwNTUwMDg1MDI1ODY4NjM3NDgwNjNlLTAyTCwKK3Q2ICA9ICAxLjc5NzA2NzUxMTUyMTAzOTQyOTI4NjM4Mjc2MDY3MTY0OTM1ZS0wMkwsCit0NyAgPSAtMS4wMzE0MjIzMDM2NjM2Mzg3Mjc1MTYwMjAyOTY3Mjc2Nzk3OGUtMDJMLAordDggID0gIDYuMTAwNTM2MDIwNTE3ODg4NDAzMTM1NzMxNTA3ODUwODA5NThlLTAzTCwKK3Q5ICA9IC0zLjY4NDU2OTYwODMxNjM3MzI1NDcwNjQxMDIxODkyOTY4OTU0ZS0wM0wsCit0MTAgPSAgMi4yNTk3NjQ4MjMyMjE4MTA0NjYxMTQ0MDg1NTM0MDk2ODU2MGUtMDNMLAordDExID0gLTEuNDAyMjUxNDQ1OTA0NDUwODI5MzM0OTAzOTU5NTA2NjQ5NjFlLTAzTCwKK3QxMiA9ICA4Ljc4MjMyNjM0NzE3NjgxMjY0MDM1MDE0ODc4MTcyNDg1NTc1ZS0wNEwsCit0MTMgPSAtNS41NDE5NDk1Mjc5NjY4MjMwMTIyMDY4NDc2MDU5MTQwMzg5OWUtMDRMLAordDE0ID0gIDMuNTE5MTI5NTY4Mzc4NDgyMDkyMjA0MjEyMTM5NzUwMDAyOThlLTA0TCwKK3QxNSA9IC0yLjI0NjUzNDQzNjk1OTQ3NDU2NTQyNjY5Mjg5MzY3MDU1NTQyZS0wNEwsCit0MTYgPSAgMS40NDA3MDM5NTQyMDg0MDczNzY5NTYxMTkyOTY4MDUxMTgyM2UtMDRMLAordDE3ID0gLTkuMjc2MDk4NjU1NTAzOTQxNDAwNjcwNTk0ODc1MTg4NjI1MTJlLTA1TCwKK3QxOCA9ICA1Ljk5MzQ3MzM0NDM4NDM3MDgxNDEyOTQ1NDI4MzY1NDMzMDczZS0wNUwsCit0MTkgPSAtMy44ODQ1ODM4ODg1NDU3MjgyNTYwMzk2NDI3NDEzNDgwMTAwOWUtMDVMLAordDIwID0gIDIuNTI0NzY2MzE2MTAzMjgxMjkyMTc4OTY0MzYxODY1NTEwNDNlLTA1TCwKK3QyMSA9IC0xLjY0NTA4NTg0OTgxNjU4NjkyNTU2OTk0MjEyNDU3NTE4NTM2ZS0wNUwsCit0MjIgPSAgMS4wNzQzNDU4MzQ3NTk4NzAwNzQ5NTUyMzM0MDI5NjE3MzgzOWUtMDVMLAordDIzID0gLTcuMDMwNzA0MDc1MTkzOTcyNjA5Mjk0ODI1NTA0NDg4NzgzOTllLTA2TCwKK3QyNCA9ICA0LjYwOTY4NTkwNjkzNzUzNTc5NjQ4Mzg1NjI5MDAzMTAwNDY5ZS0wNkwsCit0MjUgPSAtMy4wMjc2NTQ3Mzc3ODgzMjAzNjAxODQzODY3Njk0NTUxMjY2MWUtMDZMLAordDI2ID0gIDEuOTkyMzg3NzE1NDU1MDM4MTk5NzI3NDEyODg1MTEzMDM0MDFlLTA2TCwKK3QyNyA9IC0xLjMxMjgxMjk5ODIyNjE0MDg0ODYxODY4ODE3OTUxNzg4NTc5ZS0wNkwsCit0MjggPSAgOC42MDg0NDQzMjI2NzM5OTY1NTA1NTU3NDY0MjA1MjM3MDIyM2UtMDdMLAordDI5ID0gLTUuNjQ1MzU0ODY0MzIzOTc0MTMyNzMyNDgzNjM1NTA1MzYzNzRlLTA3TCwKK3QzMCA9ICAzLjk5MzU3NzgzNjc2Mjc1NjYwOTM0OTAzMTM5NTkyNzI3NzM3ZS0wN0wsCit0MzEgPSAtMi45NTg0OTAyOTE5MzQzMzEyMTc5NTQ5NTIxNTg2OTMxMTYxMGUtMDdMLAordDMyID0gIDEuMzc3OTAxNDQ0MzUwNzMxMjQ5NzY2OTYyNTA4MDQ5NDAzODRlLTA3TDsKKy8qCisgKiBEb21haW4geSBpbiBbLTAuMSwgMC4yMzJdLCByYW5nZSB+Wy0xLjQwNDZlLTM3LCAxLjQxODFlLTM3XToKKyAqIHwobGdhbW1hKDEgKyB5KSArIDAuNSAqIHkpIC8geSAtIHUoeSkgLyB2KHkpfCA8IDIqKi0xMjIuOAorICovCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK3UwICA9IC03LjcyMTU2NjQ5MDE1MzI4NjA2MDY1MTIwOTAwODI0MDI0MzExZS0wMkwsCit1MSAgPSAgNC4yNDA4Mjc3MjI3MTkzODE2NzQzMDk4MzExMzI0MjQ4MjY1NmUtMDFMLAordTIgID0gIDIuOTYxOTQwMDM0ODE0NTcxMDEwNTgzMjE5Nzc0MTMzMzIxNzFlKzAwTCwKK3UzICA9ICA2LjQ5NTAzMjY3NzExMjU4MDQzOTk3NzkwOTgzMDcxNTQzNzEwZSswMEwsCit1NCAgPSAgNy40MDA5MDA1MTI4ODE1MDE3NzE1MjgzNTY5ODk0ODY0NDQ4M2UrMDBMLAordTUgID0gIDQuOTQ2OTgwMzYyOTY3NTYwNDQ2MTA4MDU5MDAzNDA3MjM0NjRlKzAwTCwKK3U2ICA9ICAyLjAwMTk0MjI0NjEwNzk2Mjk0NzYyNDY5NTUwNjg0OTQ3NzY4ZSswMEwsCit1NyAgPSAgNC44MjA3MzA4Nzc1MDYwODg5NTk5NjkxNTA1MTU2ODgzNDk0OWUtMDFMLAordTggID0gIDYuNDY2OTQwNTIyODA1MDY1NjgxOTIzMzM4NDg0Mzc1ODU0MjdlLTAyTCwKK3U5ICA9ICA0LjE3Njg1NTI2NzU1MTAwMjU5MzE2NjI1MzQ4OTMzMTA4ODEwZS0wM0wsCit1MTAgPSAgOS4wNjM2MTAwMzU1MDMxNDMyNzE0NDExOTMwNzgxMDA1MzQxMGUtMDVMLAordjEgID0gIDUuMTU5MzcwOTg1OTI4ODcyNzU5OTQzMjA0OTY5OTk5NTE5NDdlKzAwTCwKK3YyICA9ICAxLjE0MDY4NDE4NzY2MjUxNDg2Nzc3NjA0NDAzMzA0NzE3NTU4ZSswMUwsCit2MyAgPSAgMS40MTE2NDgzOTQzNzUyNDc0NDA1NTcyMzg3MTgzOTc0ODQ4OWUrMDFMLAordjQgID0gIDEuMDcxNzA3MDI2NTYxNzk1ODI4MDU3OTEwNjMyNzc5NjA1MzJlKzAxTCwKK3Y1ICA9ICA1LjE0NDQ4Njk0MTc5MDQ3ODc5OTE1MDQyOTk4NDUzNjMyNDM0ZSswMEwsCit2NiAgPSAgMS41NTIxMDA4ODA5NDU4NTU0MDYzNzQ5MzgyNjQzMTE3MDI4OWUrMDBMLAordjcgID0gIDIuODI5NzU3MzI4NDk0MjQ1NjI3MTk4OTM2NTc0MTYzNjU2NzNlLTAxTCwKK3Y4ICA9ICAyLjg2NDI0NjIyNzU0NzUzMTk4MDEwNTI1Nzg2MDA1NDQzNTM5ZS0wMkwsCit2OSAgPSAgMS4zNTM2NDI1MzU3MDQwMzc3MTAwNTkyMjQ0MTQ0MjY4ODk3OGUtMDNMLAordjEwID0gIDEuOTE1MTQxNzM3MDIzOTgzNzUzNDY2NTg5NDM3NDk1ODA2NjZlLTA1TCwKK3YxMSA9IC0zLjI1MzY0Njg2ODkwMjQyMzI3OTQ0NTg0NjkxNDY2MDM0MjY4ZS0wOEw7CisvKgorICogRG9tYWluIHggaW4gKDIsIDNdLCByYW5nZSB+Wy0xLjMzNDFlLTM2LCAxLjM1MzZlLTM2XToKKyAqIHwobGdhbW1hKHkrMikgLSAwLjUgKiB5KSAvIHkgLSBzKHkpL3IoeSl8IDwgMioqLTEyMC4xCisgKiB3aXRoIHkgPSB4IC0gMi4KKyAqLworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCitzMCAgPSAtNy43MjE1NjY0OTAxNTMyODYwNjA2NTEyMDkwMDgyNDAyNDI5N2UtMDJMLAorczEgID0gIDEuMjMyMjE2ODc4NTA5MTY0NDg5MDM5MTQxNzA4MDU4NTIyNTNlLTAxTCwKK3MyICA9ICA1LjQzNjczMTg4Njk5OTM3MjM5ODA4MjU1Mzc4MjkzODIwMDIwZS0wMUwsCitzMyAgPSAgNi4zMTk5ODEzNzExOTAwNTIzMzM4MzY2Njc5MTE3NjMwMTgwMGUtMDFMLAorczQgID0gIDMuNzU4ODUzNDAxNzk0Nzk4NTA5OTM4MTE1MDE1OTYyMTM3NjNlLTAxTCwKK3M1ICA9ICAxLjMxNTcyOTA4NzQzMjc1MDUyNjIzNDEwMTk1MDExMjYxNTc1ZS0wMUwsCitzNiAgPSAgMi44MjUyODQ1MzI5OTEzODY4NTUwNzE4NjI4NzE0OTY5OTc0OWUtMDJMLAorczcgID0gIDMuNzAyNjIwMjE1NTAzNDA4MTc4Njc2ODg3MTQ4ODA3OTcwMTllLTAzTCwKK3M4ICA9ICAyLjgzMzc0MDAwMzEyMzcxMTk5NjI1Nzc0MTI5MjkwOTczNjQ4ZS0wNEwsCitzOSAgPSAgMS4xNTA5MTgzMDIzOTE0ODI5MDc1ODg4MzUwNTU4MjM0MzY5MWUtMDVMLAorczEwID0gIDIuMDQyMDM0NzQyODE0OTM5NzEzMjY1MDYzODQ2NDY2OTI0NDZlLTA3TCwKK3MxMSA9ICA5Ljc5NTQ0MTk4MDc4OTkyMDU4NTQ4NjA3NDA3NjM1NjQ1NzYzZS0xMEwsCityMSAgPSAgMi41ODAzNzQ2NjY1NTYwNTI4NTkzNzExMjgzMjAzOTUzNzQ5MmUrMDBMLAorcjIgID0gIDIuODYyODk0MTMzOTI3NzYzOTkyNjI1MTM4NDk5MTE1MzExODBlKzAwTCwKK3IzICA9ICAxLjc4NjkxMDQ0NzM1MjY3NDk3NDUyODQ3ODI5NTc5NTE0MzY3ZSswMEwsCityNCAgPSAgNi44OTQwMDM4MTQ0NjcyNTM0Mjg0Njg1NDIxNTYwMDAwODA1NWUtMDFMLAorcjUgID0gIDEuNzAxMzU4NjU0NjI1Njc5NTU4NjcxMzQxOTc1OTUzNjUzNDNlLTAxTCwKK3I2ICA9ICAyLjY4Nzk0ODE2MTgzOTY0NDIwMzc1NDk4OTg2MTUyNzY2NzYzZS0wMkwsCityNyAgPSAgMi42NDYxNzIzNDI0NDg2MTgzMjg3MDA4ODg5MzMzMjAwNjY3OWUtMDNMLAorcjggID0gIDEuNTI4ODE3NjEyMzkxODA4MDA2NDAwNjgxMjg2ODE3MjU3MDJlLTA0TCwKK3I5ICA9ICA0LjYzMjY0ODEzNzYyMjk2MDI5ODI0ODUxMzUxMjU3NjM4NTU4ZS0wNkwsCityMTAgPSAgNS44OTQ2MTUxOTE0Njk1NzM0MzA4Mzg0ODk2NzMzMzY3MTE0MmUtMDhMLAorcjExID0gIDEuNzkwMjc2NzgxNzY1ODI1Mjc3OTgzMjc0NDE2MzY1NTI5NjhlLTEwTDsKKy8qCisgKiBEb21haW4geiBpbiBbOCwgMHgxcDcwXSwgcmFuZ2UgflstOS44MjE0ZS0zNSwgOS44MjE0ZS0zNV06CisgKiB8bGdhbW1hKHgpIC0gKHggLSAwLjUpICogKGxvZyh4KSAtIDEpIC0gdygxL3gpfCA8IDIqKi0xMTMuMAorICovCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK3cwICA9ICA0LjE4OTM4NTMzMjA0NjcyNzQxNzgwMzI5NzM2NDA1NjE3NzM4ZS0wMUwsCit3MSAgPSAgOC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMjg1MjAyNmUtMDJMLAordzIgID0gLTIuNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mjc4MTAxMjM1MjhlLTAzTCwKK3czICA9ICA3LjkzNjUwNzkzNjUwNzkzNjUwNzkxNzA4OTM5NDkzOTA3MzgwZS0wNEwsCit3NCAgPSAtNS45NTIzODA5NTIzODA5NTIzNDM5MDQ1MDAwNDQ0NDM3MDk1OWUtMDRMLAordzUgID0gIDguNDE3NTA4NDE3NTA4Mzc2MzM4ODc4MTc2NTg4NDg4NDU2OTVlLTA0TCwKK3c2ICA9IC0xLjkxNzUyNjkxNzUyMzk2ODQ5OTQzMTcyMzM3MzQ3MjU5NzQzZS0wM0wsCit3NyAgPSAgNi40MTAyNTY0MDg4MDMzMzA2OTQyOTEwNjU0MTQ1OTAxNTU1N2UtMDNMLAordzggID0gLTIuOTU1MDY1MzA4MDE3MzIxMzM0Mzc5OTA0MzMwODAzMjcwNzRlLTAyTCwKK3c5ICA9ICAxLjc5NjQ0MjM3MzI4NDQ0MTAxNTk2NzY2NTg2OTc5NTc2OTI3ZS0wMUwsCit3MTAgPSAtMS4zOTI0MDUzOTEwODM2NzY0MTkyMDE3MjY0OTI1OTczNjM5NGUrMDBMLAordzExID0gIDEuMzM5ODc3MDE0NzkwMDcyMzMzMjUyODg4NTc3NTg2NDE3NjFlKzAxTCwKK3cxMiA9IC0xLjU2MzYzNTk2NDMxMDg0Mjc5NzgwOTY2NTkwMTE2MDA2MjU1ZSswMkwsCit3MTMgPSAgMi4xNDgzMDk3ODA0NDQxMDI2NzIwMTE3MjMzMjk1MjA0MDc3N2UrMDNMLAordzE0ID0gLTMuMjg2MzYwNjc0NzQyMjczNzgzNTI3NjE1MTY1ODkwOTIzMzRlKzA0TCwKK3cxNSA9ICA1LjA2MjAxMjU3NzQ3ODY1MTM4NDMyNjYzNTc0MjUxNDYyNDg1ZSswNUwsCit3MTYgPSAtNi43OTcyMDEyMzM1MjAyMzYzNjcwNjI0NzU5OTcyODA0ODM0NGUrMDZMLAordzE3ID0gIDYuNTc1NTY2MDE3MDU0NzIxMDY5ODk0OTcyODk0NjU5NDkyNTVlKzA3TCwKK3cxOCA9IC0zLjI2MjI5MDU4MTQxMTgxNzgzNTM0MjU3NjMyMzg5NDE1NTgwZSswOEw7CisKK3N0YXRpYyBsb25nIGRvdWJsZQorc2luX3BpbChsb25nIGRvdWJsZSB4KQoreworCXZvbGF0aWxlIGxvbmcgZG91YmxlIHZ6OworCWxvbmcgZG91YmxlIHksejsKKwl1aW50NjRfdCBseCwgbjsKKwl1aW50MTZfdCBoeDsKKworCXkgPSAteDsKKworCXZ6ID0geSsweDEucDExMjsKKwl6ID0gdnotMHgxLnAxMTI7CisJaWYgKHogPT0geSkKKwkgICAgcmV0dXJuIHplcm87CisKKwl2eiA9IHkrMHgxLnAxMTA7CisJRVhUUkFDVF9MREJMMTI4X1dPUkRTKGh4LGx4LG4sdnopOworCXogPSB2ei0weDEucDExMDsKKwlpZiAoeiA+IHkpIHsKKwkgICAgeiAtPSAwLjI1OworCSAgICBuLS07CisJfQorCW4gJj0gNzsKKwl5ID0geSAtIHogKyBuICogMC4yNTsKKworCXN3aXRjaCAobikgeworCSAgICBjYXNlIDA6ICAgeSA9ICBfX2tlcm5lbF9zaW5sKHBpKnksemVybywwKTsgYnJlYWs7CisJICAgIGNhc2UgMToKKwkgICAgY2FzZSAyOiAgIHkgPSAgX19rZXJuZWxfY29zbChwaSooMC41LXkpLHplcm8pOyBicmVhazsKKwkgICAgY2FzZSAzOgorCSAgICBjYXNlIDQ6ICAgeSA9ICBfX2tlcm5lbF9zaW5sKHBpKihvbmUteSksemVybywwKTsgYnJlYWs7CisJICAgIGNhc2UgNToKKwkgICAgY2FzZSA2OiAgIHkgPSAtX19rZXJuZWxfY29zbChwaSooeS0xLjUpLHplcm8pOyBicmVhazsKKwkgICAgZGVmYXVsdDogIHkgPSAgX19rZXJuZWxfc2lubChwaSooeS0yLjApLHplcm8sMCk7IGJyZWFrOworCSAgICB9CisJcmV0dXJuIC15OworfQorCitsb25nIGRvdWJsZQorbGdhbW1hbF9yKGxvbmcgZG91YmxlIHgsIGludCAqc2lnbmdhbXApCit7CisJbG9uZyBkb3VibGUgbmFkaixwLHAxLHAyLHAzLHEscix0LHcseSx6OworCXVpbnQ2NF90IGxseCxseDsKKwlpbnQgaTsKKwl1aW50MTZfdCBoeCxpeDsKKworCUVYVFJBQ1RfTERCTDEyOF9XT1JEUyhoeCxseCxsbHgseCk7CisKKyAgICAvKiBwdXJnZSArLUluZiBhbmQgTmFOcyAqLworCSpzaWduZ2FtcCA9IDE7CisJaXggPSBoeCYweDdmZmY7CisJaWYoaXg9PTB4N2ZmZikgcmV0dXJuIHgqeDsKKworICAgLyogcHVyZ2UgKy0wIGFuZCB0aW55IGFyZ3VtZW50cyAqLworCSpzaWduZ2FtcCA9IDEtMiooaHg+PjE1KTsKKwlpZihpeDwweDNmZmYtMTE2KSB7CQkvKiB8eHw8MioqLShwKzMpLCByZXR1cm4gLWxvZyh8eHwpICovCisJICAgIGlmKChpeHxseHxsbHgpPT0wKQorCQlyZXR1cm4gb25lL3Z6ZXJvOworCSAgICByZXR1cm4gLWxvZ2woZmFic2woeCkpOworCX0KKworICAgIC8qIHB1cmdlIG5lZ2F0aXZlIGludGVnZXJzIGFuZCBzdGFydCBldmFsdWF0aW9uIGZvciBvdGhlciB4IDwgMCAqLworCWlmKGh4JjB4ODAwMCkgeworCSAgICAqc2lnbmdhbXAgPSAxOworCSAgICBpZihpeD49MHgzZmZmKzExMikgCQkvKiB8eHw+PTIqKihwLTEpLCBtdXN0IGJlIC1pbnRlZ2VyICovCisJCXJldHVybiBvbmUvdnplcm87CisJICAgIHQgPSBzaW5fcGlsKHgpOworCSAgICBpZih0PT16ZXJvKSByZXR1cm4gb25lL3Z6ZXJvOworCSAgICBuYWRqID0gbG9nbChwaS9mYWJzbCh0KngpKTsKKwkgICAgaWYodDx6ZXJvKSAqc2lnbmdhbXAgPSAtMTsKKwkgICAgeCA9IC14OworCX0KKworICAgIC8qIHB1cmdlIDEgYW5kIDIgKi8KKwlpZigoaXg9PTB4M2ZmZiB8fCBpeD09MHg0MDAwKSAmJiAobHh8bGx4KT09MCkgciA9IDA7CisgICAgLyogZm9yIHggPCAyLjAgKi8KKwllbHNlIGlmKGl4PDB4NDAwMCkgeworCSAgICBpZih4PD04Ljk5OTk5NjE4NTMwMjczNDRlLTAxKSB7CisJCXIgPSAtbG9nbCh4KTsKKwkJaWYoeD49Ny4zMTU5OTgwNzczOTI1NzgxZS0wMSkge3kgPSAxLXg7IGk9IDA7fQorCQllbHNlIGlmKHg+PTIuMzE2Mzk5ODEyNjk4MzY0M2UtMDEpIHt5PSB4LSh0Yy0xKTsgaT0xO30KKwkgIAllbHNlIHt5ID0geDsgaT0yO30KKwkgICAgfSBlbHNlIHsKKwkJciA9IDA7CisJICAgICAgICBpZih4Pj0xLjczMTYzMTI3ODk5MTY5OTJlKzAwKSB7eT0yLXg7aT0wO30KKwkgICAgICAgIGVsc2UgaWYoeD49MS4yMzE2MzIyMzI2NjYwMTU2ZSswMCkge3k9eC10YztpPTE7fQorCQllbHNlIHt5PXgtMTtpPTI7fQorCSAgICB9CisJICAgIHN3aXRjaChpKSB7CisJICAgICAgY2FzZSAwOgorCQl6ID0geSp5OworCQlwMSA9IGEwK3oqKGEyK3oqKGE0K3oqKGE2K3oqKGE4K3oqKGExMCt6KihhMTIreiooYTE0K3oqKGExNisKKwkJICAgIHoqKGExOCt6KihhMjAreiphMjIpKSkpKSkpKSkpOworCQlwMiA9IHoqKGExK3oqKGEzK3oqKGE1K3oqKGE3K3oqKGE5K3oqKGExMSt6KihhMTMreiooYTE1KworCQkgICAgeiooYTE3K3oqKGExOSt6KihhMjEreiphMjMpKSkpKSkpKSkpKTsKKwkJcCAgPSB5KnAxK3AyOworCQlyICArPSBwLXkvMjsgYnJlYWs7CisJICAgICAgY2FzZSAxOgorCQlwID0gdDAreSp0MSt0dCt5KnkqKHQyK3kqKHQzK3kqKHQ0K3kqKHQ1K3kqKHQ2K3kqKHQ3K3kqKHQ4KworCQkgICAgeSoodDkreSoodDEwK3kqKHQxMSt5Kih0MTIreSoodDEzK3kqKHQxNCt5Kih0MTUreSoodDE2KworCQkgICAgeSoodDE3K3kqKHQxOCt5Kih0MTkreSoodDIwK3kqKHQyMSt5Kih0MjIreSoodDIzKworCQkgICAgeSoodDI0K3kqKHQyNSt5Kih0MjYreSoodDI3K3kqKHQyOCt5Kih0MjkreSoodDMwKworCQkgICAgeSoodDMxK3kqdDMyKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpOworCQlyICs9IHRmICsgcDsgYnJlYWs7CisJICAgICAgY2FzZSAyOgorCQlwMSA9IHkqKHUwK3kqKHUxK3kqKHUyK3kqKHUzK3kqKHU0K3kqKHU1K3kqKHU2K3kqKHU3KworCQkgICAgeSoodTgreSoodTkreSp1MTApKSkpKSkpKSkpOworCQlwMiA9IG9uZSt5Kih2MSt5Kih2Mit5Kih2Myt5Kih2NCt5Kih2NSt5Kih2Nit5Kih2NysKKwkJICAgIHkqKHY4K3kqKHY5K3kqKHYxMCt5KnYxMSkpKSkpKSkpKSk7CisJCXIgKz0gcDEvcDIteS8yOworCSAgICB9CisJfQorICAgIC8qIHggPCA4LjAgKi8KKwllbHNlIGlmKGl4PDB4NDAwMikgeworCSAgICBpID0geDsKKwkgICAgeSA9IHgtaTsKKwkgICAgcCA9IHkqKHMwK3kqKHMxK3kqKHMyK3kqKHMzK3kqKHM0K3kqKHM1K3kqKHM2K3kqKHM3K3kqKHM4KworCQl5KihzOSt5KihzMTAreSpzMTEpKSkpKSkpKSkpKTsKKwkgICAgcSA9IG9uZSt5KihyMSt5KihyMit5KihyMyt5KihyNCt5KihyNSt5KihyNit5KihyNyt5KihyOCsKKwkJeSoocjkreSoocjEwK3kqcjExKSkpKSkpKSkpKTsKKwkgICAgciA9IHkvMitwL3E7CisJICAgIHogPSAxOwkvKiBsZ2FtbWEoMStzKSA9IGxvZyhzKSArIGxnYW1tYShzKSAqLworCSAgICBzd2l0Y2goaSkgeworCSAgICBjYXNlIDc6IHogKj0gKHkrNik7CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlIDY6IHogKj0gKHkrNSk7CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlIDU6IHogKj0gKHkrNCk7CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlIDQ6IHogKj0gKHkrMyk7CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlIDM6IHogKj0gKHkrMik7CQkvKiBGQUxMVEhSVSAqLworCQkgICAgciArPSBsb2dsKHopOyBicmVhazsKKwkgICAgfQorICAgIC8qIDguMCA8PSB4IDwgMioqKHArMykgKi8KKwl9IGVsc2UgaWYgKGl4PDB4M2ZmZisxMTYpIHsKKwkgICAgdCA9IGxvZ2woeCk7CisJICAgIHogPSBvbmUveDsKKwkgICAgeSA9IHoqejsKKwkgICAgdyA9IHcwK3oqKHcxK3kqKHcyK3kqKHczK3kqKHc0K3kqKHc1K3kqKHc2K3kqKHc3K3kqKHc4KworCQl5Kih3OSt5Kih3MTAreSoodzExK3kqKHcxMit5Kih3MTMreSoodzE0K3kqKHcxNSt5Kih3MTYrCisJCXkqKHcxNyt5KncxOCkpKSkpKSkpKSkpKSkpKSkpOworCSAgICByID0gKHgtaGFsZikqKHQtb25lKSt3OworICAgIC8qIDIqKihwKzMpIDw9IHggPD0gaW5mICovCisJfSBlbHNlIAorCSAgICByID0gIHgqKGxvZ2woeCktMSk7CisJaWYoaHgmMHg4MDAwKSByID0gbmFkaiAtIHI7CisJcmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvZV9yZW1fcGlvMmwuaCBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9lX3JlbV9waW8ybC5oCmluZGV4IDA3OGQwYzMuLjVkNzhjNGQgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9lX3JlbV9waW8ybC5oCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9lX3JlbV9waW8ybC5oCkBAIC02LDcgKzYsNyBAQAogICoKICAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCiAgKiBpcyBwcmVzZXJ2ZWQuCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgpAQCAtMTcsOCArMTcsOCBAQAogX19GQlNESUQoIiRGcmVlQlNEJCIpOwogCiAvKiBsZDEyOCB2ZXJzaW9uIG9mIF9faWVlZTc1NF9yZW1fcGlvMmwoeCx5KQotICoKLSAqIHJldHVybiB0aGUgcmVtYWluZGVyIG9mIHggcmVtIHBpLzIgaW4geVswXSt5WzFdCisgKiAKKyAqIHJldHVybiB0aGUgcmVtYWluZGVyIG9mIHggcmVtIHBpLzIgaW4geVswXSt5WzFdIAogICogdXNlIF9fa2VybmVsX3JlbV9waW8yKCkKICAqLwogCkBAIC04OCwyNCArODgsMjQgQEAKIAkJdW5pb24gSUVFRWwyYml0cyB1MjsKIAkgICAgICAgIGludCBleDE7CiAJICAgICAgICBqICA9IGV4OwotCSAgICAgICAgeVswXSA9IHItdzsKKwkgICAgICAgIHlbMF0gPSByLXc7IAogCQl1Mi5lID0geVswXTsKIAkJZXgxID0gdTIueGJpdHMuZXhwc2lnbiAmIDB4N2ZmZjsKIAkgICAgICAgIGkgPSBqLWV4MTsKIAkgICAgICAgIGlmKGk+NTEpIHsgIC8qIDJuZCBpdGVyYXRpb24gbmVlZGVkLCBnb29kIHRvIDI0OCAqLwogCQkgICAgdCAgPSByOwotCQkgICAgdyAgPSBmbipwaW8yXzI7CisJCSAgICB3ICA9IGZuKnBpbzJfMjsJCiAJCSAgICByICA9IHQtdzsKLQkJICAgIHcgID0gZm4qcGlvMl8ydC0oKHQtciktdyk7CisJCSAgICB3ICA9IGZuKnBpbzJfMnQtKCh0LXIpLXcpOwkKIAkJICAgIHlbMF0gPSByLXc7CiAJCSAgICB1Mi5lID0geVswXTsKIAkJICAgIGV4MSA9IHUyLnhiaXRzLmV4cHNpZ24gJiAweDdmZmY7CiAJCSAgICBpID0gai1leDE7CiAJCSAgICBpZihpPjExOSkgewkvKiAzcmQgaXRlcmF0aW9uIG5lZWQsIDMxNiBiaXRzIGFjYyAqLwogCQkgICAgCXQgID0gcjsJLyogd2lsbCBjb3ZlciBhbGwgcG9zc2libGUgY2FzZXMgKi8KLQkJICAgIAl3ICA9IGZuKnBpbzJfMzsKKwkJICAgIAl3ICA9IGZuKnBpbzJfMzsJCiAJCSAgICAJciAgPSB0LXc7Ci0JCSAgICAJdyAgPSBmbipwaW8yXzN0LSgodC1yKS13KTsKKwkJICAgIAl3ICA9IGZuKnBpbzJfM3QtKCh0LXIpLXcpOwkKIAkJICAgIAl5WzBdID0gci13OwogCQkgICAgfQogCQl9CkBAIC0xMTMsNyArMTEzLDcgQEAKIAkgICAgeVsxXSA9IChyLXlbMF0pLXc7CiAJICAgIHJldHVybiBuOwogCX0KLSAgICAvKgorICAgIC8qIAogICAgICAqIGFsbCBvdGhlciAobGFyZ2UpIGFyZ3VtZW50cwogICAgICAqLwogCWlmKGV4PT0weDdmZmYpIHsJCS8qIHggaXMgaW5mIG9yIE5hTiAqLwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2ludnRyaWcuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9pbnZ0cmlnLmMKaW5kZXggZGY2N2QxNi4uNGNlY2E4YSAxMDA2NDQKLS0tIGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2ludnRyaWcuYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvaW52dHJpZy5jCkBAIC01OCw4ICs1OCw4IEBACiAgKi8KIGNvbnN0IGxvbmcgZG91YmxlIGF0YW5oaVtdID0gewogCSA0LjYzNjQ3NjA5MDAwODA2MTE2MjE0MjU2MjMxNDYxMjE0Mzk3ZS0wMUwsCi0JIDcuODUzOTgxNjMzOTc0NDgzMDk2MTU2NjA4NDU4MTk4NzU2OTllLTAxTCwKLQkgOS44Mjc5MzcyMzI0NzMyOTA2Nzk4NTcxMDYxMTAxNDY2NjAzOGUtMDFMLAorCSA3Ljg1Mzk4MTYzMzk3NDQ4MzA5NjE1NjYwODQ1ODE5ODc1Njk5ZS0wMUwsICAgICAgIAorCSA5LjgyNzkzNzIzMjQ3MzI5MDY3OTg1NzEwNjExMDE0NjY2MDM4ZS0wMUwsICAgICAgIAogCSAxLjU3MDc5NjMyNjc5NDg5NjYxOTIzMTMyMTY5MTYzOTc1MTQwZSswMEwsCiB9OwogCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgva19jb3NsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgva19jb3NsLmMKaW5kZXggNWY0YWEzNy4uZmU1Nzc3MyAxMDA2NDQKLS0tIGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2tfY29zbC5jCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX2Nvc2wuYwpAQCAtNiw3ICs2LDcgQEAKICAqCiAgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAogICogaXMgcHJlc2VydmVkLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgva19leHBsLmggYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgva19leHBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2NjhmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX2V4cGwuaApAQCAtMCwwICsxLDMyOCBAQAorLyogZnJvbTogRnJlZUJTRDogaGVhZC9saWIvbXN1bi9sZDEyOC9zX2V4cGwuYyAyNTEzNDUgMjAxMy0wNi0wMyAyMDowOToyMloga2FyZ2wgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBTdGV2ZW4gRy4gS2FyZ2wKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBPcHRpbWl6ZWQgYnkgQnJ1Y2UgRC4gRXZhbnMuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogbGQxMjggdmVyc2lvbiBvZiBrX2V4cGwuaC4gIFNlZSAuLi9sZDgwL3NfZXhwbC5jIGZvciBtb3N0IGNvbW1lbnRzLgorICoKKyAqIFNlZSAuLi9zcmMvZV9leHAuYyBhbmQgLi4vc3JjL2tfZXhwLmggZm9yIHByZWNpc2lvbi1pbmRlcGVuZGVudCBjb21tZW50cworICogYWJvdXQgdGhlIHNlY29uZGFyeSBrZXJuZWxzLgorICovCisKKyNkZWZpbmUJSU5URVJWQUxTCTEyOAorI2RlZmluZQlMT0cyX0lOVEVSVkFMUwk3CisjZGVmaW5lCUJJQVMJKExEQkxfTUFYX0VYUCAtIDEpCisKK3N0YXRpYyBjb25zdCBkb3VibGUKKy8qCisgKiBsbjIvSU5URVJWQUxTID0gTDErTDIgKGhpK2xvIGRlY29tcG9zaXRpb24gZm9yIG11bHRpcGxpY2F0aW9uKS4gIEwxIG11c3QKKyAqIGhhdmUgYXQgbGVhc3QgMjIgKD0gbG9nMih8TERCTF9NSU5fRVhQLWV4dHJhc3wpICsgbG9nMihJTlRFUlZBTFMpKSBsb3dlc3QKKyAqIGJpdHMgemVybyBzbyB0aGF0IG11bHRpcGxpY2F0aW9uIG9mIGl0IGJ5IG4gaXMgZXhhY3QuCisgKi8KK0lOVl9MID0gMS44NDY2NDk2NTIzMzc4NzMxZSsyLAkJLyogIDB4MTcxNTQ3NjUyYjgyZmUuMHAtNDUgKi8KK0wyID0gLTEuMDI1MzY3MDYzODg5NDczMWUtMjk7CQkvKiAtMHgxLjlmZjAzNDI1NDJmYzNwLTk3ICovCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKKy8qIDB4MS42MmU0MmZlZmEzOWVmMzU3OTNjNzY4MDAwMDAwcC04ICovCitMMSA9ICA1LjQxNTIxMjM0ODEyNDU3MjcyOTgyMjEyNTk1OTE0NTY3NTA4ZS0zTDsKKworLyoKKyAqIFhYWCB2YWx1ZXMgaW4gaGV4IGluIGNvbW1lbnRzIGhhdmUgYmVlbiBsb3N0IChvciB3ZXJlIG5ldmVyIHByZXNlbnQpCisgKiBmcm9tIGhlcmUuCisgKi8KK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQorLyoKKyAqIERvbWFpbiBbLTAuMDAyNzA4LCAwLjAwMjcwOF0sIHJhbmdlIH5bLTIuNDAyMWUtMzgsIDIuNDIzNGUtMzhdOgorICogfGV4cCh4KSAtIHAoeCl8IDwgMioqLTEyNC45CisgKiAoMC4wMDI3MDggaXMgbG4yLygyKklOVEVSVkFMUykgcm91bmRlZCB1cCBhIGxpdHRsZSkuCisgKgorICogWFhYIHRoZSBjb2VmZnMgYXJlbid0IHZlcnkgY2FyZWZ1bGx5IHJvdW5kZWQsIGFuZCBJIGdldCAzLjYgbW9yZSBiaXRzLgorICovCitBMiAgPSAgMC41LAorQTMgID0gIDEuNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTEwODU1MDBlLTFMLAorQTQgID0gIDQuMTY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY0MjU4ODUzMjBlLTJMLAorQTUgID0gIDguMzMzMzMzMzMzMzMzMzMzMzMzMzQ1MjI4NzcxNjAxNzU4NDJlLTNMLAorQTYgID0gIDEuMzg4ODg4ODg4ODg4ODg4ODg4ODk5NzExMzk3NTE1OTY4MzZlLTNMOworCitzdGF0aWMgY29uc3QgZG91YmxlCitBNyAgPSAgMS45ODQxMjY5ODQxMjY5NDcwZS00LAkJLyogIDB4MS5hMDFhMDFhMDE5ZjkxcC0xMyAqLworQTggID0gIDIuNDgwMTU4NzMwMTU4NTI4NmUtNSwJCS8qICAweDEuNzFkZTNlYzc1YTk2N3AtMTkgKi8KK0E5ICA9ICAyLjc1NTczMjQyNzc0MTEyMzVlLTYsCQkvKiAgMHgxLjcxZGUzZWM3NWE5NjdwLTE5ICovCitBMTAgPSAgMi43NTU3MzMzNzIyMzc1MDY5ZS03OwkJLyogIDB4MS4yN2U1MDVhYjU2MjU5cC0yMiAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkvKgorCSAqIGhpIG11c3QgYmUgcm91bmRlZCB0byBhdCBtb3N0IDEwNiBiaXRzIHNvIHRoYXQgbXVsdGlwbGljYXRpb24KKwkgKiBieSByMSBpbiBleHBtMWwoKSBpcyBleGFjdCwgYnV0IGl0IGlzIHJvdW5kZWQgdG8gODggYml0cyBkdWUgdG8KKwkgKiBoaXN0b3JpY2FsIGFjY2lkZW50cy4KKwkgKgorCSAqIFhYWCBpdCBpcyB3YXN0ZWZ1bCB0byB1c2UgbG9uZyBkb3VibGUgZm9yIGJvdGggaGkgYW5kIGxvLiAgbGQxMjgKKwkgKiBleHAybCgpIHVzZXMgb25seSBmbG9hdCBmb3IgbG8gKGluIGEgdmVyeSBkaWZmZXJlbnRseSBvcmdhbml6ZWQKKwkgKiB0YWJsZTsgbGQ4MCBleHAybCgpIGlzIGRpZmZlcmVudCBhZ2Fpbi4gIEl0IHVzZXMgMiBkb3VibGVzIGluIGEKKwkgKiB0YWJsZSBvcmdhbml6ZWQgbGlrZSB0aGlzIG9uZS4gIDEgZG91YmxlIGFuZCAxIGZsb2F0IHdvdWxkCisJICogc3VmZmljZSkuICBUaGVyZSBhcmUgZGlmZmVyZW50IHBhY2tpbmcvbG9jYWxpdHkvYWxpZ25tZW50L2NhY2hpbmcKKwkgKiBwcm9ibGVtcyB3aXRoIHRoZXNlIG1ldGhvZHMuCisJICoKKwkgKiBYWFggQydzIGJhZCAlYSBmb3JtYXQgbWFrZXMgdGhlIGJpdHMgdW5yZWFkYWJsZS4gIFRoZXkgaGFwcGVuCisJICogdG8gYWxsIGxpbmUgdXAgZm9yIHRoZSBoaSB2YWx1ZXMgMSBiZWZvcmUgdGhlIHBvaW50IGFuZCA4OAorCSAqIGluIDIyIG55YmJsZXMsIGJ1dCBmb3IgdGhlIGxvdyB2YWx1ZXMgdGhlIG55YmJsZXMgYXJlIHNoaWZ0ZWQKKwkgKiByYW5kb21seS4KKwkgKi8KKwlsb25nIGRvdWJsZQloaTsKKwlsb25nIGRvdWJsZQlsbzsKK30gdGJsW0lOVEVSVkFMU10gPSB7CisJMHgxcDBMLCAweDBwMEwsCisJMHgxLjAxNjNkYTlmYjMzMzU2ZDg0YTY2YWVwMEwsIDB4My4zNmRjZGZhNDAwM2VjMDRjMzYwYmUyNDA0MDc4cC05MkwsCisJMHgxLjAyYzlhM2U3NzgwNjBlZTZmN2NhY2FwMEwsIDB4NC5mN2EyOWJkZTkzZDcwYTJjYWJjNWNiODliYTEwcC05MkwsCisJMHgxLjA0MzE1ZTg2ZTdmODRiZDczOGY5YTJwMEwsIDB4ZC5hNDdlNmVkMDQwYmI0YmZjMDVhZjY0NTVlOWI4cC05NkwsCisJMHgxLjA1OWIwZDMxNTg1NzQzYWU3YzU0OGVwMEwsIDB4Yi42OGNhNDE3ZmU1M2UzNDk1ZjdkZjRiYWY4NGEwcC05MkwsCisJMHgxLjA3MDZiMjlkZGY2ZGRjNmRjNDAzYThwMEwsIDB4MS5kODdiMjdlZDA3Y2I4YjA5MmFjNzVlMzExNzUzcC04OEwsCisJMHgxLjA4NzQ1MTg3NTliYzgwOGMzNWYyNWNwMEwsIDB4MS45NDI3ZmEyYjA0MWIyZDY4MjlkODk5M2EwZDAxcC04OEwsCisJMHgxLjA5ZTNlY2FjNmYzODM0NTIxZTA2MGNwMEwsIDB4NS44NGQ2Yjc0YmEyZTAyM2RhNzMwZTdmY2NiNzU4cC05MkwsCisJMHgxLjBiNTU4NmNmOTg5MGY2Mjk4YjkyYjZwMEwsIDB4MS4xODQyYTk4MzY0MjkxNDA4YjNjZWIwYTJhMmJicC04OEwsCisJMHgxLjBjYzkyMmI3MjQ3Zjc0MDdiNzA1YjhwMEwsIDB4OS4zZGM1ZThhYWM1NjRlNmZlMmVmMWQ0MzFmZDk4cC05MkwsCisJMHgxLjBlM2VjMzJkM2QxYTIwMjA3NDJlNGVwMEwsIDB4MS44YWY2YTU1MmFjNGIzNThiMTEyOWU5Zjk2NmE0cC04OEwsCisJMHgxLjBmYjY2YWZmZWQzMWFmMjMyMDkxZGNwMEwsIDB4MS44YTE0MjY1MTRlMGI2MjdiZGE2OTRhNDAwYTI3cC04OEwsCisJMHgxLjExMzAxZDAxMjViNTBhNGViYmYxYWVwMEwsIDB4ZC45MzE4Y2VhYzVjYzQ3YWIxNjZlZTU3NDI3MTc4cC05MkwsCisJMHgxLjEyYWJkYzA2YzMxY2JmYjkyYmFkMzJwMEwsIDB4NC5kNjhlMmY3MjcwYmRmN2NlZGY5NGViMWNiODE4cC05MkwsCisJMHgxLjE0MjlhYWVhOTJkZGZiMzQxMDE5NDJwMEwsIDB4MS5iMjU4NmQwMTg0NGIzODliZWE3YWVkZDIyMWQ0cC04OEwsCisJMHgxLjE1YTk4YzhhNThlNTEyNDgwZDU3M2NwMEwsIDB4MS5kNTYxM2JmOTJhMmI2MThlZTMxYjM3NmMyNjg5cC04OEwsCisJMHgxLjE3MmI4M2M3ZDUxN2FkY2RmN2M4YzRwMEwsIDB4MS4wZWIxNGE3OTIwMzU1MDlmZjdkNzU4NjkzZjI0cC04OEwsCisJMHgxLjE4YWY5Mzg4YzhkZTliYmJmNzBiOWFwMEwsIDB4My5jMjUwNWM5N2MwMTAyZTVmMTIxMTk0MWQyODQwcC05MkwsCisJMHgxLjFhMzViZWI2ZmNiNzUzY2I2OThmNjhwMEwsIDB4MS4yZDFjODM1YTZjMzA3MjRkNWNmYWUzMWI4NGU1cC04OEwsCisJMHgxLjFiYmUwODQwNDVjZDM5YWIxZTcyYjRwMEwsIDB4NC4yN2UzNWY5YWNiNTdlNDczOTE1NTE5YTFiNDQ4cC05MkwsCisJMHgxLjFkNDg3MzE2OGI5YWE3ODA1YjgwMjhwMEwsIDB4OS45MGYwN2E5OGI0MjIwNmU0NjE2NmNmMDUxZDcwcC05MkwsCisJMHgxLjFlZDUwMjJmY2Q5MWNiODgxOWZmNjBwMEwsIDB4MS4xMjFkMWU1MDRkMzZjNDc0NzRjOWI3ZGU2MDY3cC04OEwsCisJMHgxLjIwNjNiODg2MjhjZDYzYjhlZWIwMjhwMEwsIDB4MS41MDkyOWQwZmM0ODdkMjFjMmI4NDAwNDI2NGRlcC04OEwsCisJMHgxLjIxZjQ5OTE3ZGRjOTYyNTUyZmQyOTJwMEwsIDB4OS40YmRiNGI2MWVhNjI0NzdjYWExZGNlODIzYmEwcC05MkwsCisJMHgxLjIzODdhNmU3NTYyMzg2NmMxZmFkYjBwMEwsIDB4MS5jMTVjYjU5M2IwMzI4NTY2OTAyZGY2OWU0ZGUycC04OEwsCisJMHgxLjI1MWNlNGZiMmE2M2YzNTgyYWI3ZGVwMEwsIDB4OS5lOTQ4MTFhOWM4YWZkY2Y3OTY5MzRiYzY1MmQwcC05MkwsCisJMHgxLjI2YjQ1NjVlMjdjZGQyNTdhNjczMjhwMEwsIDB4MS5kM2IyNDlkY2U0ZTkxODZkZGQ1ZmY0NGU2YjA4cC05MkwsCisJMHgxLjI4NGRmZTFmNTYzODA5NmNmMTVjZjBwMEwsIDB4My5jYTA5NjdmZGFhMmU1MmQ3YzgxMDZmMmUyNjJjcC05MkwsCisJMHgxLjI5ZTlkZjUxZmRlZTEyYzI1ZDE1ZjRwMEwsIDB4MS5hMjRhYTNiY2E4OTBhYzA4ZDIwM2ZlZDgwYTA3cC04OEwsCisJMHgxLjJiODdmZDBkYWQ5OGZmZGRlYTQ2NTJwMEwsIDB4MS44ZmNhYjg4NDQyZmRjM2NiNmRlNDUxOTE2NWVkcC04OEwsCisJMHgxLjJkMjg1YTZlNDAzMGI0MDA5MWQ1MzZwMEwsIDB4ZC4wNzUzODQ1ODljMWNkMWIzZTQwMThhNmIxMzQ4cC05MkwsCisJMHgxLjJlY2FmYTkzZTJmNTYxMWNhMGY0NWNwMEwsIDB4MS41MjM4MzNhZjYxMWJkY2RhMjUzYzU1NGNmMjc4cC04OEwsCisJMHgxLjMwNmZlMGEzMWI3MTUyZGU4ZDVhNDZwMEwsIDB4My4wNWM4NWVkZWNiYzI3MzQzNjI5ZjUwMmYxYWYycC05MkwsCisJMHgxLjMyMTcwZmM0Y2Q4MzEzNTM5Y2YxYzJwMEwsIDB4MS4wMDhmODZkZGUzMjIwYWUxN2EwMDViNjQxMmJlcC04OEwsCisJMHgxLjMzYzA4YjI2NDE2ZmY0YzljODYxMGNwMEwsIDB4MS45NjY5NmJmOTVkMTU5MzAzOTUzOWQ5NGQ2NjJicC04OEwsCisJMHgxLjM1NmM1NWY5MjlmZjBjOTQ2MjM0NzZwMEwsIDB4My43M2FmMzhkNmQ4ZDZmOTUwNmM5YmJjOTNjYmMwcC05MkwsCisJMHgxLjM3MWE3MzczYWE5Y2FhNzE0NTUwMmVwMEwsIDB4MS40NTQ3OTg3ZTNlMTI1MTZiZjljNjk5YmU0MzJmcC04OEwsCisJMHgxLjM4Y2FlNmQwNWQ4NjU4NWE5Y2IwZDhwMEwsIDB4MS5iZWQwYzg1M2JkMzBhMDI3OTA5MzFlYjJlOGYwcC04OEwsCisJMHgxLjNhN2RiMzRlNTlmZjZlYTFiYzkyOThwMEwsIDB4MS5lMGExZDMzNjE2M2ZlMmY4NTJjZWViMTM0MDY3cC04OEwsCisJMHgxLjNjMzJkYzMxM2E4ZTQ4NDAwMWYyMjhwMEwsIDB4Yi41OGYzNzc1ZTA2YWI2NjM1MzAwMWZhZTlmY2EwcC05MkwsCisJMHgxLjNkZWE2NGMxMjM0MjIzNWI0MTIyM2VwMEwsIDB4MS4zZDc3M2ZiYTJjYjgyYjgyNDQyNjdjNTQ0NDNmcC05MkwsCisJMHgxLjNmYTQ1MDRhYzgwMWJhMGJmNzAxYWFwMEwsIDB4NC4xODMyZmI4YzFjOGRiZGZmMmM0OTkwOWU2YzYwcC05MkwsCisJMHgxLjQxNjBhMjFmNzJlMjlmODQzMjViOGVwMEwsIDB4MS4zZGI2MWZiMzUyZjA1NDBlNmJhMDU2MzQ0MTNlcC04OEwsCisJMHgxLjQzMWY1ZDk1MGE4OTZkYzcwNDQzOTRwMEwsIDB4MS4wY2NlYzgxZTI0YjBjYWZmNzU4MWVmNDEyN2Y3cC05MkwsCisJMHgxLjQ0ZTA4NjA2MTg5MmQwMzEzNmY0MDhwMEwsIDB4MS5kZjAxOWZiZDRmM2I0ODcwOWI3ODU5MWQ1Y2I1cC04OEwsCisJMHgxLjQ2YTQxZWQxZDAwNTc3MjUxMmY0NThwMEwsIDB4MS4yMjlkOTdkZjQwNGZmMjFmMzljMWI1OTRkM2E4cC04OEwsCisJMHgxLjQ4NmEyYjVjMTNjZDAxM2MxYTNiNjhwMEwsIDB4MS4wNjJmMDNjM2RkNzVjZTg3NTdmNzgwZTZlYzk5cC04OEwsCisJMHgxLjRhMzJhZjBkN2QzZGU2NzJkOGJjZjRwMEwsIDB4Ni5mOTU4NjQ2MWRiMWQ4NzhiMWQxNDhiZDNjY2I4cC05MkwsCisJMHgxLjRiZmRhZDUzNjJhMjcxZDQzOTdhZmVwMEwsIDB4Yy40MmUyMGUwMzYzYmEyZTE1OWM1NzlmODJlNGIwcC05MkwsCisJMHgxLjRkY2IyOTlmZGRkMGQ2M2IzNmVmMWFwMEwsIDB4OS5lMGNjNDg0YjI1YTU1NjZkMGJkNWY1OGFkMjM4cC05MkwsCisJMHgxLjRmOWIyNzY5ZDJjYTZhZDMzZDhiNjhwMEwsIDB4MS5hYTA3M2VlNTVlMDI4NDk3YTMyOWE3MzMzZGJhcC04OEwsCisJMHgxLjUxNmRhYTJjZjY2NDFjMTEyZjUyYzhwMEwsIDB4NC5kODIyMTkwZTcxODIyNjE3N2Q3NjA4ZDIwMDM4cC05MkwsCisJMHgxLjUzNDJiNTY5ZDRmODFkZjBhODNjNDhwMEwsIDB4MS5kODZhNjNmNGU2NzJhM2U0Mjk4MDViMDQ5NDY1cC04OEwsCisJMHgxLjU1MWE0Y2E1ZDkyMGVjNTJlYzYyMDJwMEwsIDB4NC4zNGNhNjcyNjQ1ZGM2YzEyNGQ2NjE5YTg3NTc0cC05MkwsCisJMHgxLjU2ZjQ3MzZiNTI3ZGE2NmVjYjAwNDZwMEwsIDB4MS42NGViM2MwMGYyZjVhYjNkODAxZDdjYzcyNzJkcC04OEwsCisJMHgxLjU4ZDEyZDQ5N2M3ZmQyNTJiYzJiNzJwMEwsIDB4MS40M2JjZjJlYzkzNmE5NzBkOWNjMjY2ZjAwNzJmcC04OEwsCisJMHgxLjVhYjA3ZGQ0ODU0Mjk1OGM5MzAxNTBwMEwsIDB4MS45MWViMzQ1ZDg4ZDdjODEyODBlMDY5ZmJkYjYzcC04OEwsCisJMHgxLjVjOTI2OGE1OTQ2YjcwMWM0YjFiODBwMEwsIDB4MS42OTg2YTIwM2Q4NGU2YTRhOTJmMTc5ZTcxODg5cC04OEwsCisJMHgxLjVlNzZmMTVhZDIxNDg2ZTliZTRjMjBwMEwsIDB4My45OTc2NmEwNjU0OGEwNTgyOWU4NTNiZGIyYjUycC05MkwsCisJMHgxLjYwNWUxYjk3NmRjMDhiMDc2ZjU5MmFwMEwsIDB4NC44NmUzYjM0ZWFkMWI0NzY5ZGY4NjdiOWM4OWNjcC05MkwsCisJMHgxLjYyNDdlYjAzYTU1ODRiMWYwZmEwNmVwMEwsIDB4MS5kMmRhNDJiYjFjZWFmOWY3MzIyNzViOGFlZjMwcC04OEwsCisJMHgxLjY0MzQ2MzRjY2MzMWZjNzZmODcxNGNwMEwsIDB4NC5lZDlhNGU0MTAwMDMwNzEwM2ExOGNmN2E2ZTA4cC05MkwsCisJMHgxLjY2MjM4ODI1NTIyMjQ5MTI3ZDllMjhwMEwsIDB4MS5iOGYzMTRhMzM3ZjRkYzBhM2FkZjE3ODdmZjc0cC04OEwsCisJMHgxLjY4MTU1ZDQ0Y2E5NzMwODFjNTcyMjZwMEwsIDB4MS5iOWYzMjcwNmJmZTRlNjI3ZDgwOWE4NWRjYzY2cC04OEwsCisJMHgxLjZhMDllNjY3ZjNiY2M5MDhiMmZiMTJwMEwsIDB4MS42NmVhOTU3ZDNlM2FkZWMxNzUxMjc3NTA5OWRhcC04OEwsCisJMHgxLjZjMDEyNzUwYmRhYmVlZDc2YTk5ODBwMEwsIDB4Zi40ZjMzZmRlYjhiMGVjZDgzMTEwNmY1N2IzZDAwcC05NkwsCisJMHgxLjZkZmIyM2M2NTFhMmVmMjIwZTJjYmVwMEwsIDB4MS5iYmFhODM0YjNmMTE1NzdjZWVmYmU2YzFjNDExcC05MkwsCisJMHgxLjZmZjdkZjk1MTk0ODNjZjg3ZTFiNGVwMEwsIDB4MS4zZTIxM2JmZjliNzAyZDVhYTQ3N2MxMjUyM2NlcC04OEwsCisJMHgxLjcxZjc1ZThlYzVmNzNkZDIzNzBmMmVwMEwsIDB4Zi4wYWNkNmNiNDM0YjU2MmQ5ZThhMjBhZGRhNjQ4cC05MkwsCisJMHgxLjczZjlhNDhhNTgxNzNiZDVjOWE0ZTZwMEwsIDB4OC5hYjExODJhZTIxN2YzYTc2ODE3NTk1NTNlODQwcC05MkwsCisJMHgxLjc1ZmViNTY0MjY3YzhiZjZlOWFhMzJwMEwsIDB4MS5hNDhiMjcwNzE4MDVlNjFhMTdiOTU0YTJkYWQ4cC04OEwsCisJMHgxLjc4MDY5NGZkZTVkM2Y2MTlhZTAyODBwMEwsIDB4OC41OGIyYmIyYmRjZjg2Y2QwOGUzNWZiMDRjMGYwcC05MkwsCisJMHgxLjdhMTE0NzNlYjAxODZkN2Q1MTAyM2VwMEwsIDB4MS42Y2RhMWY1ZWY0MmI2Njk3Nzk2MDUzMWU4MjFicC04OEwsCisJMHgxLjdjMWVkMDEzMGMxMzI3YzQ5MzM0NDRwMEwsIDB4MS45Mzc1NjJiMmRjOTMzZDQ0ZmM4MjhlZmQ0YzljcC04OEwsCisJMHgxLjdlMmYzMzZjZjRlNjIxMDVkMDJiYTBwMEwsIDB4MS41Nzk3ZTE3MGExNDI3ZjhmY2RmNWYzOTA2MTA4cC04OEwsCisJMHgxLjgwNDI3NTQzZTFhMTFiNjBkZTY3NjRwMEwsIDB4OS5hMzU0ZWE3MDZiOGU0ZDhiNzE4YTY3MmJmN2M4cC05MkwsCisJMHgxLjgyNTg5OTk0Y2NlMTI4YWNmODhhZmFwMEwsIDB4Yi4zNGEwMTBmNmFkNjVjYmJhYzBmNTMyZDM5YmUwcC05MkwsCisJMHgxLjg0NzFhNDYyM2M3YWNjZTUyZjZiOTZwMEwsIDB4MS5jNjQwOTUzNzBmNTFmNDg4MTc5MTRkZDc4NjY1cC04OEwsCisJMHgxLjg2OGQ5OWI0NDkyZWM4MGU0MWQ5MGFwMEwsIDB4Yy4yNTE3MDc0ODRkNzNmMTM2ZmI1Nzc5NjU2YjcwcC05MkwsCisJMHgxLjg4YWM3ZDk4YTY2OTk2NjUzMGJjZGVwMEwsIDB4MS4yZDRlOWQ2MTI4M2VmMzg1ZGUxNzBhYjIwZjk2cC04OEwsCisJMHgxLjhhY2U1NDIyYWEwZGI1YmE3YzU1YTBwMEwsIDB4MS45MmM5YmIzZTZlZDYxZjI3MzMzMDRhMzQ2ZDhmcC04OEwsCisJMHgxLjhjZjMyMTZiNTQ0OGJlZjJhYTFjZDBwMEwsIDB4MS42MWM1NWQ4NGE5ODQ4ZjhjNDUzYjNjYThjOTQ2cC04OEwsCisJMHgxLjhmMWFlOTkxNTc3MzYyYjk4Mjc0NWNwMEwsIDB4Ny4yZWQ4MDRlZmM5YjRhZTE0NThhZTk0NjA5OWQ0cC05MkwsCisJMHgxLjkxNDViMGI5MWZmYzU4OGE2MWI0NjhwMEwsIDB4MS5mNmI3MGUwMWMyYTkwMjI5YTRjNDMwOWVhNzE5cC04OEwsCisJMHgxLjkzNzM3YjBjZGM1ZTRmNDUwMWMzZjJwMEwsIDB4NS40MGEyMmQyZmM0YWY1ODFiNjNlODMyNmVmZTljcC05MkwsCisJMHgxLjk1YTQ0Y2JjODUyMGVlOWI0ODM2OTRwMEwsIDB4MS5hMGZjNmY3YzdkNjFiMmIzYTIyYTBlYWIyY2FkcC04OEwsCisJMHgxLjk3ZDgyOWZkZTRlNGY4YjllOTIwZjhwMEwsIDB4MS4xZThiZDdlZGI5ZDcxNDRiNmY2ODE4MDg0Y2M3cC04OEwsCisJMHgxLjlhMGYxNzBjYTA3YjliYTMxMDliOGNwMEwsIDB4NC42NzM3YmViMTllMWVhZGE2ODI1ZDNjNTU3NDI4cC05MkwsCisJMHgxLjljNDkxODJhM2YwOTAxYzdjNDZiMDZwMEwsIDB4MS4xZjJiZTU4ZGRhZGU1MGMyMTcxODZjOTBiNDU3cC04OEwsCisJMHgxLjllODYzMTllMzIzMjMxODI0Y2E3OGVwMEwsIDB4Ni40YzZlMDEwZjkyYzA4MmJiYWRmYWY2MDVjZmQ0cC05MkwsCisJMHgxLmEwYzY2N2I1ZGU1NjRiMjlhZGE4YjhwMEwsIDB4Yy5hYjM0OWFhMDQyMmE4ZGE3ZDQ1MTJlZGFjNTQ4cC05MkwsCisJMHgxLmEzMDliZWM0YTJkMzM1OGMxNzFmNzZwMEwsIDB4MS4wZGFhZDU0N2ZhMjJjMjZkMTY4ZWE3NjJkODU0cC04OEwsCisJMHgxLmE1NTAzYjIzZTI1NWM4YjQyNDQ5MWNwMEwsIDB4YS5mODdiYzgwNTBhNDA1MzgxNzAzZWY3Y2FmZjUwcC05MkwsCisJMHgxLmE3OTllMTMzMGIzNTg2ZjJkZmIyYjBwMEwsIDB4MS41OGYxYTk4Nzk2Y2U4OTA4YWU4NTIyMzZjYTk0cC04OEwsCisJMHgxLmE5ZTZiNTU3OWZkYmY0M2ViMjQzYmNwMEwsIDB4MS5mZjRjNGM1OGI1NzFjZjQ2NWNhZjA3YjRiOWY1cC04OEwsCisJMHgxLmFjMzZiYmZkM2YzNzljMGRiOTY2YTJwMEwsIDB4MS4xMjY1ZmM3M2U0ODA3MTJkMjBmODU5N2E4ZTdicC04OEwsCisJMHgxLmFlODlmOTk1YWQzYWQ1ZTg3MzRkMTZwMEwsIDB4MS43MzIwNWE3ZmJjM2FlNjc1ZWE0NDBiMTYyZDZjcC04OEwsCisJMHgxLmIwZTA3Mjk4ZGI2NjU5MDg0MmFjZGVwMEwsIDB4MS5jNmY2Y2EwZTVkY2FlMmFhZmZmYTdhMDU1NGNicC04OEwsCisJMHgxLmIzM2EyYjg0ZjE1ZmFmNmJmZDBlN2FwMEwsIDB4MS5kOTQ3YzI1NzU3ODFkYmI0OWIxMjM3Yzg3YjZlcC04OEwsCisJMHgxLmI1OTcyOGRlNTU5Mzk4ZTM4ODExMTBwMEwsIDB4MS42NDg3M2M3MTcxZmVmYzQxMDQxNmJlMGE2NTI1cC04OEwsCisJMHgxLmI3Zjc2ZjJmYjVlNDZlYWE3YjA4MWFwMEwsIDB4Yi41M2M1MzU0Yzg5MDNjMzU2ZTRiNjI1YWFjYzI4cC05MkwsCisJMHgxLmJhNWIwMzBhMTA2NDk4NDBjYjNjNmFwMEwsIDB4Zi41YjQ3ZjI5NzIwMzc1N2UxY2M2ZWFkYzhiYWQwcC05MkwsCisJMHgxLmJjYzFlOTA0YmMxZDIyNDdiYTBmNDRwMEwsIDB4MS5iM2QwOGNkMGIyMDI4NzA5MmJkNTliZTRhZDk4cC04OEwsCisJMHgxLmJmMmMyNWJkNzFlMDg4NDA4ZDcwMjRwMEwsIDB4MS4xOGUzNDQ5ZmEwNzNiMzU2NzY2ZGZiNTY4ZmY0cC04OEwsCisJMHgxLmMxOTliZGQ4NTUyOWMyMjIwY2IxMmFwMEwsIDB4OS4xYmE2Njc5NDQ0OTY0YTM2NjYxMjQwMDQzOTcwcC05NkwsCisJMHgxLmM0MGFiNWZmZmQwN2E2ZDE0ZGY4MjBwMEwsIDB4Zi4xODI4YTUzNjZmZDM4N2E3YmRkNTRjZGY3MzAwcC05MkwsCisJMHgxLmM2N2YxMmU1N2QxNGI0YTIxMzdmZDJwMEwsIDB4Zi4yYjMwMWRkOWU2YjE1MWE2ZDFmOWQ1ZDVmNTIwcC05NkwsCisJMHgxLmM4ZjZkOTQwNmU3YjUxMWFjYmM0ODhwMEwsIDB4NS5jNDQyZGRiNTU4MjAxNzFmMzE5ZDllNTA3NmE4cC05NkwsCisJMHgxLmNiNzIwZGNlZjkwNjkxNTAzY2JkMWVwMEwsIDB4OS40OWRiNzYxZDk1NTlhYzBjYjZkZDNlZDU5OWUwcC05MkwsCisJMHgxLmNkZjBiNTU1ZGMzZjljNDRmODk1OGVwMEwsIDB4MS5hYzUxYmU1MTVmOGM1OGJkZmI2ZjU3NDBhM2E0cC04OEwsCisJMHgxLmQwNzJkNGEwNzg5N2I4ZDBmMjJmMjBwMEwsIDB4MS5hMTU4ZTE4ZmJiZmM2MjVmMDlmNGNjYTQwODc0cC04OEwsCisJMHgxLmQyZjg3MDgwZDg5ZjE4YWRlMTIzOThwMEwsIDB4OS5lYTIwMjViNGM1NjU1M2Y1Y2RlZTRjOTI0NzI4cC05MkwsCisJMHgxLmQ1ODE4ZGNmYmE0ODcyNWRhMDVhZWFwMEwsIDB4MS42NmUwZGNhOWY1ODlmNTU5YzA4NzZmZjIzODMwcC04OEwsCisJMHgxLmQ4MGUzMTZjOTgzOTdiYjg0ZjlkMDRwMEwsIDB4OC44MDVmODRiZWM2MTRkZTI2OTkwMGRkZjk4ZDI4cC05MkwsCisJMHgxLmRhOWU2MDNkYjMyODU3MDhjMDFhNWFwMEwsIDB4MS42ZDRjOTdmNjI0NmYwZWM2MTRlYzk1Yzk5MzkycC04OEwsCisJMHgxLmRkMzIxZjMwMWI0NjA0YjY5NWRlM2NwMEwsIDB4Ni4zMGEzOTMyMTUyOTllMzBkNGZiNzM1MDNjMzQ4cC05NkwsCisJMHgxLmRmYzk3MzM3YjliNWViOTY4Y2FjMzhwMEwsIDB4MS5lZDI5MWI3MjI1YTk0NGVmZDViYjU1MjRiOTI3cC04OEwsCisJMHgxLmUyNjQ2MTRmNWExMjhhMTI3NjFmYTBwMEwsIDB4MS43YWRhNjQ2N2U3N2Y3M2JmNjVlMDRjOTVlMjlkcC04OEwsCisJMHgxLmU1MDJlZTc4YjNmZjYyNzNkMTMwMTRwMEwsIDB4MS4zOTkxZThmNDk2NTllMTY5M2JlMTdhZTFkMmY5cC04OEwsCisJMHgxLmU3YTUxZmJjNzRjODM0YjU0OGIyODJwMEwsIDB4MS4yMzc4Njc1OGE4NGY0OTU2MzU0NjM0YTQxNmNlcC04OEwsCisJMHgxLmVhNGFmYTJhNDkwZDk4NThmNzNhMThwMEwsIDB4Zi41ZGIzMDFmODZkZWEyMDYxMGNlZWUxM2ViN2I4cC05MkwsCisJMHgxLmVjZjQ4MmQ4ZTY3ZjA4ZGIwMzEyZmFwMEwsIDB4MS45NDljZWY0NjIwMTBiYjRiYzRjZTcyYTkwMGRmcC04OEwsCisJMHgxLmVmYTFiZWU2MTVhMjc3NzFmZDIxYThwMEwsIDB4MS4yZGFjMWY2ZGQ1ZDIyOWZmNjhlNDZmMjdlM2RmcC04OEwsCisJMHgxLmYyNTJiMzc2YmJhOTc0ZTg2OTZmYzJwMEwsIDB4MS42MzkwZDRjNmFkNTQ3NmI1MTYyZjQwZTFkOWE5cC04OEwsCisJMHgxLmY1MDc2NWI2ZTQ1NDA2NzRmODRiNzZwMEwsIDB4Mi44NjJiYWZmOTkwMDBkZmM0MzUyYmEyOWI4OTA4cC05MkwsCisJMHgxLmY3YmZkYWQ5Y2JlMTM4OTEzYjRiZmVwMEwsIDB4Ny4yYmQ5NWM1Y2U3MjgwZmE0ZDIzNDRhM2Y1NjE4cC05MkwsCisJMHgxLmZhN2MxODE5ZTkwZDgyZTkwYTdlNzRwMEwsIDB4Yi4yNjNjMWRjMDYwYzM2Zjc2NTBiNGMwZjIzM2E4cC05MkwsCisJMHgxLmZkM2MyMmI4ZjcxZjEwOTc1YmE0YjJwMEwsIDB4MS4yYmNmM2E1ZTEyZDI2OWQ4YWQ3YzFhNGE4ODc1cC04OEwKK307CisKKy8qCisgKiBLZXJuZWwgZm9yIGV4cGwoeCkuICB4IG11c3QgYmUgZmluaXRlIGFuZCBub3QgdGlueSBvciBodWdlLgorICogInRpbnkiIGlzIGFueXRoaW5nIHRoYXQgd291bGQgbWFrZSB1cyB1bmRlcmZsb3cgKHxBNip4XjZ8IDwgfkxEQkxfTUlOKS4KKyAqICJodWdlIiBpcyBhbnl0aGluZyB0aGF0IHdvdWxkIG1ha2UgZm4qTDEgaW5leGFjdCAofHh8ID4gfjIqKjE3KmxuMikuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX19rX2V4cGwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgKmhpcCwgbG9uZyBkb3VibGUgKmxvcCwgaW50ICprcCkKK3sKKwlsb25nIGRvdWJsZSBxLCByLCByMSwgdDsKKwlkb3VibGUgZHIsIGZuLCByMjsKKwlpbnQgbiwgbjI7CisKKwkvKiBSZWR1Y2UgeCB0byAoaypsbjIgKyBlbmRwb2ludFtuMl0gKyByMSArIHIyKS4gKi8KKwkvKiBVc2UgYSBzcGVjaWFsaXplZCByaW50KCkgdG8gZ2V0IGZuLiAgQXNzdW1lIHJvdW5kLXRvLW5lYXJlc3QuICovCisJLyogWFhYIGFzc3VtZSBubyBleHRyYSBwcmVjaXNpb24gZm9yIHRoZSBhZGRpdGlvbnMsIGFzIGZvciB0cmlnIGZucy4gKi8KKwkvKiBYWFggdGhpcyBzZXQgb2YgY29tbWVudHMgaXMgbm93IHF1YWRydXBsaWNhdGVkLiAqLworCS8qIFhYWCBidXQgc2VlIC4uL3NyYy9lX2V4cC5jIGZvciBhIGZpeCB1c2luZyBkb3VibGVfdC4gKi8KKwlmbiA9IChkb3VibGUpeCAqIElOVl9MICsgMHgxLjhwNTIgLSAweDEuOHA1MjsKKyNpZiBkZWZpbmVkKEhBVkVfRUZGSUNJRU5UX0lSSU5UKQorCW4gPSBpcmludChmbik7CisjZWxzZQorCW4gPSAoaW50KWZuOworI2VuZGlmCisJbjIgPSAodW5zaWduZWQpbiAlIElOVEVSVkFMUzsKKwkvKiBEZXBlbmQgb24gdGhlIHNpZ24gYml0IGJlaW5nIHByb3BhZ2F0ZWQ6ICovCisJKmtwID0gbiA+PiBMT0cyX0lOVEVSVkFMUzsKKwlyMSA9IHggLSBmbiAqIEwxOworCXIyID0gZm4gKiAtTDI7CisJciA9IHIxICsgcjI7CisKKwkvKiBFdmFsdWF0ZSBleHBsKGVuZHBvaW50W24yXSArIHIxICsgcjIpID0gdGJsW24yXSAqIGV4cGwocjEgKyByMikuICovCisJZHIgPSByOworCXEgPSByMiArIHIgKiByICogKEEyICsgciAqIChBMyArIHIgKiAoQTQgKyByICogKEE1ICsgciAqIChBNiArCisJICAgIGRyICogKEE3ICsgZHIgKiAoQTggKyBkciAqIChBOSArIGRyICogQTEwKSkpKSkpKSk7CisJdCA9IHRibFtuMl0ubG8gKyB0YmxbbjJdLmhpOworCSpoaXAgPSB0YmxbbjJdLmhpOworCSpsb3AgPSB0YmxbbjJdLmxvICsgdCAqIChxICsgcjEpOworfQorCisvKgorICogWFhYOiB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb25zIGFyZSBpZGVudGljYWwgZm9yIGxkODAgYW5kIGxkMTI4LgorICogSG93ZXZlciwgd2Ugc2hvdWxkIHVzZSBzY2FsYm5sKCkgZm9yIGxkMTI4LCBzaW5jZSBsb25nIGRvdWJsZQorICogbXVsdGlwbGljYXRpb24gaXMgdmVyeSBzbG93IG9uIHRoZSBvbmx5IHN1cHBvcnRlZCBsZDEyOCBhcmNoIChzcGFyYzY0KS4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2tfaGV4cGwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgKmhpcCwgbG9uZyBkb3VibGUgKmxvcCkKK3sKKwlmbG9hdCB0d29wa20xOworCWludCBrOworCisJX19rX2V4cGwoeCwgaGlwLCBsb3AsICZrKTsKKwlTRVRfRkxPQVRfV09SRCh0d29wa20xLCAweDNmODAwMDAwICsgKChrIC0gMSkgPDwgMjMpKTsKKwkqaGlwICo9IHR3b3BrbTE7CisJKmxvcCAqPSB0d29wa20xOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgZG91YmxlCitoZXhwbChsb25nIGRvdWJsZSB4KQoreworCWxvbmcgZG91YmxlIGhpLCBsbywgdHdvcGttMjsKKwlpbnQgazsKKworCXR3b3BrbTIgPSAxOworCV9fa19leHBsKHgsICZoaSwgJmxvLCAmayk7CisJU0VUX0xEQkxfRVhQU0lHTih0d29wa20yLCBCSUFTICsgayAtIDIpOworCXJldHVybiAobG8gKyBoaSkgKiAyICogdHdvcGttMjsKK30KKworI2lmZGVmIF9DT01QTEVYX0gKKy8qCisgKiBTZWUgLi4vc3JjL2tfZXhwLmMgZm9yIGRldGFpbHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBkb3VibGUgY29tcGxleAorX19sZGV4cF9jZXhwbChsb25nIGRvdWJsZSBjb21wbGV4IHosIGludCBleHB0KQoreworCWxvbmcgZG91YmxlIGV4cF94LCBoaSwgbG87CisJbG9uZyBkb3VibGUgeCwgeSwgc2NhbGUxLCBzY2FsZTI7CisJaW50IGhhbGZfZXhwdCwgazsKKworCXggPSBjcmVhbGwoeik7CisJeSA9IGNpbWFnbCh6KTsKKwlfX2tfZXhwbCh4LCAmaGksICZsbywgJmspOworCisJZXhwX3ggPSAobG8gKyBoaSkgKiAweDFwMTYzODI7CisJZXhwdCArPSBrIC0gMTYzODI7CisKKwlzY2FsZTEgPSAxOworCWhhbGZfZXhwdCA9IGV4cHQgLyAyOworCVNFVF9MREJMX0VYUFNJR04oc2NhbGUxLCBCSUFTICsgaGFsZl9leHB0KTsKKwlzY2FsZTIgPSAxOworCVNFVF9MREJMX0VYUFNJR04oc2NhbGUxLCBCSUFTICsgZXhwdCAtIGhhbGZfZXhwdCk7CisKKwlyZXR1cm4gKGNwYWNrbChjb3MoeSkgKiBleHBfeCAqIHNjYWxlMSAqIHNjYWxlMiwKKwkgICAgc2lubCh5KSAqIGV4cF94ICogc2NhbGUxICogc2NhbGUyKSk7Cit9CisjZW5kaWYgLyogX0NPTVBMRVhfSCAqLwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2tfc2lubC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2tfc2lubC5jCmluZGV4IGJkNDE1YzAuLjA5NDcyZDYgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX3NpbmwuYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgva19zaW5sLmMKQEAgLTYsNyArNiw3IEBACiAgKgogICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKICAqIGlzIHByZXNlcnZlZC4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L3NfZXJmbC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L3NfZXJmbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOWM5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19lcmZsLmMKQEAgLTAsMCArMSwzMjkgQEAKKy8qIEAoIylzX2VyZi5jIDUuMSA5My8wOS8yNCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qCisgKiBTZWUgc19lcmYuYyBmb3IgY29tcGxldGUgY29tbWVudHMuCisgKgorICogQ29udmVydGVkIHRvIGxvbmcgZG91YmxlIGJ5IFN0ZXZlbiBHLiBLYXJnbC4KKyAqLworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKy8qIFhYWCBQcmV2ZW50IGNvbXBpbGVycyBmcm9tIGVycm9uZW91c2x5IGNvbnN0YW50IGZvbGRpbmcgdGhlc2U6ICovCitzdGF0aWMgY29uc3Qgdm9sYXRpbGUgbG9uZyBkb3VibGUgdGlueSA9IDB4MXAtMTAwMDBMOworCitzdGF0aWMgY29uc3QgZG91YmxlCitoYWxmPSAwLjUsCitvbmUgPSAxLAordHdvID0gMjsKKy8qCisgKiBJbiB0aGUgZG9tYWluIFswLCAyKiotNDBdLCBvbmx5IHRoZSBmaXJzdCB0ZXJtIGluIHRoZSBwb3dlciBzZXJpZXMKKyAqIGV4cGFuc2lvbiBvZiBlcmYoeCkgaXMgdXNlZC4gIFRoZSBtYWduaXR1ZGUgb2YgdGhlIGZpcnN0IG5lZ2xlY3RlZAorICogdGVybXMgaXMgbGVzcyB0aGFuIDIqKi0xMjAuCisgKi8KK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQorZWZ4ICA9ICAxLjI4Mzc5MTY3MDk1NTEyNTczODk2MTU4OTAzMTIxNTQ1MTY3ZS0wMUwsCS8qIDB4ZWNiZmY2YTcsIDB4NDgxZGQ3ODgsIDB4YjY0ZDIxYTgsIDB4ZWIwNmZjM2YgKi8KK2VmeDggPSAgMS4wMjcwMzMzMzY3NjQxMDA1OTExNjkyNzEyMjQ5NzIzNjEzM2UrMDBMLAkvKiAweGVjYmZmNmE3LCAweDQ4MWRkNzg4LCAweGI2NGQyMWE4LCAweGViMDZmZjNmICovCisvKgorICogRG9tYWluIFswLCAwLjg0Mzc1XSwgcmFuZ2UgflstMS45MTllLTM4LCAxLjkxOWUtMzhdOgorICogfChlcmYoeCkgLSB4KS94IC0gcHAoeCkvcXEoeCl8IDwgMioqLTEyNS4yOQorICovCitwcDAgID0gIDEuMjgzNzkxNjcwOTU1MTI1NzM4OTYxNTg5MDMxMjE1NDUxNjdlLTAxTCwJLyogMHgzZmZjMDZlYiwgMHhhODIxNGRiNiwgMHg4OGQ3MWQ0OCwgMHhhN2Y2YmZlYyAqLworcHAxICA9IC0zLjE0OTMxNTU0Mzk2NTY4NTczODAyMDQ2OTMxMTU5NjgzNDA0ZS0wMUwsCS8qIDB4YmZmZDQyN2QsIDB4NmFkYTcyNjMsIDB4NTQ3ZWIwOTYsIDB4OTVmMzc0NjMgKi8KK3BwMiAgPSAtNS4yNzUxNDkyMDI4MjE4MzQ4NzEwMzU3Njk1Njk1NjcyNTMwOWUtMDJMLAkvKiAweGJmZmFiMDIzLCAweGU1YTI3MWUzLCAweGIwZTc5YjAxLCAweDJmN2FjOTYyICovCitwcDMgID0gLTEuMTMyMDI4Mjg1MDkwMDUyODEzNTU2MDk0OTU1MjM0NTI3MTNlLTAyTCwJLyogMHhiZmY4NzJmMSwgMHg2YTUwMjNhMSwgMHhlMDhiMzg4NCwgMHgzMjZhZjIwZiAqLworcHA0ICA9IC05LjE4NjI2MTU1ODcyNTIyNDUzODY1OTk4MzkxMjA2MDQ4NTA2ZS0wNEwsCS8qIDB4YmZmNGUxOWYsIDB4ZWE1ZmIwMjQsIDB4NDMyNDdhMzcsIDB4ZTQzMGIwNmMgKi8KK3BwNSAgPSAtNy44NzUxODg2MjQwNjE3NjI3NDkyMjUwNjQ0NzE1NzI4NDIzMGUtMDVMLAkvKiAweGJmZjE0YTRmLCAweDMxYTg1ZmUwLCAweDdmZmYyMjA0LCAweDA5YzQ5YjM3ICovCitwcDYgID0gLTMuNDIzNTc5NDQ0NzIyNDA0MzY1NDgxMTUzMzEwOTA1NjA4ODFlLTA2TCwJLyogMHhiZmVjY2I4MSwgMHg0YjQzYzMzNiwgMHhjZDJlYjZjMiwgMHg5MDNmMmQ4NyAqLworcHA3ICA9IC0xLjM3MzE3NDMyNTczODkwNDEyNjM0NzE3ODkwNzI2NzQ1NDI4ZS0wN0wsCS8qIDB4YmZlODI2ZTMsIDB4MGU5MTVlYjYsIDB4NDJhZWU0MTQsIDB4ZjdlMzY4MDUgKi8KK3BwOCAgPSAtMi43MTExNTE3MDExMzg2MTc1NTg1NTA0OTAwODczMjExMzcyNmUtMDlMLAkvKiAweGJmZTI3NDllLCAweDJiOTRmZDAwLCAweGVjYjRkMTY2LCAweDBlZmI5MWY4ICovCitwcDkgID0gLTMuMzc5MjU3NTYxOTY1NTU5NTk0NTQwMTgxODk3MTgxMTc4NjRlLTExTCwJLyogMHhiZmRjMjkzZSwgMHgxZDkwNjBjYiwgMHhkMDQzMjA0YSwgMHgzMTRjZDdmMCAqLworcXExICA9ICA0Ljc2NjcyNjI1NDcxNTUxMTcwNDg5OTc4NTU1MTgyNDQ5NDUwZS0wMUwsCS8qIDB4M2ZmZGU4MWMsIDB4ZGU2NTMxZjAsIDB4NzY4MDNiZWUsIDB4NTI2ZTI5ZTkgKi8KK3FxMiAgPSAgMS4wNjcxMzE0NDY3MjI4MTUwMjA1ODgwNzUyNTg1MDczMjI0MGUtMDFMLAkvKiAweDNmZmJiNTE4LCAweGQ3YTZiYjc0LCAweGNkOWJkZDMzLCAweDc2MDFlZWU1ICovCitxcTMgID0gIDEuNDc3NDc2MTMxMjc1MTM3NjExMDIxODkyMDE5MjMxNDc0OTBlLTAyTCwJLyogMHgzZmY4ZTQyMywgMHhhZTUyN2UxOCwgMHhmMTJjYjQ0NywgMHg3MjNiNDc0OSAqLworcXE0ICA9ICAxLjM5OTM5Mzc3NjcyMDI4NjcxODkxMTQ4NzcwOTA4ODc0ODE2ZS0wM0wsCS8qIDB4M2ZmNTZlZDcsIDB4YmEwNTVkODQsIDB4YzIxYjQ1YzQsIDB4Mzg4ZDE4MTIgKi8KK3FxNSAgPSAgOS40NDMwMjkzOTM1OTQ1NTI0MTI3MTk4MzMwOTM3ODczODI3NmUtMDVMLAkvKiAweDNmZjE4YzExLCAweGMxOGM5OWE0LCAweDg2ZDBmZTA5LCAweDQ2Mzg3YjRjICovCitxcTYgID0gIDQuNTYxOTkzNDIzMTI1MjI4NDIxNjEzMDE2NzE3NDUzNjU2NTBlLTA2TCwJLyogMHgzZmVkMzIyNiwgMHg3MzQyMWQwNSwgMHgwODg3NTMwMCwgMHgzMmZhMTQzMiAqLworcXE3ICA9ICAxLjUzMDE5MjYwNDgzNzY0NzczODQ1Mjk0NjAwMDkyMzYxMTk3ZS0wN0wsCS8qIDB4M2ZlODQ4OWIsIDB4M2E2M2Y2MjcsIDB4MmI5YWQyY2UsIDB4MjY1MTZlNTcgKi8KK3FxOCAgPSAgMy4yNTU0MjY5MTEyMTMyNDgwNTA5NDc3NzkwMTI1MDAwNTUwOGUtMDlMLAkvKiAweDNmZTJiZjZjLCAweDI2ZDkzYTI5LCAweDkxNDJiZTdjLCAweDlmMWRkMDQzICovCitxcTkgID0gIDMuMzc0MDU1ODE5NjQ0NzgwNjA0MzQ0MTAxNjcyNjI2ODQ5NzllLTExTDsJLyogMHgzZmRjMjhjOCwgMHhmYjhmYTFiZSwgMHgxMGU1N2VlYywgMHhhYTE5ZTQ5ZiAqLworCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK2VyeCAgPSAgOC40MjcwMDc5Mjk0OTcxNDg5NDE0MjIzMjQyNDIwMTIxMDk2MWUtMDFMLAkvKiAweDNmZmVhZjc2LCAweDdhNzQxMDg4LCAweGIwMDAwMDAwLCAweDAwMDAwMDAwICovCisvKgorICogRG9tYWluIFswLjg0Mzc1LCAxLjI1XSwgcmFuZ2UgflstMi41MjFlLTM2LCAyLjUyM2UtMzZdOgorICogfChlcmYoeCkgLSBlcngpIC0gcGEoeCkvcWEoeCl8IDwgMioqLTEyMC4xNQorICovCitwYTAgID0gLTIuNDgwMTAxMTc4OTExODYwMTcwMjQ0MzgyMzMzMjM3OTU4OTdlLTE3TCwJLyogMHhiZmM3Yzk3ZiwgMHg3NzgxMjI3OSwgMHg2Yzg3N2YyMiwgMHhlZjRiZmIyZSAqLworcGExICA9ICA0LjE1MTA3NDk3NDIwNTk0NjgwODk0MzI3OTY5NTA0NTI2NDg5ZS0wMUwsCS8qIDB4M2ZmZGE5MTEsIDB4ZjA5NmZiYzIsIDB4NTU2NjIwMDUsIDB4MjMzN2ZhNjQgKi8KK3BhMiAgPSAtMy45NDE4MDYyODA4NzA4NDg0NjcyNDQ0ODUxNTg1MTg5MjYwOWUtMDJMLAkvKiAweGJmZmE0MmU5LCAweGFiNTQ1MjhjLCAweGFkNTI5ZGExLCAweDZlZmMyYWYzICovCitwYTMgID0gIDQuNDg4OTc1OTk2MjUxOTIxMDcyOTU5NTQ3OTA2ODE2Nzc0NjJlLTAyTCwJLyogMHgzZmZhNmZiYywgMHhhNjVlZGJhMSwgMHgwZTRjYmNlYSwgMHg3M2VmOWEzMSAqLworcGE0ICA9ICA4LjAyMDY5MjUyMTQzMDE2NjAwMTEwOTcyMDE5MjMyOTk1NTI4ZS0wMkwsCS8qIDB4M2ZmYjQ4ODcsIDB4MGU4YjU0OGUsIDB4MzIzMGI0MTcsIDB4MTFiNTUzYjMgKi8KK3BhNSAgPSAtMS4wMjcyOTgxNjUzMzQzNTI3OTQ0MzYyMTEyMDI0MjM5MTI5NWUtMDJMLAkvKiAweGJmZjg1MGEwLCAweDA0MWRlM2VlLCAweGQ1YmNhNmM5LCAweDRlZjVmOWYyICovCitwYTYgID0gIDUuNzA3Nzc2OTQ1MzA3NTU2MzQ4NjQ4MjEwOTQ0MTk5ODIwOTVlLTAzTCwJLyogMHgzZmY3NzYxMCwgMHg5YjUwMWUxMCwgMHg0Yzk3ODM4MiwgMHg3NDJkZjY4ZiAqLworcGE3ICA9ICAxLjIyNjM1MTUwMjMzMDc1NTIxMDE4MjMxNzc5MjY3MDc3MDcxZS0wM0wsCS8qIDB4M2ZmNTQxN2IsIDB4MGU2MjM2ODIsIDB4NjAzMjdkYTAsIDB4OTZiOTIxOWUgKi8KK3BhOCAgPSAgNS4zNjEwMDIzNDgyMDIwNDU2OTQyODQxMjU0Mjg1NjY2NjUwM2UtMDRMLAkvKiAweDNmZjQxOTEyLCAweDI3Y2ViNGMxLCAweDFkMzI5OGVjLCAweDg0Y2VkNjI3ICovCitwYTkgID0gLTEuOTc3NTM1NzE4NDYzNjUxNjcxNzcxODc4NTg2Njc1ODMxNjVlLTA0TCwJLyogMHhiZmYyOWViOCwgMHgyM2Y1YmNmMywgMHgxNWM4M2M0NiwgMHhlNGZkYTk4YiAqLworcGExMCA9ICA2LjE5MzMzMDM5OTAwODQ2OTcwNjc0Nzk0Nzg5NTY4NDE1MTA1ZS0wNUwsCS8qIDB4M2ZmMTAzYzQsIDB4NjBmODhlNDYsIDB4YzBjOWZiMDIsIDB4MTNjYzdmYzEgKi8KK3BhMTEgPSAtNS40MDUzMTQwMDQzNjY0NTg2MTQ5MjI5MDI3MDMxMTc1MTM0OWUtMDZMLAkvKiAweGJmZWQ2YWJlLCAweDk2NjVmOGE4LCAweGRkMGFkM2JhLCAweGU1ZGMwZWUzICovCitxYTEgID0gIDkuMDUwNDEzMTMyNjU0OTA0ODc3OTMyMzE4MTAyOTE5MDc4NTFlLTAxTCwJLyogMHgzZmZlY2Y2MSwgMHg5MzM0MDIyMiwgMHhlOTkzMDYyMCwgMHhjNGU2MTE2OCAqLworcWEyICA9ICA2Ljc5ODQ4MDY0NzA4ODg2ODY0NzY3MjQwODgwODM0ODY4MDkyZS0wMUwsCS8qIDB4M2ZmZTVjMTUsIDB4MGJhODU4ZGMsIDB4Zjc5MDBhZTksIDB4ZmVhMWUwOWEgKi8KK3FhMyAgPSAgNC4wNDcyMDYwOTkyNjQ3MTY3NzU4MTA2NjY4OTMxNjUxNjQ0NWUtMDFMLAkvKiAweDNmZmQ5ZTZmLCAweDE0NWU5YjAwLCAweDZkOGMxNzQ5LCAweGQyOTI4NjIzICovCitxYTQgID0gIDEuNjkxODMyNzM4OTgzNjk5OTYzNjQ2NjEwNzU2NjQzMDIyMjVlLTAxTCwJLyogMHgzZmZjNWE3YywgMHhjMmEzNjNjMSwgMHhkNmMxOTA5NywgMHhlZjliNDA2MyAqLworcWE1ICA9ICA3LjQ0NDc2MTg1OTg4MDY3OTkyMzQyNDc5NzUwNDg2NzY0MjQ4ZS0wMkwsCS8qIDB4M2ZmYjMwZWYsIDB4ZmM3MjU5ZWYsIDB4MWJjYmIwODksIDB4Njg2ZGQ2MmQgKi8KK3FhNiAgPSAgMi4wMjk4MTE3MjcyNTg5MjQwNzIwMDQyMDM4OTYwNDc4ODU3M2UtMDJMLAkvKiAweDNmZjk0YzkwLCAweDc5NzZjYjBlLCAweDIxZTFkMzZiLCAweDBmMDljYTJiICovCitxYTcgID0gIDYuOTQyODE4NjYyNzE2MDc2NjgyNjgyNjk0MDMxMDIyNzcyMzRlLTAzTCwJLyogMHgzZmY3YzcwMSwgMHgyYjE5MzI1MCwgMHhjNWQ0NmVjYywgMHgzNzQ4NDNkOCAqLworcWE4ICA9ICAxLjEyOTUyMjc1NDY5MTcxNTU5NjExNjUxNTk0NzA2ODIwMDM0ZS0wM0wsCS8qIDB4M2ZmNTI4MTgsIDB4ZmQyYTdjMDYsIDB4ZDEzZTM4ZmQsIDB4ZGE0YjM0ZjUgKi8KK3FhOSAgPSAgMy4xMzczNjY4MzI0MTk5MjczNzE5NzIyNjU3ODU5NzcxMDE3OWUtMDRMLAkvKiAweDNmZjM0OGZhLCAweDBjYjQ4ZDE4LCAweDA1MWY4NDliLCAweDEzNWNjZjc0ICovCitxYTEwID0gIDEuMTcwMzc2NzUyMDQwMzMyMjU0NzAxMjExMzQwODc3NzE0MTBlLTA1TCwJLyogMHgzZmVlODhiNiwgMHg5OGY0NzcwNCwgMHhhNWQ4ZjhmMiwgMHhjNjQyMmUxMSAqLworcWExMSA9ICA0LjYxMzEyNTE4MjkzODUzOTkxNDM5MzYyODA2ODgwOTczNTkyZS0wNkwsCS8qIDB4M2ZlZDM1OTQsIDB4ZTMxZGI5NGYsIDB4MzU5MmI2OTMsIDB4ZWQ0Mzg2YjQgKi8KK3FhMTIgPSAtMS4wMjE1ODU3MjAzNzQ1Njg5MzY4NzczNzU1MzY1NzQzMTc3MWUtMDZMOwkvKiAweGJmZWIxMjNhLCAweGQ2MGQ5YjFlLCAweDFmNmZkZWI5LCAweDdkYzg0MTBhICovCisvKgorICogRG9tYWluIFsxLjI1LDIuODU3MTVdLCByYW5nZSB+Wy0yLjkyMmUtMzcsMi45MjJlLTM3XToKKyAqIHxsb2coeCplcmZjKHgpKSArIHgqKjIgKyAwLjU2MjUgLSByYSh4KS9zYSh4KXwgPCAyKiotMTIxLjM2CisgKi8KK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQorcmEwICA9IC05Ljg2NDk0MjkyNDcwMDY5MDA5NTU1NzA2OTk0NDI2MDE0NDYxZS0wM0wsCS8qIDB4YmZmODQzNDEsIDB4MjM5ZTg3MDksIDB4ZTk0MWIwNmEsIDB4Y2I0YjZlYzUgKi8KK3JhMSAgPSAtMS4xMzU4MDQzNjk5MjU2NTY0MDQ1NzU3OTA0MDExNzU2ODg3MGUrMDBMLAkvKiAweGJmZmYyMmM0LCAweDEzM2Y3YzBkLCAweDcyZDVlMjMxLCAweDJlYjFlZTNmICovCityYTIgID0gLTQuODk3NDQzMzAyOTUyOTE5NTA2NjExODU3MDcwNjY5MjE3NTVlKzAxTCwJLyogMHhjMDA0ODdjYiwgMHhhMzhiNGZjMiwgMHhjMTM2Njk1YiwgMHhjMWRmODA0NyAqLworcmEzICA9IC0xLjEwNzY2MTQ5MzAwMjE1OTM3MTczNzY4MDcyNzE1MzUyMTQwZSswM0wsCS8qIDB4YzAwOTE0ZWEsIDB4NTVlNmJlYjMsIDB4YWJjNTBlMDcsIDB4YjZlNTY2NGQgKi8KK3JhNCAgPSAtMS40OTk5MTAzMTIzMjE3MDkzNDk2NzY0Mjc5NTYwMTk1MjEwMGUrMDRMLAkvKiAweGMwMGNkNGI4LCAweGQzMzI0M2U2LCAweGZmYmY2NTQ1LCAweDNjNTdlZjZlICovCityYTUgID0gLTEuMjk4MDU3NDk3MzgzMTg0NjI4ODI1MjQxODE1NTY5OTY2OTJlKzA1TCwJLyogMHhjMDBmZmIwZCwgMHhiZmVlZDliNiwgMHg1YjJhM2ZmNCwgMHhlMjQ1YmQzYyAqLworcmE2ICA9IC03LjQyODI4NDk3MDQ0OTQwMDY1ODI4ODcxOTc2NjQ0NjQ3ODUwZSswNUwsCS8qIDB4YzAxMjZhYjUsIDB4OGZlN2NhY2EsIDB4NDczMzUyZDksIDB4Y2Q0ZTBjOTAgKi8KK3JhNyAgPSAtMi44NTYzNzI5OTU4MTg5MDczNDI4Nzk5NTE3MTI0MjQyMTEwNmUrMDZMLAkvKiAweGMwMTQ1Y2FkLCAweGE3Zjc2ZmU3LCAweDNlMzU4MDUxLCAweDE3OTlmOTI3ICovCityYTggID0gLTcuNDA2NzQ3OTcxMjk4MjQ5OTkzODM3NDg4NjU1NzEwMjYwODRlKzA2TCwJLyogMHhjMDE1YzQxMiwgMHg2ZmUyOWMwMiwgMHgyOThhZDE1OCwgMHg3ZDI0ZTQ1YyAqLworcmE5ICA9IC0xLjI4NjUzNDIwOTExOTMwOTczOTE0MDc4NzI0MjA0MTUxNzU5ZSswN0wsCS8qIDB4YzAxNjg4OWUsIDB4N2MyZWIwZGMsIDB4OTVkNTg2M2IsIDB4MGFhMzRkYzMgKi8KK3JhMTAgPSAtMS40NzE5ODE2MzU5OTMzMDE3OTU1MjkzMjQ4OTEwOTQ1MjYzOGUrMDdMLAkvKiAweGMwMTZjMTM2LCAweDkwYjg0OTIzLCAweGY5YmNiNDk3LCAweDE5YmJkMGY1ICovCityYTExID0gLTEuMDc4MTI5OTIyNTgzODI4MDAzMTg2NjUyNDgzMTE1MjI2MjRlKzA3TCwJLyogMHhjMDE2NDkwNCwgMHhlNjczYTExMywgMHgzNWQ3ZjA3OSwgMHhlMTM3MDFmMyAqLworcmExMiA9IC00LjgzNTQ1NTY1NjgxNzA4NjQyNjMwNDE5OTA1NTM3NzU2MDc2ZSswNkwsCS8qIDB4YzAxNTI3MjEsIDB4ZmVhMDk0YTgsIDB4ODY5ZWIzOWQsIDB4NDEzZDZmMTMgKi8KK3JhMTMgPSAtMS4yMzk1NjUyMTIwMTY3Mzk2NDgyMjk3NjkxNzM1NjY4NTI4NmUrMDZMLAkvKiAweGMwMTMyZWEwLCAweGQzNjQ2YmFhLCAweDJmZTYyYjBkLCAweGJhZTVjZTg1ICovCityYTE0ID0gLTEuNjIyODkzMzM1NTM2NTI0MTc1OTEyNzUzMzMyNDAzNzE4MTJlKzA1TCwJLyogMHhjMDEwM2NmOCwgMHhhYWIxZTJkNiwgMHg0YzI1ZTAxNCwgMHgyNDhkNzZhYiAqLworcmExNSA9IC04LjgyODkwMzkyNjAxMTc2OTY5NzI5MTY4ODk0Mzg5ODMzMTEwZSswM0wsCS8qIDB4YzAwYzEzZTcsIDB4M2IzZDhmOTQsIDB4NmZiZGE2ZjYsIDB4ZTcwNDlhODIgKi8KK3JhMTYgPSAtMS4yMjU5MTg2NjMzNzI2MTcyMDAyMzY4MTUzNTU2ODMzNDYxOWUrMDJMLAkvKiAweGMwMDVlYTVlLCAweDEyMzU4ODkxLCAweGNmYTcxMmM1LCAweDc3ZjA1MGQ0ICovCitzYTEgID0gIDYuNDQ1MDg5MTg4ODQ3MTA4MjkzNzE4NTI3MjMzNTM3OTQwNDdlKzAxTCwJLyogMHg0MDA1MDFjZCwgMHhiNjlhNmMwZiwgMHg1NzE2ZGUxNCwgMHg0NzE2MWFmNiAqLworc2EyICA9ICAxLjc2MTE4NDc1NDczMTcxNDgxNTIzNzA0ODI0MzI3MzU4NTM0ZSswM0wsCS8qIDB4NDAwOWI4NGIsIDB4ZDMwNTgyOWYsIDB4YzRjNzcxYjAsIDB4YmYxZjdmOWIgKi8KK3NhMyAgPSAgMi42OTQ0ODM0Njk2OTQ4ODM3NDg1NzA4NzY0NjEzMTk1MDE4OGUrMDRMLAkvKiAweDQwMGRhNTAzLCAweDU2YmFjYzA1LCAweDRmZGJhNjhkLCAweDJjY2EyN2U2ICovCitzYTQgID0gIDIuNTY4MjY2MzMzNjk5NDE0NTY3NzgzMjY0OTczODQ1NDM3NjNlKzA1TCwJLyogMHg0MDEwZjU5ZCwgMHg1MTEyNDQyOCwgMHg2OWM0MWRlNiwgMHhiZDBkNTc1MyAqLworc2E1ICA9ICAxLjYwNjQ3NDEzMDkyMjU3MjA2ODQ3NzAwMDU0NjQ1OTA1ODU5ZSswNkwsCS8qIDB4NDAxMzg4MzQsIDB4YTIxODQyNDQsIDB4NTU3YTFiZWQsIDB4NjhjOWQ1NTYgKi8KK3NhNiAgPSAgNi43Njk2MzA3NTE2NTA5OTcxODU3NDc1MzQ0NzEyMjM5Mzc5N2UrMDZMLAkvKiAweDQwMTU5ZDJmLCAweDdiMDFiMGNjLCAweDhiYWM5ZTk1LCAweDVkMzVkNTZlICovCitzYTcgID0gIDEuOTQyOTU2OTA5MDUzNjE4ODQyOTA5ODY5MzI0OTM2NDc3NDFlKzA3TCwJLyogMHg0MDE3Mjg3OCwgMHhjMTE3MmQ2MSwgMHgzMDY4NTAxZSwgMHgyZjNjNzFkYSAqLworc2E4ICA9ICAzLjc5Nzc0NzgxMDE3NzU5MTQ5MDYwODM5MjU1NTQ3MDczNTQxZSswN0wsCS8qIDB4NDAxODIxYmUsIDB4YzMwZDA2ZmUsIDB4NDEwNTYzZDcsIDB4MDMyMTExZmQgKi8KK3NhOSAgPSAgNS4wMDY1OTgzMTg0NjAyOTQ4NDI0ODMwMjIzNjQ1NzcyNzM5N2UrMDdMLAkvKiAweDQwMTg3ZGY5LCAweDFmOTdhMTExLCAweGM1MWQ2YWMyLCAweDRiMzg5NzkzICovCitzYTEwID0gIDQuMzY0ODYyODc2MjA1MDY0ODQyNzYxMzA1MjU5NDE5NzI1NDFlKzA3TCwJLyogMHg0MDE4NGQwMywgMHgzYTYxOGFlMCwgMHgyYTcyMzM1NywgMHhmYTQ1YzYwYSAqLworc2ExMSA9ICAyLjQzNzc5Njc4NzkxMzMzODk0MjU1NTEwNTA4MjUzOTUxOTM0ZSswN0wsCS8qIDB4NDAxNzczZmEsIDB4NmZlMTBlZTIsIDB4YzQ2Nzg1MGQsIDB4YzZiN2ZmMzAgKi8KK3NhMTIgPSAgOC4zMDczMjM2MDM4NDQ0MzIwMjAzOTM3MjM3MjIxMjk2NjU0MmUrMDZMLAkvKiAweDQwMTVmYjA5LCAweGVlNmE1NjMxLCAweGRkOThkZTdlLCAweDhiMDA0NjFhICovCitzYTEzID0gIDEuNjAxNjA4NDY5NDIwNTA1MTU3MzQxOTIzOTc0OTUxMDU2OTNlKzA2TCwJLyogMHg0MDEzODcwNCwgMHg4NzgyYmYxMywgMHg1YjhmYjMxNSwgMHhhODk4YWJlNSAqLworc2ExNCA9ICAxLjU0MjU1NTA1MjQyNTMzMjkxMDE0NTU1MTUzNzU3MDAxODI1ZSswNUwsCS8qIDB4NDAxMDJkNDcsIDB4YzBhYmM5OGUsIDB4ODQzYzk0OTAsIDB4YjQzNTI0NDAgKi8KK3NhMTUgPSAgNS44Nzk0OTIyMDAwMjM3NTU0NzU2MTQ2NzI3NTQ5Mzg4ODgyNGUrMDNMLAkvKiAweDQwMGI2Zjc3LCAweGUwMGQyMWQxLCAweGVjNGQ0MWU4LCAweDJmOGUxNjczICovCitzYTE2ID0gIDQuOTcyNzI5NzYzNDY3OTMxOTM4NjAzODU5ODMzNzIyMzc3MTBlKzAxTDsJLyogMHg0MDA0OGRkMSwgMHg4MTZjMWIzZiwgMHgyNGY1NDBhNiwgMHg0Y2ZlMDNjYyAqLworLyoKKyAqIERvbWFpbiBbMi44NTcxNSw5XSwgcmFuZ2UgflstNy44ODZlLTM3LDcuOTE4ZS0zN106CisgKiB8bG9nKHgqZXJmYyh4KSkgKyB4KioyICsgMC41NjI1IC0gcmIoeCkvc2IoeCl8IDwgMioqLTEyMAorICovCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK3JiMCAgPSAtOS44NjQ5NDI5MjQ3MDAwODcwNzE3MTM3MTk5NDQ3OTE2MjM2OWUtM0wsIC8qIDB4YmZmODQzNDEsIDB4MjM5ZTg2ZjQsIDB4MmY1N2U1NjEsIDB4ZjQ0NjkzNjAgKi8KK3JiMSAgPSAtMS41NzA0NzMyNjYyNDExMDcyNzk4NjMyNjUwMzcyOTQ0MjgzMEwsICAgIC8qIDB4YmZmZjkyMGEsIDB4ODkzNWJmNzMsIDB4ODgwM2I4OTQsIDB4NDY1NjQ4MmQgKi8KK3JiMiAgPSAtMS4wMzIyODE5NjM2NDg4NTQ3NDM0MjEzMjI1NTQ0MDMxNzA2NWUyTCwgIC8qIDB4YzAwNTljZTksIDB4YWM0ZWQwZmYsIDB4MmNmZjBmZjcsIDB4NWU3MGQxYWIgKi8KK3JiMyAgPSAtMy43NDAwMDU3MDY1MzQxODIyNzE3OTM1ODcxMDg2NTIyNDM3NmUzTCwgIC8qIDB4YzAwYWQzODAsIDB4MmViZjc4MzUsIDB4ZjZiMDdlZDIsIDB4ODYxMjQyZjcgKi8KK3JiNCAgPSAtOC4zNTQzNTQ3NzczOTA5ODA0NDE5MDg2MDM5MDYzMjgxMzk1NmU0TCwgIC8qIDB4YzAwZjQ2NTcsIDB4OGMzYWU5MzQsIDB4MzY0N2Q3YjMsIDB4ODBlNzZmYjcgKi8KK3JiNSAgPSAtMS4yMTM5ODY3MjA1NTIyMzY0MjExODcxNjY0MDIxNjc0NzE1MmU2TCwgIC8qIDB4YzAxMzI4NjIsIDB4MmI4NzYxYzgsIDB4MjdkMThjMGYsIDB4MTM3Yzk0NjMgKi8KK3JiNiAgPSAtMS4xNzY2OTE3NTg3NzI0ODc5NjEwMTY2NTM0NDg3MzI3Mzk3MGU3TCwgIC8qIDB4YzAxNjY3MTksIDB4MGIyY2VhNDYsIDB4ODFmMTQxNzQsIDB4MTE2MDJlYTUgKi8KK3JiNyAgPSAtNy42NjEwODAwNjA4Njk5ODI1MzYwNjc3MzA2NDI2NDU5OTYxNWU3TCwgIC8qIDB4YzAxOTI0M2YsIDB4M2MyNmY0ZjAsIDB4MWNjMDUyNDEsIDB4M2I5NTM3MjggKi8KK3JiOCAgPSAtMy4zMjU0NzExNzU1ODE0MTg0NTk2ODcwNDcyNTM1MzEzMDgwNGU4TCwgIC8qIDB4YzAxYjNkMjQsIDB4NDJkOGVlMjYsIDB4MjRlZjZmM2IsIDB4NjA0YThjNjUgKi8KK3JiOSAgPSAtOS40MTU2MTI1MjQyNjM1MDY5NjgwMjE2NzcxMTIyMTczOTc0NmU4TCwgIC8qIDB4YzAxY2MwZjgsIDB4YWQyMzY5MmEsIDB4OGRkYjIzMTAsIDB4ZTk5MzcxNDUgKi8KK3JiMTAgPSAtMS42NzE1NzExMDgwNTM5MDk0NDU0OTQyNzMyOTYyNjI4MTA2M2U5TCwgIC8qIDB4YzAxZDhlODgsIDB4OWE5MDM3MzQsIDB4MDlhNTVmYTMsIDB4ZDIwNWM5MDMgKi8KK3JiMTEgPSAtMS43NDMzOTYzMTAwNDQxMDg0MTMzNzY0NTkzMTQyMTQyNzM3M2U5TCwgIC8qIDB4YzAxZDlmYTgsIDB4Nzc1ODJkMmEsIDB4YzE4M2I4YWIsIDB4N2UwMGNiMDUgKi8KK3JiMTIgPSAtOS41NzY1NTIzMzU5NjkzNDkxNTcyNzU3MzE0MTM1NzQ3MTcwM2U4TCwgIC8qIDB4YzAxY2M4YTUsIDB4NDYwY2M2ODUsIDB4ZDAyNzFmYTAsIDB4NmE3MGUzZGEgKi8KK3JiMTMgPSAtMi4yNjMyMDA2MjczMTMzOTM1MzAzNTI1NDcwNDA4MjQ5NTA2NmU4TCwgIC8qIDB4YzAxYWFmYWIsIDB4ZDdkNzY3MjEsIDB4Yzk3MjBlMTEsIDB4NmE4YmQ0ODkgKi8KK3JiMTQgPSAtMS40Mjc3NzMwMjk5NjI2MzI1NjY4NjAwMjk3Mzg1MTgzNzAzOWU3TCwgIC8qIDB4YzAxNmIzYjgsIDB4YzQ5OTY4OWYsIDB4MmI4OGQ5NjUsIDB4YzMyNDE0ZjkgKi8KK3NiMSAgPSAgMS4wODUxMjg2OTcwNTU5NDU0MDIxMTAzMzczMzk3NjM0ODUwNmUyTCwgIC8qIDB4NDAwNWIyMGQsIDB4MmRiNzUyOGQsIDB4MDBkMjBkY2IsIDB4ODU4ZjYxOTEgKi8KK3NiMiAgPSAgNS4wMjc1NzcxMzc2MTM5MDQ2MDUzNDQ5NDUzMDUzNzU3MjgzNGUzTCwgIC8qIDB4NDAwYjNhMzksIDB4M2JmNGE2OTAsIDB4MzAyNWQyOGQsIDB4ZmQ0MGE4OTEgKi8KK3NiMyAgPSAgMS4zMTAxOTEwNzIwNTQxMjg3MDA1OTMzMTY0NzA3ODMyODQzMGU1TCwgIC8qIDB4NDAwZmZmY2IsIDB4MWI3MWQwNWUsIDB4M2IyODM2MWQsIDB4MmEzYzM2OTAgKi8KK3NiNCAgPSAgMi4xMzAyMTU1NTE1MjI5Njg0NjE2NjczNjc1NzQ1NTAxODAzMGU2TCwgIC8qIDB4NDAxNDA0MDksIDB4M2M2OTg0ZGYsIDB4YzQ0OTFkN2MsIDB4YjA0YWEwOGQgKi8KK3NiNSAgPSAgMi4yNjY0OTEwNTI4MTgyMDg2MTk1Mzg2ODU2ODYxOTc2ODI4NmU3TCwgIC8qIDB4NDAxNzU5ZDYsIDB4Y2U4NzM2ZjAsIDB4ZjI4YWQwMzcsIDB4MmE5MDFlMGMgKi8KK3NiNiAgPSAgMS42MTA3MTkzOTQ5MDg3NTkyMTgxMjMxODY4NDE0MzA3NjA4MWU4TCwgIC8qIDB4NDAxYTMzMzgsIDB4Njg2ZmI1NDEsIDB4NmJkMjdkMDYsIDB4NGY5NWM5YWMgKi8KK3NiNyAgPSAgNy42Njg5NTY3Mzg0NDMwMTg1MjY3NjA1Njc1MDQ5Nzk5MTk2NmU4TCwgIC8qIDB4NDAxYzZkYWYsIDB4MzFjZWMxMjEsIDB4NTQ2OTkxMjYsIDB4NGJkOWJmOWUgKi8KK3NiOCAgPSAgMi40MTg4NDQ1MDQzNjEwMTkzNjQzNjAyMzA1ODE5NjA0MjUyNmU5TCwgIC8qIDB4NDAxZTIwNTksIDB4NDZiMGI4ZDcsIDB4ODdiNjRjYmYsIDB4NzhiYzI5NmQgKi8KK3NiOSAgPSAgNC45MjQwMzA1NTg4NDA3MTY5NTA5MzMwNTI5MTUzNTEwNzY2NmU5TCwgIC8qIDB4NDAxZjI1N2UsIDB4YmU1ZWQ3MzksIDB4MzllMTczNDYsIDB4Y2FkZDJlNTUgKi8KK3NiMTAgPSAgNi4xODYyNzc4NjM2NTU4NzQ4NjQ1OTYzMzYxNTU3Mzc4NjQxNmU5TCwgIC8qIDB4NDAxZjcwYmIsIDB4MWJlN2E3ZTcsIDB4NmE0NWI1YWUsIDB4NjA3YzcwZjAgKi8KK3NiMTEgPSAgNC40NTg5ODAxMzQyNjUwMTM3ODA5NzQzMDIyNjMyNDc0MzE5OWU5TCwgIC8qIDB4NDAxZjA5YzYsIDB4YTMyNjQzZDcsIDB4ZjE3MjQ2MjAsIDB4OWVhNDZjMzIgKi8KK3NiMTIgPSAgMS42MzAwNjExNTc2MzMyOTg0ODExNzE2MDM0NDg1NDIyNDk3NWU5TCwgIC8qIDB4NDAxZDg0YTMsIDB4MDk5Njg4N2YsIDB4NjVhNGY0M2IsIDB4OTc4YzFkNzQgKi8KK3NiMTMgPSAgMi4zOTIxNjcxNzAxMjQyMTY5NzQ0NjMwNDAxNTg0NzU2NzcyMWU4TCwgIC8qIDB4NDAxYWM4NDUsIDB4MDlhMDY1YzIsIDB4MzAwOTVkYTcsIDB4OWQ3MmQ2YWUgKi8KK3NiMTQgPSAgNy44NDgzNzMyOTAwOTI3ODY5NDkzNzI1MDM1ODgxMDIyNTYwOWU2TDsgIC8qIDB4NDAxNWRmMDYsIDB4ZDUyOTBlMTUsIDB4NjMwMzFmYWMsIDB4NGQ5Yzg5NGMgKi8KKy8qCisgKiBEb21haW4gWzksMTA4XSwgcmFuZ2UgflstNS4zMjRlLTM4LDUuMzQwZS0zOF06CisgKiB8bG9nKHgqZXJmYyh4KSkgKyB4KioyICsgMC41NjI1IC0gcih4KS9zKHgpfCA8IDIqKi0xMjQKKyAqLworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCityYzAgID0gLTkuODY0OTQyOTI0NzAwMDg3MDcxNzEzNjc1Njc2NTI5MzU2NzNlLTNMLCAvKiAweGJmZjg0MzQxLCAweDIzOWU4NmY0LCAweDJmNTdlNTViLCAweDFhYTEwZmQzICovCityYzEgID0gLTEuMjYyMjk0NDc3NDczMTUwOTY0MDY1MTg4NDY0MTE1NjIyNjZMLCAgICAvKiAweGJmZmY0MzI1LCAweGJiMWFhYjI4LCAweGRhMzk1Y2Q5LCAweGZiODYxYzE1ICovCityYzIgID0gLTYuMTM3NDI2MzQ0Mzg5MjI1OTE3ODA3NDI2Mzc3Mjg2NjYxNjJlMUwsICAvKiAweGMwMDRlYWZlLCAweDdkZDUxY2Q4LCAweDNjN2M1OTI4LCAweDc1MWU1MGNmICovCityYzMgID0gLTEuNTA0NTU4MzU0Nzg5MDgyODA0MDI5MTI4NTQzMzg0MjE1MTdlM0wsICAvKiAweGMwMDk3ODIzLCAweGJjMTViOWFiLCAweDNkNjA3NDVjLCAweDUyM2U4MGE1ICovCityYzQgID0gLTIuMDQ0MTU2MzE4NjU4NjE1NDk5MjAxODQwMzk5MDI5NDU2ODVlNEwsICAvKiAweGMwMGQzZjY2LCAweDQwYjNmYzA0LCAweDUzODhmMmVjLCAweGIwMDllMWYwICovCityYzUgID0gLTEuNTc2MjU2NjI5ODE3MTQ1ODI3NTM0OTA2MTA1NjAwMzc2MzhlNUwsICAvKiAweGMwMTAzM2RjLCAweGQ0ZGM5NWI2LCAweGZkNGRhOTNiLCAweGYzNTViNGE5ICovCityYzYgID0gLTYuNzM0NzM0NTE2MTY3NTI1Mjg0MDI5MTc1MzgwMzMyODM3OTRlNUwsICAvKiAweGMwMTI0OGQ4LCAweDJlNzNhNGY5LCAweGNkZWQ0OWM1LCAweGZhM2JmZWI3ICovCityYzcgID0gLTEuNDc0MzMxNjU0MjEzODc0ODMxNjcxODY2ODM3NjQzNjQ4NTdlNkwsICAvKiAweGMwMTM2N2YxLCAweGJhNzdhOGY3LCAweGNmZGQwZGJiLCAweDI1ZDU1NGIzICovCityYzggID0gLTEuMzg4MTE5ODE4MDc4Njg4Mjg1NjM3OTQ5Mjk5OTc3NDQxMzllNkwsICAvKiAweGMwMTM1MmU1LCAweDdkMTZkOWFkLCAweGJiZGNiZjM4LCAweDM4ZmJjNWVhICovCityYzkgID0gLTMuNTk2NTk3MDA1MzA4MzE4MjU2NDA3NjY0Nzk2OTgxNTUwNjBlNUwsICAvKiAweGMwMTE1ZjNhLCAweGVjZDU3ZjQ1LCAweDIxZjhhZDZjLCAweDkxMGE1OTU4ICovCitzYzEgID0gIDcuNzI3MzA3NTMwMjI5MDgyOTg2Mzc1MDg5OTgwNzI2MzU2OTZlMUwsICAvKiAweDQwMDUzNTE3LCAweGExMGQ1MmJjLCAweGRhYmI1NWI2LCAweGJkMDMyOGNkICovCitzYzIgID0gIDIuMzY4MjU3NTczNDE2OTQwNTA1MDAzMzMyNjE3NjkwODIxODJlM0wsICAvKiAweDQwMGEyODA4LCAweDNlMGE5YjQyLCAweDgyOTc3ODQyLCAweDljNWRlMjllICovCitzYzMgID0gIDMuNzIyMTA1NDAxNzMwMzQ3MzUzNTI4ODg4NDcxMzQwNzMwOTllNEwsICAvKiAweDQwMGUyMmNhLCAweDFiYTgyN2VmLCAweGFjODM5MGQ3LCAweDFmYzM5YTQxICovCitzYzQgID0gIDMuMjQxMzYwMzI2NDY0MTgzMzY3MTI0NjEwMzM1OTEzOTM0MTJlNUwsICAvKiAweDQwMTEzYzhhLCAweDAyMTZlMTAwLCAweGM1OWQxZTQ0LCAweGYwZTY4ZDlkICovCitzYzUgID0gIDEuNTc4MzYxMzU4NTExMzQzOTM4MDI1MDU4MjMzNzAwMDkxNzVlNkwsICAvKiAweDQwMTM4MTU3LCAweDk1YmM3NjY0LCAweDE3NTc1OTYxLCAweGRiZTU4ZWViICovCitzYzYgID0gIDQuMTI4ODE5ODEzOTIwNjM3MzgwMjY2NzkwODk3MTQxODIzNTVlNkwsICAvKiAweDQwMTRmODAxLCAweDllODJlOGQyLCAweGI4YjNhNzBlLCAweGZkODQxODVkICovCitzYzcgID0gIDUuMjQ0Mzg0MjcyODkyMTM0ODg0MTA1OTYzOTUzNjE1NDQxNDJlNkwsICAvKiAweDQwMTU0MDE3LCAweDgxMTc3MTA5LCAweDJhYTZjM2IwLCAweDFmMTA2NjI1ICovCitzYzggID0gIDIuNTk5MDk1NDQ1NjM2MTYxMjE3MzU5NjM0Mjk3MTAzODIxNDllNkwsICAvKiAweDQwMTQzZDQ1LCAweGJiOTBhOWIxLCAweDEyYmY5MzkwLCAweGE4MjdhNzAwICovCitzYzkgID0gIDIuODA5MzA2NjUxNjkyODI1MDE2Mzk2NTE5OTUwODIzMzU2OTNlNUw7ICAvKiAweDQwMTExMjU4LCAweGFhOTIyMjJlLCAweGE5N2UzMjE2LCAweGEyMzdmYTZjICovCisKK2xvbmcgZG91YmxlCitlcmZsKGxvbmcgZG91YmxlIHgpCit7CisJbG9uZyBkb3VibGUgYXgsUixTLFAsUSxzLHkseixyOworCXVpbnQ2NF90IGx4LCBsbHg7CisJaW50MzJfdCBpOworCXVpbnQxNl90IGh4OworCisJRVhUUkFDVF9MREJMMTI4X1dPUkRTKGh4LCBseCwgbGx4LCB4KTsKKworCWlmKChoeCAmIDB4N2ZmZikgPT0gMHg3ZmZmKSB7CS8qIGVyZmwobmFuKT1uYW4gKi8KKwkJaSA9IChoeD4+MTUpPDwxOworCQlyZXR1cm4gKDEtaSkrb25lL3g7CS8qIGVyZmwoKy1pbmYpPSstMSAqLworCX0KKworCWF4ID0gZmFic2woeCk7CisJaWYoYXggPCAwLjg0Mzc1KSB7CisJICAgIGlmKGF4IDwgMHgxcC00MEwpIHsKKwkgICAgICAgIGlmKGF4IDwgMHgxcC0xNjM3M0wpCQorCQkgICAgcmV0dXJuICg4KngrZWZ4OCp4KS84OwkvKiBhdm9pZCBzcHVyaW91cyB1bmRlcmZsb3cgKi8KKwkJcmV0dXJuIHggKyBlZngqeDsKKwkgICAgfQorCSAgICB6ID0geCp4OworCSAgICByID0gcHAwK3oqKHBwMSt6KihwcDIreioocHAzK3oqKHBwNCt6KihwcDUreioocHA2K3oqKHBwNysKKwkJeioocHA4K3oqcHA5KSkpKSkpKSk7CisJICAgIHMgPSBvbmUreioocXExK3oqKHFxMit6KihxcTMreioocXE0K3oqKHFxNSt6KihxcTYreioocXE3KworCQl6KihxcTgreipxcTkpKSkpKSkpKTsKKwkgICAgeSA9IHIvczsKKwkgICAgcmV0dXJuIHggKyB4Knk7CisJfQorCWlmKGF4IDwgMS4yNSkgeworCSAgICBzID0gYXgtb25lOworCSAgICBQID0gcGEwK3MqKHBhMStzKihwYTIrcyoocGEzK3MqKHBhNCtzKihwYTUrcyoocGE2K3MqKHBhNysKKwkJcyoocGE4K3MqKHBhOStzKihwYTEwK3MqcGExMSkpKSkpKSkpKSk7CisJICAgIFEgPSBvbmUrcyoocWExK3MqKHFhMitzKihxYTMrcyoocWE0K3MqKHFhNStzKihxYTYrcyoocWE3KworCQlzKihxYTgrcyoocWE5K3MqKHFhMTArcyoocWExMStzKnFhMTIpKSkpKSkpKSkpKTsKKwkgICAgaWYoeD49MCkgcmV0dXJuIChlcnggKyBQL1EpOyBlbHNlIHJldHVybiAoLWVyeCAtIFAvUSk7CisJfQorCWlmIChheCA+PSA5KSB7CQkJLyogaW5mPnx4fD49IDkgKi8KKwkgICAgaWYoeD49MCkgcmV0dXJuIChvbmUtdGlueSk7IGVsc2UgcmV0dXJuICh0aW55LW9uZSk7CisJfQorCXMgPSBvbmUvKGF4KmF4KTsKKwlpZihheCA8IDIuODU3MTUpIHsJLyogfHh8IDwgMi44NTcxNSAqLworCSAgICBSPXJhMCtzKihyYTErcyoocmEyK3MqKHJhMytzKihyYTQrcyoocmE1K3MqKHJhNitzKihyYTcrCisJCXMqKHJhOCtzKihyYTkrcyoocmExMCtzKihyYTExK3MqKHJhMTIrcyoocmExMytzKihyYTE0KworCQlzKihyYTE1K3MqcmExNikpKSkpKSkpKSkpKSkpKTsKKwkgICAgUz1vbmUrcyooc2ExK3MqKHNhMitzKihzYTMrcyooc2E0K3MqKHNhNStzKihzYTYrcyooc2E3KworCQlzKihzYTgrcyooc2E5K3MqKHNhMTArcyooc2ExMStzKihzYTEyK3MqKHNhMTMrcyooc2ExNCsKKwkJcyooc2ExNStzKnNhMTYpKSkpKSkpKSkpKSkpKSk7CisJfSBlbHNlIHsJLyogfHh8ID49IDIuODU3MTUgKi8KKwkgICAgUj1yYjArcyoocmIxK3MqKHJiMitzKihyYjMrcyoocmI0K3MqKHJiNStzKihyYjYrcyoocmI3KworCQlzKihyYjgrcyoocmI5K3MqKHJiMTArcyoocmIxMStzKihyYjEyK3MqKHJiMTMrCisJCXMqcmIxNCkpKSkpKSkpKSkpKSk7CisJICAgIFM9b25lK3MqKHNiMStzKihzYjIrcyooc2IzK3MqKHNiNCtzKihzYjUrcyooc2I2K3MqKHNiNysKKwkJcyooc2I4K3MqKHNiOStzKihzYjEwK3MqKHNiMTErcyooc2IxMitzKihzYjEzKworCQlzKnNiMTQpKSkpKSkpKSkpKSkpOworCX0KKwl6ID0gKGZsb2F0KWF4OworCXIgPSBleHBsKC16KnotMC41NjI1KSpleHBsKCh6LWF4KSooeitheCkrUi9TKTsKKwlpZih4Pj0wKSByZXR1cm4gKG9uZS1yL2F4KTsgZWxzZSByZXR1cm4gKHIvYXgtb25lKTsKK30KKworbG9uZyBkb3VibGUKK2VyZmNsKGxvbmcgZG91YmxlIHgpCit7CisJbG9uZyBkb3VibGUgYXgsUixTLFAsUSxzLHkseixyOworCXVpbnQ2NF90IGx4LCBsbHg7CisJdWludDE2X3QgaHg7CisKKwlFWFRSQUNUX0xEQkwxMjhfV09SRFMoaHgsIGx4LCBsbHgsIHgpOworCisJaWYoKGh4ICYgMHg3ZmZmKSA9PSAweDdmZmYpIHsJLyogZXJmY2wobmFuKT1uYW4gKi8KKwkJCQkJLyogZXJmY2woKy1pbmYpPTAsMiAqLworCSAgICByZXR1cm4gKChoeD4+MTUpPDwxKStvbmUveDsKKwl9CisKKwlheCA9IGZhYnNsKHgpOworCWlmKGF4IDwgMC44NDM3NUwpIHsKKwkgICAgaWYoYXggPCAweDFwLTM0TCkKKwkJcmV0dXJuIG9uZS14OworCSAgICB6ID0geCp4OworCSAgICByID0gcHAwK3oqKHBwMSt6KihwcDIreioocHAzK3oqKHBwNCt6KihwcDUreioocHA2K3oqKHBwNysKKwkJeioocHA4K3oqcHA5KSkpKSkpKSk7CisJICAgIHMgPSBvbmUreioocXExK3oqKHFxMit6KihxcTMreioocXE0K3oqKHFxNSt6KihxcTYreioocXE3KworCQl6KihxcTgreipxcTkpKSkpKSkpKTsKKwkgICAgeSA9IHIvczsKKwkgICAgaWYoYXggPCAwLjI1TCkgeyAgCS8qIHg8MS80ICovCisJCXJldHVybiBvbmUtKHgreCp5KTsKKwkgICAgfSBlbHNlIHsKKwkJciA9IHgqeTsKKwkJciArPSAoeC1oYWxmKTsKKwkgICAgICAgcmV0dXJuIGhhbGYgLSByOworCSAgICB9CisJfQorCWlmKGF4IDwgMS4yNUwpIHsKKwkgICAgcyA9IGF4LW9uZTsKKwkgICAgUCA9IHBhMCtzKihwYTErcyoocGEyK3MqKHBhMytzKihwYTQrcyoocGE1K3MqKHBhNitzKihwYTcrCisJCSAgICBzKihwYTgrcyoocGE5K3MqKHBhMTArcypwYTExKSkpKSkpKSkpKTsKKwkgICAgUSA9IG9uZStzKihxYTErcyoocWEyK3MqKHFhMytzKihxYTQrcyoocWE1K3MqKHFhNitzKihxYTcrCisJCSAgICBzKihxYTgrcyoocWE5K3MqKHFhMTArcyoocWExMStzKnFhMTIpKSkpKSkpKSkpKTsKKwkgICAgaWYoeD49MCkgeworCSAgICAgICAgeiAgPSBvbmUtZXJ4OyByZXR1cm4geiAtIFAvUTsKKwkgICAgfSBlbHNlIHsKKwkJeiA9IGVyeCtQL1E7IHJldHVybiBvbmUrejsKKwkgICAgfQorCX0KKworCWlmKGF4IDwgMTA4KSB7CQkJLyogfHh8IDwgMTA4ICovCisgCSAgICBzID0gb25lLyhheCpheCk7CisJICAgIGlmKGF4IDwgMi44NTcxNSkgewkJLyogfHh8IDwgMi44NTcxNSAqLworCSAgICAgICAgUj1yYTArcyoocmExK3MqKHJhMitzKihyYTMrcyoocmE0K3MqKHJhNStzKihyYTYrcyoocmE3KworCQkgICAgcyoocmE4K3MqKHJhOStzKihyYTEwK3MqKHJhMTErcyoocmExMitzKihyYTEzK3MqKHJhMTQrCisJCSAgICBzKihyYTE1K3MqcmExNikpKSkpKSkpKSkpKSkpKTsKKwkgICAgICAgIFM9b25lK3MqKHNhMStzKihzYTIrcyooc2EzK3MqKHNhNCtzKihzYTUrcyooc2E2K3MqKHNhNysKKwkJICAgIHMqKHNhOCtzKihzYTkrcyooc2ExMCtzKihzYTExK3MqKHNhMTIrcyooc2ExMytzKihzYTE0KworCQkgICAgcyooc2ExNStzKnNhMTYpKSkpKSkpKSkpKSkpKSk7CisJICAgIH0gZWxzZSBpZihheCA8IDkpIHsKKwkJUj1yYjArcyoocmIxK3MqKHJiMitzKihyYjMrcyoocmI0K3MqKHJiNStzKihyYjYrcyoocmI3KworCQkgICAgcyoocmI4K3MqKHJiOStzKihyYjEwK3MqKHJiMTErcyoocmIxMitzKihyYjEzKworCQkgICAgcypyYjE0KSkpKSkpKSkpKSkpKTsKKwkJUz1vbmUrcyooc2IxK3MqKHNiMitzKihzYjMrcyooc2I0K3MqKHNiNStzKihzYjYrcyooc2I3KworCQkgICAgcyooc2I4K3MqKHNiOStzKihzYjEwK3MqKHNiMTErcyooc2IxMitzKihzYjEzKworCQkgICAgcypzYjE0KSkpKSkpKSkpKSkpKTsKKwkgICAgfSBlbHNlIHsKKwkJaWYoeCA8IC05KSByZXR1cm4gdHdvLXRpbnk7CS8qIHggPCAtOSAqLworCQlSPXJjMCtzKihyYzErcyoocmMyK3MqKHJjMytzKihyYzQrcyoocmM1K3MqKHJjNitzKihyYzcrCisJCSAgICBzKihyYzgrcypyYzkpKSkpKSkpKTsKKwkJUz1vbmUrcyooc2MxK3MqKHNjMitzKihzYzMrcyooc2M0K3MqKHNjNStzKihzYzYrcyooc2M3KworCQkgICAgcyooc2M4K3Mqc2M5KSkpKSkpKSk7CisJICAgIH0KKwkgICAgeiA9IChmbG9hdClheDsKKwkgICAgciA9IGV4cGwoLXoqei0wLjU2MjUpKmV4cGwoKHotYXgpKih6K2F4KStSL1MpOworCSAgICBpZih4PjApIHJldHVybiByL2F4OyBlbHNlIHJldHVybiB0d28tci9heDsKKwl9IGVsc2UgeworCSAgICBpZih4PjApIHJldHVybiB0aW55KnRpbnk7IGVsc2UgcmV0dXJuIHR3by10aW55OworCX0KK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2V4cDJsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19leHAybC5jCmluZGV4IDVlZDUxNGMuLjVhZmEzN2UgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2V4cDJsLmMKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L3NfZXhwMmwuYwpAQCAtMzY5LDcgKzM2OSw3IEBACiAJCQkgICAgfHwgdS54Yml0cy5tYW5sICE9IDAKIAkJCSAgICB8fCAoaHggJiAweDgwMDApID09IDApCiAJCQkJcmV0dXJuICh4ICsgeCk7CS8qIHggaXMgTmFOIG9yICtJbmYgKi8KLQkJCWVsc2UKKwkJCWVsc2UgCiAJCQkJcmV0dXJuICgwLjApOwkvKiB4IGlzIC1JbmYgKi8KIAkJfQogCQlpZiAoeCA+PSAxNjM4NCkKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2V4cGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2V4cGwuYwppbmRleCAxNzZjOTMyLi5hNmE5Njc2IDEwMDY0NAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19leHBsLmMKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L3NfZXhwbC5jCkBAIC0zOCwxNiArMzgsMTUgQEAKICNpbmNsdWRlICJmcG1hdGguaCIKICNpbmNsdWRlICJtYXRoLmgiCiAjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisjaW5jbHVkZSAia19leHBsLmgiCiAKLSNkZWZpbmUJSU5URVJWQUxTCTEyOAotI2RlZmluZQlMT0cyX0lOVEVSVkFMUwk3Ci0jZGVmaW5lCUJJQVMJKExEQkxfTUFYX0VYUCAtIDEpCisvKiBYWFggUHJldmVudCBjb21waWxlcnMgZnJvbSBlcnJvbmVvdXNseSBjb25zdGFudCBmb2xkaW5nIHRoZXNlOiAqLworc3RhdGljIGNvbnN0IHZvbGF0aWxlIGxvbmcgZG91YmxlCitodWdlID0gMHgxcDEwMDAwTCwKK3RpbnkgPSAweDFwLTEwMDAwTDsKIAogc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCi1odWdlID0gMHgxcDEwMDAwTCwKIHR3b20xMDAwMCA9IDB4MXAtMTAwMDBMOwotLyogWFhYIFByZXZlbnQgZ2NjIGZyb20gZXJyb25lb3VzbHkgY29uc3RhbnQgZm9sZGluZyB0aGlzOiAqLwotc3RhdGljIHZvbGF0aWxlIGNvbnN0IGxvbmcgZG91YmxlIHRpbnkgPSAweDFwLTEwMDAwTDsKIAogc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCiAvKiBsb2coMioqMTYzODQgLSAwLjUpIHJvdW5kZWQgdG93YXJkcyB6ZXJvOiAqLwpAQCAtNTYsMTg0ICs1NSwxNiBAQAogLyogbG9nKDIqKigtMTYzODEtNjQtMSkpIHJvdW5kZWQgdG93YXJkcyB6ZXJvOiAqLwogdV90aHJlc2hvbGQgPSAtMTE0MzMuNDYyNzQzMzM2Mjk3ODc4ODM3MjQzODQzNDUyNjIxNTAzTDsKIAotc3RhdGljIGNvbnN0IGRvdWJsZQotLyoKLSAqIGxuMi9JTlRFUlZBTFMgPSBMMStMMiAoaGkrbG8gZGVjb21wb3NpdGlvbiBmb3IgbXVsdGlwbGljYXRpb24pLiAgTDEgbXVzdAotICogaGF2ZSBhdCBsZWFzdCAyMiAoPSBsb2cyKHxMREJMX01JTl9FWFAtZXh0cmFzfCkgKyBsb2cyKElOVEVSVkFMUykpIGxvd2VzdAotICogYml0cyB6ZXJvIHNvIHRoYXQgbXVsdGlwbGljYXRpb24gb2YgaXQgYnkgbiBpcyBleGFjdC4KLSAqLwotSU5WX0wgPSAxLjg0NjY0OTY1MjMzNzg3MzFlKzIsCQkvKiAgMHgxNzE1NDc2NTJiODJmZS4wcC00NSAqLwotTDIgPSAtMS4wMjUzNjcwNjM4ODk0NzMxZS0yOTsJCS8qIC0weDEuOWZmMDM0MjU0MmZjM3AtOTcgKi8KLXN0YXRpYyBjb25zdCBsb25nIGRvdWJsZQotLyogMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjgwMDAwMDBwLTggKi8KLUwxID0gIDUuNDE1MjEyMzQ4MTI0NTcyNzI5ODIyMTI1OTU5MTQ1Njc1MDhlLTNMOwotCi1zdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKLS8qCi0gKiBEb21haW4gWy0wLjAwMjcwOCwgMC4wMDI3MDhdLCByYW5nZSB+Wy0yLjQwMjFlLTM4LCAyLjQyMzRlLTM4XToKLSAqIHxleHAoeCkgLSBwKHgpfCA8IDIqKi0xMjQuOQotICogKDAuMDAyNzA4IGlzIGxuMi8oMipJTlRFUlZBTFMpIHJvdW5kZWQgdXAgYSBsaXR0bGUpLgotICovCi1BMiAgPSAgMC41LAotQTMgID0gIDEuNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTEwODU1MDBlLTFMLAotQTQgID0gIDQuMTY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY0MjU4ODUzMjBlLTJMLAotQTUgID0gIDguMzMzMzMzMzMzMzMzMzMzMzMzMzQ1MjI4NzcxNjAxNzU4NDJlLTNMLAotQTYgID0gIDEuMzg4ODg4ODg4ODg4ODg4ODg4ODk5NzExMzk3NTE1OTY4MzZlLTNMOwotCi1zdGF0aWMgY29uc3QgZG91YmxlCi1BNyAgPSAgMS45ODQxMjY5ODQxMjY5NDcxZS00LAotQTggID0gIDIuNDgwMTU4NzMwMTU4NTI4NGUtNSwKLUE5ICA9ICAyLjc1NTczMjQyNzc0MTEyMzRlLTYsCi1BMTAgPSAgMi43NTU3MzMzNzIyMzc1MDcyZS03OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQkvKgotCSAqIGhpIG11c3QgYmUgcm91bmRlZCB0byBhdCBtb3N0IDEwNiBiaXRzIHNvIHRoYXQgbXVsdGlwbGljYXRpb24KLQkgKiBieSByMSBpbiBleHBtMWwoKSBpcyBleGFjdCwgYnV0IGl0IGlzIHJvdW5kZWQgdG8gODggYml0cyBkdWUgdG8KLQkgKiBoaXN0b3JpY2FsIGFjY2lkZW50cy4KLQkgKi8KLQlsb25nIGRvdWJsZQloaTsKLQlsb25nIGRvdWJsZQlsbzsKLX0gdGJsW0lOVEVSVkFMU10gPSB7Ci0JMHgxcDBMLCAweDBwMEwsCi0JMHgxLjAxNjNkYTlmYjMzMzU2ZDg0YTY2YWVwMEwsIDB4My4zNmRjZGZhNDAwM2VjMDRjMzYwYmUyNDA0MDc4cC05MkwsCi0JMHgxLjAyYzlhM2U3NzgwNjBlZTZmN2NhY2FwMEwsIDB4NC5mN2EyOWJkZTkzZDcwYTJjYWJjNWNiODliYTEwcC05MkwsCi0JMHgxLjA0MzE1ZTg2ZTdmODRiZDczOGY5YTJwMEwsIDB4ZC5hNDdlNmVkMDQwYmI0YmZjMDVhZjY0NTVlOWI4cC05NkwsCi0JMHgxLjA1OWIwZDMxNTg1NzQzYWU3YzU0OGVwMEwsIDB4Yi42OGNhNDE3ZmU1M2UzNDk1ZjdkZjRiYWY4NGEwcC05MkwsCi0JMHgxLjA3MDZiMjlkZGY2ZGRjNmRjNDAzYThwMEwsIDB4MS5kODdiMjdlZDA3Y2I4YjA5MmFjNzVlMzExNzUzcC04OEwsCi0JMHgxLjA4NzQ1MTg3NTliYzgwOGMzNWYyNWNwMEwsIDB4MS45NDI3ZmEyYjA0MWIyZDY4MjlkODk5M2EwZDAxcC04OEwsCi0JMHgxLjA5ZTNlY2FjNmYzODM0NTIxZTA2MGNwMEwsIDB4NS44NGQ2Yjc0YmEyZTAyM2RhNzMwZTdmY2NiNzU4cC05MkwsCi0JMHgxLjBiNTU4NmNmOTg5MGY2Mjk4YjkyYjZwMEwsIDB4MS4xODQyYTk4MzY0MjkxNDA4YjNjZWIwYTJhMmJicC04OEwsCi0JMHgxLjBjYzkyMmI3MjQ3Zjc0MDdiNzA1YjhwMEwsIDB4OS4zZGM1ZThhYWM1NjRlNmZlMmVmMWQ0MzFmZDk4cC05MkwsCi0JMHgxLjBlM2VjMzJkM2QxYTIwMjA3NDJlNGVwMEwsIDB4MS44YWY2YTU1MmFjNGIzNThiMTEyOWU5Zjk2NmE0cC04OEwsCi0JMHgxLjBmYjY2YWZmZWQzMWFmMjMyMDkxZGNwMEwsIDB4MS44YTE0MjY1MTRlMGI2MjdiZGE2OTRhNDAwYTI3cC04OEwsCi0JMHgxLjExMzAxZDAxMjViNTBhNGViYmYxYWVwMEwsIDB4ZC45MzE4Y2VhYzVjYzQ3YWIxNjZlZTU3NDI3MTc4cC05MkwsCi0JMHgxLjEyYWJkYzA2YzMxY2JmYjkyYmFkMzJwMEwsIDB4NC5kNjhlMmY3MjcwYmRmN2NlZGY5NGViMWNiODE4cC05MkwsCi0JMHgxLjE0MjlhYWVhOTJkZGZiMzQxMDE5NDJwMEwsIDB4MS5iMjU4NmQwMTg0NGIzODliZWE3YWVkZDIyMWQ0cC04OEwsCi0JMHgxLjE1YTk4YzhhNThlNTEyNDgwZDU3M2NwMEwsIDB4MS5kNTYxM2JmOTJhMmI2MThlZTMxYjM3NmMyNjg5cC04OEwsCi0JMHgxLjE3MmI4M2M3ZDUxN2FkY2RmN2M4YzRwMEwsIDB4MS4wZWIxNGE3OTIwMzU1MDlmZjdkNzU4NjkzZjI0cC04OEwsCi0JMHgxLjE4YWY5Mzg4YzhkZTliYmJmNzBiOWFwMEwsIDB4My5jMjUwNWM5N2MwMTAyZTVmMTIxMTk0MWQyODQwcC05MkwsCi0JMHgxLjFhMzViZWI2ZmNiNzUzY2I2OThmNjhwMEwsIDB4MS4yZDFjODM1YTZjMzA3MjRkNWNmYWUzMWI4NGU1cC04OEwsCi0JMHgxLjFiYmUwODQwNDVjZDM5YWIxZTcyYjRwMEwsIDB4NC4yN2UzNWY5YWNiNTdlNDczOTE1NTE5YTFiNDQ4cC05MkwsCi0JMHgxLjFkNDg3MzE2OGI5YWE3ODA1YjgwMjhwMEwsIDB4OS45MGYwN2E5OGI0MjIwNmU0NjE2NmNmMDUxZDcwcC05MkwsCi0JMHgxLjFlZDUwMjJmY2Q5MWNiODgxOWZmNjBwMEwsIDB4MS4xMjFkMWU1MDRkMzZjNDc0NzRjOWI3ZGU2MDY3cC04OEwsCi0JMHgxLjIwNjNiODg2MjhjZDYzYjhlZWIwMjhwMEwsIDB4MS41MDkyOWQwZmM0ODdkMjFjMmI4NDAwNDI2NGRlcC04OEwsCi0JMHgxLjIxZjQ5OTE3ZGRjOTYyNTUyZmQyOTJwMEwsIDB4OS40YmRiNGI2MWVhNjI0NzdjYWExZGNlODIzYmEwcC05MkwsCi0JMHgxLjIzODdhNmU3NTYyMzg2NmMxZmFkYjBwMEwsIDB4MS5jMTVjYjU5M2IwMzI4NTY2OTAyZGY2OWU0ZGUycC04OEwsCi0JMHgxLjI1MWNlNGZiMmE2M2YzNTgyYWI3ZGVwMEwsIDB4OS5lOTQ4MTFhOWM4YWZkY2Y3OTY5MzRiYzY1MmQwcC05MkwsCi0JMHgxLjI2YjQ1NjVlMjdjZGQyNTdhNjczMjhwMEwsIDB4MS5kM2IyNDlkY2U0ZTkxODZkZGQ1ZmY0NGU2YjA4cC05MkwsCi0JMHgxLjI4NGRmZTFmNTYzODA5NmNmMTVjZjBwMEwsIDB4My5jYTA5NjdmZGFhMmU1MmQ3YzgxMDZmMmUyNjJjcC05MkwsCi0JMHgxLjI5ZTlkZjUxZmRlZTEyYzI1ZDE1ZjRwMEwsIDB4MS5hMjRhYTNiY2E4OTBhYzA4ZDIwM2ZlZDgwYTA3cC04OEwsCi0JMHgxLjJiODdmZDBkYWQ5OGZmZGRlYTQ2NTJwMEwsIDB4MS44ZmNhYjg4NDQyZmRjM2NiNmRlNDUxOTE2NWVkcC04OEwsCi0JMHgxLjJkMjg1YTZlNDAzMGI0MDA5MWQ1MzZwMEwsIDB4ZC4wNzUzODQ1ODljMWNkMWIzZTQwMThhNmIxMzQ4cC05MkwsCi0JMHgxLjJlY2FmYTkzZTJmNTYxMWNhMGY0NWNwMEwsIDB4MS41MjM4MzNhZjYxMWJkY2RhMjUzYzU1NGNmMjc4cC04OEwsCi0JMHgxLjMwNmZlMGEzMWI3MTUyZGU4ZDVhNDZwMEwsIDB4My4wNWM4NWVkZWNiYzI3MzQzNjI5ZjUwMmYxYWYycC05MkwsCi0JMHgxLjMyMTcwZmM0Y2Q4MzEzNTM5Y2YxYzJwMEwsIDB4MS4wMDhmODZkZGUzMjIwYWUxN2EwMDViNjQxMmJlcC04OEwsCi0JMHgxLjMzYzA4YjI2NDE2ZmY0YzljODYxMGNwMEwsIDB4MS45NjY5NmJmOTVkMTU5MzAzOTUzOWQ5NGQ2NjJicC04OEwsCi0JMHgxLjM1NmM1NWY5MjlmZjBjOTQ2MjM0NzZwMEwsIDB4My43M2FmMzhkNmQ4ZDZmOTUwNmM5YmJjOTNjYmMwcC05MkwsCi0JMHgxLjM3MWE3MzczYWE5Y2FhNzE0NTUwMmVwMEwsIDB4MS40NTQ3OTg3ZTNlMTI1MTZiZjljNjk5YmU0MzJmcC04OEwsCi0JMHgxLjM4Y2FlNmQwNWQ4NjU4NWE5Y2IwZDhwMEwsIDB4MS5iZWQwYzg1M2JkMzBhMDI3OTA5MzFlYjJlOGYwcC04OEwsCi0JMHgxLjNhN2RiMzRlNTlmZjZlYTFiYzkyOThwMEwsIDB4MS5lMGExZDMzNjE2M2ZlMmY4NTJjZWViMTM0MDY3cC04OEwsCi0JMHgxLjNjMzJkYzMxM2E4ZTQ4NDAwMWYyMjhwMEwsIDB4Yi41OGYzNzc1ZTA2YWI2NjM1MzAwMWZhZTlmY2EwcC05MkwsCi0JMHgxLjNkZWE2NGMxMjM0MjIzNWI0MTIyM2VwMEwsIDB4MS4zZDc3M2ZiYTJjYjgyYjgyNDQyNjdjNTQ0NDNmcC05MkwsCi0JMHgxLjNmYTQ1MDRhYzgwMWJhMGJmNzAxYWFwMEwsIDB4NC4xODMyZmI4YzFjOGRiZGZmMmM0OTkwOWU2YzYwcC05MkwsCi0JMHgxLjQxNjBhMjFmNzJlMjlmODQzMjViOGVwMEwsIDB4MS4zZGI2MWZiMzUyZjA1NDBlNmJhMDU2MzQ0MTNlcC04OEwsCi0JMHgxLjQzMWY1ZDk1MGE4OTZkYzcwNDQzOTRwMEwsIDB4MS4wY2NlYzgxZTI0YjBjYWZmNzU4MWVmNDEyN2Y3cC05MkwsCi0JMHgxLjQ0ZTA4NjA2MTg5MmQwMzEzNmY0MDhwMEwsIDB4MS5kZjAxOWZiZDRmM2I0ODcwOWI3ODU5MWQ1Y2I1cC04OEwsCi0JMHgxLjQ2YTQxZWQxZDAwNTc3MjUxMmY0NThwMEwsIDB4MS4yMjlkOTdkZjQwNGZmMjFmMzljMWI1OTRkM2E4cC04OEwsCi0JMHgxLjQ4NmEyYjVjMTNjZDAxM2MxYTNiNjhwMEwsIDB4MS4wNjJmMDNjM2RkNzVjZTg3NTdmNzgwZTZlYzk5cC04OEwsCi0JMHgxLjRhMzJhZjBkN2QzZGU2NzJkOGJjZjRwMEwsIDB4Ni5mOTU4NjQ2MWRiMWQ4NzhiMWQxNDhiZDNjY2I4cC05MkwsCi0JMHgxLjRiZmRhZDUzNjJhMjcxZDQzOTdhZmVwMEwsIDB4Yy40MmUyMGUwMzYzYmEyZTE1OWM1NzlmODJlNGIwcC05MkwsCi0JMHgxLjRkY2IyOTlmZGRkMGQ2M2IzNmVmMWFwMEwsIDB4OS5lMGNjNDg0YjI1YTU1NjZkMGJkNWY1OGFkMjM4cC05MkwsCi0JMHgxLjRmOWIyNzY5ZDJjYTZhZDMzZDhiNjhwMEwsIDB4MS5hYTA3M2VlNTVlMDI4NDk3YTMyOWE3MzMzZGJhcC04OEwsCi0JMHgxLjUxNmRhYTJjZjY2NDFjMTEyZjUyYzhwMEwsIDB4NC5kODIyMTkwZTcxODIyNjE3N2Q3NjA4ZDIwMDM4cC05MkwsCi0JMHgxLjUzNDJiNTY5ZDRmODFkZjBhODNjNDhwMEwsIDB4MS5kODZhNjNmNGU2NzJhM2U0Mjk4MDViMDQ5NDY1cC04OEwsCi0JMHgxLjU1MWE0Y2E1ZDkyMGVjNTJlYzYyMDJwMEwsIDB4NC4zNGNhNjcyNjQ1ZGM2YzEyNGQ2NjE5YTg3NTc0cC05MkwsCi0JMHgxLjU2ZjQ3MzZiNTI3ZGE2NmVjYjAwNDZwMEwsIDB4MS42NGViM2MwMGYyZjVhYjNkODAxZDdjYzcyNzJkcC04OEwsCi0JMHgxLjU4ZDEyZDQ5N2M3ZmQyNTJiYzJiNzJwMEwsIDB4MS40M2JjZjJlYzkzNmE5NzBkOWNjMjY2ZjAwNzJmcC04OEwsCi0JMHgxLjVhYjA3ZGQ0ODU0Mjk1OGM5MzAxNTBwMEwsIDB4MS45MWViMzQ1ZDg4ZDdjODEyODBlMDY5ZmJkYjYzcC04OEwsCi0JMHgxLjVjOTI2OGE1OTQ2YjcwMWM0YjFiODBwMEwsIDB4MS42OTg2YTIwM2Q4NGU2YTRhOTJmMTc5ZTcxODg5cC04OEwsCi0JMHgxLjVlNzZmMTVhZDIxNDg2ZTliZTRjMjBwMEwsIDB4My45OTc2NmEwNjU0OGEwNTgyOWU4NTNiZGIyYjUycC05MkwsCi0JMHgxLjYwNWUxYjk3NmRjMDhiMDc2ZjU5MmFwMEwsIDB4NC44NmUzYjM0ZWFkMWI0NzY5ZGY4NjdiOWM4OWNjcC05MkwsCi0JMHgxLjYyNDdlYjAzYTU1ODRiMWYwZmEwNmVwMEwsIDB4MS5kMmRhNDJiYjFjZWFmOWY3MzIyNzViOGFlZjMwcC04OEwsCi0JMHgxLjY0MzQ2MzRjY2MzMWZjNzZmODcxNGNwMEwsIDB4NC5lZDlhNGU0MTAwMDMwNzEwM2ExOGNmN2E2ZTA4cC05MkwsCi0JMHgxLjY2MjM4ODI1NTIyMjQ5MTI3ZDllMjhwMEwsIDB4MS5iOGYzMTRhMzM3ZjRkYzBhM2FkZjE3ODdmZjc0cC04OEwsCi0JMHgxLjY4MTU1ZDQ0Y2E5NzMwODFjNTcyMjZwMEwsIDB4MS5iOWYzMjcwNmJmZTRlNjI3ZDgwOWE4NWRjYzY2cC04OEwsCi0JMHgxLjZhMDllNjY3ZjNiY2M5MDhiMmZiMTJwMEwsIDB4MS42NmVhOTU3ZDNlM2FkZWMxNzUxMjc3NTA5OWRhcC04OEwsCi0JMHgxLjZjMDEyNzUwYmRhYmVlZDc2YTk5ODBwMEwsIDB4Zi40ZjMzZmRlYjhiMGVjZDgzMTEwNmY1N2IzZDAwcC05NkwsCi0JMHgxLjZkZmIyM2M2NTFhMmVmMjIwZTJjYmVwMEwsIDB4MS5iYmFhODM0YjNmMTE1NzdjZWVmYmU2YzFjNDExcC05MkwsCi0JMHgxLjZmZjdkZjk1MTk0ODNjZjg3ZTFiNGVwMEwsIDB4MS4zZTIxM2JmZjliNzAyZDVhYTQ3N2MxMjUyM2NlcC04OEwsCi0JMHgxLjcxZjc1ZThlYzVmNzNkZDIzNzBmMmVwMEwsIDB4Zi4wYWNkNmNiNDM0YjU2MmQ5ZThhMjBhZGRhNjQ4cC05MkwsCi0JMHgxLjczZjlhNDhhNTgxNzNiZDVjOWE0ZTZwMEwsIDB4OC5hYjExODJhZTIxN2YzYTc2ODE3NTk1NTNlODQwcC05MkwsCi0JMHgxLjc1ZmViNTY0MjY3YzhiZjZlOWFhMzJwMEwsIDB4MS5hNDhiMjcwNzE4MDVlNjFhMTdiOTU0YTJkYWQ4cC04OEwsCi0JMHgxLjc4MDY5NGZkZTVkM2Y2MTlhZTAyODBwMEwsIDB4OC41OGIyYmIyYmRjZjg2Y2QwOGUzNWZiMDRjMGYwcC05MkwsCi0JMHgxLjdhMTE0NzNlYjAxODZkN2Q1MTAyM2VwMEwsIDB4MS42Y2RhMWY1ZWY0MmI2Njk3Nzk2MDUzMWU4MjFicC04OEwsCi0JMHgxLjdjMWVkMDEzMGMxMzI3YzQ5MzM0NDRwMEwsIDB4MS45Mzc1NjJiMmRjOTMzZDQ0ZmM4MjhlZmQ0YzljcC04OEwsCi0JMHgxLjdlMmYzMzZjZjRlNjIxMDVkMDJiYTBwMEwsIDB4MS41Nzk3ZTE3MGExNDI3ZjhmY2RmNWYzOTA2MTA4cC04OEwsCi0JMHgxLjgwNDI3NTQzZTFhMTFiNjBkZTY3NjRwMEwsIDB4OS5hMzU0ZWE3MDZiOGU0ZDhiNzE4YTY3MmJmN2M4cC05MkwsCi0JMHgxLjgyNTg5OTk0Y2NlMTI4YWNmODhhZmFwMEwsIDB4Yi4zNGEwMTBmNmFkNjVjYmJhYzBmNTMyZDM5YmUwcC05MkwsCi0JMHgxLjg0NzFhNDYyM2M3YWNjZTUyZjZiOTZwMEwsIDB4MS5jNjQwOTUzNzBmNTFmNDg4MTc5MTRkZDc4NjY1cC04OEwsCi0JMHgxLjg2OGQ5OWI0NDkyZWM4MGU0MWQ5MGFwMEwsIDB4Yy4yNTE3MDc0ODRkNzNmMTM2ZmI1Nzc5NjU2YjcwcC05MkwsCi0JMHgxLjg4YWM3ZDk4YTY2OTk2NjUzMGJjZGVwMEwsIDB4MS4yZDRlOWQ2MTI4M2VmMzg1ZGUxNzBhYjIwZjk2cC04OEwsCi0JMHgxLjhhY2U1NDIyYWEwZGI1YmE3YzU1YTBwMEwsIDB4MS45MmM5YmIzZTZlZDYxZjI3MzMzMDRhMzQ2ZDhmcC04OEwsCi0JMHgxLjhjZjMyMTZiNTQ0OGJlZjJhYTFjZDBwMEwsIDB4MS42MWM1NWQ4NGE5ODQ4ZjhjNDUzYjNjYThjOTQ2cC04OEwsCi0JMHgxLjhmMWFlOTkxNTc3MzYyYjk4Mjc0NWNwMEwsIDB4Ny4yZWQ4MDRlZmM5YjRhZTE0NThhZTk0NjA5OWQ0cC05MkwsCi0JMHgxLjkxNDViMGI5MWZmYzU4OGE2MWI0NjhwMEwsIDB4MS5mNmI3MGUwMWMyYTkwMjI5YTRjNDMwOWVhNzE5cC04OEwsCi0JMHgxLjkzNzM3YjBjZGM1ZTRmNDUwMWMzZjJwMEwsIDB4NS40MGEyMmQyZmM0YWY1ODFiNjNlODMyNmVmZTljcC05MkwsCi0JMHgxLjk1YTQ0Y2JjODUyMGVlOWI0ODM2OTRwMEwsIDB4MS5hMGZjNmY3YzdkNjFiMmIzYTIyYTBlYWIyY2FkcC04OEwsCi0JMHgxLjk3ZDgyOWZkZTRlNGY4YjllOTIwZjhwMEwsIDB4MS4xZThiZDdlZGI5ZDcxNDRiNmY2ODE4MDg0Y2M3cC04OEwsCi0JMHgxLjlhMGYxNzBjYTA3YjliYTMxMDliOGNwMEwsIDB4NC42NzM3YmViMTllMWVhZGE2ODI1ZDNjNTU3NDI4cC05MkwsCi0JMHgxLjljNDkxODJhM2YwOTAxYzdjNDZiMDZwMEwsIDB4MS4xZjJiZTU4ZGRhZGU1MGMyMTcxODZjOTBiNDU3cC04OEwsCi0JMHgxLjllODYzMTllMzIzMjMxODI0Y2E3OGVwMEwsIDB4Ni40YzZlMDEwZjkyYzA4MmJiYWRmYWY2MDVjZmQ0cC05MkwsCi0JMHgxLmEwYzY2N2I1ZGU1NjRiMjlhZGE4YjhwMEwsIDB4Yy5hYjM0OWFhMDQyMmE4ZGE3ZDQ1MTJlZGFjNTQ4cC05MkwsCi0JMHgxLmEzMDliZWM0YTJkMzM1OGMxNzFmNzZwMEwsIDB4MS4wZGFhZDU0N2ZhMjJjMjZkMTY4ZWE3NjJkODU0cC04OEwsCi0JMHgxLmE1NTAzYjIzZTI1NWM4YjQyNDQ5MWNwMEwsIDB4YS5mODdiYzgwNTBhNDA1MzgxNzAzZWY3Y2FmZjUwcC05MkwsCi0JMHgxLmE3OTllMTMzMGIzNTg2ZjJkZmIyYjBwMEwsIDB4MS41OGYxYTk4Nzk2Y2U4OTA4YWU4NTIyMzZjYTk0cC04OEwsCi0JMHgxLmE5ZTZiNTU3OWZkYmY0M2ViMjQzYmNwMEwsIDB4MS5mZjRjNGM1OGI1NzFjZjQ2NWNhZjA3YjRiOWY1cC04OEwsCi0JMHgxLmFjMzZiYmZkM2YzNzljMGRiOTY2YTJwMEwsIDB4MS4xMjY1ZmM3M2U0ODA3MTJkMjBmODU5N2E4ZTdicC04OEwsCi0JMHgxLmFlODlmOTk1YWQzYWQ1ZTg3MzRkMTZwMEwsIDB4MS43MzIwNWE3ZmJjM2FlNjc1ZWE0NDBiMTYyZDZjcC04OEwsCi0JMHgxLmIwZTA3Mjk4ZGI2NjU5MDg0MmFjZGVwMEwsIDB4MS5jNmY2Y2EwZTVkY2FlMmFhZmZmYTdhMDU1NGNicC04OEwsCi0JMHgxLmIzM2EyYjg0ZjE1ZmFmNmJmZDBlN2FwMEwsIDB4MS5kOTQ3YzI1NzU3ODFkYmI0OWIxMjM3Yzg3YjZlcC04OEwsCi0JMHgxLmI1OTcyOGRlNTU5Mzk4ZTM4ODExMTBwMEwsIDB4MS42NDg3M2M3MTcxZmVmYzQxMDQxNmJlMGE2NTI1cC04OEwsCi0JMHgxLmI3Zjc2ZjJmYjVlNDZlYWE3YjA4MWFwMEwsIDB4Yi41M2M1MzU0Yzg5MDNjMzU2ZTRiNjI1YWFjYzI4cC05MkwsCi0JMHgxLmJhNWIwMzBhMTA2NDk4NDBjYjNjNmFwMEwsIDB4Zi41YjQ3ZjI5NzIwMzc1N2UxY2M2ZWFkYzhiYWQwcC05MkwsCi0JMHgxLmJjYzFlOTA0YmMxZDIyNDdiYTBmNDRwMEwsIDB4MS5iM2QwOGNkMGIyMDI4NzA5MmJkNTliZTRhZDk4cC04OEwsCi0JMHgxLmJmMmMyNWJkNzFlMDg4NDA4ZDcwMjRwMEwsIDB4MS4xOGUzNDQ5ZmEwNzNiMzU2NzY2ZGZiNTY4ZmY0cC04OEwsCi0JMHgxLmMxOTliZGQ4NTUyOWMyMjIwY2IxMmFwMEwsIDB4OS4xYmE2Njc5NDQ0OTY0YTM2NjYxMjQwMDQzOTcwcC05NkwsCi0JMHgxLmM0MGFiNWZmZmQwN2E2ZDE0ZGY4MjBwMEwsIDB4Zi4xODI4YTUzNjZmZDM4N2E3YmRkNTRjZGY3MzAwcC05MkwsCi0JMHgxLmM2N2YxMmU1N2QxNGI0YTIxMzdmZDJwMEwsIDB4Zi4yYjMwMWRkOWU2YjE1MWE2ZDFmOWQ1ZDVmNTIwcC05NkwsCi0JMHgxLmM4ZjZkOTQwNmU3YjUxMWFjYmM0ODhwMEwsIDB4NS5jNDQyZGRiNTU4MjAxNzFmMzE5ZDllNTA3NmE4cC05NkwsCi0JMHgxLmNiNzIwZGNlZjkwNjkxNTAzY2JkMWVwMEwsIDB4OS40OWRiNzYxZDk1NTlhYzBjYjZkZDNlZDU5OWUwcC05MkwsCi0JMHgxLmNkZjBiNTU1ZGMzZjljNDRmODk1OGVwMEwsIDB4MS5hYzUxYmU1MTVmOGM1OGJkZmI2ZjU3NDBhM2E0cC04OEwsCi0JMHgxLmQwNzJkNGEwNzg5N2I4ZDBmMjJmMjBwMEwsIDB4MS5hMTU4ZTE4ZmJiZmM2MjVmMDlmNGNjYTQwODc0cC04OEwsCi0JMHgxLmQyZjg3MDgwZDg5ZjE4YWRlMTIzOThwMEwsIDB4OS5lYTIwMjViNGM1NjU1M2Y1Y2RlZTRjOTI0NzI4cC05MkwsCi0JMHgxLmQ1ODE4ZGNmYmE0ODcyNWRhMDVhZWFwMEwsIDB4MS42NmUwZGNhOWY1ODlmNTU5YzA4NzZmZjIzODMwcC04OEwsCi0JMHgxLmQ4MGUzMTZjOTgzOTdiYjg0ZjlkMDRwMEwsIDB4OC44MDVmODRiZWM2MTRkZTI2OTkwMGRkZjk4ZDI4cC05MkwsCi0JMHgxLmRhOWU2MDNkYjMyODU3MDhjMDFhNWFwMEwsIDB4MS42ZDRjOTdmNjI0NmYwZWM2MTRlYzk1Yzk5MzkycC04OEwsCi0JMHgxLmRkMzIxZjMwMWI0NjA0YjY5NWRlM2NwMEwsIDB4Ni4zMGEzOTMyMTUyOTllMzBkNGZiNzM1MDNjMzQ4cC05NkwsCi0JMHgxLmRmYzk3MzM3YjliNWViOTY4Y2FjMzhwMEwsIDB4MS5lZDI5MWI3MjI1YTk0NGVmZDViYjU1MjRiOTI3cC04OEwsCi0JMHgxLmUyNjQ2MTRmNWExMjhhMTI3NjFmYTBwMEwsIDB4MS43YWRhNjQ2N2U3N2Y3M2JmNjVlMDRjOTVlMjlkcC04OEwsCi0JMHgxLmU1MDJlZTc4YjNmZjYyNzNkMTMwMTRwMEwsIDB4MS4zOTkxZThmNDk2NTllMTY5M2JlMTdhZTFkMmY5cC04OEwsCi0JMHgxLmU3YTUxZmJjNzRjODM0YjU0OGIyODJwMEwsIDB4MS4yMzc4Njc1OGE4NGY0OTU2MzU0NjM0YTQxNmNlcC04OEwsCi0JMHgxLmVhNGFmYTJhNDkwZDk4NThmNzNhMThwMEwsIDB4Zi41ZGIzMDFmODZkZWEyMDYxMGNlZWUxM2ViN2I4cC05MkwsCi0JMHgxLmVjZjQ4MmQ4ZTY3ZjA4ZGIwMzEyZmFwMEwsIDB4MS45NDljZWY0NjIwMTBiYjRiYzRjZTcyYTkwMGRmcC04OEwsCi0JMHgxLmVmYTFiZWU2MTVhMjc3NzFmZDIxYThwMEwsIDB4MS4yZGFjMWY2ZGQ1ZDIyOWZmNjhlNDZmMjdlM2RmcC04OEwsCi0JMHgxLmYyNTJiMzc2YmJhOTc0ZTg2OTZmYzJwMEwsIDB4MS42MzkwZDRjNmFkNTQ3NmI1MTYyZjQwZTFkOWE5cC04OEwsCi0JMHgxLmY1MDc2NWI2ZTQ1NDA2NzRmODRiNzZwMEwsIDB4Mi44NjJiYWZmOTkwMDBkZmM0MzUyYmEyOWI4OTA4cC05MkwsCi0JMHgxLmY3YmZkYWQ5Y2JlMTM4OTEzYjRiZmVwMEwsIDB4Ny4yYmQ5NWM1Y2U3MjgwZmE0ZDIzNDRhM2Y1NjE4cC05MkwsCi0JMHgxLmZhN2MxODE5ZTkwZDgyZTkwYTdlNzRwMEwsIDB4Yi4yNjNjMWRjMDYwYzM2Zjc2NTBiNGMwZjIzM2E4cC05MkwsCi0JMHgxLmZkM2MyMmI4ZjcxZjEwOTc1YmE0YjJwMEwsIDB4MS4yYmNmM2E1ZTEyZDI2OWQ4YWQ3YzFhNGE4ODc1cC04OEwKLX07Ci0KIGxvbmcgZG91YmxlCiBleHBsKGxvbmcgZG91YmxlIHgpCiB7Ci0JdW5pb24gSUVFRWwyYml0cyB1LCB2OwotCWxvbmcgZG91YmxlIHEsIHIsIHIxLCB0LCB0d29waywgdHdvcGtwMTAwMDA7Ci0JZG91YmxlIGRyLCBmbiwgcjI7Ci0JaW50IGssIG4sIG4yOworCXVuaW9uIElFRUVsMmJpdHMgdTsKKwlsb25nIGRvdWJsZSBoaSwgbG8sIHQsIHR3b3BrOworCWludCBrOwogCXVpbnQxNl90IGh4LCBpeDsKIAorCURPUFJJTlRfU1RBUlQoJngpOworCiAJLyogRmlsdGVyIG91dCBleGNlcHRpb25hbCBjYXNlcy4gKi8KIAl1LmUgPSB4OwogCWh4ID0gdS54Yml0cy5leHBzaWduOwpAQCAtMjQxLDYwICs3MiwzMyBAQAogCWlmIChpeCA+PSBCSUFTICsgMTMpIHsJCS8qIHx4fCA+PSA4MTkyIG9yIHggaXMgTmFOICovCiAJCWlmIChpeCA9PSBCSUFTICsgTERCTF9NQVhfRVhQKSB7CiAJCQlpZiAoaHggJiAweDgwMDApICAvKiB4IGlzIC1JbmYgb3IgLU5hTiAqLwotCQkJCXJldHVybiAoLTEgLyB4KTsKLQkJCXJldHVybiAoeCArIHgpOwkvKiB4IGlzICtJbmYgb3IgK05hTiAqLworCQkJCVJFVFVSTlAoLTEgLyB4KTsKKwkJCVJFVFVSTlAoeCArIHgpOwkvKiB4IGlzICtJbmYgb3IgK05hTiAqLwogCQl9CiAJCWlmICh4ID4gb190aHJlc2hvbGQpCi0JCQlyZXR1cm4gKGh1Z2UgKiBodWdlKTsKKwkJCVJFVFVSTlAoaHVnZSAqIGh1Z2UpOwogCQlpZiAoeCA8IHVfdGhyZXNob2xkKQotCQkJcmV0dXJuICh0aW55ICogdGlueSk7CisJCQlSRVRVUk5QKHRpbnkgKiB0aW55KTsKIAl9IGVsc2UgaWYgKGl4IDwgQklBUyAtIDExNCkgewkvKiB8eHwgPCAweDFwLTExNCAqLwotCQlyZXR1cm4gKDEgKyB4KTsJCS8qIDEgd2l0aCBpbmV4YWN0IGlmZiB4ICE9IDAgKi8KKwkJUkVUVVJOMlAoMSwgeCk7CQkvKiAxIHdpdGggaW5leGFjdCBpZmYgeCAhPSAwICovCiAJfQogCiAJRU5URVJJKCk7CiAKLQkvKiBSZWR1Y2UgeCB0byAoaypsbjIgKyBlbmRwb2ludFtuMl0gKyByMSArIHIyKS4gKi8KLQkvKiBVc2UgYSBzcGVjaWFsaXplZCByaW50KCkgdG8gZ2V0IGZuLiAgQXNzdW1lIHJvdW5kLXRvLW5lYXJlc3QuICovCi0JLyogWFhYIGFzc3VtZSBubyBleHRyYSBwcmVjaXNpb24gZm9yIHRoZSBhZGRpdGlvbnMsIGFzIGZvciB0cmlnIGZucy4gKi8KLQkvKiBYWFggdGhpcyBzZXQgb2YgY29tbWVudHMgaXMgbm93IHF1YWRydXBsaWNhdGVkLiAqLwotCWZuID0gKGRvdWJsZSl4ICogSU5WX0wgKyAweDEuOHA1MiAtIDB4MS44cDUyOwotI2lmIGRlZmluZWQoSEFWRV9FRkZJQ0lFTlRfSVJJTlQpCi0JbiA9IGlyaW50KGZuKTsKLSNlbHNlCi0JbiA9IChpbnQpZm47Ci0jZW5kaWYKLQluMiA9ICh1bnNpZ25lZCluICUgSU5URVJWQUxTOwotCWsgPSBuID4+IExPRzJfSU5URVJWQUxTOwotCXIxID0geCAtIGZuICogTDE7Ci0JcjIgPSBmbiAqIC1MMjsKLQlyID0gcjEgKyByMjsKLQotCS8qIFByZXBhcmUgc2NhbGUgZmFjdG9ycy4gKi8KLQkvKiBYWFggc3BhcmM2NCBtdWx0aXBsaWNhdGlvbiBpcyBzbyBzbG93IHRoYXQgc2NhbGJubCgpIGlzIGZhc3Rlci4gKi8KLQl2LmUgPSAxOwotCWlmIChrID49IExEQkxfTUlOX0VYUCkgewotCQl2LnhiaXRzLmV4cHNpZ24gPSBCSUFTICsgazsKLQkJdHdvcGsgPSB2LmU7Ci0JfSBlbHNlIHsKLQkJdi54Yml0cy5leHBzaWduID0gQklBUyArIGsgKyAxMDAwMDsKLQkJdHdvcGtwMTAwMDAgPSB2LmU7Ci0JfQotCi0JLyogRXZhbHVhdGUgZXhwbChlbmRwb2ludFtuMl0gKyByMSArIHIyKSA9IHRibFtuMl0gKiBleHBsKHIxICsgcjIpLiAqLwotCWRyID0gcjsKLQlxID0gcjIgKyByICogciAqIChBMiArIHIgKiAoQTMgKyByICogKEE0ICsgciAqIChBNSArIHIgKiAoQTYgKwotCSAgICBkciAqIChBNyArIGRyICogKEE4ICsgZHIgKiAoQTkgKyBkciAqIEExMCkpKSkpKSkpOwotCXQgPSB0YmxbbjJdLmxvICsgdGJsW24yXS5oaTsKLQl0ID0gdGJsW24yXS5sbyArIHQgKiAocSArIHIxKSArIHRibFtuMl0uaGk7CisJdHdvcGsgPSAxOworCV9fa19leHBsKHgsICZoaSwgJmxvLCAmayk7CisJdCA9IFNVTTJQKGhpLCBsbyk7CiAKIAkvKiBTY2FsZSBieSAyKiprLiAqLworCS8qIFhYWCBzcGFyYzY0IG11bHRpcGxpY2F0aW9uIGlzIHNvIHNsb3cgdGhhdCBzY2FsYm5sKCkgaXMgZmFzdGVyLiAqLwogCWlmIChrID49IExEQkxfTUlOX0VYUCkgewogCQlpZiAoayA9PSBMREJMX01BWF9FWFApCiAJCQlSRVRVUk5JKHQgKiAyICogMHgxcDE2MzgzTCk7CisJCVNFVF9MREJMX0VYUFNJR04odHdvcGssIEJJQVMgKyBrKTsKIAkJUkVUVVJOSSh0ICogdHdvcGspOwogCX0gZWxzZSB7Ci0JCVJFVFVSTkkodCAqIHR3b3BrcDEwMDAwICogdHdvbTEwMDAwKTsKKwkJU0VUX0xEQkxfRVhQU0lHTih0d29waywgQklBUyArIGsgKyAxMDAwMCk7CisJCVJFVFVSTkkodCAqIHR3b3BrICogdHdvbTEwMDAwKTsKIAl9CiB9CiAKQEAgLTMxMiw2ICsxMTYsMTIgQEAKICAqIFNldHRpbmcgVDMgdG8gMCB3b3VsZCByZXF1aXJlIHRoZSB8eHwgPCAweDFwLTExMyBjb25kaXRpb24gdG8gYXBwZWFyCiAgKiBpbiBib3RoIHN1YmludGVydmFscywgc28gc2V0IFQzID0gMioqLTUsIHdoaWNoIHBsYWNlcyB0aGUgY29uZGl0aW9uCiAgKiBpbnRvIHRoZSBbVDEsIFQzXSBpbnRlcnZhbC4KKyAqCisgKiBYWFggd2Ugbm93IGRvIHRoaXMgbW9yZSB0byAocGFydGlhbGx5KSBiYWxhbmNlIHRoZSBudW1iZXIgb2YgdGVybXMKKyAqIGluIHRoZSBDIGFuZCBEIHBvbHlzIHRoYW4gdG8gYXZvaWQgY2hlY2tpbmcgdGhlIGNvbmRpdGlvbiBpbiBib3RoCisgKiBpbnRlcnZhbHMuCisgKgorICogWFhYIHRoZXNlIG1pY3JvLW9wdGltaXphdGlvbnMgYXJlIGV4Y2Vzc2l2ZS4KICAqLwogc3RhdGljIGNvbnN0IGRvdWJsZQogVDEgPSAtMC4xNjU5LAkJCQkvKiB+LTMwLjYyNS8xMjggKiBsb2coMikgKi8KQEAgLTMyMSw2ICsxMzEsMTIgQEAKIC8qCiAgKiBEb21haW4gWy0wLjE2NTksIDAuMDMxMjVdLCByYW5nZSB+WzIuOTEzNGUtNDQsIDEuODQwNGUtMzddOgogICogfChleHAoeCktMS14LXgqKjIvMikveCAtIHAoeCl8IDwgMioqLTEyMi4wMworICoKKyAqIFhYWCBub25lIG9mIHRoZSBsb25nIGRvdWJsZSBDIG9yIEQgY29lZmZzIGV4Y2VwdCBDMTAgaXMgY29ycmVjdGx5IHByaW50ZWQuCisgKiBJZiB5b3UgcmUtcHJpbnQgdGhlaXIgdmFsdWVzIGluICUuMzVMZSBmb3JtYXQsIHRoZSByZXN1bHQgaXMgYWx3YXlzCisgKiBkaWZmZXJlbnQuICBGb3IgZXhhbXBsZSwgdGhlIGxhc3QgMiBkaWdpdHMgaW4gQzMgc2hvdWxkIGJlIDU5LCBub3QgNjcuCisgKiA2NyBpcyBhcHBhcmVudGx5IGZyb20gcm91bmRpbmcgYW4gZXh0cmEtcHJlY2lzaW9uIHZhbHVlIHRvIDM2IGRlY2ltYWwKKyAqIHBsYWNlcy4KICAqLwogc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCiBDMyAgPSAgMS42NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2N2UtMUwsCkBAIC0zMzUsNiArMTUxLDEzIEBACiBDMTIgPSAgMi4wODc2NzU2OTg3ODY3OTU3NjQ1NzI3MjI4MjU2NjUyMDY0OWUtOUwsCiBDMTMgPSAgMS42MDU5MDQzODM2NzI1MjQ3MTc4MzU0ODc0ODgyNDI1NTcwN2UtMTBMOwogCisvKgorICogWFhYIHRoaXMgaGFzIDEgbW9yZSBjb2VmZiB0aGFuIG5lZWRlZC4KKyAqIFhYWCBjYW4gc3RhcnQgdGhlIGRvdWJsZSBjb2VmZnMgYnV0IG5vdCB0aGUgZG91YmxlIG11bHRzIGF0IEMxMC4KKyAqIFdpdGggbXkgY29lZmZzIChDMTAtQzE3IGRvdWJsZTsgcyA9IGJlc3Rfcyk6CisgKiBEb21haW4gWy0wLjE2NTksIDAuMDMxMjVdLCByYW5nZSB+Wy0xLjE5NzZlLTM3LCAxLjE5NzZlLTM3XToKKyAqIHwoZXhwKHgpLTEteC14KioyLzIpL3ggLSBwKHgpfCB+PCAyKiotMTIyLjY1CisgKi8KIHN0YXRpYyBjb25zdCBkb3VibGUKIEMxNCA9ICAxLjE0NzA3NDU1ODA0OTE5MzJlLTExLAkJLyogIDB4MS45Mzk3NGE4MWRhZTMwcC0zNyAqLwogQzE1ID0gIDcuNjQ3MTYyMDE4MTA5MDQ2OGUtMTMsCQkvKiAgMHgxLmFlN2YzODIwYWRhYjFwLTQxICovCkBAIC0zNTksNiArMTgyLDEzIEBACiBEMTIgPSAgMi4wODc2NzU2OTgxOTczODUyNDQ4ODY4NjMxODAyNDg1NDk0MmUtOUwsCiBEMTMgPSAgMS42MDU5MDQ0MjI5NzAwODQ5NTMwMTkyNzQ0ODEyMjQ5OTMxM2UtMTBMOwogCisvKgorICogWFhYIHRoaXMgaGFzIDEgbW9yZSBjb2VmZiB0aGFuIG5lZWRlZC4KKyAqIFhYWCBjYW4gc3RhcnQgdGhlIGRvdWJsZSBjb2VmZnMgYnV0IG5vdCB0aGUgZG91YmxlIG11bHRzIGF0IEQxMS4KKyAqIFdpdGggbXkgY29lZmZzIChEMTEtRDE2IGRvdWJsZSk6CisgKiBEb21haW4gWzAuMDMxMjUsIDAuMTY1OV0sIHJhbmdlIH5bLTEuMTk4MGUtMzcsIDEuMTk4MGUtMzddOgorICogfChleHAoeCktMS14LXgqKjIvMikveCAtIHAoeCl8IH48IDIqKi0xMjIuNjUKKyAqLwogc3RhdGljIGNvbnN0IGRvdWJsZQogRDE0ID0gIDEuMTQ3MDcyNjE3NjIwNDMzNmUtMTEsCQkvKiAgMHgxLjkzOTcxZGMzOTVkOWVwLTM3ICovCiBEMTUgPSAgNy42NDc4NTMyMjQ5NTgxNjg2ZS0xMywJCS8qICAweDEuYWU4OTJlM0QxNmZjZXAtNDEgKi8KQEAgLTM3NSw2ICsyMDUsOCBAQAogCWludCBrLCBuLCBuMjsKIAl1aW50MTZfdCBoeCwgaXg7CiAKKwlET1BSSU5UX1NUQVJUKCZ4KTsKKwogCS8qIEZpbHRlciBvdXQgZXhjZXB0aW9uYWwgY2FzZXMuICovCiAJdS5lID0geDsKIAloeCA9IHUueGJpdHMuZXhwc2lnbjsKQEAgLTM4MiwxMSArMjE0LDExIEBACiAJaWYgKGl4ID49IEJJQVMgKyA3KSB7CQkvKiB8eHwgPj0gMTI4IG9yIHggaXMgTmFOICovCiAJCWlmIChpeCA9PSBCSUFTICsgTERCTF9NQVhfRVhQKSB7CiAJCQlpZiAoaHggJiAweDgwMDApICAvKiB4IGlzIC1JbmYgb3IgLU5hTiAqLwotCQkJCXJldHVybiAoLTEgLyB4IC0gMSk7Ci0JCQlyZXR1cm4gKHggKyB4KTsJLyogeCBpcyArSW5mIG9yICtOYU4gKi8KKwkJCQlSRVRVUk5QKC0xIC8geCAtIDEpOworCQkJUkVUVVJOUCh4ICsgeCk7CS8qIHggaXMgK0luZiBvciArTmFOICovCiAJCX0KIAkJaWYgKHggPiBvX3RocmVzaG9sZCkKLQkJCXJldHVybiAoaHVnZSAqIGh1Z2UpOworCQkJUkVUVVJOUChodWdlICogaHVnZSk7CiAJCS8qCiAJCSAqIGV4cG0xbCgpIG5ldmVyIHVuZGVyZmxvd3MsIGJ1dCBpdCBtdXN0IGF2b2lkCiAJCSAqIHVucmVwcmVzZW50YWJsZSBsYXJnZSBuZWdhdGl2ZSBleHBvbmVudHMuICBXZSB1c2VkIGEKQEAgLTM5NSw3ICsyMjcsNyBAQAogCQkgKiBpbiB0aGUgc2FtZSB3YXkgYXMgbGFyZ2Ugb25lcyBoZXJlLgogCQkgKi8KIAkJaWYgKGh4ICYgMHg4MDAwKQkvKiB4IDw9IC0xMjggKi8KLQkJCXJldHVybiAodGlueSAtIDEpOwkvKiBnb29kIGZvciB4IDwgLTExNGxuMiAtIGVwcyAqLworCQkJUkVUVVJOMlAodGlueSwgLTEpOwkvKiBnb29kIGZvciB4IDwgLTExNGxuMiAtIGVwcyAqLwogCX0KIAogCUVOVEVSSSgpOwpAQCAtNDA3LDcgKzIzOSw3IEBACiAJCWlmICh4IDwgVDMpIHsKIAkJCWlmIChpeCA8IEJJQVMgLSAxMTMpIHsJLyogfHh8IDwgMHgxcC0xMTMgKi8KIAkJCQkvKiB4IChyb3VuZGVkKSB3aXRoIGluZXhhY3QgaWYgeCAhPSAwOiAqLwotCQkJCVJFVFVSTkkoeCA9PSAwID8geCA6CisJCQkJUkVUVVJOUEkoeCA9PSAwID8geCA6CiAJCQkJICAgICgweDFwMjAwICogeCArIGZhYnNsKHgpKSAqIDB4MXAtMjAwKTsKIAkJCX0KIAkJCXEgPSB4ICogeDIgKiBDMyArIHgyICogeDIgKiAoQzQgKyB4ICogKEM1ICsgeCAqIChDNiArCkBAIC00MjgsOSArMjYwLDkgQEAKIAkJaHgyX2hpID0geF9oaSAqIHhfaGkgLyAyOwogCQloeDJfbG8gPSB4X2xvICogKHggKyB4X2hpKSAvIDI7CiAJCWlmIChpeCA+PSBCSUFTIC0gNykKLQkJCVJFVFVSTkkoaHgyX2xvICsgeF9sbyArIHEgKyAoaHgyX2hpICsgeF9oaSkpOworCQkJUkVUVVJOMlBJKGh4Ml9oaSArIHhfaGksIGh4Ml9sbyArIHhfbG8gKyBxKTsKIAkJZWxzZQotCQkJUkVUVVJOSShoeDJfbG8gKyBxICsgaHgyX2hpICsgeCk7CisJCQlSRVRVUk4yUEkoeCwgaHgyX2xvICsgcSArIGh4Ml9oaSk7CiAJfQogCiAJLyogUmVkdWNlIHggdG8gKGsqbG4yICsgZW5kcG9pbnRbbjJdICsgcjEgKyByMikuICovCkBAIC00NjMsMjEgKzI5NSwyMSBAQAogCXQgPSB0YmxbbjJdLmxvICsgdGJsW24yXS5oaTsKIAogCWlmIChrID09IDApIHsKLQkJdCA9IHRibFtuMl0ubG8gKiAocjEgKyAxKSArIHQgKiBxICsgdGJsW24yXS5oaSAqIHIxICsKLQkJICAgICh0YmxbbjJdLmhpIC0gMSk7CisJCXQgPSBTVU0yUCh0YmxbbjJdLmhpIC0gMSwgdGJsW24yXS5sbyAqIChyMSArIDEpICsgdCAqIHEgKworCQkgICAgdGJsW24yXS5oaSAqIHIxKTsKIAkJUkVUVVJOSSh0KTsKIAl9CiAJaWYgKGsgPT0gLTEpIHsKLQkJdCA9IHRibFtuMl0ubG8gKiAocjEgKyAxKSArIHQgKiBxICsgdGJsW24yXS5oaSAqIHIxICsgCi0JCSAgICAodGJsW24yXS5oaSAtIDIpOworCQl0ID0gU1VNMlAodGJsW24yXS5oaSAtIDIsIHRibFtuMl0ubG8gKiAocjEgKyAxKSArIHQgKiBxICsKKwkJICAgIHRibFtuMl0uaGkgKiByMSk7CiAJCVJFVFVSTkkodCAvIDIpOwogCX0KIAlpZiAoayA8IC03KSB7Ci0JCXQgPSB0YmxbbjJdLmxvICsgdCAqIChxICsgcjEpICsgdGJsW24yXS5oaTsKKwkJdCA9IFNVTTJQKHRibFtuMl0uaGksIHRibFtuMl0ubG8gKyB0ICogKHEgKyByMSkpOwogCQlSRVRVUk5JKHQgKiB0d29wayAtIDEpOwogCX0KIAlpZiAoayA+IDIgKiBMREJMX01BTlRfRElHIC0gMSkgewotCQl0ID0gdGJsW24yXS5sbyArIHQgKiAocSArIHIxKSArIHRibFtuMl0uaGk7CisJCXQgPSBTVU0yUCh0YmxbbjJdLmhpLCB0YmxbbjJdLmxvICsgdCAqIChxICsgcjEpKTsKIAkJaWYgKGsgPT0gTERCTF9NQVhfRVhQKQogCQkJUkVUVVJOSSh0ICogMiAqIDB4MXAxNjM4M0wgLSAxKTsKIAkJUkVUVVJOSSh0ICogdHdvcGsgLSAxKTsKQEAgLTQ4Nyw4ICszMTksOCBAQAogCXR3b21rID0gdi5lOwogCiAJaWYgKGsgPiBMREJMX01BTlRfRElHIC0gMSkKLQkJdCA9IHRibFtuMl0ubG8gLSB0d29tayArIHQgKiAocSArIHIxKSArIHRibFtuMl0uaGk7CisJCXQgPSBTVU0yUCh0YmxbbjJdLmhpLCB0YmxbbjJdLmxvIC0gdHdvbWsgKyB0ICogKHEgKyByMSkpOwogCWVsc2UKLQkJdCA9IHRibFtuMl0ubG8gKyB0ICogKHEgKyByMSkgKyAodGJsW24yXS5oaSAtIHR3b21rKTsKKwkJdCA9IFNVTTJQKHRibFtuMl0uaGkgLSB0d29taywgdGJsW24yXS5sbyArIHQgKiAocSArIHIxKSk7CiAJUkVUVVJOSSh0ICogdHdvcGspOwogfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9jYXRyaWcuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvY2F0cmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwOTc3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvY2F0cmlnLmMKQEAgLTAsMCArMSw2MzkgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDEyIFN0ZXBoZW4gTW9udGdvbWVyeS1TbWl0aCA8c3RlcGhlbkBGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8Y29tcGxleC5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKyN1bmRlZiBpc2luZgorI2RlZmluZSBpc2luZih4KQkoZmFicyh4KSA9PSBJTkZJTklUWSkKKyN1bmRlZiBpc25hbgorI2RlZmluZSBpc25hbih4KQkoKHgpICE9ICh4KSkKKyNkZWZpbmUJcmFpc2VfaW5leGFjdCgpCWRvIHsgdm9sYXRpbGUgZmxvYXQganVuayA9IDEgKyB0aW55OyB9IHdoaWxlKDApCisjdW5kZWYgc2lnbmJpdAorI2RlZmluZSBzaWduYml0KHgpCShfX2J1aWx0aW5fc2lnbmJpdCh4KSkKKworLyogV2UgbmVlZCB0aGF0IERCTF9FUFNJTE9OXjIvMTI4IGlzIGxhcmdlciB0aGFuIEZPVVJfU1FSVF9NSU4uICovCitzdGF0aWMgY29uc3QgZG91YmxlCitBX2Nyb3Nzb3ZlciA9CQkxMCwgLyogSHVsbCBldCBhbCBzdWdnZXN0IDEuNSwgYnV0IDEwIHdvcmtzIGJldHRlciAqLworQl9jcm9zc292ZXIgPQkJMC42NDE3LAkJCS8qIHN1Z2dlc3RlZCBieSBIdWxsIGV0IGFsICovCitGT1VSX1NRUlRfTUlOID0JCTB4MXAtNTA5LAkJLyogPj0gNCAqIHNxcnQoREJMX01JTikgKi8KK1FVQVJURVJfU1FSVF9NQVggPQkweDFwNTA5LAkJLyogPD0gc3FydChEQkxfTUFYKSAvIDQgKi8KK21fZSA9CQkJMi43MTgyODE4Mjg0NTkwNDUyZTAsCS8qICAweDE1YmYwYThiMTQ1NzY5LjBwLTUxICovCittX2xuMiA9CQkJNi45MzE0NzE4MDU1OTk0NTMxZS0xLAkvKiAgMHgxNjJlNDJmZWZhMzllZi4wcC01MyAqLworcGlvMl9oaSA9CQkxLjU3MDc5NjMyNjc5NDg5NjZlMCwJLyogIDB4MTkyMWZiNTQ0NDJkMTguMHAtNTIgKi8KK1JFQ0lQX0VQU0lMT04gPQkJMSAvIERCTF9FUFNJTE9OLAorU1FSVF8zX0VQU0lMT04gPQkyLjU4MDk1NjgyNzk1MTc4NDllLTgsCS8qICAweDFiYjY3YWU4NTg0Y2FhLjBwLTc4ICovCitTUVJUXzZfRVBTSUxPTiA9CTMuNjUwMDI0MTQ5OTg4ODU3MWUtOCwJLyogIDB4MTM5ODhlMTQwOTIxMmUuMHAtNzcgKi8KK1NRUlRfTUlOID0JCTB4MXAtNTExOwkJLyogPj0gc3FydChEQkxfTUlOKSAqLworCitzdGF0aWMgY29uc3Qgdm9sYXRpbGUgZG91YmxlCitwaW8yX2xvID0JCTYuMTIzMjMzOTk1NzM2NzY1OWUtMTc7CS8qICAweDExYTYyNjMzMTQ1YzA3LjBwLTEwNiAqLworc3RhdGljIGNvbnN0IHZvbGF0aWxlIGZsb2F0Cit0aW55ID0JCQkweDFwLTEwMDsgCisKK3N0YXRpYyBkb3VibGUgY29tcGxleCBjbG9nX2Zvcl9sYXJnZV92YWx1ZXMoZG91YmxlIGNvbXBsZXggeik7CisKKy8qCisgKiBUZXN0aW5nIGluZGljYXRlcyB0aGF0IGFsbCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY3VyYXRlIHVwIHRvIDQgVUxQLgorICogVGhlIGZ1bmN0aW9ucyBjYXNpbihoKSBhbmQgY2Fjb3MoaCkgYXJlIGFib3V0IDIuNSB0aW1lcyBzbG93ZXIgdGhhbiBhc2luaC4KKyAqIFRoZSBmdW5jdGlvbnMgY2F0YW4oaCkgYXJlIGEgbGl0dGxlIHVuZGVyIDIgdGltZXMgc2xvd2VyIHRoYW4gYXRhbmguCisgKgorICogVGhlIGNvZGUgZm9yIGNhc2luaCwgY2FzaW4sIGNhY29zLCBhbmQgY2Fjb3NoIGNvbWVzIGZpcnN0LiAgVGhlIGNvZGUgaXMKKyAqIHJhdGhlciBjb21wbGljYXRlZCwgYW5kIHRoZSBmb3VyIGZ1bmN0aW9ucyBhcmUgaGlnaGx5IGludGVyZGVwZW5kZW50LgorICoKKyAqIFRoZSBjb2RlIGZvciBjYXRhbmggYW5kIGNhdGFuIGNvbWVzIGF0IHRoZSBlbmQuICBJdCBpcyBtdWNoIHNpbXBsZXIgdGhhbgorICogdGhlIG90aGVyIGZ1bmN0aW9ucywgYW5kIHRoZSBjb2RlIGZvciB0aGVzZSBjYW4gYmUgZGlzY29ubmVjdGVkIGZyb20gdGhlCisgKiByZXN0IG9mIHRoZSBjb2RlLgorICovCisKKy8qCisgKgkJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgkJCXwgY2FzaW5oLCBjYXNpbiwgY2Fjb3MsIGNhY29zaCB8CisgKgkJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworLyoKKyAqIFRoZSBhbGdvcml0aG0gaXMgdmVyeSBjbG9zZSB0byB0aGF0IGluICJJbXBsZW1lbnRpbmcgdGhlIGNvbXBsZXggYXJjc2luZQorICogYW5kIGFyY2Nvc2luZSBmdW5jdGlvbnMgdXNpbmcgZXhjZXB0aW9uIGhhbmRsaW5nIiBieSBULiBFLiBIdWxsLCBUaG9tYXMgRi4KKyAqIEZhaXJncmlldmUsIGFuZCBQaW5nIFRhayBQZXRlciBUYW5nLCBwdWJsaXNoZWQgaW4gQUNNIFRyYW5zYWN0aW9ucyBvbgorICogTWF0aGVtYXRpY2FsIFNvZnR3YXJlLCBWb2x1bWUgMjMgSXNzdWUgMywgMTk5NywgUGFnZXMgMjk5LTMzNSwKKyAqIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0yNzUzMjQuCisgKgorICogVGhyb3VnaG91dCB3ZSB1c2UgdGhlIGNvbnZlbnRpb24geiA9IHggKyBJKnkuCisgKgorICogY2FzaW5oKHopID0gc2lnbih4KSpsb2coQStzcXJ0KEEqQS0xKSkgKyBJKmFzaW4oQikKKyAqIHdoZXJlCisgKiBBID0gKHx6K0l8ICsgfHotSXwpIC8gMgorICogQiA9ICh8eitJfCAtIHx6LUl8KSAvIDIgPSB5L0EKKyAqCisgKiBUaGVzZSBmb3JtdWxhcyBiZWNvbWUgbnVtZXJpY2FsbHkgdW5zdGFibGU6CisgKiAgIChhKSBmb3IgUmUoY2FzaW5oKHopKSB3aGVuIHogaXMgY2xvc2UgdG8gdGhlIGxpbmUgc2VnbWVudCBbLUksIEldICh0aGF0CisgKiAgICAgICBpcywgUmUoY2FzaW5oKHopKSBpcyBjbG9zZSB0byAwKTsKKyAqICAgKGIpIGZvciBJbShjYXNpbmgoeikpIHdoZW4geiBpcyBjbG9zZSB0byBlaXRoZXIgb2YgdGhlIGludGVydmFscworICogICAgICAgW0ksIEkqaW5maW5pdHkpIG9yICgtSSppbmZpbml0eSwgLUldICh0aGF0IGlzLCB8SW0oY2FzaW5oKHopKXwgaXMKKyAqICAgICAgIGNsb3NlIHRvIFBJLzIpLgorICoKKyAqIFRoZXNlIG51bWVyaWNhbCBwcm9ibGVtcyBhcmUgb3ZlcmNvbWUgYnkgZGVmaW5pbmcKKyAqIGYoYSwgYikgPSAoaHlwb3QoYSwgYikgLSBiKSAvIDIgPSBhKmEgLyAoaHlwb3QoYSwgYikgKyBiKSAvIDIKKyAqIFRoZW4gaWYgQSA8IEFfY3Jvc3NvdmVyLCB3ZSB1c2UKKyAqICAgbG9nKEEgKyBzcXJ0KEEqQS0xKSkgPSBsb2cxcCgoQS0xKSArIHNxcnQoKEEtMSkqKEErMSkpKQorICogICBBLTEgPSBmKHgsIDEreSkgKyBmKHgsIDEteSkKKyAqIGFuZCBpZiBCID4gQl9jcm9zc292ZXIsIHdlIHVzZQorICogICBhc2luKEIpID0gYXRhbjIoeSwgc3FydChBKkEgLSB5KnkpKSA9IGF0YW4yKHksIHNxcnQoKEEreSkqKEEteSkpKQorICogICBBLXkgPSBmKHgsIHkrMSkgKyBmKHgsIHktMSkKKyAqIHdoZXJlIHdpdGhvdXQgbG9zcyBvZiBnZW5lcmFsaXR5IHdlIGhhdmUgYXNzdW1lZCB0aGF0IHggYW5kIHkgYXJlCisgKiBub24tbmVnYXRpdmUuCisgKgorICogTXVjaCBvZiB0aGUgZGlmZmljdWx0eSBjb21lcyBiZWNhdXNlIHRoZSBpbnRlcm1lZGlhdGUgY29tcHV0YXRpb25zIG1heQorICogcHJvZHVjZSBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cy4gIFRoaXMgaXMgZGVhbHQgd2l0aCBpbiB0aGUgcGFwZXIgYnkgSHVsbAorICogZXQgYWwgYnkgdXNpbmcgZXhjZXB0aW9uIGhhbmRsaW5nLiAgV2UgZG8gdGhpcyBieSBkZXRlY3Rpbmcgd2hlbgorICogY29tcHV0YXRpb25zIHJpc2sgdW5kZXJmbG93IG9yIG92ZXJmbG93LiAgVGhlIGhhcmRlc3QgcGFydCBpcyBoYW5kbGluZyB0aGUKKyAqIHVuZGVyZmxvd3Mgd2hlbiBjb21wdXRpbmcgZihhLCBiKS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIGYoYSwgYikgZG9lcyBub3QgYXBwZWFyIGV4cGxpY2l0bHkgaW4gdGhlIHBhcGVyIGJ5CisgKiBIdWxsIGV0IGFsLCBidXQgdGhlIGlkZWEgbWF5IGJlIGZvdW5kIG9uIHBhZ2VzIDMwOCBhbmQgMzA5LiAgSW50cm9kdWNpbmcgdGhlCisgKiBmdW5jdGlvbiBmKGEsIGIpIGFsbG93cyB1cyB0byBjb25jZW50cmF0ZSBtYW55IG9mIHRoZSBjbGV2ZXIgdHJpY2tzIGluIHRoaXMKKyAqIHBhcGVyIGludG8gb25lIGZ1bmN0aW9uLgorICovCisKKy8qCisgKiBGdW5jdGlvbiBmKGEsIGIsIGh5cG90X2FfYikgPSAoaHlwb3QoYSwgYikgLSBiKSAvIDIuCisgKiBQYXNzIGh5cG90KGEsIGIpIGFzIHRoZSB0aGlyZCBhcmd1bWVudC4KKyAqLworc3RhdGljIGlubGluZSBkb3VibGUKK2YoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgaHlwb3RfYV9iKQoreworCWlmIChiIDwgMCkKKwkJcmV0dXJuICgoaHlwb3RfYV9iIC0gYikgLyAyKTsKKwlpZiAoYiA9PSAwKQorCQlyZXR1cm4gKGEgLyAyKTsKKwlyZXR1cm4gKGEgKiBhIC8gKGh5cG90X2FfYiArIGIpIC8gMik7Cit9CisKKy8qCisgKiBBbGwgdGhlIGhhcmQgd29yayBpcyBjb250YWluZWQgaW4gdGhpcyBmdW5jdGlvbi4KKyAqIHggYW5kIHkgYXJlIGFzc3VtZWQgcG9zaXRpdmUgb3IgemVybywgYW5kIGxlc3MgdGhhbiBSRUNJUF9FUFNJTE9OLgorICogVXBvbiByZXR1cm46CisgKiByeCA9IFJlKGNhc2luaCh6KSkgPSAtSW0oY2Fjb3MoeSArIEkqeCkpLgorICogQl9pc191c2FibGUgaXMgc2V0IHRvIDEgaWYgdGhlIHZhbHVlIG9mIEIgaXMgdXNhYmxlLgorICogSWYgQl9pc191c2FibGUgaXMgc2V0IHRvIDAsIHNxcnRfQTJteTIgPSBzcXJ0KEEqQSAtIHkqeSksIGFuZCBuZXdfeSA9IHkuCisgKiBJZiByZXR1cm5pbmcgc3FydF9BMm15MiBoYXMgcG90ZW50aWFsIHRvIHJlc3VsdCBpbiBhbiB1bmRlcmZsb3csIGl0IGlzCisgKiByZXNjYWxlZCwgYW5kIG5ld195IGlzIHNpbWlsYXJseSByZXNjYWxlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitkb19oYXJkX3dvcmsoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgKnJ4LCBpbnQgKkJfaXNfdXNhYmxlLCBkb3VibGUgKkIsCisgICAgZG91YmxlICpzcXJ0X0EybXkyLCBkb3VibGUgKm5ld195KQoreworCWRvdWJsZSBSLCBTLCBBOyAvKiBBLCBCLCBSLCBhbmQgUyBhcmUgYXMgaW4gSHVsbCBldCBhbC4gKi8KKwlkb3VibGUgQW0xLCBBbXk7IC8qIEEtMSwgQS15LiAqLworCisJUiA9IGh5cG90KHgsIHkgKyAxKTsJCS8qIHx6K0l8ICovCisJUyA9IGh5cG90KHgsIHkgLSAxKTsJCS8qIHx6LUl8ICovCisKKwkvKiBBID0gKHx6K0l8ICsgfHotSXwpIC8gMiAqLworCUEgPSAoUiArIFMpIC8gMjsKKwkvKgorCSAqIE1hdGhlbWF0aWNhbGx5IEEgPj0gMS4gIFRoZXJlIGlzIGEgc21hbGwgY2hhbmNlIHRoYXQgdGhpcyB3aWxsIG5vdAorCSAqIGJlIHNvIGJlY2F1c2Ugb2Ygcm91bmRpbmcgZXJyb3JzLiAgU28gd2Ugd2lsbCBtYWtlIGNlcnRhaW4gaXQgaXMKKwkgKiBzby4KKwkgKi8KKwlpZiAoQSA8IDEpCisJCUEgPSAxOworCisJaWYgKEEgPCBBX2Nyb3Nzb3ZlcikgeworCQkvKgorCQkgKiBBbTEgPSBmcCArIGZtLCB3aGVyZSBmcCA9IGYoeCwgMSt5KSwgYW5kIGZtID0gZih4LCAxLXkpLgorCQkgKiByeCA9IGxvZzFwKEFtMSArIHNxcnQoQW0xKihBKzEpKSkKKwkJICovCisJCWlmICh5ID09IDEgJiYgeCA8IERCTF9FUFNJTE9OICogREJMX0VQU0lMT04gLyAxMjgpIHsKKwkJCS8qCisJCQkgKiBmcCBpcyBvZiBvcmRlciB4XjIsIGFuZCBmbSA9IHgvMi4KKwkJCSAqIEEgPSAxIChpbmV4YWN0bHkpLgorCQkJICovCisJCQkqcnggPSBzcXJ0KHgpOworCQl9IGVsc2UgaWYgKHggPj0gREJMX0VQU0lMT04gKiBmYWJzKHkgLSAxKSkgeworCQkJLyoKKwkJCSAqIFVuZGVyZmxvdyB3aWxsIG5vdCBvY2N1ciBiZWNhdXNlCisJCQkgKiB4ID49IERCTF9FUFNJTE9OXjIvMTI4ID49IEZPVVJfU1FSVF9NSU4KKwkJCSAqLworCQkJQW0xID0gZih4LCAxICsgeSwgUikgKyBmKHgsIDEgLSB5LCBTKTsKKwkJCSpyeCA9IGxvZzFwKEFtMSArIHNxcnQoQW0xICogKEEgKyAxKSkpOworCQl9IGVsc2UgaWYgKHkgPCAxKSB7CisJCQkvKgorCQkJICogZnAgPSB4KngvKDEreSkvNCwgZm0gPSB4KngvKDEteSkvNCwgYW5kCisJCQkgKiBBID0gMSAoaW5leGFjdGx5KS4KKwkJCSAqLworCQkJKnJ4ID0geCAvIHNxcnQoKDEgLSB5KSAqICgxICsgeSkpOworCQl9IGVsc2UgewkJLyogaWYgKHkgPiAxKSAqLworCQkJLyoKKwkJCSAqIEEtMSA9IHktMSAoaW5leGFjdGx5KS4KKwkJCSAqLworCQkJKnJ4ID0gbG9nMXAoKHkgLSAxKSArIHNxcnQoKHkgLSAxKSAqICh5ICsgMSkpKTsKKwkJfQorCX0gZWxzZSB7CisJCSpyeCA9IGxvZyhBICsgc3FydChBICogQSAtIDEpKTsKKwl9CisKKwkqbmV3X3kgPSB5OworCisJaWYgKHkgPCBGT1VSX1NRUlRfTUlOKSB7CisJCS8qCisJCSAqIEF2b2lkIGEgcG9zc2libGUgdW5kZXJmbG93IGNhdXNlZCBieSB5L0EuICBGb3IgY2FzaW5oIHRoaXMKKwkJICogd291bGQgYmUgbGVnaXRpbWF0ZSwgYnV0IHdpbGwgYmUgcGlja2VkIHVwIGJ5IGludm9raW5nIGF0YW4yCisJCSAqIGxhdGVyIG9uLiAgRm9yIGNhY29zIHRoaXMgd291bGQgbm90IGJlIGxlZ2l0aW1hdGUuCisJCSAqLworCQkqQl9pc191c2FibGUgPSAwOworCQkqc3FydF9BMm15MiA9IEEgKiAoMiAvIERCTF9FUFNJTE9OKTsKKwkJKm5ld195ID0geSAqICgyIC8gREJMX0VQU0lMT04pOworCQlyZXR1cm47CisJfQorCisJLyogQiA9ICh8eitJfCAtIHx6LUl8KSAvIDIgPSB5L0EgKi8KKwkqQiA9IHkgLyBBOworCSpCX2lzX3VzYWJsZSA9IDE7CisKKwlpZiAoKkIgPiBCX2Nyb3Nzb3ZlcikgeworCQkqQl9pc191c2FibGUgPSAwOworCQkvKgorCQkgKiBBbXkgPSBmcCArIGZtLCB3aGVyZSBmcCA9IGYoeCwgeSsxKSwgYW5kIGZtID0gZih4LCB5LTEpLgorCQkgKiBzcXJ0X0EybXkyID0gc3FydChBbXkqKEEreSkpCisJCSAqLworCQlpZiAoeSA9PSAxICYmIHggPCBEQkxfRVBTSUxPTiAvIDEyOCkgeworCQkJLyoKKwkJCSAqIGZwIGlzIG9mIG9yZGVyIHheMiwgYW5kIGZtID0geC8yLgorCQkJICogQSA9IDEgKGluZXhhY3RseSkuCisJCQkgKi8KKwkJCSpzcXJ0X0EybXkyID0gc3FydCh4KSAqIHNxcnQoKEEgKyB5KSAvIDIpOworCQl9IGVsc2UgaWYgKHggPj0gREJMX0VQU0lMT04gKiBmYWJzKHkgLSAxKSkgeworCQkJLyoKKwkJCSAqIFVuZGVyZmxvdyB3aWxsIG5vdCBvY2N1ciBiZWNhdXNlCisJCQkgKiB4ID49IERCTF9FUFNJTE9OLzEyOCA+PSBGT1VSX1NRUlRfTUlOCisJCQkgKiBhbmQKKwkJCSAqIHggPj0gREJMX0VQU0lMT05eMiA+PSBGT1VSX1NRUlRfTUlOCisJCQkgKi8KKwkJCUFteSA9IGYoeCwgeSArIDEsIFIpICsgZih4LCB5IC0gMSwgUyk7CisJCQkqc3FydF9BMm15MiA9IHNxcnQoQW15ICogKEEgKyB5KSk7CisJCX0gZWxzZSBpZiAoeSA+IDEpIHsKKwkJCS8qCisJCQkgKiBmcCA9IHgqeC8oeSsxKS80LCBmbSA9IHgqeC8oeS0xKS80LCBhbmQKKwkJCSAqIEEgPSB5IChpbmV4YWN0bHkpLgorCQkJICoKKwkJCSAqIHkgPCBSRUNJUF9FUFNJTE9OLiAgU28gdGhlIGZvbGxvd2luZworCQkJICogc2NhbGluZyBzaG91bGQgYXZvaWQgYW55IHVuZGVyZmxvdyBwcm9ibGVtcy4KKwkJCSAqLworCQkJKnNxcnRfQTJteTIgPSB4ICogKDQgLyBEQkxfRVBTSUxPTiAvIERCTF9FUFNJTE9OKSAqIHkgLworCQkJICAgIHNxcnQoKHkgKyAxKSAqICh5IC0gMSkpOworCQkJKm5ld195ID0geSAqICg0IC8gREJMX0VQU0lMT04gLyBEQkxfRVBTSUxPTik7CisJCX0gZWxzZSB7CQkvKiBpZiAoeSA8IDEpICovCisJCQkvKgorCQkJICogZm0gPSAxLXkgPj0gREJMX0VQU0lMT04sIGZwIGlzIG9mIG9yZGVyIHheMiwgYW5kCisJCQkgKiBBID0gMSAoaW5leGFjdGx5KS4KKwkJCSAqLworCQkJKnNxcnRfQTJteTIgPSBzcXJ0KCgxIC0geSkgKiAoMSArIHkpKTsKKwkJfQorCX0KK30KKworLyoKKyAqIGNhc2luaCh6KSA9IHogKyBPKHpeMykgICBhcyB6IC0+IDAKKyAqCisgKiBjYXNpbmgoeikgPSBzaWduKHgpKmNsb2coc2lnbih4KSp6KSArIE8oMS96XjIpICAgYXMgeiAtPiBpbmZpbml0eQorICogVGhlIGFib3ZlIGZvcm11bGEgd29ya3MgZm9yIHRoZSBpbWFnaW5hcnkgcGFydCBhcyB3ZWxsLCBiZWNhdXNlCisgKiBJbShjYXNpbmgoeikpID0gc2lnbih4KSphdGFuMihzaWduKHgpKnksIGZhYnMoeCkpICsgTyh5L3peMykKKyAqICAgIGFzIHogLT4gaW5maW5pdHksIHVuaWZvcm1seSBpbiB5CisgKi8KK2RvdWJsZSBjb21wbGV4CitjYXNpbmgoZG91YmxlIGNvbXBsZXggeikKK3sKKwlkb3VibGUgeCwgeSwgYXgsIGF5LCByeCwgcnksIEIsIHNxcnRfQTJteTIsIG5ld195OworCWludCBCX2lzX3VzYWJsZTsKKwlkb3VibGUgY29tcGxleCB3OworCisJeCA9IGNyZWFsKHopOworCXkgPSBjaW1hZyh6KTsKKwlheCA9IGZhYnMoeCk7CisJYXkgPSBmYWJzKHkpOworCisJaWYgKGlzbmFuKHgpIHx8IGlzbmFuKHkpKSB7CisJCS8qIGNhc2luaCgrLUluZiArIEkqTmFOKSA9ICstSW5mICsgSSpOYU4gKi8KKwkJaWYgKGlzaW5mKHgpKQorCQkJcmV0dXJuIChjcGFjayh4LCB5ICsgeSkpOworCQkvKiBjYXNpbmgoTmFOICsgSSorLUluZikgPSBvcHQoKy0pSW5mICsgSSpOYU4gKi8KKwkJaWYgKGlzaW5mKHkpKQorCQkJcmV0dXJuIChjcGFjayh5LCB4ICsgeCkpOworCQkvKiBjYXNpbmgoTmFOICsgSSowKSA9IE5hTiArIEkqMCAqLworCQlpZiAoeSA9PSAwKQorCQkJcmV0dXJuIChjcGFjayh4ICsgeCwgeSkpOworCQkvKgorCQkgKiBBbGwgb3RoZXIgY2FzZXMgaW52b2x2aW5nIE5hTiByZXR1cm4gTmFOICsgSSpOYU4uCisJCSAqIEM5OSBsZWF2ZXMgaXQgb3B0aW9uYWwgd2hldGhlciB0byByYWlzZSBpbnZhbGlkIGlmIG9uZSBvZgorCQkgKiB0aGUgYXJndW1lbnRzIGlzIG5vdCBOYU4sIHNvIHdlIG9wdCBub3QgdG8gcmFpc2UgaXQuCisJCSAqLworCQlyZXR1cm4gKGNwYWNrKHggKyAwLjBMICsgKHkgKyAwKSwgeCArIDAuMEwgKyAoeSArIDApKSk7CisJfQorCisJaWYgKGF4ID4gUkVDSVBfRVBTSUxPTiB8fCBheSA+IFJFQ0lQX0VQU0lMT04pIHsKKwkJLyogY2xvZy4uLigpIHdpbGwgcmFpc2UgaW5leGFjdCB1bmxlc3MgeCBvciB5IGlzIGluZmluaXRlLiAqLworCQlpZiAoc2lnbmJpdCh4KSA9PSAwKQorCQkJdyA9IGNsb2dfZm9yX2xhcmdlX3ZhbHVlcyh6KSArIG1fbG4yOworCQllbHNlCisJCQl3ID0gY2xvZ19mb3JfbGFyZ2VfdmFsdWVzKC16KSArIG1fbG4yOworCQlyZXR1cm4gKGNwYWNrKGNvcHlzaWduKGNyZWFsKHcpLCB4KSwgY29weXNpZ24oY2ltYWcodyksIHkpKSk7CisJfQorCisJLyogQXZvaWQgc3B1cmlvdXNseSByYWlzaW5nIGluZXhhY3QgZm9yIHogPSAwLiAqLworCWlmICh4ID09IDAgJiYgeSA9PSAwKQorCQlyZXR1cm4gKHopOworCisJLyogQWxsIHJlbWFpbmluZyBjYXNlcyBhcmUgaW5leGFjdC4gKi8KKwlyYWlzZV9pbmV4YWN0KCk7CisKKwlpZiAoYXggPCBTUVJUXzZfRVBTSUxPTiAvIDQgJiYgYXkgPCBTUVJUXzZfRVBTSUxPTiAvIDQpCisJCXJldHVybiAoeik7CisKKwlkb19oYXJkX3dvcmsoYXgsIGF5LCAmcngsICZCX2lzX3VzYWJsZSwgJkIsICZzcXJ0X0EybXkyLCAmbmV3X3kpOworCWlmIChCX2lzX3VzYWJsZSkKKwkJcnkgPSBhc2luKEIpOworCWVsc2UKKwkJcnkgPSBhdGFuMihuZXdfeSwgc3FydF9BMm15Mik7CisJcmV0dXJuIChjcGFjayhjb3B5c2lnbihyeCwgeCksIGNvcHlzaWduKHJ5LCB5KSkpOworfQorCisvKgorICogY2FzaW4oeikgPSByZXZlcnNlKGNhc2luaChyZXZlcnNlKHopKSkKKyAqIHdoZXJlIHJldmVyc2UoeCArIEkqeSkgPSB5ICsgSSp4ID0gSSpjb25qKHopLgorICovCitkb3VibGUgY29tcGxleAorY2FzaW4oZG91YmxlIGNvbXBsZXggeikKK3sKKwlkb3VibGUgY29tcGxleCB3ID0gY2FzaW5oKGNwYWNrKGNpbWFnKHopLCBjcmVhbCh6KSkpOworCisJcmV0dXJuIChjcGFjayhjaW1hZyh3KSwgY3JlYWwodykpKTsKK30KKworLyoKKyAqIGNhY29zKHopID0gUEkvMiAtIGNhc2luKHopCisgKiBidXQgZG8gdGhlIGNvbXB1dGF0aW9uIGNhcmVmdWxseSBzbyBjYWNvcyh6KSBpcyBhY2N1cmF0ZSB3aGVuIHogaXMKKyAqIGNsb3NlIHRvIDEuCisgKgorICogY2Fjb3MoeikgPSBQSS8yIC0geiArIE8oel4zKSAgIGFzIHogLT4gMAorICoKKyAqIGNhY29zKHopID0gLXNpZ24oeSkqSSpjbG9nKHopICsgTygxL3peMikgICBhcyB6IC0+IGluZmluaXR5CisgKiBUaGUgYWJvdmUgZm9ybXVsYSB3b3JrcyBmb3IgdGhlIHJlYWwgcGFydCBhcyB3ZWxsLCBiZWNhdXNlCisgKiBSZShjYWNvcyh6KSkgPSBhdGFuMihmYWJzKHkpLCB4KSArIE8oeS96XjMpCisgKiAgICBhcyB6IC0+IGluZmluaXR5LCB1bmlmb3JtbHkgaW4geQorICovCitkb3VibGUgY29tcGxleAorY2Fjb3MoZG91YmxlIGNvbXBsZXggeikKK3sKKwlkb3VibGUgeCwgeSwgYXgsIGF5LCByeCwgcnksIEIsIHNxcnRfQTJteDIsIG5ld194OworCWludCBzeCwgc3k7CisJaW50IEJfaXNfdXNhYmxlOworCWRvdWJsZSBjb21wbGV4IHc7CisKKwl4ID0gY3JlYWwoeik7CisJeSA9IGNpbWFnKHopOworCXN4ID0gc2lnbmJpdCh4KTsKKwlzeSA9IHNpZ25iaXQoeSk7CisJYXggPSBmYWJzKHgpOworCWF5ID0gZmFicyh5KTsKKworCWlmIChpc25hbih4KSB8fCBpc25hbih5KSkgeworCQkvKiBjYWNvcygrLUluZiArIEkqTmFOKSA9IE5hTiArIEkqb3B0KC0pSW5mICovCisJCWlmIChpc2luZih4KSkKKwkJCXJldHVybiAoY3BhY2soeSArIHksIC1JTkZJTklUWSkpOworCQkvKiBjYWNvcyhOYU4gKyBJKistSW5mKSA9IE5hTiArIEkqLStJbmYgKi8KKwkJaWYgKGlzaW5mKHkpKQorCQkJcmV0dXJuIChjcGFjayh4ICsgeCwgLXkpKTsKKwkJLyogY2Fjb3MoMCArIEkqTmFOKSA9IFBJLzIgKyBJKk5hTiB3aXRoIGluZXhhY3QgKi8KKwkJaWYgKHggPT0gMCkKKwkJCXJldHVybiAoY3BhY2socGlvMl9oaSArIHBpbzJfbG8sIHkgKyB5KSk7CisJCS8qCisJCSAqIEFsbCBvdGhlciBjYXNlcyBpbnZvbHZpbmcgTmFOIHJldHVybiBOYU4gKyBJKk5hTi4KKwkJICogQzk5IGxlYXZlcyBpdCBvcHRpb25hbCB3aGV0aGVyIHRvIHJhaXNlIGludmFsaWQgaWYgb25lIG9mCisJCSAqIHRoZSBhcmd1bWVudHMgaXMgbm90IE5hTiwgc28gd2Ugb3B0IG5vdCB0byByYWlzZSBpdC4KKwkJICovCisJCXJldHVybiAoY3BhY2soeCArIDAuMEwgKyAoeSArIDApLCB4ICsgMC4wTCArICh5ICsgMCkpKTsKKwl9CisKKwlpZiAoYXggPiBSRUNJUF9FUFNJTE9OIHx8IGF5ID4gUkVDSVBfRVBTSUxPTikgeworCQkvKiBjbG9nLi4uKCkgd2lsbCByYWlzZSBpbmV4YWN0IHVubGVzcyB4IG9yIHkgaXMgaW5maW5pdGUuICovCisJCXcgPSBjbG9nX2Zvcl9sYXJnZV92YWx1ZXMoeik7CisJCXJ4ID0gZmFicyhjaW1hZyh3KSk7CisJCXJ5ID0gY3JlYWwodykgKyBtX2xuMjsKKwkJaWYgKHN5ID09IDApCisJCQlyeSA9IC1yeTsKKwkJcmV0dXJuIChjcGFjayhyeCwgcnkpKTsKKwl9CisKKwkvKiBBdm9pZCBzcHVyaW91c2x5IHJhaXNpbmcgaW5leGFjdCBmb3IgeiA9IDEuICovCisJaWYgKHggPT0gMSAmJiB5ID09IDApCisJCXJldHVybiAoY3BhY2soMCwgLXkpKTsKKworCS8qIEFsbCByZW1haW5pbmcgY2FzZXMgYXJlIGluZXhhY3QuICovCisJcmFpc2VfaW5leGFjdCgpOworCisJaWYgKGF4IDwgU1FSVF82X0VQU0lMT04gLyA0ICYmIGF5IDwgU1FSVF82X0VQU0lMT04gLyA0KQorCQlyZXR1cm4gKGNwYWNrKHBpbzJfaGkgLSAoeCAtIHBpbzJfbG8pLCAteSkpOworCisJZG9faGFyZF93b3JrKGF5LCBheCwgJnJ5LCAmQl9pc191c2FibGUsICZCLCAmc3FydF9BMm14MiwgJm5ld194KTsKKwlpZiAoQl9pc191c2FibGUpIHsKKwkJaWYgKHN4ID09IDApCisJCQlyeCA9IGFjb3MoQik7CisJCWVsc2UKKwkJCXJ4ID0gYWNvcygtQik7CisJfSBlbHNlIHsKKwkJaWYgKHN4ID09IDApCisJCQlyeCA9IGF0YW4yKHNxcnRfQTJteDIsIG5ld194KTsKKwkJZWxzZQorCQkJcnggPSBhdGFuMihzcXJ0X0EybXgyLCAtbmV3X3gpOworCX0KKwlpZiAoc3kgPT0gMCkKKwkJcnkgPSAtcnk7CisJcmV0dXJuIChjcGFjayhyeCwgcnkpKTsKK30KKworLyoKKyAqIGNhY29zaCh6KSA9IEkqY2Fjb3Moeikgb3IgLUkqY2Fjb3MoeikKKyAqIHdoZXJlIHRoZSBzaWduIGlzIGNob3NlbiBzbyBSZShjYWNvc2goeikpID49IDAuCisgKi8KK2RvdWJsZSBjb21wbGV4CitjYWNvc2goZG91YmxlIGNvbXBsZXggeikKK3sKKwlkb3VibGUgY29tcGxleCB3OworCWRvdWJsZSByeCwgcnk7CisKKwl3ID0gY2Fjb3Moeik7CisJcnggPSBjcmVhbCh3KTsKKwlyeSA9IGNpbWFnKHcpOworCS8qIGNhY29zaChOYU4gKyBJKk5hTikgPSBOYU4gKyBJKk5hTiAqLworCWlmIChpc25hbihyeCkgJiYgaXNuYW4ocnkpKQorCQlyZXR1cm4gKGNwYWNrKHJ5LCByeCkpOworCS8qIGNhY29zaChOYU4gKyBJKistSW5mKSA9ICtJbmYgKyBJKk5hTiAqLworCS8qIGNhY29zaCgrLUluZiArIEkqTmFOKSA9ICtJbmYgKyBJKk5hTiAqLworCWlmIChpc25hbihyeCkpCisJCXJldHVybiAoY3BhY2soZmFicyhyeSksIHJ4KSk7CisJLyogY2Fjb3NoKDAgKyBJKk5hTikgPSBOYU4gKyBJKk5hTiAqLworCWlmIChpc25hbihyeSkpCisJCXJldHVybiAoY3BhY2socnksIHJ5KSk7CisJcmV0dXJuIChjcGFjayhmYWJzKHJ5KSwgY29weXNpZ24ocngsIGNpbWFnKHopKSkpOworfQorCisvKgorICogT3B0aW1pemVkIHZlcnNpb24gb2YgY2xvZygpIGZvciB8enwgZmluaXRlIGFuZCBsYXJnZXIgdGhhbiB+UkVDSVBfRVBTSUxPTi4KKyAqLworc3RhdGljIGRvdWJsZSBjb21wbGV4CitjbG9nX2Zvcl9sYXJnZV92YWx1ZXMoZG91YmxlIGNvbXBsZXggeikKK3sKKwlkb3VibGUgeCwgeTsKKwlkb3VibGUgYXgsIGF5LCB0OworCisJeCA9IGNyZWFsKHopOworCXkgPSBjaW1hZyh6KTsKKwlheCA9IGZhYnMoeCk7CisJYXkgPSBmYWJzKHkpOworCWlmIChheCA8IGF5KSB7CisJCXQgPSBheDsKKwkJYXggPSBheTsKKwkJYXkgPSB0OworCX0KKworCS8qCisJICogQXZvaWQgb3ZlcmZsb3cgaW4gaHlwb3QoKSB3aGVuIHggYW5kIHkgYXJlIGJvdGggdmVyeSBsYXJnZS4KKwkgKiBEaXZpZGUgeCBhbmQgeSBieSBFLCBhbmQgdGhlbiBhZGQgMSB0byB0aGUgbG9nYXJpdGhtLiAgVGhpcyBkZXBlbmRzCisJICogb24gRSBiZWluZyBsYXJnZXIgdGhhbiBzcXJ0KDIpLgorCSAqIERpdmlkaW5nIGJ5IEUgY2F1c2VzIGFuIGluc2lnbmlmaWNhbnQgbG9zcyBvZiBhY2N1cmFjeTsgaG93ZXZlcgorCSAqIHRoaXMgbWV0aG9kIGlzIHN0aWxsIHBvb3Igc2luY2UgaXQgaXMgdW5lY2Nlc3NhcmlseSBzbG93LgorCSAqLworCWlmIChheCA+IERCTF9NQVggLyAyKQorCQlyZXR1cm4gKGNwYWNrKGxvZyhoeXBvdCh4IC8gbV9lLCB5IC8gbV9lKSkgKyAxLCBhdGFuMih5LCB4KSkpOworCisJLyoKKwkgKiBBdm9pZCBvdmVyZmxvdyB3aGVuIHggb3IgeSBpcyBsYXJnZS4gIEF2b2lkIHVuZGVyZmxvdyB3aGVuIHggb3IKKwkgKiB5IGlzIHNtYWxsLgorCSAqLworCWlmIChheCA+IFFVQVJURVJfU1FSVF9NQVggfHwgYXkgPCBTUVJUX01JTikKKwkJcmV0dXJuIChjcGFjayhsb2coaHlwb3QoeCwgeSkpLCBhdGFuMih5LCB4KSkpOworCisJcmV0dXJuIChjcGFjayhsb2coYXggKiBheCArIGF5ICogYXkpIC8gMiwgYXRhbjIoeSwgeCkpKTsKK30KKworLyoKKyAqCQkJCT09PT09PT09PT09PT09PT09CisgKgkJCQl8IGNhdGFuaCwgY2F0YW4gfAorICoJCQkJPT09PT09PT09PT09PT09PT0KKyAqLworCisvKgorICogc3VtX3NxdWFyZXMoeCx5KSA9IHgqeCArIHkqeSAob3IganVzdCB4KnggaWYgeSp5IHdvdWxkIHVuZGVyZmxvdykuCisgKiBBc3N1bWVzIHgqeCBhbmQgeSp5IHdpbGwgbm90IG92ZXJmbG93LgorICogQXNzdW1lcyB4IGFuZCB5IGFyZSBmaW5pdGUuCisgKiBBc3N1bWVzIHkgaXMgbm9uLW5lZ2F0aXZlLgorICogQXNzdW1lcyBmYWJzKHgpID49IERCTF9FUFNJTE9OLgorICovCitzdGF0aWMgaW5saW5lIGRvdWJsZQorc3VtX3NxdWFyZXMoZG91YmxlIHgsIGRvdWJsZSB5KQoreworCisJLyogQXZvaWQgdW5kZXJmbG93IHdoZW4geSBpcyBzbWFsbC4gKi8KKwlpZiAoeSA8IFNRUlRfTUlOKQorCQlyZXR1cm4gKHggKiB4KTsKKworCXJldHVybiAoeCAqIHggKyB5ICogeSk7Cit9CisKKy8qCisgKiByZWFsX3BhcnRfcmVjaXByb2NhbCh4LCB5KSA9IFJlKDEvKHgrSSp5KSkgPSB4Lyh4KnggKyB5KnkpLgorICogQXNzdW1lcyB4IGFuZCB5IGFyZSBub3QgTmFOLCBhbmQgb25lIG9mIHggYW5kIHkgaXMgbGFyZ2VyIHRoYW4KKyAqIFJFQ0lQX0VQU0lMT04uICBXZSBhdm9pZCB1bndhcnJhbnRlZCB1bmRlcmZsb3cuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90IHVzZQorICogdGhlIGNvZGUgY3JlYWwoMS96KSwgYmVjYXVzZSB0aGUgaW1hZ2luYXJ5IHBhcnQgbWF5IHByb2R1Y2UgYW4gdW53YW50ZWQKKyAqIHVuZGVyZmxvdy4KKyAqIFRoaXMgaXMgb25seSBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIGluZXhhY3QgaXMgYWx3YXlzIHJhaXNlZCBiZWZvcmUKKyAqIHRoZSBjYWxsLCBzbyBubyBlZmZvcnQgaXMgbWFkZSB0byBhdm9pZCBvciBmb3JjZSBpbmV4YWN0LgorICovCitzdGF0aWMgaW5saW5lIGRvdWJsZQorcmVhbF9wYXJ0X3JlY2lwcm9jYWwoZG91YmxlIHgsIGRvdWJsZSB5KQoreworCWRvdWJsZSBzY2FsZTsKKwl1aW50MzJfdCBoeCwgaHk7CisJaW50MzJfdCBpeCwgaXk7CisKKwkvKgorCSAqIFRoaXMgY29kZSBpcyBpbnNwaXJlZCBieSB0aGUgQzk5IGRvY3VtZW50IG4xMTI0LnBkZiwgU2VjdGlvbiBHLjUuMSwKKwkgKiBleGFtcGxlIDIuCisJICovCisJR0VUX0hJR0hfV09SRChoeCwgeCk7CisJaXggPSBoeCAmIDB4N2ZmMDAwMDA7CisJR0VUX0hJR0hfV09SRChoeSwgeSk7CisJaXkgPSBoeSAmIDB4N2ZmMDAwMDA7CisjZGVmaW5lCUJJQVMJKERCTF9NQVhfRVhQIC0gMSkKKy8qIFhYWCBtb3JlIGd1YXJkIGRpZ2l0cyBhcmUgdXNlZnVsIGlmZiB0aGVyZSBpcyBleHRyYSBwcmVjaXNpb24uICovCisjZGVmaW5lCUNVVE9GRgkoREJMX01BTlRfRElHIC8gMiArIDEpCS8qIGp1c3QgaGFsZiBvciAxIGd1YXJkIGRpZ2l0ICovCisJaWYgKGl4IC0gaXkgPj0gQ1VUT0ZGIDw8IDIwIHx8IGlzaW5mKHgpKQorCQlyZXR1cm4gKDEgLyB4KTsJCS8qICstSW5mIC0+ICstMCBpcyBzcGVjaWFsICovCisJaWYgKGl5IC0gaXggPj0gQ1VUT0ZGIDw8IDIwKQorCQlyZXR1cm4gKHggLyB5IC8geSk7CS8qIHNob3VsZCBhdm9pZCBkb3VibGUgZGl2LCBidXQgaGFyZCAqLworCWlmIChpeCA8PSAoQklBUyArIERCTF9NQVhfRVhQIC8gMiAtIENVVE9GRikgPDwgMjApCisJCXJldHVybiAoeCAvICh4ICogeCArIHkgKiB5KSk7CisJc2NhbGUgPSAxOworCVNFVF9ISUdIX1dPUkQoc2NhbGUsIDB4N2ZmMDAwMDAgLSBpeCk7CS8qIDIqKigxLWlsb2diKHgpKSAqLworCXggKj0gc2NhbGU7CisJeSAqPSBzY2FsZTsKKwlyZXR1cm4gKHggLyAoeCAqIHggKyB5ICogeSkgKiBzY2FsZSk7Cit9CisKKy8qCisgKiBjYXRhbmgoeikgPSBsb2coKDEreikvKDEteikpIC8gMgorICogICAgICAgICAgID0gbG9nMXAoNCp4IC8gfHotMXxeMikgLyA0CisgKiAgICAgICAgICAgICArIEkgKiBhdGFuMigyKnksICgxLXgpKigxK3gpLXkqeSkgLyAyCisgKgorICogY2F0YW5oKHopID0geiArIE8oel4zKSAgIGFzIHogLT4gMAorICoKKyAqIGNhdGFuaCh6KSA9IDEveiArIHNpZ24oeSkqSSpQSS8yICsgTygxL3peMykgICBhcyB6IC0+IGluZmluaXR5CisgKiBUaGUgYWJvdmUgZm9ybXVsYSB3b3JrcyBmb3IgdGhlIHJlYWwgcGFydCBhcyB3ZWxsLCBiZWNhdXNlCisgKiBSZShjYXRhbmgoeikpID0geC98enxeMiArIE8oeC96XjQpCisgKiAgICBhcyB6IC0+IGluZmluaXR5LCB1bmlmb3JtbHkgaW4geAorICovCitkb3VibGUgY29tcGxleAorY2F0YW5oKGRvdWJsZSBjb21wbGV4IHopCit7CisJZG91YmxlIHgsIHksIGF4LCBheSwgcngsIHJ5OworCisJeCA9IGNyZWFsKHopOworCXkgPSBjaW1hZyh6KTsKKwlheCA9IGZhYnMoeCk7CisJYXkgPSBmYWJzKHkpOworCisJLyogVGhpcyBoZWxwcyBoYW5kbGUgbWFueSBjYXNlcy4gKi8KKwlpZiAoeSA9PSAwICYmIGF4IDw9IDEpCisJCXJldHVybiAoY3BhY2soYXRhbmgoeCksIHkpKTsKKworCS8qIFRvIGVuc3VyZSB0aGUgc2FtZSBhY2N1cmFjeSBhcyBhdGFuKCksIGFuZCB0byBmaWx0ZXIgb3V0IHogPSAwLiAqLworCWlmICh4ID09IDApCisJCXJldHVybiAoY3BhY2soeCwgYXRhbih5KSkpOworCisJaWYgKGlzbmFuKHgpIHx8IGlzbmFuKHkpKSB7CisJCS8qIGNhdGFuaCgrLUluZiArIEkqTmFOKSA9ICstMCArIEkqTmFOICovCisJCWlmIChpc2luZih4KSkKKwkJCXJldHVybiAoY3BhY2soY29weXNpZ24oMCwgeCksIHkgKyB5KSk7CisJCS8qIGNhdGFuaChOYU4gKyBJKistSW5mKSA9IHNpZ24oTmFOKTAgKyBJKistUEkvMiAqLworCQlpZiAoaXNpbmYoeSkpCisJCQlyZXR1cm4gKGNwYWNrKGNvcHlzaWduKDAsIHgpLAorCQkJICAgIGNvcHlzaWduKHBpbzJfaGkgKyBwaW8yX2xvLCB5KSkpOworCQkvKgorCQkgKiBBbGwgb3RoZXIgY2FzZXMgaW52b2x2aW5nIE5hTiByZXR1cm4gTmFOICsgSSpOYU4uCisJCSAqIEM5OSBsZWF2ZXMgaXQgb3B0aW9uYWwgd2hldGhlciB0byByYWlzZSBpbnZhbGlkIGlmIG9uZSBvZgorCQkgKiB0aGUgYXJndW1lbnRzIGlzIG5vdCBOYU4sIHNvIHdlIG9wdCBub3QgdG8gcmFpc2UgaXQuCisJCSAqLworCQlyZXR1cm4gKGNwYWNrKHggKyAwLjBMICsgKHkgKyAwKSwgeCArIDAuMEwgKyAoeSArIDApKSk7CisJfQorCisJaWYgKGF4ID4gUkVDSVBfRVBTSUxPTiB8fCBheSA+IFJFQ0lQX0VQU0lMT04pCisJCXJldHVybiAoY3BhY2socmVhbF9wYXJ0X3JlY2lwcm9jYWwoeCwgeSksCisJCSAgICBjb3B5c2lnbihwaW8yX2hpICsgcGlvMl9sbywgeSkpKTsKKworCWlmIChheCA8IFNRUlRfM19FUFNJTE9OIC8gMiAmJiBheSA8IFNRUlRfM19FUFNJTE9OIC8gMikgeworCQkvKgorCQkgKiB6ID0gMCB3YXMgZmlsdGVyZWQgb3V0IGFib3ZlLiAgQWxsIG90aGVyIGNhc2VzIG11c3QgcmFpc2UKKwkJICogaW5leGFjdCwgYnV0IHRoaXMgaXMgdGhlIG9ubHkgb25seSB0aGF0IG5lZWRzIHRvIGRvIGl0CisJCSAqIGV4cGxpY2l0bHkuCisJCSAqLworCQlyYWlzZV9pbmV4YWN0KCk7CisJCXJldHVybiAoeik7CisJfQorCisJaWYgKGF4ID09IDEgJiYgYXkgPCBEQkxfRVBTSUxPTikKKwkJcnggPSAobV9sbjIgLSBsb2coYXkpKSAvIDI7CisJZWxzZQorCQlyeCA9IGxvZzFwKDQgKiBheCAvIHN1bV9zcXVhcmVzKGF4IC0gMSwgYXkpKSAvIDQ7CisKKwlpZiAoYXggPT0gMSkKKwkJcnkgPSBhdGFuMigyLCAtYXkpIC8gMjsKKwllbHNlIGlmIChheSA8IERCTF9FUFNJTE9OKQorCQlyeSA9IGF0YW4yKDIgKiBheSwgKDEgLSBheCkgKiAoMSArIGF4KSkgLyAyOworCWVsc2UKKwkJcnkgPSBhdGFuMigyICogYXksICgxIC0gYXgpICogKDEgKyBheCkgLSBheSAqIGF5KSAvIDI7CisKKwlyZXR1cm4gKGNwYWNrKGNvcHlzaWduKHJ4LCB4KSwgY29weXNpZ24ocnksIHkpKSk7Cit9CisKKy8qCisgKiBjYXRhbih6KSA9IHJldmVyc2UoY2F0YW5oKHJldmVyc2UoeikpKQorICogd2hlcmUgcmV2ZXJzZSh4ICsgSSp5KSA9IHkgKyBJKnggPSBJKmNvbmooeikuCisgKi8KK2RvdWJsZSBjb21wbGV4CitjYXRhbihkb3VibGUgY29tcGxleCB6KQoreworCWRvdWJsZSBjb21wbGV4IHcgPSBjYXRhbmgoY3BhY2soY2ltYWcoeiksIGNyZWFsKHopKSk7CisKKwlyZXR1cm4gKGNwYWNrKGNpbWFnKHcpLCBjcmVhbCh3KSkpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9jYXRyaWdmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2NhdHJpZ2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGViZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9jYXRyaWdmLmMKQEAgLTAsMCArMSwzOTMgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDEyIFN0ZXBoZW4gTW9udGdvbWVyeS1TbWl0aCA8c3RlcGhlbkBGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFRoZSBhbGdvcml0aG0gaXMgdmVyeSBjbG9zZSB0byB0aGF0IGluICJJbXBsZW1lbnRpbmcgdGhlIGNvbXBsZXggYXJjc2luZQorICogYW5kIGFyY2Nvc2luZSBmdW5jdGlvbnMgdXNpbmcgZXhjZXB0aW9uIGhhbmRsaW5nIiBieSBULiBFLiBIdWxsLCBUaG9tYXMgRi4KKyAqIEZhaXJncmlldmUsIGFuZCBQaW5nIFRhayBQZXRlciBUYW5nLCBwdWJsaXNoZWQgaW4gQUNNIFRyYW5zYWN0aW9ucyBvbgorICogTWF0aGVtYXRpY2FsIFNvZnR3YXJlLCBWb2x1bWUgMjMgSXNzdWUgMywgMTk5NywgUGFnZXMgMjk5LTMzNSwKKyAqIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0yNzUzMjQuCisgKgorICogU2VlIGNhdHJpZy5jIGZvciBjb21wbGV0ZSBjb21tZW50cy4KKyAqCisgKiBYWFggY29tbWVudHMgd2VyZSByZW1vdmVkIGF1dG9tYXRpY2FsbHksIGFuZCBldmVuIHNob3J0IG9uZXMgb24gdGhlIHJpZ2h0CisgKiBvZiBzdGF0ZW1lbnRzIHdlcmUgcmVtb3ZlZCAoYWxsIG9mIHRoZW0pLCBjb250cmFyeSB0byBub3JtYWwgc3R5bGUuICBPbmx5CisgKiBhIGZldyBjb21tZW50cyBvbiB0aGUgcmlnaHQgb2YgZGVjbGFyYXRpb25zIHJlbWFpbi4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworI3VuZGVmIGlzaW5mCisjZGVmaW5lIGlzaW5mKHgpCShmYWJzZih4KSA9PSBJTkZJTklUWSkKKyN1bmRlZiBpc25hbgorI2RlZmluZSBpc25hbih4KQkoKHgpICE9ICh4KSkKKyNkZWZpbmUJcmFpc2VfaW5leGFjdCgpCWRvIHsgdm9sYXRpbGUgZmxvYXQganVuayA9IDEgKyB0aW55OyB9IHdoaWxlKDApCisjdW5kZWYgc2lnbmJpdAorI2RlZmluZSBzaWduYml0KHgpCShfX2J1aWx0aW5fc2lnbmJpdGYoeCkpCisKK3N0YXRpYyBjb25zdCBmbG9hdAorQV9jcm9zc292ZXIgPQkJMTAsCitCX2Nyb3Nzb3ZlciA9CQkwLjY0MTcsCitGT1VSX1NRUlRfTUlOID0JCTB4MXAtNjEsCitRVUFSVEVSX1NRUlRfTUFYID0JMHgxcDYxLAorbV9lID0JCQkyLjcxODI4MTgyODVlMCwJCS8qICAweGFkZjg1NC4wcC0yMiAqLworbV9sbjIgPQkJCTYuOTMxNDcxODA1NmUtMSwJLyogIDB4YjE3MjE4LjBwLTI0ICovCitwaW8yX2hpID0JCTEuNTcwNzk2MjUxM2UwLAkJLyogIDB4YzkwZmRhLjBwLTIzICovCitSRUNJUF9FUFNJTE9OID0JCTEgLyBGTFRfRVBTSUxPTiwKK1NRUlRfM19FUFNJTE9OID0JNS45ODAxOTk1NjczZS00LAkvKiAgMHg5Y2M0NzEuMHAtMzQgKi8KK1NRUlRfNl9FUFNJTE9OID0JOC40NTcyNzkzMzM4ZS00LAkvKiAgMHhkZGIzZDcuMHAtMzQgKi8KK1NRUlRfTUlOID0JCTB4MXAtNjM7CisKK3N0YXRpYyBjb25zdCB2b2xhdGlsZSBmbG9hdAorcGlvMl9sbyA9CQk3LjU0OTc4OTk1NDllLTgsCS8qICAweGEyMjE2OS4wcC00NyAqLwordGlueSA9CQkJMHgxcC0xMDA7CisKK3N0YXRpYyBmbG9hdCBjb21wbGV4IGNsb2dfZm9yX2xhcmdlX3ZhbHVlcyhmbG9hdCBjb21wbGV4IHopOworCitzdGF0aWMgaW5saW5lIGZsb2F0CitmKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGh5cG90X2FfYikKK3sKKwlpZiAoYiA8IDApCisJCXJldHVybiAoKGh5cG90X2FfYiAtIGIpIC8gMik7CisJaWYgKGIgPT0gMCkKKwkJcmV0dXJuIChhIC8gMik7CisJcmV0dXJuIChhICogYSAvIChoeXBvdF9hX2IgKyBiKSAvIDIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RvX2hhcmRfd29yayhmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCAqcngsIGludCAqQl9pc191c2FibGUsIGZsb2F0ICpCLAorICAgIGZsb2F0ICpzcXJ0X0EybXkyLCBmbG9hdCAqbmV3X3kpCit7CisJZmxvYXQgUiwgUywgQTsKKwlmbG9hdCBBbTEsIEFteTsKKworCVIgPSBoeXBvdGYoeCwgeSArIDEpOworCVMgPSBoeXBvdGYoeCwgeSAtIDEpOworCisJQSA9IChSICsgUykgLyAyOworCWlmIChBIDwgMSkKKwkJQSA9IDE7CisKKwlpZiAoQSA8IEFfY3Jvc3NvdmVyKSB7CisJCWlmICh5ID09IDEgJiYgeCA8IEZMVF9FUFNJTE9OICogRkxUX0VQU0lMT04gLyAxMjgpIHsKKwkJCSpyeCA9IHNxcnRmKHgpOworCQl9IGVsc2UgaWYgKHggPj0gRkxUX0VQU0lMT04gKiBmYWJzZih5IC0gMSkpIHsKKwkJCUFtMSA9IGYoeCwgMSArIHksIFIpICsgZih4LCAxIC0geSwgUyk7CisJCQkqcnggPSBsb2cxcGYoQW0xICsgc3FydGYoQW0xICogKEEgKyAxKSkpOworCQl9IGVsc2UgaWYgKHkgPCAxKSB7CisJCQkqcnggPSB4IC8gc3FydGYoKDEgLSB5KSAqICgxICsgeSkpOworCQl9IGVsc2UgeworCQkJKnJ4ID0gbG9nMXBmKCh5IC0gMSkgKyBzcXJ0ZigoeSAtIDEpICogKHkgKyAxKSkpOworCQl9CisJfSBlbHNlIHsKKwkJKnJ4ID0gbG9nZihBICsgc3FydGYoQSAqIEEgLSAxKSk7CisJfQorCisJKm5ld195ID0geTsKKworCWlmICh5IDwgRk9VUl9TUVJUX01JTikgeworCQkqQl9pc191c2FibGUgPSAwOworCQkqc3FydF9BMm15MiA9IEEgKiAoMiAvIEZMVF9FUFNJTE9OKTsKKwkJKm5ld195ID0geSAqICgyIC8gRkxUX0VQU0lMT04pOworCQlyZXR1cm47CisJfQorCisJKkIgPSB5IC8gQTsKKwkqQl9pc191c2FibGUgPSAxOworCisJaWYgKCpCID4gQl9jcm9zc292ZXIpIHsKKwkJKkJfaXNfdXNhYmxlID0gMDsKKwkJaWYgKHkgPT0gMSAmJiB4IDwgRkxUX0VQU0lMT04gLyAxMjgpIHsKKwkJCSpzcXJ0X0EybXkyID0gc3FydGYoeCkgKiBzcXJ0ZigoQSArIHkpIC8gMik7CisJCX0gZWxzZSBpZiAoeCA+PSBGTFRfRVBTSUxPTiAqIGZhYnNmKHkgLSAxKSkgeworCQkJQW15ID0gZih4LCB5ICsgMSwgUikgKyBmKHgsIHkgLSAxLCBTKTsKKwkJCSpzcXJ0X0EybXkyID0gc3FydGYoQW15ICogKEEgKyB5KSk7CisJCX0gZWxzZSBpZiAoeSA+IDEpIHsKKwkJCSpzcXJ0X0EybXkyID0geCAqICg0IC8gRkxUX0VQU0lMT04gLyBGTFRfRVBTSUxPTikgKiB5IC8KKwkJCSAgICBzcXJ0ZigoeSArIDEpICogKHkgLSAxKSk7CisJCQkqbmV3X3kgPSB5ICogKDQgLyBGTFRfRVBTSUxPTiAvIEZMVF9FUFNJTE9OKTsKKwkJfSBlbHNlIHsKKwkJCSpzcXJ0X0EybXkyID0gc3FydGYoKDEgLSB5KSAqICgxICsgeSkpOworCQl9CisJfQorfQorCitmbG9hdCBjb21wbGV4CitjYXNpbmhmKGZsb2F0IGNvbXBsZXggeikKK3sKKwlmbG9hdCB4LCB5LCBheCwgYXksIHJ4LCByeSwgQiwgc3FydF9BMm15MiwgbmV3X3k7CisJaW50IEJfaXNfdXNhYmxlOworCWZsb2F0IGNvbXBsZXggdzsKKworCXggPSBjcmVhbGYoeik7CisJeSA9IGNpbWFnZih6KTsKKwlheCA9IGZhYnNmKHgpOworCWF5ID0gZmFic2YoeSk7CisKKwlpZiAoaXNuYW4oeCkgfHwgaXNuYW4oeSkpIHsKKwkJaWYgKGlzaW5mKHgpKQorCQkJcmV0dXJuIChjcGFja2YoeCwgeSArIHkpKTsKKwkJaWYgKGlzaW5mKHkpKQorCQkJcmV0dXJuIChjcGFja2YoeSwgeCArIHgpKTsKKwkJaWYgKHkgPT0gMCkKKwkJCXJldHVybiAoY3BhY2tmKHggKyB4LCB5KSk7CisJCXJldHVybiAoY3BhY2tmKHggKyAwLjBMICsgKHkgKyAwKSwgeCArIDAuMEwgKyAoeSArIDApKSk7CisJfQorCisJaWYgKGF4ID4gUkVDSVBfRVBTSUxPTiB8fCBheSA+IFJFQ0lQX0VQU0lMT04pIHsKKwkJaWYgKHNpZ25iaXQoeCkgPT0gMCkKKwkJCXcgPSBjbG9nX2Zvcl9sYXJnZV92YWx1ZXMoeikgKyBtX2xuMjsKKwkJZWxzZQorCQkJdyA9IGNsb2dfZm9yX2xhcmdlX3ZhbHVlcygteikgKyBtX2xuMjsKKwkJcmV0dXJuIChjcGFja2YoY29weXNpZ25mKGNyZWFsZih3KSwgeCksCisJCSAgICBjb3B5c2lnbmYoY2ltYWdmKHcpLCB5KSkpOworCX0KKworCWlmICh4ID09IDAgJiYgeSA9PSAwKQorCQlyZXR1cm4gKHopOworCisJcmFpc2VfaW5leGFjdCgpOworCisJaWYgKGF4IDwgU1FSVF82X0VQU0lMT04gLyA0ICYmIGF5IDwgU1FSVF82X0VQU0lMT04gLyA0KQorCQlyZXR1cm4gKHopOworCisJZG9faGFyZF93b3JrKGF4LCBheSwgJnJ4LCAmQl9pc191c2FibGUsICZCLCAmc3FydF9BMm15MiwgJm5ld195KTsKKwlpZiAoQl9pc191c2FibGUpCisJCXJ5ID0gYXNpbmYoQik7CisJZWxzZQorCQlyeSA9IGF0YW4yZihuZXdfeSwgc3FydF9BMm15Mik7CisJcmV0dXJuIChjcGFja2YoY29weXNpZ25mKHJ4LCB4KSwgY29weXNpZ25mKHJ5LCB5KSkpOworfQorCitmbG9hdCBjb21wbGV4CitjYXNpbmYoZmxvYXQgY29tcGxleCB6KQoreworCWZsb2F0IGNvbXBsZXggdyA9IGNhc2luaGYoY3BhY2tmKGNpbWFnZih6KSwgY3JlYWxmKHopKSk7CisKKwlyZXR1cm4gKGNwYWNrZihjaW1hZ2YodyksIGNyZWFsZih3KSkpOworfQorCitmbG9hdCBjb21wbGV4CitjYWNvc2YoZmxvYXQgY29tcGxleCB6KQoreworCWZsb2F0IHgsIHksIGF4LCBheSwgcngsIHJ5LCBCLCBzcXJ0X0EybXgyLCBuZXdfeDsKKwlpbnQgc3gsIHN5OworCWludCBCX2lzX3VzYWJsZTsKKwlmbG9hdCBjb21wbGV4IHc7CisKKwl4ID0gY3JlYWxmKHopOworCXkgPSBjaW1hZ2Yoeik7CisJc3ggPSBzaWduYml0KHgpOworCXN5ID0gc2lnbmJpdCh5KTsKKwlheCA9IGZhYnNmKHgpOworCWF5ID0gZmFic2YoeSk7CisKKwlpZiAoaXNuYW4oeCkgfHwgaXNuYW4oeSkpIHsKKwkJaWYgKGlzaW5mKHgpKQorCQkJcmV0dXJuIChjcGFja2YoeSArIHksIC1JTkZJTklUWSkpOworCQlpZiAoaXNpbmYoeSkpCisJCQlyZXR1cm4gKGNwYWNrZih4ICsgeCwgLXkpKTsKKwkJaWYgKHggPT0gMCkKKwkJCXJldHVybiAoY3BhY2tmKHBpbzJfaGkgKyBwaW8yX2xvLCB5ICsgeSkpOworCQlyZXR1cm4gKGNwYWNrZih4ICsgMC4wTCArICh5ICsgMCksIHggKyAwLjBMICsgKHkgKyAwKSkpOworCX0KKworCWlmIChheCA+IFJFQ0lQX0VQU0lMT04gfHwgYXkgPiBSRUNJUF9FUFNJTE9OKSB7CisJCXcgPSBjbG9nX2Zvcl9sYXJnZV92YWx1ZXMoeik7CisJCXJ4ID0gZmFic2YoY2ltYWdmKHcpKTsKKwkJcnkgPSBjcmVhbGYodykgKyBtX2xuMjsKKwkJaWYgKHN5ID09IDApCisJCQlyeSA9IC1yeTsKKwkJcmV0dXJuIChjcGFja2YocngsIHJ5KSk7CisJfQorCisJaWYgKHggPT0gMSAmJiB5ID09IDApCisJCXJldHVybiAoY3BhY2tmKDAsIC15KSk7CisKKwlyYWlzZV9pbmV4YWN0KCk7CisKKwlpZiAoYXggPCBTUVJUXzZfRVBTSUxPTiAvIDQgJiYgYXkgPCBTUVJUXzZfRVBTSUxPTiAvIDQpCisJCXJldHVybiAoY3BhY2tmKHBpbzJfaGkgLSAoeCAtIHBpbzJfbG8pLCAteSkpOworCisJZG9faGFyZF93b3JrKGF5LCBheCwgJnJ5LCAmQl9pc191c2FibGUsICZCLCAmc3FydF9BMm14MiwgJm5ld194KTsKKwlpZiAoQl9pc191c2FibGUpIHsKKwkJaWYgKHN4ID09IDApCisJCQlyeCA9IGFjb3NmKEIpOworCQllbHNlCisJCQlyeCA9IGFjb3NmKC1CKTsKKwl9IGVsc2UgeworCQlpZiAoc3ggPT0gMCkKKwkJCXJ4ID0gYXRhbjJmKHNxcnRfQTJteDIsIG5ld194KTsKKwkJZWxzZQorCQkJcnggPSBhdGFuMmYoc3FydF9BMm14MiwgLW5ld194KTsKKwl9CisJaWYgKHN5ID09IDApCisJCXJ5ID0gLXJ5OworCXJldHVybiAoY3BhY2tmKHJ4LCByeSkpOworfQorCitmbG9hdCBjb21wbGV4CitjYWNvc2hmKGZsb2F0IGNvbXBsZXggeikKK3sKKwlmbG9hdCBjb21wbGV4IHc7CisJZmxvYXQgcngsIHJ5OworCisJdyA9IGNhY29zZih6KTsKKwlyeCA9IGNyZWFsZih3KTsKKwlyeSA9IGNpbWFnZih3KTsKKwlpZiAoaXNuYW4ocngpICYmIGlzbmFuKHJ5KSkKKwkJcmV0dXJuIChjcGFja2YocnksIHJ4KSk7CisJaWYgKGlzbmFuKHJ4KSkKKwkJcmV0dXJuIChjcGFja2YoZmFic2YocnkpLCByeCkpOworCWlmIChpc25hbihyeSkpCisJCXJldHVybiAoY3BhY2tmKHJ5LCByeSkpOworCXJldHVybiAoY3BhY2tmKGZhYnNmKHJ5KSwgY29weXNpZ25mKHJ4LCBjaW1hZ2YoeikpKSk7Cit9CisKK3N0YXRpYyBmbG9hdCBjb21wbGV4CitjbG9nX2Zvcl9sYXJnZV92YWx1ZXMoZmxvYXQgY29tcGxleCB6KQoreworCWZsb2F0IHgsIHk7CisJZmxvYXQgYXgsIGF5LCB0OworCisJeCA9IGNyZWFsZih6KTsKKwl5ID0gY2ltYWdmKHopOworCWF4ID0gZmFic2YoeCk7CisJYXkgPSBmYWJzZih5KTsKKwlpZiAoYXggPCBheSkgeworCQl0ID0gYXg7CisJCWF4ID0gYXk7CisJCWF5ID0gdDsKKwl9CisKKwlpZiAoYXggPiBGTFRfTUFYIC8gMikKKwkJcmV0dXJuIChjcGFja2YobG9nZihoeXBvdGYoeCAvIG1fZSwgeSAvIG1fZSkpICsgMSwKKwkJICAgIGF0YW4yZih5LCB4KSkpOworCisJaWYgKGF4ID4gUVVBUlRFUl9TUVJUX01BWCB8fCBheSA8IFNRUlRfTUlOKQorCQlyZXR1cm4gKGNwYWNrZihsb2dmKGh5cG90Zih4LCB5KSksIGF0YW4yZih5LCB4KSkpOworCisJcmV0dXJuIChjcGFja2YobG9nZihheCAqIGF4ICsgYXkgKiBheSkgLyAyLCBhdGFuMmYoeSwgeCkpKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdAorc3VtX3NxdWFyZXMoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKworCWlmICh5IDwgU1FSVF9NSU4pCisJCXJldHVybiAoeCAqIHgpOworCisJcmV0dXJuICh4ICogeCArIHkgKiB5KTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdAorcmVhbF9wYXJ0X3JlY2lwcm9jYWwoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKwlmbG9hdCBzY2FsZTsKKwl1aW50MzJfdCBoeCwgaHk7CisJaW50MzJfdCBpeCwgaXk7CisKKwlHRVRfRkxPQVRfV09SRChoeCwgeCk7CisJaXggPSBoeCAmIDB4N2Y4MDAwMDA7CisJR0VUX0ZMT0FUX1dPUkQoaHksIHkpOworCWl5ID0gaHkgJiAweDdmODAwMDAwOworI2RlZmluZQlCSUFTCShGTFRfTUFYX0VYUCAtIDEpCisjZGVmaW5lCUNVVE9GRgkoRkxUX01BTlRfRElHIC8gMiArIDEpCisJaWYgKGl4IC0gaXkgPj0gQ1VUT0ZGIDw8IDIzIHx8IGlzaW5mKHgpKQorCQlyZXR1cm4gKDEgLyB4KTsKKwlpZiAoaXkgLSBpeCA+PSBDVVRPRkYgPDwgMjMpCisJCXJldHVybiAoeCAvIHkgLyB5KTsKKwlpZiAoaXggPD0gKEJJQVMgKyBGTFRfTUFYX0VYUCAvIDIgLSBDVVRPRkYpIDw8IDIzKQorCQlyZXR1cm4gKHggLyAoeCAqIHggKyB5ICogeSkpOworCVNFVF9GTE9BVF9XT1JEKHNjYWxlLCAweDdmODAwMDAwIC0gaXgpOworCXggKj0gc2NhbGU7CisJeSAqPSBzY2FsZTsKKwlyZXR1cm4gKHggLyAoeCAqIHggKyB5ICogeSkgKiBzY2FsZSk7Cit9CisKK2Zsb2F0IGNvbXBsZXgKK2NhdGFuaGYoZmxvYXQgY29tcGxleCB6KQoreworCWZsb2F0IHgsIHksIGF4LCBheSwgcngsIHJ5OworCisJeCA9IGNyZWFsZih6KTsKKwl5ID0gY2ltYWdmKHopOworCWF4ID0gZmFic2YoeCk7CisJYXkgPSBmYWJzZih5KTsKKworCWlmICh5ID09IDAgJiYgYXggPD0gMSkKKwkJcmV0dXJuIChjcGFja2YoYXRhbmhmKHgpLCB5KSk7CisKKwlpZiAoeCA9PSAwKQorCQlyZXR1cm4gKGNwYWNrZih4LCBhdGFuZih5KSkpOworCisJaWYgKGlzbmFuKHgpIHx8IGlzbmFuKHkpKSB7CisJCWlmIChpc2luZih4KSkKKwkJCXJldHVybiAoY3BhY2tmKGNvcHlzaWduZigwLCB4KSwgeSArIHkpKTsKKwkJaWYgKGlzaW5mKHkpKQorCQkJcmV0dXJuIChjcGFja2YoY29weXNpZ25mKDAsIHgpLAorCQkJICAgIGNvcHlzaWduZihwaW8yX2hpICsgcGlvMl9sbywgeSkpKTsKKwkJcmV0dXJuIChjcGFja2YoeCArIDAuMEwgKyAoeSArIDApLCB4ICsgMC4wTCArICh5ICsgMCkpKTsKKwl9CisKKwlpZiAoYXggPiBSRUNJUF9FUFNJTE9OIHx8IGF5ID4gUkVDSVBfRVBTSUxPTikKKwkJcmV0dXJuIChjcGFja2YocmVhbF9wYXJ0X3JlY2lwcm9jYWwoeCwgeSksCisJCSAgICBjb3B5c2lnbmYocGlvMl9oaSArIHBpbzJfbG8sIHkpKSk7CisKKwlpZiAoYXggPCBTUVJUXzNfRVBTSUxPTiAvIDIgJiYgYXkgPCBTUVJUXzNfRVBTSUxPTiAvIDIpIHsKKwkJcmFpc2VfaW5leGFjdCgpOworCQlyZXR1cm4gKHopOworCX0KKworCWlmIChheCA9PSAxICYmIGF5IDwgRkxUX0VQU0lMT04pCisJCXJ4ID0gKG1fbG4yIC0gbG9nZihheSkpIC8gMjsKKwllbHNlCisJCXJ4ID0gbG9nMXBmKDQgKiBheCAvIHN1bV9zcXVhcmVzKGF4IC0gMSwgYXkpKSAvIDQ7CisKKwlpZiAoYXggPT0gMSkKKwkJcnkgPSBhdGFuMmYoMiwgLWF5KSAvIDI7CisJZWxzZSBpZiAoYXkgPCBGTFRfRVBTSUxPTikKKwkJcnkgPSBhdGFuMmYoMiAqIGF5LCAoMSAtIGF4KSAqICgxICsgYXgpKSAvIDI7CisJZWxzZQorCQlyeSA9IGF0YW4yZigyICogYXksICgxIC0gYXgpICogKDEgKyBheCkgLSBheSAqIGF5KSAvIDI7CisKKwlyZXR1cm4gKGNwYWNrZihjb3B5c2lnbmYocngsIHgpLCBjb3B5c2lnbmYocnksIHkpKSk7Cit9CisKK2Zsb2F0IGNvbXBsZXgKK2NhdGFuZihmbG9hdCBjb21wbGV4IHopCit7CisJZmxvYXQgY29tcGxleCB3ID0gY2F0YW5oZihjcGFja2YoY2ltYWdmKHopLCBjcmVhbGYoeikpKTsKKworCXJldHVybiAoY3BhY2tmKGNpbWFnZih3KSwgY3JlYWxmKHcpKSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvc2hsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvc2hsLmMKaW5kZXggNTlmYWViMC4uYjlmM2FlZCAxMDA2NDQKLS0tIGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Fjb3NobC5jCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zaGwuYwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAogICogaXMgcHJlc2VydmVkLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICoKQEAgLTc1LDcgKzc1LDcgQEAKIAl9IGVsc2UgaWYgKGh4ID49IEJJQVMgKyBFWFBfTEFSR0UpIHsgLyogeCA+PSBMQVJHRSAqLwogCSAgICBpZiAoaHggPj0gMHg3ZmZmKSB7CQkvKiB4IGlzIGluZiwgTmFOIG9yIG1pc25vcm1hbCAqLwogCSAgICAgICAgUkVUVVJOSSh4K3gpOwotCSAgICB9IGVsc2UKKwkgICAgfSBlbHNlIAogCQlSRVRVUk5JKGxvZ2woeCkrbG4yKTsJLyogYWNvc2goaHVnZSk9bG9nKDJ4KSwgb3IgbWlzbm9ybWFsICovCiAJfSBlbHNlIGlmIChoeCA9PSAweDNmZmYgJiYgeCA9PSAxKSB7CiAJICAgIFJFVFVSTkkoMC4wKTsJCS8qIGFjb3NoKDEpID0gMCAqLwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2F0YW5obC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2F0YW5obC5jCmluZGV4IGE4ODg0MjYuLjExZDU2ZWEgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hdGFuaGwuYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbmhsLmMKQEAgLTcsNyArNyw3IEBACiAgKgogICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKICAqIGlzIHByZXNlcnZlZC4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCkBAIC02OCw3ICs2OCw3IEBACiAJaWYgKGl4IDwgMHgzZmZlKSB7CQkvKiB8eHwgPCAwLjUsIG9yIG1pc25vcm1hbCAqLwogCSAgICB0ID0geCt4OwogCSAgICB0ID0gMC41KmxvZzFwbCh0K3QqeC8ob25lLXgpKTsKLQl9IGVsc2UKKwl9IGVsc2UgCiAJICAgIHQgPSAwLjUqbG9nMXBsKCh4K3gpLyhvbmUteCkpOwogCVJFVFVSTkkoKGh4ICYgMHg4MDAwKSA9PSAwID8gdCA6IC10KTsKIH0KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9jb3NoLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfY29zaC5jCmluZGV4IGEzNjM2OTUuLjI0NmI1ZmIgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9jb3NoLmMKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Nvc2guYwpAQCAtMzUsNiArMzUsOCBAQAogICoJb25seSBjb3NoKDApPTEgaXMgZXhhY3QgZm9yIGZpbml0ZSB4LgogICovCiAKKyNpbmNsdWRlIDxmbG9hdC5oPgorCiAjaW5jbHVkZSAibWF0aC5oIgogI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgogCkBAIC03NywzICs3OSw3IEBACiAgICAgLyogfHh8ID4gb3ZlcmZsb3d0aHJlc29sZCwgY29zaCh4KSBvdmVyZmxvdyAqLwogCXJldHVybiBodWdlKmh1Z2U7CiB9CisKKyNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKK19fd2Vha19yZWZlcmVuY2UoY29zaCwgY29zaGwpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfY29zaGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9jb3NobC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMjEyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfY29zaGwuYwpAQCAtMCwwICsxLDEzMCBAQAorLyogZnJvbTogRnJlZUJTRDogaGVhZC9saWIvbXN1bi9zcmMvZV9jb3NobC5jIFhYWCAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIFNlZSBlX2Nvc2guYyBmb3IgY29tcGxldGUgY29tbWVudHMuCisgKgorICogQ29udmVydGVkIHRvIGxvbmcgZG91YmxlIGJ5IEJydWNlIEQuIEV2YW5zLgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2lmZGVmIF9faTM4Nl9fCisjaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImZwbWF0aC5oIgorI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJrX2V4cGwuaCIKKworI2lmIExEQkxfTUFYX0VYUCAhPSAweDQwMDAKKy8qIFdlIGFsc28gcmVxdWlyZSB0aGUgdXN1YWwgZXhwc2lnbiBlbmNvZGluZy4gKi8KKyNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgorI2VuZGlmCisKKyNkZWZpbmUJQklBUwkoTERCTF9NQVhfRVhQIC0gMSkKKworc3RhdGljIGNvbnN0IHZvbGF0aWxlIGxvbmcgZG91YmxlIGh1Z2UgPSAweDFwMTAwMDBMLCB0aW55ID0gMHgxcC0xMDAwMEw7CisjaWYgTERCTF9NQU5UX0RJRyA9PSA2NAorLyoKKyAqIERvbWFpbiBbLTEsIDFdLCByYW5nZSB+Wy0xLjgyMTFlLTIxLCAxLjgyMTFlLTIxXToKKyAqIHxjb3NoKHgpIC0gYyh4KXwgPCAyKiotNjguOAorICovCitzdGF0aWMgY29uc3QgdW5pb24gSUVFRWwyYml0cworQzR1ID0gTEQ4MEMoMHhhYWFhYWFhYWFhYWFhYzc4LCAtNSwgIDQuMTY2NjY2NjY2NjY2NjY2ODIyOTdlLTJMKTsKKyNkZWZpbmUJQzQJQzR1LmUKK3N0YXRpYyBjb25zdCBkb3VibGUKK0MyICA9ICAwLjUsCitDNiAgPSAgMS4zODg4ODg4ODg4ODg4NjE2ZS0zLAkJLyogIDB4MTZjMTZjMTZjMTZiOTkuMHAtNjIgKi8KK0M4ICA9ICAyLjQ4MDE1ODczMDE3Njc5NTNlLTUsCQkvKiAgMHgxYTAxYTAxYTAyNzA2MS4wcC02OCAqLworQzEwID0gIDIuNzU1NzMxOTE2MzMwMDM5OGUtNywJCS8qICAweDEyN2U0ZmI2YzliNTVmLjBwLTc0ICovCitDMTIgPSAgMi4wODc2NzY4MzcxMzkzMDc1ZS05LAkJLyogIDB4MTFlZWQ5OTQwNmEzZjQuMHAtODEgKi8KK0MxNCA9ICAxLjE0Njk1MzcwMzkzNzQ0ODBlLTExLAkJLyogIDB4MTkzOGM2N2NkMThjNDguMHAtODkgKi8KK0MxNiA9ICA0Ljg0NzM0OTA4OTY4NTIwNDFlLTE0OwkJLyogIDB4MWI0OWM0Mjk3MDFlNDUuMHAtOTcgKi8KKyNlbGlmIExEQkxfTUFOVF9ESUcgPT0gMTEzCisvKgorICogRG9tYWluIFstMSwgMV0sIHJhbmdlIH5bLTIuMzE5NGUtMzcsIDIuMzE5NGUtMzddOgorICogfGNvc2goeCkgLSBjKHgpfCA8IDIqKi0xMjEuNjkKKyAqLworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCitDNCAgPSAgNC4xNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjIyNWUtMkwsCS8qICAweDE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTRlLjBwLTExN0wgKi8KK0M2ICA9ICAxLjM4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg5NDM0ODMxZS0zTCwJLyogIDB4MTZjMTZjMTZjMTZjMTZjMTZjMTZjMTZjMWRkN2EuMHAtMTIyTCAqLworQzggID0gIDIuNDgwMTU4NzMwMTU4NzMwMTU4NzMwMTU4NzE4NzA5NjIwODllLTVMLAkvKiAgMHgxYTAxYTAxYTAxYTAxYTAxYTAxYTAxN2FmMjc1Ni4wcC0xMjhMICovCitDMTAgPSAgMi43NTU3MzE5MjIzOTg1ODkwNjUyNTU3NDMxODYwMDgwMDIwMWUtN0wsCS8qICAweDEyN2U0ZmI3Nzg5ZjVjNzJlZjAxYzhhMDQwNjQwLjBwLTEzNEwgKi8KK0MxMiA9ICAyLjA4NzY3NTY5ODc4NjgwOTg5NzkxNDQ0NjkxNzU1NDY4MjY5ZS05TCwJLyogIDB4MTFlZWQ4ZWZmOGQ4OTdiNTQzZDA2Nzk2MDczOTkuMHAtMTQxTCAqLworQzE0PSAgMS4xNDcwNzQ1NTk3NzI5NzI0NzM4NzgwMTE4OTY1MDQ5NTM1MWUtMTFMLAkvKiAgMHgxOTM5NzRhOGMwN2M5ZDI0YWUxNjlhN2ZhOWI1NC4wcC0xNDlMICovCitDMTYgPSAgNC43Nzk0NzczMzIzODczNzg4MzYyNjQxNjg3NjQ4NjI3OTk4NWUtMTRMOwkvKiAgMHgxYWU3ZjNlNzMzYjgxNGQ0ZTFiOTBmNTcyN2ZlNC4wcC0xNTdMICovCitzdGF0aWMgY29uc3QgZG91YmxlCitDMiAgPSAgMC41LAorQzE4ID0gIDEuNTYxOTIwNjk2ODU5Nzg3MWUtMTYsCQkvKiAgMHgxNjgyNzg2M2I5OTAwYi4wcC0xMDUgKi8KK0MyMCA9ICA0LjExMDMxNzYyMTg1MjgwNDllLTE5LAkJLyogIDB4MWU1NDJiYTNkM2MyNjkuMHAtMTE0ICovCitDMjIgPSAgOC44OTY3OTI2NDAxNjQxNzAxZS0yMiwJCS8qICAweDEwY2UzOTk1NDJhMDE0LjBwLTEyMiAqLworQzI0ID0gIDEuNjExNjY4MTYyNjUyMzkwNGUtMjQsCQkvKiAgMHgxZjJjOTgxZDFmMGNiNy4wcC0xMzIgKi8KK0MyNiA9ICAyLjUwMjIzNzQ3MzI4MDQ2MzJlLTI3OwkJLyogIDB4MThjN2VjZjhiMmM0YTAuMHAtMTQxICovCisjZWxzZQorI2Vycm9yICJVbnN1cHBvcnRlZCBsb25nIGRvdWJsZSBmb3JtYXQiCisjZW5kaWYgLyogTERCTF9NQU5UX0RJRyA9PSA2NCAqLworCisvKiBsb2coMioqMTYzODUgLSAwLjUpIHJvdW5kZWQgdXA6ICovCitzdGF0aWMgY29uc3QgZmxvYXQKK29fdGhyZXNob2xkID0gIDEuMTM1NzIxNjhlNDsJCS8qICAweGIxNzRkZS4wcC0xMCAqLworCitsb25nIGRvdWJsZQorY29zaGwobG9uZyBkb3VibGUgeCkKK3sKKwlsb25nIGRvdWJsZSBoaSxsbyx4Mix4NDsKKwlkb3VibGUgZHgyOworCXVpbnQxNl90IGl4OworCisJR0VUX0xEQkxfRVhQU0lHTihpeCx4KTsKKwlpeCAmPSAweDdmZmY7CisKKyAgICAvKiB4IGlzIElORiBvciBOYU4gKi8KKwlpZihpeD49MHg3ZmZmKSByZXR1cm4geCp4OworCisJRU5URVJJKCk7CisKKyAgICAvKiB8eHwgPCAxLCByZXR1cm4gMSBvciBjKHgpICovCisJaWYoaXg8MHgzZmZmKSB7CisJICAgIGlmIChpeDxCSUFTLShMREJMX01BTlRfRElHKzEpLzIpIAkvKiB8eHwgPCBUSU5ZICovCisJCVJFVFVSTkkoMSt0aW55KTsJLyogY29zaCh0aW55KSA9IDEoKykgd2l0aCBpbmV4YWN0ICovCisJICAgIHgyID0geCp4OworI2lmIExEQkxfTUFOVF9ESUcgPT0gNjQKKwkgICAgeDQgPSB4Mip4MjsKKwkgICAgUkVUVVJOSSgoKEMxNip4MiArIEMxNCkqeDQgKyAoQzEyKngyICsgQzEwKSkqKHg0Kng0KngyKSArCisJCSgoQzgqeDIgKyBDNikqeDIgKyBDNCkqeDQgKyBDMip4MiArIDEpOworI2VsaWYgTERCTF9NQU5UX0RJRyA9PSAxMTMKKwkgICAgZHgyID0geDI7CisJICAgIFJFVFVSTkkoKCgoKCgoKCgoKChDMjYqZHgyICsgQzI0KSpkeDIgKyBDMjIpKmR4MiArCisJCUMyMCkqeDIgKyBDMTgpKngyICsKKwkJQzE2KSp4MiArIEMxNCkqeDIgKyBDMTIpKngyICsgQzEwKSp4MiArIEM4KSp4MiArIEM2KSp4MiArCisJCUM0KSooeDIqeDIpICsgQzIqeDIgKyAxKTsKKyNlbmRpZgorCX0KKworICAgIC8qIHx4fCBpbiBbMSwgNjQpLCByZXR1cm4gYWNjdXJhdGUgZXhwKHx4fCkvMisxL2V4cCh8eHwpLzIgKi8KKwlpZiAoaXggPCAweDQwMDUpIHsKKwkgICAga19oZXhwbChmYWJzbCh4KSwgJmhpLCAmbG8pOworCSAgICBSRVRVUk5JKGxvICsgMC4yNS8oaGkgKyBsbykgKyBoaSk7CisJfQorCisgICAgLyogfHh8IGluIFs2NCwgb190aHJlc2hvbGRdLCByZXR1cm4gY29ycmVjdGx5LW92ZXJmbG93aW5nIGV4cCh8eHwpLzIgKi8KKwlpZiAoZmFic2woeCkgPD0gb190aHJlc2hvbGQpCisJICAgIFJFVFVSTkkoaGV4cGwoZmFic2woeCkpKTsKKworICAgIC8qIHx4fCA+IG9fdGhyZXNob2xkLCBjb3NoKHgpIG92ZXJmbG93ICovCisJUkVUVVJOSShodWdlKmh1Z2UpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xnYW1tYS5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xnYW1tYS5jCmluZGV4IDQ2NzRkOWIuLjQzZjUxNzUgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sZ2FtbWEuYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbGdhbW1hLmMKQEAgLTIxLDYgKzIxLDggQEAKICAqIE1ldGhvZDogY2FsbCBfX2llZWU3NTRfbGdhbW1hX3IKICAqLwogCisjaW5jbHVkZSA8ZmxvYXQuaD4KKwogI2luY2x1ZGUgIm1hdGguaCIKICNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKIApAQCAtMzEsMyArMzMsNyBAQAogewogCXJldHVybiBfX2llZWU3NTRfbGdhbW1hX3IoeCwmc2lnbmdhbSk7CiB9CisKKyNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKK19fd2Vha19yZWZlcmVuY2UobGdhbW1hLCBsZ2FtbWFsKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xnYW1tYV9yLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbGdhbW1hX3IuYwppbmRleCAxY2ZmNTkyLi5iZTcwNzY3IDEwMDY0NAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbGdhbW1hX3IuYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbGdhbW1hX3IuYwpAQCAtMSw0ICsxLDMgQEAKLQogLyogQCgjKWVfbGdhbW1hX3IuYyAxLjMgOTUvMDEvMTggKi8KIC8qCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC02LDIyICs1LDIxIEBACiAgKgogICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKICAqIGlzIHByZXNlcnZlZC4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCiAgKi8KIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogX19GQlNESUQoIiRGcmVlQlNEJCIpOwogCiAvKiBfX2llZWU3NTRfbGdhbW1hX3IoeCwgc2lnbmdhbXApCi0gKiBSZWVudHJhbnQgdmVyc2lvbiBvZiB0aGUgbG9nYXJpdGhtIG9mIHRoZSBHYW1tYSBmdW5jdGlvbiAKLSAqIHdpdGggdXNlciBwcm92aWRlIHBvaW50ZXIgZm9yIHRoZSBzaWduIG9mIEdhbW1hKHgpLiAKKyAqIFJlZW50cmFudCB2ZXJzaW9uIG9mIHRoZSBsb2dhcml0aG0gb2YgdGhlIEdhbW1hIGZ1bmN0aW9uCisgKiB3aXRoIHVzZXIgcHJvdmlkZSBwb2ludGVyIGZvciB0aGUgc2lnbiBvZiBHYW1tYSh4KS4KICAqCiAgKiBNZXRob2Q6CiAgKiAgIDEuIEFyZ3VtZW50IFJlZHVjdGlvbiBmb3IgMCA8IHggPD0gOAotICogCVNpbmNlIGdhbW1hKDErcyk9cypnYW1tYShzKSwgZm9yIHggaW4gWzAsOF0sIHdlIG1heSAKKyAqIAlTaW5jZSBnYW1tYSgxK3MpPXMqZ2FtbWEocyksIGZvciB4IGluIFswLDhdLCB3ZSBtYXkKICAqIAlyZWR1Y2UgeCB0byBhIG51bWJlciBpbiBbMS41LDIuNV0gYnkKICAqIAkJbGdhbW1hKDErcykgPSBsb2cocykgKyBsZ2FtbWEocykKICAqCWZvciBleGFtcGxlLApAQCAtNTksMjAgKzU3LDIwIEBACiAgKglieQogICoJICAJCQkgICAgMyAgICAgICA1ICAgICAgICAgICAgIDExCiAgKgkJdyA9IHcwICsgdzEqeiArIHcyKnogICsgdzMqeiAgKyAuLi4gKyB3Nip6Ci0gKgl3aGVyZSAKKyAqCXdoZXJlCiAgKgkJfHcgLSBmKHopfCA8IDIqKi01OC43NAotICoJCQorICoKICAqICAgNC4gRm9yIG5lZ2F0aXZlIHgsIHNpbmNlIChHIGlzIGdhbW1hIGZ1bmN0aW9uKQogICoJCS14KkcoLXgpKkcoeCkgPSBwaS9zaW4ocGkqeCksCiAgKiAJd2UgaGF2ZQogICogCQlHKHgpID0gcGkvKHNpbihwaSp4KSooLXgpKkcoLXgpKQogICoJc2luY2UgRygteCkgaXMgcG9zaXRpdmUsIHNpZ24oRyh4KSkgPSBzaWduKHNpbihwaSp4KSkgZm9yIHg8MAotICoJSGVuY2UsIGZvciB4PDAsIHNpZ25nYW0gPSBzaWduKHNpbihwaSp4KSkgYW5kIAorICoJSGVuY2UsIGZvciB4PDAsIHNpZ25nYW0gPSBzaWduKHNpbihwaSp4KSkgYW5kCiAgKgkJbGdhbW1hKHgpID0gbG9nKHxHYW1tYSh4KXwpCiAgKgkJCSAgPSBsb2cocGkvKHx4KnNpbihwaSp4KXwpKSAtIGxnYW1tYSgteCk7Ci0gKglOb3RlOiBvbmUgc2hvdWxkIGF2b2lkIGNvbXB1dGUgcGkqKC14KSBkaXJlY3RseSBpbiB0aGUgCisgKglOb3RlOiBvbmUgc2hvdWxkIGF2b2lkIGNvbXB1dGUgcGkqKC14KSBkaXJlY3RseSBpbiB0aGUKICAqCSAgICAgIGNvbXB1dGF0aW9uIG9mIHNpbihwaSooLXgpKS4KLSAqCQkKKyAqCiAgKiAgIDUuIFNwZWNpYWwgQ2FzZXMKICAqCQlsZ2FtbWEoMitzKSB+IHMqKDEtRXVsZXIpIGZvciB0aW55IHMKICAqCQlsZ2FtbWEoMSkgPSBsZ2FtbWEoMikgPSAwCkBAIC04MCwxNCArNzgsMTcgQEAKICAqCQlsZ2FtbWEoMCkgPSBsZ2FtbWEobmVnLmludGVnZXIpID0gaW5mIGFuZCByYWlzZSBkaXZpZGUtYnktemVybwogICoJCWxnYW1tYShpbmYpID0gaW5mCiAgKgkJbGdhbW1hKC1pbmYpID0gaW5mIChidWcgZm9yIGJ1ZyBjb21wYXRpYmxlIHdpdGggQzk5IT8pCi0gKgkKICAqLwogCisjaW5jbHVkZSA8ZmxvYXQuaD4KKwogI2luY2x1ZGUgIm1hdGguaCIKICNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKIAorc3RhdGljIGNvbnN0IHZvbGF0aWxlIGRvdWJsZSB2emVybyA9IDA7CisKIHN0YXRpYyBjb25zdCBkb3VibGUKLXR3bzUyPSAgNC41MDM1OTk2MjczNzA0OTYwMDAwMGUrMTUsIC8qIDB4NDMzMDAwMDAsIDB4MDAwMDAwMDAgKi8KK3plcm89ICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMCwKIGhhbGY9ICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwZS0wMSwgLyogMHgzRkUwMDAwMCwgMHgwMDAwMDAwMCAqLwogb25lID0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwLCAvKiAweDNGRjAwMDAwLCAweDAwMDAwMDAwICovCiBwaSAgPSAgMy4xNDE1OTI2NTM1ODk3OTMxMTYwMGUrMDAsIC8qIDB4NDAwOTIxRkIsIDB4NTQ0NDJEMTggKi8KQEAgLTE1NCw0NCArMTU1LDQwIEBACiB3NSAgPSAgOC4zNjMzOTkxODk5NjI4MjEzOTEyNmUtMDQsIC8qIDB4M0Y0QjY3QkEsIDB4NENEQUQ1RDEgKi8KIHc2ICA9IC0xLjYzMDkyOTM0MDk2NTc1MjczOTg5ZS0wMzsgLyogMHhCRjVBQjg5RCwgMHgwQjlFNDNFNCAqLwogCi1zdGF0aWMgY29uc3QgZG91YmxlIHplcm89ICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMDsKLQotCXN0YXRpYyBkb3VibGUgc2luX3BpKGRvdWJsZSB4KQorLyoKKyAqIENvbXB1dGUgc2luKHBpKngpIHdpdGhvdXQgYWN0dWFsbHkgZG9pbmcgdGhlIHBpKnggbXVsdGlwbGljYXRpb24uCisgKiBzaW5fcGkoeCkgaXMgb25seSBjYWxsZWQgZm9yIHggPCAwIGFuZCB8eHwgPCAyKioocC0xKSB3aGVyZSBwIGlzCisgKiB0aGUgcHJlY2lzaW9uIG9mIHguCisgKi8KK3N0YXRpYyBkb3VibGUKK3Npbl9waShkb3VibGUgeCkKIHsKKwl2b2xhdGlsZSBkb3VibGUgdno7CiAJZG91YmxlIHksejsKLQlpbnQgbixpeDsKKwlpbnQgbjsKIAotCUdFVF9ISUdIX1dPUkQoaXgseCk7Ci0JaXggJj0gMHg3ZmZmZmZmZjsKKwl5ID0gLXg7CiAKLQlpZihpeDwweDNmZDAwMDAwKSByZXR1cm4gX19rZXJuZWxfc2luKHBpKngsemVybywwKTsKLQl5ID0gLXg7CQkvKiB4IGlzIGFzc3VtZSBuZWdhdGl2ZSAqLworCXZ6ID0geSsweDFwNTI7CQkJLyogZGVwZW5kIG9uIDAgPD0geSA8IDB4MXA1MiAqLworCXogPSB2ei0weDFwNTI7CQkJLyogcmludCh5KSBmb3IgdGhlIGFib3ZlIHJhbmdlICovCisJaWYgKHogPT0geSkKKwkgICAgcmV0dXJuIHplcm87CiAKLSAgICAvKgotICAgICAqIGFyZ3VtZW50IHJlZHVjdGlvbiwgbWFrZSBzdXJlIGluZXhhY3QgZmxhZyBub3QgcmFpc2VkIGlmIGlucHV0Ci0gICAgICogaXMgYW4gaW50ZWdlcgotICAgICAqLwotCXogPSBmbG9vcih5KTsKLQlpZih6IT15KSB7CQkJCS8qIGluZXhhY3QgYW55d2F5ICovCi0JICAgIHkgICo9IDAuNTsKLQkgICAgeSAgID0gMi4wKih5IC0gZmxvb3IoeSkpOwkJLyogeSA9IHx4fCBtb2QgMi4wICovCi0JICAgIG4gICA9IChpbnQpICh5KjQuMCk7Ci0JfSBlbHNlIHsKLSAgICAgICAgICAgIGlmKGl4Pj0weDQzNDAwMDAwKSB7Ci0gICAgICAgICAgICAgICAgeSA9IHplcm87IG4gPSAwOyAgICAgICAgICAgICAgICAgLyogeSBtdXN0IGJlIGV2ZW4gKi8KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYoaXg8MHg0MzMwMDAwMCkgeiA9IHkrdHdvNTI7CS8qIGV4YWN0ICovCi0JCUdFVF9MT1dfV09SRChuLHopOwotCQluICY9IDE7Ci0gICAgICAgICAgICAgICAgeSAgPSBuOwotICAgICAgICAgICAgICAgIG48PD0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCXZ6ID0geSsweDFwNTA7CisJR0VUX0xPV19XT1JEKG4sdnopOwkJLyogYml0cyBmb3Igcm91bmRlZCB5ICh1bml0cyAwLjI1KSAqLworCXogPSB2ei0weDFwNTA7CQkJLyogeSByb3VuZGVkIHRvIGEgbXVsdGlwbGUgb2YgMC4yNSAqLworCWlmICh6ID4geSkgeworCSAgICB6IC09IDAuMjU7CQkJLyogYWRqdXN0IHRvIHJvdW5kIGRvd24gKi8KKwkgICAgbi0tOworCX0KKwluICY9IDc7CQkJCS8qIG9jdGFudCBvZiB5IG1vZCAyICovCisJeSA9IHkgLSB6ICsgbiAqIDAuMjU7CQkvKiB5IG1vZCAyICovCisKIAlzd2l0Y2ggKG4pIHsKIAkgICAgY2FzZSAwOiAgIHkgPSAgX19rZXJuZWxfc2luKHBpKnksemVybywwKTsgYnJlYWs7Ci0JICAgIGNhc2UgMTogICAKKwkgICAgY2FzZSAxOgogCSAgICBjYXNlIDI6ICAgeSA9ICBfX2tlcm5lbF9jb3MocGkqKDAuNS15KSx6ZXJvKTsgYnJlYWs7Ci0JICAgIGNhc2UgMzogIAorCSAgICBjYXNlIDM6CiAJICAgIGNhc2UgNDogICB5ID0gIF9fa2VybmVsX3NpbihwaSoob25lLXkpLHplcm8sMCk7IGJyZWFrOwogCSAgICBjYXNlIDU6CiAJICAgIGNhc2UgNjogICB5ID0gLV9fa2VybmVsX2NvcyhwaSooeS0xLjUpLHplcm8pOyBicmVhazsKQEAgLTIwNCwzNCArMjAxLDM4IEBACiBkb3VibGUKIF9faWVlZTc1NF9sZ2FtbWFfcihkb3VibGUgeCwgaW50ICpzaWduZ2FtcCkKIHsKLQlkb3VibGUgdCx5LHosbmFkaixwLHAxLHAyLHAzLHEscix3OworCWRvdWJsZSBuYWRqLHAscDEscDIscDMscSxyLHQsdyx5LHo7CiAJaW50MzJfdCBoeDsKLQlpbnQgaSxseCxpeDsKKwlpbnQgaSxpeCxseDsKIAogCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7CiAKLSAgICAvKiBwdXJnZSBvZmYgKy1pbmYsIE5hTiwgKy0wLCB0aW55IGFuZCBuZWdhdGl2ZSBhcmd1bWVudHMgKi8KKyAgICAvKiBwdXJnZSArLUluZiBhbmQgTmFOcyAqLwogCSpzaWduZ2FtcCA9IDE7CiAJaXggPSBoeCYweDdmZmZmZmZmOwogCWlmKGl4Pj0weDdmZjAwMDAwKSByZXR1cm4geCp4OwotCWlmKChpeHxseCk9PTApIHJldHVybiBvbmUvemVybzsKLQlpZihpeDwweDNiOTAwMDAwKSB7CS8qIHx4fDwyKiotNzAsIHJldHVybiAtbG9nKHx4fCkgKi8KLQkgICAgaWYoaHg8MCkgewotCSAgICAgICAgKnNpZ25nYW1wID0gLTE7Ci0JICAgICAgICByZXR1cm4gLV9faWVlZTc1NF9sb2coLXgpOwotCSAgICB9IGVsc2UgcmV0dXJuIC1fX2llZWU3NTRfbG9nKHgpOworCisgICAgLyogcHVyZ2UgKy0wIGFuZCB0aW55IGFyZ3VtZW50cyAqLworCSpzaWduZ2FtcCA9IDEtMiooKHVpbnQzMl90KWh4Pj4zMSk7CisJaWYoaXg8MHgzYzcwMDAwMCkgewkvKiB8eHw8MioqLTU2LCByZXR1cm4gLWxvZyh8eHwpICovCisJICAgIGlmKChpeHxseCk9PTApCisJICAgICAgICByZXR1cm4gb25lL3Z6ZXJvOworCSAgICByZXR1cm4gLV9faWVlZTc1NF9sb2coZmFicyh4KSk7CiAJfQorCisgICAgLyogcHVyZ2UgbmVnYXRpdmUgaW50ZWdlcnMgYW5kIHN0YXJ0IGV2YWx1YXRpb24gZm9yIG90aGVyIHggPCAwICovCiAJaWYoaHg8MCkgeworCSAgICAqc2lnbmdhbXAgPSAxOwogCSAgICBpZihpeD49MHg0MzMwMDAwMCkgCS8qIHx4fD49MioqNTIsIG11c3QgYmUgLWludGVnZXIgKi8KLQkJcmV0dXJuIG9uZS96ZXJvOworCQlyZXR1cm4gb25lL3Z6ZXJvOwogCSAgICB0ID0gc2luX3BpKHgpOwotCSAgICBpZih0PT16ZXJvKSByZXR1cm4gb25lL3plcm87IC8qIC1pbnRlZ2VyICovCisJICAgIGlmKHQ9PXplcm8pIHJldHVybiBvbmUvdnplcm87IC8qIC1pbnRlZ2VyICovCiAJICAgIG5hZGogPSBfX2llZWU3NTRfbG9nKHBpL2ZhYnModCp4KSk7CiAJICAgIGlmKHQ8emVybykgKnNpZ25nYW1wID0gLTE7CiAJICAgIHggPSAteDsKIAl9CiAKLSAgICAvKiBwdXJnZSBvZmYgMSBhbmQgMiAqLworICAgIC8qIHB1cmdlIDEgYW5kIDIgKi8KIAlpZigoKChpeC0weDNmZjAwMDAwKXxseCk9PTApfHwoKChpeC0weDQwMDAwMDAwKXxseCk9PTApKSByID0gMDsKICAgICAvKiBmb3IgeCA8IDIuMCAqLwogCWVsc2UgaWYoaXg8MHg0MDAwMDAwMCkgewpAQCAtMjUyLDcgKzI1Myw3IEBACiAJCXAxID0gYTAreiooYTIreiooYTQreiooYTYreiooYTgreiphMTApKSkpOwogCQlwMiA9IHoqKGExK3oqKGEzK3oqKGE1K3oqKGE3K3oqKGE5K3oqYTExKSkpKSk7CiAJCXAgID0geSpwMStwMjsKLQkJciAgKz0gKHAtMC41KnkpOyBicmVhazsKKwkJciAgKz0gcC15LzI7IGJyZWFrOwogCSAgICAgIGNhc2UgMToKIAkJeiA9IHkqeTsKIAkJdyA9IHoqeTsKQEAgLTI2MCwzOCArMjYxLDQzIEBACiAJCXAyID0gdDErdyoodDQrdyoodDcrdyoodDEwK3cqdDEzKSkpOwogCQlwMyA9IHQyK3cqKHQ1K3cqKHQ4K3cqKHQxMSt3KnQxNCkpKTsKIAkJcCAgPSB6KnAxLSh0dC13KihwMit5KnAzKSk7Ci0JCXIgKz0gKHRmICsgcCk7IGJyZWFrOwotCSAgICAgIGNhc2UgMjoJCisJCXIgKz0gdGYgKyBwOyBicmVhazsKKwkgICAgICBjYXNlIDI6CiAJCXAxID0geSoodTAreSoodTEreSoodTIreSoodTMreSoodTQreSp1NSkpKSkpOwogCQlwMiA9IG9uZSt5Kih2MSt5Kih2Mit5Kih2Myt5Kih2NCt5KnY1KSkpKTsKLQkJciArPSAoLTAuNSp5ICsgcDEvcDIpOworCQlyICs9IHAxL3AyLXkvMjsKIAkgICAgfQogCX0KLQllbHNlIGlmKGl4PDB4NDAyMDAwMDApIHsgCQkJLyogeCA8IDguMCAqLwotCSAgICBpID0gKGludCl4OwotCSAgICB5ID0geC0oZG91YmxlKWk7CisgICAgLyogeCA8IDguMCAqLworCWVsc2UgaWYoaXg8MHg0MDIwMDAwMCkgeworCSAgICBpID0geDsKKwkgICAgeSA9IHgtaTsKIAkgICAgcCA9IHkqKHMwK3kqKHMxK3kqKHMyK3kqKHMzK3kqKHM0K3kqKHM1K3kqczYpKSkpKSk7CiAJICAgIHEgPSBvbmUreSoocjEreSoocjIreSoocjMreSoocjQreSoocjUreSpyNikpKSkpOwotCSAgICByID0gaGFsZip5K3AvcTsKKwkgICAgciA9IHkvMitwL3E7CiAJICAgIHogPSBvbmU7CS8qIGxnYW1tYSgxK3MpID0gbG9nKHMpICsgbGdhbW1hKHMpICovCiAJICAgIHN3aXRjaChpKSB7Ci0JICAgIGNhc2UgNzogeiAqPSAoeSs2LjApOwkvKiBGQUxMVEhSVSAqLwotCSAgICBjYXNlIDY6IHogKj0gKHkrNS4wKTsJLyogRkFMTFRIUlUgKi8KLQkgICAgY2FzZSA1OiB6ICo9ICh5KzQuMCk7CS8qIEZBTExUSFJVICovCi0JICAgIGNhc2UgNDogeiAqPSAoeSszLjApOwkvKiBGQUxMVEhSVSAqLwotCSAgICBjYXNlIDM6IHogKj0gKHkrMi4wKTsJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSA3OiB6ICo9ICh5KzYpOwkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSA2OiB6ICo9ICh5KzUpOwkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSA1OiB6ICo9ICh5KzQpOwkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSA0OiB6ICo9ICh5KzMpOwkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSAzOiB6ICo9ICh5KzIpOwkJLyogRkFMTFRIUlUgKi8KIAkJICAgIHIgKz0gX19pZWVlNzU0X2xvZyh6KTsgYnJlYWs7CiAJICAgIH0KLSAgICAvKiA4LjAgPD0geCA8IDIqKjU4ICovCi0JfSBlbHNlIGlmIChpeCA8IDB4NDM5MDAwMDApIHsKKyAgICAvKiA4LjAgPD0geCA8IDIqKjU2ICovCisJfSBlbHNlIGlmIChpeCA8IDB4NDM3MDAwMDApIHsKIAkgICAgdCA9IF9faWVlZTc1NF9sb2coeCk7CiAJICAgIHogPSBvbmUveDsKIAkgICAgeSA9IHoqejsKIAkgICAgdyA9IHcwK3oqKHcxK3kqKHcyK3kqKHczK3kqKHc0K3kqKHc1K3kqdzYpKSkpKTsKIAkgICAgciA9ICh4LWhhbGYpKih0LW9uZSkrdzsKLQl9IGVsc2UgCi0gICAgLyogMioqNTggPD0geCA8PSBpbmYgKi8KKwl9IGVsc2UKKyAgICAvKiAyKio1NiA8PSB4IDw9IGluZiAqLwogCSAgICByID0gIHgqKF9faWVlZTc1NF9sb2coeCktb25lKTsKIAlpZihoeDwwKSByID0gbmFkaiAtIHI7CiAJcmV0dXJuIHI7CiB9CisKKyNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKK19fd2Vha19yZWZlcmVuY2UobGdhbW1hX3IsIGxnYW1tYWxfcik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sZ2FtbWFmX3IuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sZ2FtbWFmX3IuYwppbmRleCBlMmQ5MGVmLi45MDg0ZTE4IDEwMDY0NAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbGdhbW1hZl9yLmMKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xnYW1tYWZfci5jCkBAIC0xLDUgKzEsNiBAQAogLyogZV9sZ2FtbWFmX3IuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfbGdhbW1hX3IuYy4KICAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICogQ29udmVyc2lvbiB0byBmbG9hdCBmaXhlZCBCeSBTdGV2ZW4gRy4gS2FyZ2wuCiAgKi8KIAogLyoKQEAgLTE5LDEwNyArMjAsOTEgQEAKICNpbmNsdWRlICJtYXRoLmgiCiAjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCiAKK3N0YXRpYyBjb25zdCB2b2xhdGlsZSBmbG9hdCB2emVybyA9IDA7CisKIHN0YXRpYyBjb25zdCBmbG9hdAotdHdvMjM9ICA4LjM4ODYwODAwMDBlKzA2LCAvKiAweDRiMDAwMDAwICovCi1oYWxmPSAgNS4wMDAwMDAwMDAwZS0wMSwgLyogMHgzZjAwMDAwMCAqLwotb25lID0gIDEuMDAwMDAwMDAwMGUrMDAsIC8qIDB4M2Y4MDAwMDAgKi8KK3plcm89ICAwLAoraGFsZj0gIDAuNSwKK29uZSA9ICAxLAogcGkgID0gIDMuMTQxNTkyNzQxMGUrMDAsIC8qIDB4NDA0OTBmZGIgKi8KLWEwICA9ICA3LjcyMTU2NjQwODllLTAyLCAvKiAweDNkOWUyMzNmICovCi1hMSAgPSAgMy4yMjQ2NzAyOTA5ZS0wMSwgLyogMHgzZWE1MWE2NiAqLwotYTIgID0gIDYuNzM1MjMwMjM3MmUtMDIsIC8qIDB4M2Q4OWYwMDEgKi8KLWEzICA9ICAyLjA1ODA4MDc3MDFlLTAyLCAvKiAweDNjYTg5OTE1ICovCi1hNCAgPSAgNy4zODU1NTA5OTgyZS0wMywgLyogMHgzYmYyMDI3ZSAqLwotYTUgID0gIDIuODkwNTEzNzQ0MmUtMDMsIC8qIDB4M2IzZDZlYzYgKi8KLWE2ICA9ICAxLjE5MjcwNzY4NDhlLTAzLCAvKiAweDNhOWM1NGExICovCi1hNyAgPSAgNS4xMDA2OTc3NDQ2ZS0wNCwgLyogMHgzYTA1YjYzNCAqLwotYTggID0gIDIuMjA4NjI3ODQ3N2UtMDQsIC8qIDB4Mzk2Nzk3NjcgKi8KLWE5ICA9ICAxLjA4MDExNTY4OTVlLTA0LCAvKiAweDM4ZTI4NDQ1ICovCi1hMTAgPSAgMi41MjE0NDU2NDAwZS0wNSwgLyogMHgzN2QzODNhMiAqLwotYTExID0gIDQuNDg2NDA5NjcwOGUtMDUsIC8qIDB4MzgzYzJjNzUgKi8KLXRjICA9ICAxLjQ2MTYzMjEzMjVlKzAwLCAvKiAweDNmYmIxNmMzICovCi10ZiAgPSAtMS4yMTQ4NjI4Mzg0ZS0wMSwgLyogMHhiZGY4Y2RjZCAqLwotLyogdHQgPSAtKHRhaWwgb2YgdGYpICovCi10dCAgPSAgNi42OTcxMDA2NTE4ZS0wOSwgLyogMHgzMWU2MWM1MiAqLwotdDAgID0gIDQuODM4MzYxMTQ0MWUtMDEsIC8qIDB4M2VmN2I5NWUgKi8KLXQxICA9IC0xLjQ3NTg3NzE2NThlLTAxLCAvKiAweGJlMTcyMTNjICovCi10MiAgPSAgNi40NjI0OTQyODM5ZS0wMiwgLyogMHgzZDg0NWExNSAqLwotdDMgID0gLTMuMjc4ODU0MTE2OGUtMDIsIC8qIDB4YmQwNjRkNDcgKi8KLXQ0ICA9ICAxLjc5NzA2NzU2MDNlLTAyLCAvKiAweDNjOTMzNzNkICovCi10NSAgPSAtMS4wMzE0MjI0Mjg4ZS0wMiwgLyogMHhiYzI4ZmNmZSAqLwotdDYgID0gIDYuMTAwNTM4NjUyNGUtMDMsIC8qIDB4M2JjN2U3MDcgKi8KLXQ3ICA9IC0zLjY4NDUyMDI1NThlLTAzLCAvKiAweGJiNzE3N2ZlICovCi10OCAgPSAgMi4yNTk2NDc3MDY1ZS0wMywgLyogMHgzYjE0MTY5OSAqLwotdDkgID0gLTEuNDAzNDY0NzAyOWUtMDMsIC8qIDB4YmFiN2Y0NzYgKi8KLXQxMCA9ICA4LjgxMDgxODU0NDZlLTA0LCAvKiAweDNhNjZmODY3ICovCi10MTEgPSAtNS4zODU5NTMxMTgxZS0wNCwgLyogMHhiYTBkMzA4NSAqLwotdDEyID0gIDMuMTU2MzIwNTk5NGUtMDQsIC8qIDB4MzlhNTdiNmIgKi8KLXQxMyA9IC0zLjEyNzU0MTU2NzdlLTA0LCAvKiAweGI5YTNmOTI3ICovCi10MTQgPSAgMy4zNTUyOTE4NDY3ZS0wNCwgLyogMHgzOWFmZTlmNyAqLwotdTAgID0gLTcuNzIxNTY2NDA4OWUtMDIsIC8qIDB4YmQ5ZTIzM2YgKi8KLXUxICA9ICA2LjMyODI3MDQzNTNlLTAxLCAvKiAweDNmMjIwMGY0ICovCi11MiAgPSAgMS40NTQ5MjI1NTY5ZSswMCwgLyogMHgzZmJhM2FlNyAqLwotdTMgID0gIDkuNzc3MTc1MTg4MWUtMDEsIC8qIDB4M2Y3YTRiYjIgKi8KLXU0ICA9ICAyLjI4OTYzNzMyNzJlLTAxLCAvKiAweDNlNmE3NTc4ICovCi11NSAgPSAgMS4zMzgxMDkxODc4ZS0wMiwgLyogMHgzYzViM2M1ZSAqLwotdjEgID0gIDIuNDU1OTc3OTE2N2UrMDAsIC8qIDB4NDAxZDJlYmUgKi8KLXYyICA9ICAyLjEyODQ4OTczMjdlKzAwLCAvKiAweDQwMDgzOTJkICovCi12MyAgPSAgNy42OTI4NTE0MjQyZS0wMSwgLyogMHgzZjQ0ZWZkZiAqLwotdjQgID0gIDEuMDQyMjI2NDc4NWUtMDEsIC8qIDB4M2RkNTcyYWYgKi8KLXY1ICA9ICAzLjIxNzA5MjQ4MjRlLTAzLCAvKiAweDNiNTJkNWRiICovCi1zMCAgPSAtNy43MjE1NjY0MDg5ZS0wMiwgLyogMHhiZDllMjMzZiAqLwotczEgID0gIDIuMTQ5ODI0MjAyMWUtMDEsIC8qIDB4M2U1YzI0NWEgKi8KLXMyICA9ICAzLjI1Nzc4NzgyMzdlLTAxLCAvKiAweDNlYTZjYzdhICovCi1zMyAgPSAgMS40NjM1MDQ3MzE3ZS0wMSwgLyogMHgzZTE1ZGNlNiAqLwotczQgID0gIDIuNjY0MjI3MDM4NmUtMDIsIC8qIDB4M2NkYTQwZTQgKi8KLXM1ICA9ICAxLjg0MDI4NDU1OTllLTAzLCAvKiAweDNhZjEzNWI0ICovCi1zNiAgPSAgMy4xOTQ3NTMyOTg5ZS0wNSwgLyogMHgzODA1ZmY2NyAqLwotcjEgID0gIDEuMzkyMDA1MzI0NGUrMDAsIC8qIDB4M2ZiMjJkM2IgKi8KLXIyICA9ICA3LjIxOTM1NTcwMjRlLTAxLCAvKiAweDNmMzhkMGM1ICovCi1yMyAgPSAgMS43MTkzMzg1OTU5ZS0wMSwgLyogMHgzZTMwMGY2ZSAqLwotcjQgID0gIDEuODY0NTkxOTg1OWUtMDIsIC8qIDB4M2M5OGJmNTQgKi8KLXI1ICA9ICA3Ljc3OTQyNDc3NzNlLTA0LCAvKiAweDNhNGJlZWQ2ICovCi1yNiAgPSAgNy4zMjY2ODQyMjY0ZS0wNiwgLyogMHgzNmY1ZDdiZCAqLwotdzAgID0gIDQuMTg5Mzg1NDczN2UtMDEsIC8qIDB4M2VkNjdmMWQgKi8KLXcxICA9ICA4LjMzMzMzMzU4MTdlLTAyLCAvKiAweDNkYWFhYWFiICovCi13MiAgPSAtMi43Nzc3Nzc4NDUwZS0wMywgLyogMHhiYjM2MGI2MSAqLwotdzMgID0gIDcuOTM2NTA1NzE3MmUtMDQsIC8qIDB4M2E1MDBjZmQgKi8KLXc0ICA9IC01Ljk1MTg3NTM1NTFlLTA0LCAvKiAweGJhMWMwNjVjICovCi13NSAgPSAgOC4zNjMzOTg5NTYxZS0wNCwgLyogMHgzYTViM2RkMiAqLwotdzYgID0gLTEuNjMwOTI5Mjk4N2UtMDM7IC8qIDB4YmFkNWM0ZTggKi8KKy8qCisgKiBEb21haW4geSBpbiBbMHgxcC0yNywgMC4yN10sIHJhbmdlIH5bLTMuNDU5OWUtMTAsIDMuNDU5MGUtMTBdOgorICogfChsZ2FtbWEoMiAtIHkpICsgMC41ICogeSkgLyB5IC0gYSh5KXwgPCAyKiotMzEuNAorICovCithMCAgPSAgNy43MjE1NjY0MWUtMDIsIC8qIDB4M2Q5ZTIzM2YgKi8KK2ExICA9ICAzLjIyNDY3MTE5ZS0wMSwgLyogMHgzZWE1MWE2OSAqLworYTIgID0gIDYuNzM0ODQ4MDJlLTAyLCAvKiAweDNkODllZTAwICovCithMyAgPSAgMi4wNjM5NTY2N2UtMDIsIC8qIDB4M2NhOTE0NGYgKi8KK2E0ICA9ICA2Ljk4Mjc1NjMxZS0wMywgLyogMHgzYmU0Y2Y5YiAqLworYTUgID0gIDQuMTE3Njg0NDRlLTAzLCAvKiAweDNiODZlZGE0ICovCisvKgorICogRG9tYWluIHggaW4gW3RjLTAuMjQsIHRjKzAuMjhdLCByYW5nZSB+Wy01LjY1NzdlLTEwLCA1LjU2NzdlLTEwXToKKyAqIHwobGdhbW1hKHgpIC0gdGYpIC0gdCh4IC0gdGMpfCA8IDIqKi0zMC44LgorICovCit0YyAgPSAgMS40NjE2MzIxM2UrMDAsIC8qIDB4M2ZiYjE2YzMgKi8KK3RmICA9IC0xLjIxNDg2MjkxZS0wMSwgLyogMHhiZGY4Y2RjZSAqLwordDAgID0gLTIuOTQwNjQ0NjBlLTExLCAvKiAweGFlMDE1NGI3ICovCit0MSAgPSAtMi4zNTkzOTgzN2UtMDgsIC8qIDB4YjJjYWFiYjggKi8KK3QyICA9ICA0LjgzODM2NDEyZS0wMSwgLyogMHgzZWY3Yjk2OCAqLwordDMgID0gLTEuNDc1ODYyMTJlLTAxLCAvKiAweGJlMTcyMGQ3ICovCit0NCAgPSAgNi40NjAxMzA5NmUtMDIsIC8qIDB4M2Q4NDRkYjEgKi8KK3Q1ICA9IC0zLjI4NDUwMzUyZS0wMiwgLyogMHhiZDA2ODg4NCAqLwordDYgID0gIDEuODY0ODM3NDhlLTAyLCAvKiAweDNjOThjNDdhICovCit0NyAgPSAtOS44OTIwNjIyOGUtMDMsIC8qIDB4YmMyMjEyNTEgKi8KKy8qCisgKiBEb21haW4geSBpbiBbLTAuMSwgMC4yMzJdLCByYW5nZSB+Wy04LjQ5MzFlLTEwLCA4Ljc3OTRlLTEwXToKKyAqIHwobGdhbW1hKDEgKyB5KSArIDAuNSAqIHkpIC8geSAtIHUoeSkgLyB2KHkpfCA8IDIqKi0zMS4yCisgKi8KK3UwICA9IC03LjcyMTU2NjQxZS0wMiwgLyogMHhiZDllMjMzZiAqLwordTEgID0gIDcuMzY3ODk3MDNlLTAxLCAvKiAweDNmM2M5ZTQwICovCit1MiAgPSAgNC45NTY0OTA0MGUtMDEsIC8qIDB4M2VmZGM1YjYgKi8KK3YxICA9ICAxLjEwOTU4NDIxZSswMCwgLyogMHgzZjhlMDZkYiAqLwordjIgID0gIDIuMTA1OTgxMTFlLTAxLCAvKiAweDNlNTdhNzA4ICovCit2MyAgPSAtMS4wMjk5NTQ5NGUtMDIsIC8qIDB4YmMyOGJmNzEgKi8KKy8qCisgKiBEb21haW4geCBpbiAoMiwgM10sIHJhbmdlIH5bLTUuNTE4OWUtMTEsIDUuMjMxN2UtMTFdOgorICogfChsZ2FtbWEoeSsyKSAtIDAuNSAqIHkpIC8geSAtIHMoeSkvcih5KXwgPCAyKiotMzUuMAorICogd2l0aCB5ID0geCAtIDIuCisgKi8KK3MwID0gLTcuNzIxNTY2NDFlLTAyLCAvKiAweGJkOWUyMzNmICovCitzMSA9ICAyLjY5OTg3NDA0ZS0wMSwgLyogMHgzZThhM2JjYSAqLworczIgPSAgMS40Mjg1MTAxMGUtMDEsIC8qIDB4M2UxMjQ3ODkgKi8KK3MzID0gIDEuMTkzODk1MTllLTAyLCAvKiAweDNjNDM5Yjk4ICovCityMSA9ICA2Ljc5NjUwMDY4ZS0wMSwgLyogMHgzZjJkZmQ4YyAqLworcjIgPSAgMS4xNjA1ODczMGUtMDEsIC8qIDB4M2RlZGIwMzMgKi8KK3IzID0gIDMuNzU2NzM2ODdlLTAzLCAvKiAweDNiNzYzMzk2ICovCisvKgorICogRG9tYWluIHogaW4gWzgsIDB4MXAyNF0sIHJhbmdlIH5bLTEuMjY0MGUtMDksIDEuMjY0MGUtMDldOgorICogfGxnYW1tYSh4KSAtICh4IC0gMC41KSAqIChsb2coeCkgLSAxKSAtIHcoMS94KXwgPCAyKiotMjkuNi4KKyAqLwordzAgPSAgNC4xODkzODU0N2UtMDEsIC8qIDB4M2VkNjdmMWQgKi8KK3cxID0gIDguMzMzMzI0NjRlLTAyLCAvKiAweDNkYWFhYTlmICovCit3MiA9IC0yLjc2MTI5MDg3ZS0wMzsgLyogMHhiYjM0ZjZjNiAqLwogCi1zdGF0aWMgY29uc3QgZmxvYXQgemVybz0gIDAuMDAwMDAwMDAwMGUrMDA7Ci0KLQlzdGF0aWMgZmxvYXQgc2luX3BpZihmbG9hdCB4KQorc3RhdGljIGZsb2F0CitzaW5fcGlmKGZsb2F0IHgpCiB7CisJdm9sYXRpbGUgZmxvYXQgdno7CiAJZmxvYXQgeSx6OwotCWludCBuLGl4OworCWludCBuOwogCi0JR0VUX0ZMT0FUX1dPUkQoaXgseCk7Ci0JaXggJj0gMHg3ZmZmZmZmZjsKKwl5ID0gLXg7CiAKLQlpZihpeDwweDNlODAwMDAwKSByZXR1cm4gX19rZXJuZWxfc2luZGYocGkqeCk7Ci0JeSA9IC14OwkJLyogeCBpcyBhc3N1bWUgbmVnYXRpdmUgKi8KKwl2eiA9IHkrMHgxcDIzRjsJCQkvKiBkZXBlbmQgb24gMCA8PSB5IDwgMHgxcDIzICovCisJeiA9IHZ6LTB4MXAyM0Y7CQkJLyogcmludGYoeSkgZm9yIHRoZSBhYm92ZSByYW5nZSAqLworCWlmICh6ID09IHkpCisJICAgIHJldHVybiB6ZXJvOwogCi0gICAgLyoKLSAgICAgKiBhcmd1bWVudCByZWR1Y3Rpb24sIG1ha2Ugc3VyZSBpbmV4YWN0IGZsYWcgbm90IHJhaXNlZCBpZiBpbnB1dAotICAgICAqIGlzIGFuIGludGVnZXIKLSAgICAgKi8KLQl6ID0gZmxvb3JmKHkpOwotCWlmKHohPXkpIHsJCQkJLyogaW5leGFjdCBhbnl3YXkgKi8KLQkgICAgeSAgKj0gKGZsb2F0KTAuNTsKLQkgICAgeSAgID0gKGZsb2F0KTIuMCooeSAtIGZsb29yZih5KSk7CS8qIHkgPSB8eHwgbW9kIDIuMCAqLwotCSAgICBuICAgPSAoaW50KSAoeSooZmxvYXQpNC4wKTsKLQl9IGVsc2UgewotICAgICAgICAgICAgaWYoaXg+PTB4NGI4MDAwMDApIHsKLSAgICAgICAgICAgICAgICB5ID0gemVybzsgbiA9IDA7ICAgICAgICAgICAgICAgICAvKiB5IG11c3QgYmUgZXZlbiAqLwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZihpeDwweDRiMDAwMDAwKSB6ID0geSt0d28yMzsJLyogZXhhY3QgKi8KLQkJR0VUX0ZMT0FUX1dPUkQobix6KTsKLQkJbiAmPSAxOwotICAgICAgICAgICAgICAgIHkgID0gbjsKLSAgICAgICAgICAgICAgICBuPDw9IDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwl2eiA9IHkrMHgxcDIxRjsKKwlHRVRfRkxPQVRfV09SRChuLHZ6KTsJCS8qIGJpdHMgZm9yIHJvdW5kZWQgeSAodW5pdHMgMC4yNSkgKi8KKwl6ID0gdnotMHgxcDIxRjsJCQkvKiB5IHJvdW5kZWQgdG8gYSBtdWx0aXBsZSBvZiAwLjI1ICovCisJaWYgKHogPiB5KSB7CisJICAgIHogLT0gMC4yNUY7CQkJLyogYWRqdXN0IHRvIHJvdW5kIGRvd24gKi8KKwkgICAgbi0tOworCX0KKwluICY9IDc7CQkJCS8qIG9jdGFudCBvZiB5IG1vZCAyICovCisJeSA9IHkgLSB6ICsgbiAqIDAuMjVGOwkJLyogeSBtb2QgMiAqLworCiAJc3dpdGNoIChuKSB7CiAJICAgIGNhc2UgMDogICB5ID0gIF9fa2VybmVsX3NpbmRmKHBpKnkpOyBicmVhazsKIAkgICAgY2FzZSAxOgpAQCAtMTM3LDM0ICsxMjIsMzggQEAKIGZsb2F0CiBfX2llZWU3NTRfbGdhbW1hZl9yKGZsb2F0IHgsIGludCAqc2lnbmdhbXApCiB7Ci0JZmxvYXQgdCx5LHosbmFkaixwLHAxLHAyLHAzLHEscix3OworCWZsb2F0IG5hZGoscCxwMSxwMixwMyxxLHIsdCx3LHksejsKIAlpbnQzMl90IGh4OwogCWludCBpLGl4OwogCiAJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CiAKLSAgICAvKiBwdXJnZSBvZmYgKy1pbmYsIE5hTiwgKy0wLCB0aW55IGFuZCBuZWdhdGl2ZSBhcmd1bWVudHMgKi8KKyAgICAvKiBwdXJnZSArLUluZiBhbmQgTmFOcyAqLwogCSpzaWduZ2FtcCA9IDE7CiAJaXggPSBoeCYweDdmZmZmZmZmOwogCWlmKGl4Pj0weDdmODAwMDAwKSByZXR1cm4geCp4OwotCWlmKGl4PT0wKSByZXR1cm4gb25lL3plcm87Ci0JaWYoaXg8MHgzNTAwMDAwMCkgewkvKiB8eHw8MioqLTIxLCByZXR1cm4gLWxvZyh8eHwpICovCi0JICAgIGlmKGh4PDApIHsKLQkgICAgICAgICpzaWduZ2FtcCA9IC0xOwotCSAgICAgICAgcmV0dXJuIC1fX2llZWU3NTRfbG9nZigteCk7Ci0JICAgIH0gZWxzZSByZXR1cm4gLV9faWVlZTc1NF9sb2dmKHgpOworCisgICAgLyogcHVyZ2UgKy0wIGFuZCB0aW55IGFyZ3VtZW50cyAqLworCSpzaWduZ2FtcCA9IDEtMiooKHVpbnQzMl90KWh4Pj4zMSk7CisJaWYoaXg8MHgzMjAwMDAwMCkgewkJLyogfHh8PDIqKi0yNywgcmV0dXJuIC1sb2cofHh8KSAqLworCSAgICBpZihpeD09MCkKKwkgICAgICAgIHJldHVybiBvbmUvdnplcm87CisJICAgIHJldHVybiAtX19pZWVlNzU0X2xvZ2YoZmFic2YoeCkpOwogCX0KKworICAgIC8qIHB1cmdlIG5lZ2F0aXZlIGludGVnZXJzIGFuZCBzdGFydCBldmFsdWF0aW9uIGZvciBvdGhlciB4IDwgMCAqLwogCWlmKGh4PDApIHsKLQkgICAgaWYoaXg+PTB4NGIwMDAwMDApIAkvKiB8eHw+PTIqKjIzLCBtdXN0IGJlIC1pbnRlZ2VyICovCi0JCXJldHVybiBvbmUvemVybzsKKwkgICAgKnNpZ25nYW1wID0gMTsKKwkgICAgaWYoaXg+PTB4NGIwMDAwMDApIAkJLyogfHh8Pj0yKioyMywgbXVzdCBiZSAtaW50ZWdlciAqLworCQlyZXR1cm4gb25lL3Z6ZXJvOwogCSAgICB0ID0gc2luX3BpZih4KTsKLQkgICAgaWYodD09emVybykgcmV0dXJuIG9uZS96ZXJvOyAvKiAtaW50ZWdlciAqLworCSAgICBpZih0PT16ZXJvKSByZXR1cm4gb25lL3Z6ZXJvOyAvKiAtaW50ZWdlciAqLwogCSAgICBuYWRqID0gX19pZWVlNzU0X2xvZ2YocGkvZmFic2YodCp4KSk7CiAJICAgIGlmKHQ8emVybykgKnNpZ25nYW1wID0gLTE7CiAJICAgIHggPSAteDsKIAl9CiAKLSAgICAvKiBwdXJnZSBvZmYgMSBhbmQgMiAqLworICAgIC8qIHB1cmdlIDEgYW5kIDIgKi8KIAlpZiAoaXg9PTB4M2Y4MDAwMDB8fGl4PT0weDQwMDAwMDAwKSByID0gMDsKICAgICAvKiBmb3IgeCA8IDIuMCAqLwogCWVsc2UgaWYoaXg8MHg0MDAwMDAwMCkgewpAQCAtMTc1LDU1ICsxNjQsNTEgQEAKIAkgIAllbHNlIHt5ID0geDsgaT0yO30KIAkgICAgfSBlbHNlIHsKIAkgIAlyID0gemVybzsKLQkgICAgICAgIGlmKGl4Pj0weDNmZGRhNjE4KSB7eT0oZmxvYXQpMi4wLXg7aT0wO30gLyogWzEuNzMxNiwyXSAqLworCSAgICAgICAgaWYoaXg+PTB4M2ZkZGE2MTgpIHt5PTIteDtpPTA7fSAvKiBbMS43MzE2LDJdICovCiAJICAgICAgICBlbHNlIGlmKGl4Pj0weDNGOWRhNjIwKSB7eT14LXRjO2k9MTt9IC8qIFsxLjIzLDEuNzNdICovCiAJCWVsc2Uge3k9eC1vbmU7aT0yO30KIAkgICAgfQogCSAgICBzd2l0Y2goaSkgewogCSAgICAgIGNhc2UgMDoKIAkJeiA9IHkqeTsKLQkJcDEgPSBhMCt6KihhMit6KihhNCt6KihhNit6KihhOCt6KmExMCkpKSk7Ci0JCXAyID0geiooYTEreiooYTMreiooYTUreiooYTcreiooYTkreiphMTEpKSkpKTsKKwkJcDEgPSBhMCt6KihhMit6KmE0KTsKKwkJcDIgPSB6KihhMSt6KihhMyt6KmE1KSk7CiAJCXAgID0geSpwMStwMjsKLQkJciAgKz0gKHAtKGZsb2F0KTAuNSp5KTsgYnJlYWs7CisJCXIgICs9IHAteS8yOyBicmVhazsKIAkgICAgICBjYXNlIDE6Ci0JCXogPSB5Knk7Ci0JCXcgPSB6Knk7Ci0JCXAxID0gdDArdyoodDMrdyoodDYrdyoodDkgK3cqdDEyKSkpOwkvKiBwYXJhbGxlbCBjb21wICovCi0JCXAyID0gdDErdyoodDQrdyoodDcrdyoodDEwK3cqdDEzKSkpOwotCQlwMyA9IHQyK3cqKHQ1K3cqKHQ4K3cqKHQxMSt3KnQxNCkpKTsKLQkJcCAgPSB6KnAxLSh0dC13KihwMit5KnAzKSk7Ci0JCXIgKz0gKHRmICsgcCk7IGJyZWFrOworCQlwID0gdDAreSp0MSt5KnkqKHQyK3kqKHQzK3kqKHQ0K3kqKHQ1K3kqKHQ2K3kqdDcpKSkpKTsKKwkJciArPSB0ZiArIHA7IGJyZWFrOwogCSAgICAgIGNhc2UgMjoKLQkJcDEgPSB5Kih1MCt5Kih1MSt5Kih1Mit5Kih1Myt5Kih1NCt5KnU1KSkpKSk7Ci0JCXAyID0gb25lK3kqKHYxK3kqKHYyK3kqKHYzK3kqKHY0K3kqdjUpKSkpOwotCQlyICs9ICgtKGZsb2F0KTAuNSp5ICsgcDEvcDIpOworCQlwMSA9IHkqKHUwK3kqKHUxK3kqdTIpKTsKKwkJcDIgPSBvbmUreSoodjEreSoodjIreSp2MykpOworCQlyICs9IHAxL3AyLXkvMjsKIAkgICAgfQogCX0KLQllbHNlIGlmKGl4PDB4NDEwMDAwMDApIHsgCQkJLyogeCA8IDguMCAqLwotCSAgICBpID0gKGludCl4OwotCSAgICB5ID0geC0oZmxvYXQpaTsKLQkgICAgcCA9IHkqKHMwK3kqKHMxK3kqKHMyK3kqKHMzK3kqKHM0K3kqKHM1K3kqczYpKSkpKSk7Ci0JICAgIHEgPSBvbmUreSoocjEreSoocjIreSoocjMreSoocjQreSoocjUreSpyNikpKSkpOwotCSAgICByID0gaGFsZip5K3AvcTsKKyAgICAvKiB4IDwgOC4wICovCisJZWxzZSBpZihpeDwweDQxMDAwMDAwKSB7CisJICAgIGkgPSB4OworCSAgICB5ID0geC1pOworCSAgICBwID0geSooczAreSooczEreSooczIreSpzMykpKTsKKwkgICAgcSA9IG9uZSt5KihyMSt5KihyMit5KnIzKSk7CisJICAgIHIgPSB5LzIrcC9xOwogCSAgICB6ID0gb25lOwkvKiBsZ2FtbWEoMStzKSA9IGxvZyhzKSArIGxnYW1tYShzKSAqLwogCSAgICBzd2l0Y2goaSkgewotCSAgICBjYXNlIDc6IHogKj0gKHkrKGZsb2F0KTYuMCk7CS8qIEZBTExUSFJVICovCi0JICAgIGNhc2UgNjogeiAqPSAoeSsoZmxvYXQpNS4wKTsJLyogRkFMTFRIUlUgKi8KLQkgICAgY2FzZSA1OiB6ICo9ICh5KyhmbG9hdCk0LjApOwkvKiBGQUxMVEhSVSAqLwotCSAgICBjYXNlIDQ6IHogKj0gKHkrKGZsb2F0KTMuMCk7CS8qIEZBTExUSFJVICovCi0JICAgIGNhc2UgMzogeiAqPSAoeSsoZmxvYXQpMi4wKTsJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSA3OiB6ICo9ICh5KzYpOwkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSA2OiB6ICo9ICh5KzUpOwkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSA1OiB6ICo9ICh5KzQpOwkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSA0OiB6ICo9ICh5KzMpOwkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSAzOiB6ICo9ICh5KzIpOwkJLyogRkFMTFRIUlUgKi8KIAkJICAgIHIgKz0gX19pZWVlNzU0X2xvZ2Yoeik7IGJyZWFrOwogCSAgICB9Ci0gICAgLyogOC4wIDw9IHggPCAyKio1OCAqLwotCX0gZWxzZSBpZiAoaXggPCAweDVjODAwMDAwKSB7CisgICAgLyogOC4wIDw9IHggPCAyKioyNyAqLworCX0gZWxzZSBpZiAoaXggPCAweDRkMDAwMDAwKSB7CiAJICAgIHQgPSBfX2llZWU3NTRfbG9nZih4KTsKIAkgICAgeiA9IG9uZS94OwogCSAgICB5ID0geip6OwotCSAgICB3ID0gdzAreioodzEreSoodzIreSoodzMreSoodzQreSoodzUreSp3NikpKSkpOworCSAgICB3ID0gdzAreioodzEreSp3Mik7CiAJICAgIHIgPSAoeC1oYWxmKSoodC1vbmUpK3c7CiAJfSBlbHNlCi0gICAgLyogMioqNTggPD0geCA8PSBpbmYgKi8KKyAgICAvKiAyKioyNyA8PSB4IDw9IGluZiAqLwogCSAgICByID0gIHgqKF9faWVlZTc1NF9sb2dmKHgpLW9uZSk7CiAJaWYoaHg8MCkgciA9IG5hZGogLSByOwogCXJldHVybiByOwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xnYW1tYWwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sZ2FtbWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJjMmZjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sZ2FtbWFsLmMKQEAgLTAsMCArMSwyNSBAQAorLyogQCgjKWVfbGdhbW1hLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK2V4dGVybiBpbnQgc2lnbmdhbTsKKworbG9uZyBkb3VibGUKK2xnYW1tYWwobG9uZyBkb3VibGUgeCkKK3sKKwlyZXR1cm4gbGdhbW1hbF9yKHgsJnNpZ25nYW0pOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3Bvdy5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3Bvdy5jCmluZGV4IDc2MDdhNGEuLmQ1NGFmOWQgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9wb3cuYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcG93LmMKQEAgLTE5LDIwICsxOSwyMCBAQAogICoJMS4gQ29tcHV0ZSBhbmQgcmV0dXJuIGxvZzIoeCkgaW4gdHdvIHBpZWNlczoKICAqCQlsb2cyKHgpID0gdzEgKyB3MiwKICAqCSAgIHdoZXJlIHcxIGhhcyA1My0yNCA9IDI5IGJpdCB0cmFpbGluZyB6ZXJvcy4KLSAqCTIuIFBlcmZvcm0geSpsb2cyKHgpID0gbit5JyBieSBzaW11bGF0aW5nIG11dGktcHJlY2lzaW9uIAorICoJMi4gUGVyZm9ybSB5KmxvZzIoeCkgPSBuK3knIGJ5IHNpbXVsYXRpbmcgbXVsdGktcHJlY2lzaW9uIAogICoJICAgYXJpdGhtZXRpYywgd2hlcmUgfHknfDw9MC41LgogICoJMy4gUmV0dXJuIHgqKnkgPSAyKipuKmV4cCh5Jypsb2cyKQogICoKICAqIFNwZWNpYWwgY2FzZXM6CiAgKgkxLiAgKGFueXRoaW5nKSAqKiAwICBpcyAxCiAgKgkyLiAgKGFueXRoaW5nKSAqKiAxICBpcyBpdHNlbGYKLSAqCTMuICAoYW55dGhpbmcpICoqIE5BTiBpcyBOQU4KKyAqCTMuICAoYW55dGhpbmcpICoqIE5BTiBpcyBOQU4gZXhjZXB0IDEgKiogTkFOID0gMQogICoJNC4gIE5BTiAqKiAoYW55dGhpbmcgZXhjZXB0IDApIGlzIE5BTgogICoJNS4gICstKHx4fCA+IDEpICoqICArSU5GIGlzICtJTkYKICAqCTYuICArLSh8eHwgPiAxKSAqKiAgLUlORiBpcyArMAogICoJNy4gICstKHx4fCA8IDEpICoqICArSU5GIGlzICswCiAgKgk4LiAgKy0ofHh8IDwgMSkgKiogIC1JTkYgaXMgK0lORgotICoJOS4gICstMSAgICAgICAgICoqICstSU5GIGlzIE5BTgorICoJOS4gICstMSAgICAgICAgICoqICstSU5GIGlzIDEKICAqCTEwLiArMCAqKiAoK2FueXRoaW5nIGV4Y2VwdCAwLCBOQU4pICAgICAgICAgICAgICAgaXMgKzAKICAqCTExLiAtMCAqKiAoK2FueXRoaW5nIGV4Y2VwdCAwLCBOQU4sIG9kZCBpbnRlZ2VyKSAgaXMgKzAKICAqCTEyLiArMCAqKiAoLWFueXRoaW5nIGV4Y2VwdCAwLCBOQU4pICAgICAgICAgICAgICAgaXMgK0lORgpAQCAtMTQxLDcgKzE0MSw3IEBACiAJaWYobHk9PTApIHsgCQogCSAgICBpZiAoaXk9PTB4N2ZmMDAwMDApIHsJLyogeSBpcyArLWluZiAqLwogCSAgICAgICAgaWYoKChpeC0weDNmZjAwMDAwKXxseCk9PTApCi0JCSAgICByZXR1cm4gIG9uZTsJLyogKC0xKSoqKy1pbmYgaXMgTmFOICovCisJCSAgICByZXR1cm4gIG9uZTsJLyogKC0xKSoqKy1pbmYgaXMgMSAqLwogCSAgICAgICAgZWxzZSBpZiAoaXggPj0gMHgzZmYwMDAwMCkvKiAofHh8PjEpKiorLWluZiA9IGluZiwwICovCiAJCSAgICByZXR1cm4gKGh5Pj0wKT8geTogemVybzsKIAkgICAgICAgIGVsc2UJCQkvKiAofHh8PDEpKiotLCtpbmYgPSBpbmYsMCAqLwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NpbmguYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zaW5oLmMKaW5kZXggMTc0NDJkMC4uNmMwMWY0YSAxMDA2NDQKLS0tIGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NpbmguYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc2luaC5jCkBAIC0zMiw2ICszMiw4IEBACiAgKglvbmx5IHNpbmgoMCk9MCBpcyBleGFjdCBmb3IgZmluaXRlIHguCiAgKi8KIAorI2luY2x1ZGUgPGZsb2F0Lmg+CisKICNpbmNsdWRlICJtYXRoLmgiCiAjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCiAKQEAgLTcxLDMgKzczLDcgQEAKICAgICAvKiB8eHwgPiBvdmVyZmxvd3RocmVzb2xkLCBzaW5oKHgpIG92ZXJmbG93ICovCiAJcmV0dXJuIHgqc2h1Z2U7CiB9CisKKyNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKK19fd2Vha19yZWZlcmVuY2Uoc2luaCwgc2luaGwpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc2luaGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zaW5obC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlN2UzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc2luaGwuYwpAQCAtMCwwICsxLDEzMSBAQAorLyogZnJvbTogRnJlZUJTRDogaGVhZC9saWIvbXN1bi9zcmMvZV9zaW5obC5jIFhYWCAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIFNlZSBlX3NpbmguYyBmb3IgY29tcGxldGUgY29tbWVudHMuCisgKgorICogQ29udmVydGVkIHRvIGxvbmcgZG91YmxlIGJ5IEJydWNlIEQuIEV2YW5zLgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2lmZGVmIF9faTM4Nl9fCisjaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImZwbWF0aC5oIgorI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJrX2V4cGwuaCIKKworI2lmIExEQkxfTUFYX0VYUCAhPSAweDQwMDAKKy8qIFdlIGFsc28gcmVxdWlyZSB0aGUgdXN1YWwgZXhwc2lnbiBlbmNvZGluZy4gKi8KKyNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgorI2VuZGlmCisKKyNkZWZpbmUJQklBUwkoTERCTF9NQVhfRVhQIC0gMSkKKworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlIHNodWdlID0gMHgxcDE2MzgzTDsKKyNpZiBMREJMX01BTlRfRElHID09IDY0CisvKgorICogRG9tYWluIFstMSwgMV0sIHJhbmdlIH5bLTYuNjc0OWUtMjIsIDYuNjc0OWUtMjJdOgorICogfHNpbmgoeCkveCAtIHMoeCl8IDwgMioqLTcwLjMKKyAqLworc3RhdGljIGNvbnN0IHVuaW9uIElFRUVsMmJpdHMKK1MzdSA9IExEODBDKDB4YWFhYWFhYWFhYWFhYWFhYSwgLTMsICAxLjY2NjY2NjY2NjY2NjY2NjY2NjU4ZS0xTCk7CisjZGVmaW5lCVMzCVMzdS5lCitzdGF0aWMgY29uc3QgZG91YmxlCitTNSAgPSAgOC4zMzMzMzMzMzMzMzMzMzMyZS0zLAkJLyogIDB4MTExMTExMTExMTExMTEuMHAtNTkgKi8KK1M3ICA9ICAxLjk4NDEyNjk4NDEyNzAwNzRlLTQsCQkvKiAgMHgxYTAxYTAxYTAxYTA3MC4wcC02NSAqLworUzkgID0gIDIuNzU1NzMxOTIyMzg3Mzg4OWUtNiwJCS8qICAweDE3MWRlM2E1NTY1ZmU2LjBwLTcxICovCitTMTEgPSAgMi41MDUyMTA4NDA2NzA0MDg0ZS04LAkJLyogIDB4MWFlNjQ1Njg1NzUzMGYuMHAtNzggKi8KK1MxMyA9ICAxLjYwNTkwNDI3NDg2NTUyOTdlLTEwLAkJLyogIDB4MTYxMjQ1ZmE5MTA2OTcuMHAtODUgKi8KK1MxNSA9ICA3LjY0NzAwMDY5MTQzOTY5MjBlLTEzLAkJLyogIDB4MWFlN2NlNGVmZjI3OTIuMHAtOTMgKi8KK1MxNyA9ICAyLjgzNDYxNDIzMDg0MjQyNjdlLTE1OwkJLyogIDB4MTk4ODJjZTc4OWZmYzYuMHAtMTAxICovCisjZWxpZiBMREJMX01BTlRfRElHID09IDExMworLyoKKyAqIERvbWFpbiBbLTEsIDFdLCByYW5nZSB+Wy0yLjk2NzNlLTM2LCAyLjk2NzNlLTM2XToKKyAqIHxzaW5oKHgpL3ggLSBzKHgpfCA8IDIqKi0xMTguMAorICovCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK1MzICA9ICAxLjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MDMzZS0xTCwJLyogIDB4MTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1M2IuMHAtMTE1TCAqLworUzUgID0gIDguMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzc2NDMxOTNlLTNMLAkvKiAgMHgxMTExMTExMTExMTExMTExMTExMTExMTExODBmNS4wcC0xMTlMICovCitTNyAgPSAgMS45ODQxMjY5ODQxMjY5ODQxMjY5ODQxMjY5NzM5MTI2MzE5OWUtNEwsCS8qICAweDFhMDFhMDFhMDFhMDFhMDFhMDFhMDE3NmFhZDExLjBwLTEyNUwgKi8KK1M5ICA9ICAyLjc1NTczMTkyMjM5ODU4OTA2NTI1NTc0NDA2MjA1NDY0MjE4ZS02TCwJLyogIDB4MTcxZGUzYTU1NmM3MzM4ZmFhYzI0M2FhYTk1OTIuMHAtMTMxTCAqLworUzExID0gIDIuNTA1MjEwODM4NTQ0MTcxODc3NDk2NzU2Mzc0NjA5Nzc5OTdlLThMLAkvKiAgMHgxYWU2NDU2N2Y1NDRlMzhmZTU5YjMzODBkNzQxMy4wcC0xMzhMICovCitTMTMgPSAgMS42MDU5MDQzODM2ODIxNjE0NjM2ODczNzc2MjQzMTU1MjcwMmUtMTBMLAkvKiAgMHgxNjEyNDYxM2E4NmQwOTgwNTljNzYyMDg1MGZjMi4wcC0xNDVMICovCitTMTUgPSAgNy42NDcxNjM3MzE4MTk4MDUzOTc4NjgwMjQ3MDk2OTA5NjQ0MGUtMTNMLAkvKiAgMHgxYWU3ZjNlNzMzYjgxNDE5M2FmMDljZTcyMzA0My4wcC0xNTNMICovCitTMTcgPSAgMi44MTE0NTcyNTQzNDc3NTQwOTg3MDU4NDI4MDcyMjcwMTU3NGUtMTVMOwkvKiAgMHgxOTUyYzc3MDMwYzM2ODk4YzNmZDBiNmRmYzU2Mi4wcC0xNjFMICovCitzdGF0aWMgY29uc3QgZG91YmxlCitTMTk9ICA4LjIyMDYzNTI0MzU0MTEwMDVlLTE4LAkJLyogIDB4MTJmNDliNDY2MmI4NmQuMHAtMTA5ICovCitTMjE9ICAxLjk1NzI5NDM5MzE0MTg4OTFlLTIwLAkJLyogIDB4MTcxYjhmMmZhYjk2MjguMHAtMTE4ICovCitTMjMgPSAgMy44Njc5OTgzNTMwNjY2OTM5ZS0yMywJCS8qICAweDE3NjE3MDAyYjczYWZjLjBwLTEyNyAqLworUzI1ID0gIDYuNTA2Nzg2NzkxMTUxMjc0OWUtMjY7CQkvKiAgMHgxNDIzMzUyNjI2MDQ4YS4wcC0xMzYgKi8KKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9ydGVkIGxvbmcgZG91YmxlIGZvcm1hdCIKKyNlbmRpZiAvKiBMREJMX01BTlRfRElHID09IDY0ICovCisKKy8qIGxvZygyKioxNjM4NSAtIDAuNSkgcm91bmRlZCB1cDogKi8KK3N0YXRpYyBjb25zdCBmbG9hdAorb190aHJlc2hvbGQgPSAgMS4xMzU3MjE2OGU0OwkJLyogIDB4YjE3NGRlLjBwLTEwICovCisKK2xvbmcgZG91YmxlCitzaW5obChsb25nIGRvdWJsZSB4KQoreworCWxvbmcgZG91YmxlIGhpLGxvLHgyLHg0OworCWRvdWJsZSBkeDIsczsKKwlpbnQxNl90IGl4LGp4OworCisJR0VUX0xEQkxfRVhQU0lHTihqeCx4KTsKKwlpeCA9IGp4JjB4N2ZmZjsKKworICAgIC8qIHggaXMgSU5GIG9yIE5hTiAqLworCWlmKGl4Pj0weDdmZmYpIHJldHVybiB4K3g7CisKKwlFTlRFUkkoKTsKKworCXMgPSAxOworCWlmIChqeDwwKSBzID0gLTE7CisKKyAgICAvKiB8eHwgPCA2NCwgcmV0dXJuIHgsIHMoeCksIG9yIGFjY3VyYXRlIHMqKGV4cCh8eHwpLzItMS9leHAofHh8KS8yKSAqLworCWlmIChpeDwweDQwMDUpIHsJCS8qIHx4fDw2NCAqLworCSAgICBpZiAoaXg8QklBUy0oTERCTF9NQU5UX0RJRysxKS8yKSAJLyogfHh8PFRJTlkgKi8KKwkJaWYoc2h1Z2UreD4xKSBSRVRVUk5JKHgpOyAgLyogc2luaCh0aW55KSA9IHRpbnkgd2l0aCBpbmV4YWN0ICovCisJICAgIGlmIChpeDwweDNmZmYpIHsJCS8qIHx4fDwxICovCisJCXgyID0geCp4OworI2lmIExEQkxfTUFOVF9ESUcgPT0gNjQKKwkJeDQgPSB4Mip4MjsKKwkJUkVUVVJOSSgoKFMxNyp4MiArIFMxNSkqeDQgKyAoUzEzKngyICsgUzExKSkqKHgyKngqeDQqeDQpICsKKwkJICAgICgoUzkqeDIgKyBTNykqeDIgKyBTNSkqKHgyKngqeDIpICsgUzMqKHgyKngpICsgeCk7CisjZWxpZiBMREJMX01BTlRfRElHID09IDExMworCQlkeDIgPSB4MjsKKwkJUkVUVVJOSSgoKCgoKCgoKCgoUzI1KmR4MiArIFMyMykqZHgyICsKKwkJICAgIFMyMSkqeDIgKyBTMTkpKngyICsKKwkJICAgIFMxNykqeDIgKyBTMTUpKngyICsgUzEzKSp4MiArIFMxMSkqeDIgKyBTOSkqeDIgKyBTNykqeDIgKworCQkgICAgUzUpKiAoeDIqeCp4MikgKworCQkgICAgUzMqKHgyKngpICsgeCk7CisjZW5kaWYKKwkgICAgfQorCSAgICBrX2hleHBsKGZhYnNsKHgpLCAmaGksICZsbyk7CisJICAgIFJFVFVSTkkocyoobG8gLSAwLjI1LyhoaSArIGxvKSArIGhpKSk7CisJfQorCisgICAgLyogfHh8IGluIFs2NCwgb190aHJlc2hvbGRdLCByZXR1cm4gY29ycmVjdGx5LW92ZXJmbG93aW5nIHMqZXhwKHx4fCkvMiAqLworCWlmIChmYWJzbCh4KSA8PSBvX3RocmVzaG9sZCkKKwkgICAgUkVUVVJOSShzKmhleHBsKGZhYnNsKHgpKSk7CisKKyAgICAvKiB8eHwgPiBvX3RocmVzaG9sZCwgc2luaCh4KSBvdmVyZmxvdyAqLworCXJldHVybiB4KnNodWdlOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9mZW52LXNvZnRmbG9hdC5oIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9mZW52LXNvZnRmbG9hdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmQyYTJjLi4wMDAwMDAwCi0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZmVudi1zb2Z0ZmxvYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDExIERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0QkCi0gKi8KLQotI2lmbmRlZglfRkVOVl9IXwotI2Vycm9yICJUaGlzIGZpbGUgaXMgbWVhbnQgdG8gYmUgaW5jbHVkZWQgb25seSBieSA8ZmVudi5oPi4iCi0jZW5kaWYKLQotLyoKLSAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIDxmZW52Lmg+IG9uIHBsYXRmb3JtcyB0aGF0Ci0gKiBsYWNrIGFuIEZQVSBhbmQgdXNlIHNvZnRmbG9hdCBpbiBsaWJjIGZvciBmbG9hdGluZyBwb2ludC4gIFRvIHVzZSBpdCwKLSAqIHlvdSBtdXN0IHdyaXRlIGFuIDxmZW52Lmg+IHRoYXQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZzoKLSAqCi0gKiAgIC0gYSB0eXBlZGVmIGZvciBmZW52X3QsIHdoaWNoIG1heSBiZSBhbiBpbnRlZ2VyIG9yIHN0cnVjdCB0eXBlCi0gKiAgIC0gYSB0eXBlZGVmIGZvciBmZXhjZXB0X3QgKFhYWCBUaGlzIGZpbGUgYXNzdW1lcyBmZXhjZXB0X3QgaXMgYQotICogICAgIHNpbXBsZSBpbnRlZ2VyIHR5cGUgY29udGFpbmluZyB0aGUgZXhjZXB0aW9uIG1hc2suKQotICogICAtIGRlZmluaXRpb25zIG9mIEZFXyogY29uc3RhbnRzIGZvciB0aGUgZml2ZSBleGNlcHRpb25zIGFuZCBmb3VyCi0gKiAgICAgcm91bmRpbmcgbW9kZXMgaW4gSUVFRSA3NTQsIGFzIGRlc2NyaWJlZCBpbiBmZW52KDMpCi0gKiAgIC0gYSBkZWZpbml0aW9uLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZXh0ZXJuYWwgc3ltYm9sLCBmb3IgRkVfREZMX0VOVgotICogICAtIGEgbWFjcm8gX19zZXRfZW52KGVudiwgZmxhZ3MsIG1hc2ssIHJuZCksIHdoaWNoIHNldHMgdGhlIGdpdmVuIGZlbnZfdAotICogICAgIGZyb20gdGhlIGV4Y2VwdGlvbiBmbGFncywgbWFzaywgYW5kIHJvdW5kaW5nIG1vZGUKLSAqICAgLSBtYWNyb3MgX19lbnZfZmxhZ3MoZW52KSwgX19lbnZfbWFzayhlbnYpLCBhbmQgX19lbnZfcm91bmQoZW52KSwgd2hpY2gKLSAqICAgICBleHRyYWN0IGZpZWxkcyBmcm9tIGFuIGZlbnZfdAotICogICAtIGEgZGVmaW5pdGlvbiBvZiBfX2ZlbnZfc3RhdGljCi0gKgotICogSWYgdGhlIGFyY2hpdGVjdHVyZSBzdXBwb3J0cyBhbiBvcHRpb25hbCBGUFUsIGl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UKLSAqIGRlZmluZSBmZW52X3QgYW5kIGZleGNlcHRfdCB0byBtYXRjaCB0aGUgaGFyZHdhcmUgQUJJLiAgT3RoZXJ3aXNlLCBpdAotICogZG9lc24ndCBtYXR0ZXIgaG93IHlvdSBkZWZpbmUgdGhlbS4KLSAqLwotCi1leHRlcm4gaW50IF9fc29mdGZsb2F0X2Zsb2F0X2V4Y2VwdGlvbl9mbGFnczsKLWV4dGVybiBpbnQgX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX21hc2s7Ci1leHRlcm4gaW50IF9fc29mdGZsb2F0X2Zsb2F0X3JvdW5kaW5nX21vZGU7Ci12b2lkIF9fc29mdGZsb2F0X2Zsb2F0X3JhaXNlKGludCk7Ci0KLV9fZmVudl9zdGF0aWMgaW5saW5lIGludAotZmVjbGVhcmV4Y2VwdChpbnQgX19leGNlcHRzKQotewotCi0JX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdzICY9IH5fX2V4Y2VwdHM7Ci0JcmV0dXJuICgwKTsKLX0KLQotX19mZW52X3N0YXRpYyBpbmxpbmUgaW50Ci1mZWdldGV4Y2VwdGZsYWcoZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKQotewotCi0JKl9fZmxhZ3AgPSBfX3NvZnRmbG9hdF9mbG9hdF9leGNlcHRpb25fZmxhZ3MgJiBfX2V4Y2VwdHM7Ci0JcmV0dXJuICgwKTsKLX0KLQotX19mZW52X3N0YXRpYyBpbmxpbmUgaW50Ci1mZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKQotewotCi0JX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdzICY9IH5fX2V4Y2VwdHM7Ci0JX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdzIHw9ICpfX2ZsYWdwICYgX19leGNlcHRzOwotCXJldHVybiAoMCk7Ci19Ci0KLV9fZmVudl9zdGF0aWMgaW5saW5lIGludAotZmVyYWlzZWV4Y2VwdChpbnQgX19leGNlcHRzKQotewotCi0JX19zb2Z0ZmxvYXRfZmxvYXRfcmFpc2UoX19leGNlcHRzKTsKLQlyZXR1cm4gKDApOwotfQotCi1fX2ZlbnZfc3RhdGljIGlubGluZSBpbnQKLWZldGVzdGV4Y2VwdChpbnQgX19leGNlcHRzKQotewotCi0JcmV0dXJuIChfX3NvZnRmbG9hdF9mbG9hdF9leGNlcHRpb25fZmxhZ3MgJiBfX2V4Y2VwdHMpOwotfQotCi1fX2ZlbnZfc3RhdGljIGlubGluZSBpbnQKLWZlZ2V0cm91bmQodm9pZCkKLXsKLQotCXJldHVybiAoX19zb2Z0ZmxvYXRfZmxvYXRfcm91bmRpbmdfbW9kZSk7Ci19Ci0KLV9fZmVudl9zdGF0aWMgaW5saW5lIGludAotZmVzZXRyb3VuZChpbnQgX19yb3VuZCkKLXsKLQotCV9fc29mdGZsb2F0X2Zsb2F0X3JvdW5kaW5nX21vZGUgPSBfX3JvdW5kOwotCXJldHVybiAoMCk7Ci19Ci0KLV9fZmVudl9zdGF0aWMgaW5saW5lIGludAotZmVnZXRlbnYoZmVudl90ICpfX2VudnApCi17Ci0KLQlfX3NldF9lbnYoKl9fZW52cCwgX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdzLAotCSAgICBfX3NvZnRmbG9hdF9mbG9hdF9leGNlcHRpb25fbWFzaywgX19zb2Z0ZmxvYXRfZmxvYXRfcm91bmRpbmdfbW9kZSk7Ci0JcmV0dXJuICgwKTsKLX0KLQotX19mZW52X3N0YXRpYyBpbmxpbmUgaW50Ci1mZWhvbGRleGNlcHQoZmVudl90ICpfX2VudnApCi17Ci0JZmVudl90IF9fZW52OwotCi0JZmVnZXRlbnYoX19lbnZwKTsKLQlfX3NvZnRmbG9hdF9mbG9hdF9leGNlcHRpb25fZmxhZ3MgPSAwOwotCV9fc29mdGZsb2F0X2Zsb2F0X2V4Y2VwdGlvbl9tYXNrID0gMDsKLQlyZXR1cm4gKDApOwotfQotCi1fX2ZlbnZfc3RhdGljIGlubGluZSBpbnQKLWZlc2V0ZW52KGNvbnN0IGZlbnZfdCAqX19lbnZwKQotewotCi0JX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdzID0gX19lbnZfZmxhZ3MoKl9fZW52cCk7Ci0JX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX21hc2sgPSBfX2Vudl9tYXNrKCpfX2VudnApOwotCV9fc29mdGZsb2F0X2Zsb2F0X3JvdW5kaW5nX21vZGUgPSBfX2Vudl9yb3VuZCgqX19lbnZwKTsKLQlyZXR1cm4gKDApOwotfQotCi1fX2ZlbnZfc3RhdGljIGlubGluZSBpbnQKLWZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCAqX19lbnZwKQotewotCWludCBfX29mbGFncyA9IF9fc29mdGZsb2F0X2Zsb2F0X2V4Y2VwdGlvbl9mbGFnczsKLQotCWZlc2V0ZW52KF9fZW52cCk7Ci0JZmVyYWlzZWV4Y2VwdChfX29mbGFncyk7Ci0JcmV0dXJuICgwKTsKLX0KLQotI2lmIF9fQlNEX1ZJU0lCTEUKLQotLyogV2UgY3VycmVudGx5IHByb3ZpZGUgbm8gZXh0ZXJuYWwgZGVmaW5pdGlvbnMgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdy4gKi8KLQotc3RhdGljIGlubGluZSBpbnQKLWZlZW5hYmxlZXhjZXB0KGludCBfX21hc2spCi17Ci0JaW50IF9fb21hc2sgPSBfX3NvZnRmbG9hdF9mbG9hdF9leGNlcHRpb25fbWFzazsKLQotCV9fc29mdGZsb2F0X2Zsb2F0X2V4Y2VwdGlvbl9tYXNrIHw9IF9fbWFzazsKLQlyZXR1cm4gKF9fb21hc2spOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZmVkaXNhYmxlZXhjZXB0KGludCBfX21hc2spCi17Ci0JaW50IF9fb21hc2sgPSBfX3NvZnRmbG9hdF9mbG9hdF9leGNlcHRpb25fbWFzazsKLQotCV9fc29mdGZsb2F0X2Zsb2F0X2V4Y2VwdGlvbl9tYXNrICY9IH5fX21hc2s7Ci0JcmV0dXJuIChfX29tYXNrKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWZlZ2V0ZXhjZXB0KHZvaWQpCi17Ci0KLQlyZXR1cm4gKF9fc29mdGZsb2F0X2Zsb2F0X2V4Y2VwdGlvbl9tYXNrKTsKLX0KLQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvaW1wcmVjaXNlLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2ltcHJlY2lzZS5jCmluZGV4IGE3NTAzYmYuLjA4Y2QyMzkgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvaW1wcmVjaXNlLmMKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9pbXByZWNpc2UuYwpAQCAtNjAsMTAgKzYwLDQgQEAKIAlsb25nIGRvdWJsZSBpbXByZWNpc2VfICMjIGYgIyMgbChsb25nIGRvdWJsZSB2KSB7IHJldHVybiBmKHYpOyB9XAogCURFQ0xBUkVfV0VBSyhmICMjIGwpCiAKLURFQ0xBUkVfSU1QUkVDSVNFKGNvc2gpOwotREVDTEFSRV9JTVBSRUNJU0UoZXJmYyk7Ci1ERUNMQVJFX0lNUFJFQ0lTRShlcmYpOwotREVDTEFSRV9JTVBSRUNJU0UobGdhbW1hKTsKLURFQ0xBUkVfSU1QUkVDSVNFKHNpbmgpOwotREVDTEFSRV9JTVBSRUNJU0UodGFuaCk7CiBERUNMQVJFX0lNUFJFQ0lTRSh0Z2FtbWEpOwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2VyZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2VyZi5jCmluZGV4IDA4ODZlNWUuLmUxZDYzYmMgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19lcmYuYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZXJmLmMKQEAgLTExMSwxOCArMTExLDI1IEBACiAjaW5jbHVkZSAibWF0aC5oIgogI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgogCisvKiBYWFggUHJldmVudCBjb21waWxlcnMgZnJvbSBlcnJvbmVvdXNseSBjb25zdGFudCBmb2xkaW5nOiAqLworc3RhdGljIGNvbnN0IHZvbGF0aWxlIGRvdWJsZSB0aW55PSAxZS0zMDA7CisKIHN0YXRpYyBjb25zdCBkb3VibGUKLXRpbnkJICAgID0gMWUtMzAwLAotaGFsZj0gIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDBlLTAxLCAvKiAweDNGRTAwMDAwLCAweDAwMDAwMDAwICovCi1vbmUgPSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsIC8qIDB4M0ZGMDAwMDAsIDB4MDAwMDAwMDAgKi8KLXR3byA9ICAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMCwgLyogMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCAqLwotCS8qIGMgPSAoZmxvYXQpMC44NDUwNjI5MTE1MSAqLworaGFsZj0gMC41LAorb25lID0gMSwKK3R3byA9IDIsCisvKiBjID0gKGZsb2F0KTAuODQ1MDYyOTExNTEgKi8KIGVyeCA9ICA4LjQ1MDYyOTExNTEwNDY3NTI5Mjk3ZS0wMSwgLyogMHgzRkVCMEFDMSwgMHg2MDAwMDAwMCAqLwogLyoKLSAqIENvZWZmaWNpZW50cyBmb3IgYXBwcm94aW1hdGlvbiB0byAgZXJmIG9uIFswLDAuODQzNzVdCisgKiBJbiB0aGUgZG9tYWluIFswLCAyKiotMjhdLCBvbmx5IHRoZSBmaXJzdCB0ZXJtIGluIHRoZSBwb3dlciBzZXJpZXMKKyAqIGV4cGFuc2lvbiBvZiBlcmYoeCkgaXMgdXNlZC4gIFRoZSBtYWduaXR1ZGUgb2YgdGhlIGZpcnN0IG5lZ2xlY3RlZAorICogdGVybXMgaXMgbGVzcyB0aGFuIDIqKi04NC4KICAqLwogZWZ4ID0gIDEuMjgzNzkxNjcwOTU1MTI1ODYzMTZlLTAxLCAvKiAweDNGQzA2RUJBLCAweDgyMTREQjY5ICovCiBlZng4PSAgMS4wMjcwMzMzMzY3NjQxMDA2OTA1M2UrMDAsIC8qIDB4M0ZGMDZFQkEsIDB4ODIxNERCNjkgKi8KKy8qCisgKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gZXJmIG9uIFswLDAuODQzNzVdCisgKi8KIHBwMCAgPSAgMS4yODM3OTE2NzA5NTUxMjU1ODU2MWUtMDEsIC8qIDB4M0ZDMDZFQkEsIDB4ODIxNERCNjggKi8KIHBwMSAgPSAtMy4yNTA0MjEwNzI0NzAwMTQ5OTM3MGUtMDEsIC8qIDB4QkZENENEN0QsIDB4NjkxQ0I5MTMgKi8KIHBwMiAgPSAtMi44NDgxNzQ5NTc1NTk4NTEwNDc2NmUtMDIsIC8qIDB4QkY5RDJBNTEsIDB4REJENzE5NEYgKi8KQEAgLTEzNCw3ICsxNDEsNyBAQAogcXE0ICA9ICAxLjMyNDk0NzM4MDA0MzIxNjQ0NTI2ZS0wNCwgLyogMHgzRjIxNURDOSwgMHgyMjFDMUExMCAqLwogcXE1ICA9IC0zLjk2MDIyODI3ODc3NTM2ODEyMzIwZS0wNiwgLyogMHhCRUQwOUM0MywgMHg0MkEyNjEyMCAqLwogLyoKLSAqIENvZWZmaWNpZW50cyBmb3IgYXBwcm94aW1hdGlvbiB0byAgZXJmICBpbiBbMC44NDM3NSwxLjI1XQorICogQ29lZmZpY2llbnRzIGZvciBhcHByb3hpbWF0aW9uIHRvIGVyZiBpbiBbMC44NDM3NSwxLjI1XQogICovCiBwYTAgID0gLTIuMzYyMTE4NTYwNzUyNjU5NDQwNzdlLTAzLCAvKiAweEJGNjM1OUI4LCAweEJFRjc3NTM4ICovCiBwYTEgID0gIDQuMTQ4NTYxMTg2ODM3NDgzMzE2NjZlLTAxLCAvKiAweDNGREE4RDAwLCAweEFEOTJCMzREICovCkBAIC0xNTAsNyArMTU3LDcgQEAKIHFhNSAgPSAgMS4zNjM3MDgzOTEyMDI5MDUwNzM2MmUtMDIsIC8qIDB4M0Y4QkVEQzIsIDB4NkI1MUREMUMgKi8KIHFhNiAgPSAgMS4xOTg0NDk5ODQ2Nzk5MTA3NDE3MGUtMDIsIC8qIDB4M0Y4ODhCNTQsIDB4NTczNTE1MUQgKi8KIC8qCi0gKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gIGVyZmMgaW4gWzEuMjUsMS8wLjM1XQorICogQ29lZmZpY2llbnRzIGZvciBhcHByb3hpbWF0aW9uIHRvIGVyZmMgaW4gWzEuMjUsMS8wLjM1XQogICovCiByYTAgID0gLTkuODY0OTQ0MDM0ODQ3MTQ4MjI3MDVlLTAzLCAvKiAweEJGODQzNDEyLCAweDYwMEQ2NDM1ICovCiByYTEgID0gLTYuOTM4NTg1NzI3MDcxODE3NjQzNzJlLTAxLCAvKiAweEJGRTYzNDE2LCAweEU0QkE3MzYwICovCkBAIC0xNjksNyArMTc2LDcgQEAKIHNhNyAgPSAgNi41NzAyNDk3NzAzMTkyODE3MDEzNWUrMDAsIC8qIDB4NDAxQTQ3RUYsIDB4OEU0ODRBOTMgKi8KIHNhOCAgPSAtNi4wNDI0NDE1MjE0ODU4MDk4NzQzOGUtMDIsIC8qIDB4QkZBRUVGRjIsIDB4RUU3NDlBNjIgKi8KIC8qCi0gKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gIGVyZmMgaW4gWzEvLjM1LDI4XQorICogQ29lZmZpY2llbnRzIGZvciBhcHByb3hpbWF0aW9uIHRvIGVyZmMgaW4gWzEvLjM1LDI4XQogICovCiByYjAgID0gLTkuODY0OTQyOTI0NzAwMDk5Mjg1OTdlLTAzLCAvKiAweEJGODQzNDEyLCAweDM5RTg2RjRBICovCiByYjEgID0gLTcuOTkyODMyMzc2ODA1MjMwMDY1NzRlLTAxLCAvKiAweEJGRTk5M0JBLCAweDcwQzI4NURFICovCkBAIC0yMDEsNyArMjA4LDcgQEAKIAlpZihpeCA8IDB4M2ZlYjAwMDApIHsJCS8qIHx4fDwwLjg0Mzc1ICovCiAJICAgIGlmKGl4IDwgMHgzZTMwMDAwMCkgeyAJLyogfHh8PDIqKi0yOCAqLwogCSAgICAgICAgaWYgKGl4IDwgMHgwMDgwMDAwMCkKLQkJICAgIHJldHVybiAwLjEyNSooOC4wKngrZWZ4OCp4KTsgIC8qYXZvaWQgdW5kZXJmbG93ICovCisJCSAgICByZXR1cm4gKDgqeCtlZng4KngpLzg7CS8qIGF2b2lkIHNwdXJpb3VzIHVuZGVyZmxvdyAqLwogCQlyZXR1cm4geCArIGVmeCp4OwogCSAgICB9CiAJICAgIHogPSB4Kng7CkBAIC0yMjIsMTUgKzIyOSwxMiBAQAogCXggPSBmYWJzKHgpOwogIAlzID0gb25lLyh4KngpOwogCWlmKGl4PCAweDQwMDZEQjZFKSB7CS8qIHx4fCA8IDEvMC4zNSAqLwotCSAgICBSPXJhMCtzKihyYTErcyoocmEyK3MqKHJhMytzKihyYTQrcyooCi0JCQkJcmE1K3MqKHJhNitzKnJhNykpKSkpKTsKLQkgICAgUz1vbmUrcyooc2ExK3MqKHNhMitzKihzYTMrcyooc2E0K3MqKAotCQkJCXNhNStzKihzYTYrcyooc2E3K3Mqc2E4KSkpKSkpKTsKKwkgICAgUj1yYTArcyoocmExK3MqKHJhMitzKihyYTMrcyoocmE0K3MqKHJhNStzKihyYTYrcypyYTcpKSkpKSk7CisJICAgIFM9b25lK3MqKHNhMStzKihzYTIrcyooc2EzK3MqKHNhNCtzKihzYTUrcyooc2E2K3MqKHNhNysKKwkJcypzYTgpKSkpKSkpOwogCX0gZWxzZSB7CS8qIHx4fCA+PSAxLzAuMzUgKi8KLQkgICAgUj1yYjArcyoocmIxK3MqKHJiMitzKihyYjMrcyoocmI0K3MqKAotCQkJCXJiNStzKnJiNikpKSkpOwotCSAgICBTPW9uZStzKihzYjErcyooc2IyK3MqKHNiMytzKihzYjQrcyooCi0JCQkJc2I1K3MqKHNiNitzKnNiNykpKSkpKTsKKwkgICAgUj1yYjArcyoocmIxK3MqKHJiMitzKihyYjMrcyoocmI0K3MqKHJiNStzKnJiNikpKSkpOworCSAgICBTPW9uZStzKihzYjErcyooc2IyK3MqKHNiMytzKihzYjQrcyooc2I1K3MqKHNiNitzKnNiNykpKSkpKTsKIAl9CiAJeiAgPSB4OwogCVNFVF9MT1dfV09SRCh6LDApOwpAQCAtMjM4LDYgKzI0MiwxMCBAQAogCWlmKGh4Pj0wKSByZXR1cm4gb25lLXIveDsgZWxzZSByZXR1cm4gIHIveC1vbmU7CiB9CiAKKyNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKK19fd2Vha19yZWZlcmVuY2UoZXJmLCBlcmZsKTsKKyNlbmRpZgorCiBkb3VibGUKIGVyZmMoZG91YmxlIHgpCiB7CkBAIC0yNzksMjMgKzI4NywyMyBAQAogCSAgICB4ID0gZmFicyh4KTsKICAJICAgIHMgPSBvbmUvKHgqeCk7CiAJICAgIGlmKGl4PCAweDQwMDZEQjZEKSB7CS8qIHx4fCA8IDEvLjM1IH4gMi44NTcxNDMqLwotCSAgICAgICAgUj1yYTArcyoocmExK3MqKHJhMitzKihyYTMrcyoocmE0K3MqKAotCQkJCXJhNStzKihyYTYrcypyYTcpKSkpKSk7Ci0JICAgICAgICBTPW9uZStzKihzYTErcyooc2EyK3MqKHNhMytzKihzYTQrcyooCi0JCQkJc2E1K3MqKHNhNitzKihzYTcrcypzYTgpKSkpKSkpOworCQlSPXJhMCtzKihyYTErcyoocmEyK3MqKHJhMytzKihyYTQrcyoocmE1K3MqKHJhNitzKnJhNykpKSkpKTsKKwkJUz1vbmUrcyooc2ExK3MqKHNhMitzKihzYTMrcyooc2E0K3MqKHNhNStzKihzYTYrcyooc2E3KworCQkgICAgcypzYTgpKSkpKSkpOwogCSAgICB9IGVsc2UgewkJCS8qIHx4fCA+PSAxLy4zNSB+IDIuODU3MTQzICovCiAJCWlmKGh4PDAmJml4Pj0weDQwMTgwMDAwKSByZXR1cm4gdHdvLXRpbnk7LyogeCA8IC02ICovCi0JICAgICAgICBSPXJiMCtzKihyYjErcyoocmIyK3MqKHJiMytzKihyYjQrcyooCi0JCQkJcmI1K3MqcmI2KSkpKSk7Ci0JICAgICAgICBTPW9uZStzKihzYjErcyooc2IyK3MqKHNiMytzKihzYjQrcyooCi0JCQkJc2I1K3MqKHNiNitzKnNiNykpKSkpKTsKKwkJUj1yYjArcyoocmIxK3MqKHJiMitzKihyYjMrcyoocmI0K3MqKHJiNStzKnJiNikpKSkpOworCQlTPW9uZStzKihzYjErcyooc2IyK3MqKHNiMytzKihzYjQrcyooc2I1K3MqKHNiNitzKnNiNykpKSkpKTsKIAkgICAgfQogCSAgICB6ICA9IHg7CiAJICAgIFNFVF9MT1dfV09SRCh6LDApOwotCSAgICByICA9ICBfX2llZWU3NTRfZXhwKC16KnotMC41NjI1KSoKLQkJCV9faWVlZTc1NF9leHAoKHoteCkqKHoreCkrUi9TKTsKKwkgICAgciAgPSAgX19pZWVlNzU0X2V4cCgteip6LTAuNTYyNSkqX19pZWVlNzU0X2V4cCgoei14KSooeit4KStSL1MpOwogCSAgICBpZihoeD4wKSByZXR1cm4gci94OyBlbHNlIHJldHVybiB0d28tci94OwogCX0gZWxzZSB7CiAJICAgIGlmKGh4PjApIHJldHVybiB0aW55KnRpbnk7IGVsc2UgcmV0dXJuIHR3by10aW55OwogCX0KIH0KKworI2lmIChMREJMX01BTlRfRElHID09IDUzKQorX193ZWFrX3JlZmVyZW5jZShlcmZjLCBlcmZjbCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19lcmZmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZXJmZi5jCmluZGV4IGEzNTc5ZjEuLmQ2Y2ZiZDIgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19lcmZmLmMKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2VyZmYuYwpAQCAtMTksNjQgKzE5LDYzIEBACiAjaW5jbHVkZSAibWF0aC5oIgogI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgogCisvKiBYWFggUHJldmVudCBjb21waWxlcnMgZnJvbSBlcnJvbmVvdXNseSBjb25zdGFudCBmb2xkaW5nOiAqLworc3RhdGljIGNvbnN0IHZvbGF0aWxlIGZsb2F0IHRpbnkgPSAxZS0zMDsKKwogc3RhdGljIGNvbnN0IGZsb2F0Ci10aW55CSAgICA9IDFlLTMwLAotaGFsZj0gIDUuMDAwMDAwMDAwMGUtMDEsIC8qIDB4M0YwMDAwMDAgKi8KLW9uZSA9ICAxLjAwMDAwMDAwMDBlKzAwLCAvKiAweDNGODAwMDAwICovCi10d28gPSAgMi4wMDAwMDAwMDAwZSswMCwgLyogMHg0MDAwMDAwMCAqLworaGFsZj0gMC41LAorb25lID0gMSwKK3R3byA9IDIsCitlcnggPSA4LjQyNjk3MTQ0ZS0wMSwJCQkvKiAweDNmNTdiYjAwICovCiAvKgotICogQ29lZmZpY2llbnRzIGZvciBhcHByb3hpbWF0aW9uIHRvICBlcmYgb24gWzAsMC44NDM3NV0KKyAqIEluIHRoZSBkb21haW4gWzAsIDIqKi0xNF0sIG9ubHkgdGhlIGZpcnN0IHRlcm0gaW4gdGhlIHBvd2VyIHNlcmllcworICogZXhwYW5zaW9uIG9mIGVyZih4KSBpcyB1c2VkLiAgVGhlIG1hZ25pdHVkZSBvZiB0aGUgZmlyc3QgbmVnbGVjdGVkCisgKiB0ZXJtcyBpcyBsZXNzIHRoYW4gMioqLTQyLgogICovCi1lZnggPSAgMS4yODM3OTE2NjEzZS0wMSwgLyogMHgzZTAzNzVkNCAqLwotZWZ4OD0gIDEuMDI3MDMzMzI5MGUrMDAsIC8qIDB4M2Y4Mzc1ZDQgKi8KK2VmeCA9IDEuMjgzNzkxNjZlLTAxLCAvKiAweDNlMDM3NWQ0ICovCitlZng4PSAxLjAyNzAzMzMzZSswMCwgLyogMHgzZjgzNzVkNCAqLwogLyoKLSAqICBEb21haW4gWzAsIDAuODQzNzVdLCByYW5nZSB+Wy01LjQ0NDZlLTEwLDUuNTE5N2UtMTBdOgotICogIHwoZXJmKHgpIC0geCkveCAtIHAoeCkvcSh4KXwgPCAyKiotMzEuCisgKiBEb21haW4gWzAsIDAuODQzNzVdLCByYW5nZSB+Wy01LjQ0MTllLTEwLCA1LjUxNzllLTEwXToKKyAqIHwoZXJmKHgpIC0geCkveCAtIHBwKHgpL3FxKHgpfCA8IDIqKi0zMQogICovCi1wcDAgID0gIDEuMjgzNzkxNjZlLTAxRiwgLyogIDB4MS4wNmViYThwLTMgKi8KLXBwMSAgPSAtMy4zNjAzMDM5NGUtMDFGLCAvKiAtMHgxLjU4MTg1YXAtMiAqLwotcHAyICA9IC0xLjg2MjYwMjE5ZS0wM0YsIC8qIC0weDEuZTg0NTFlcC0xMCAqLwotcXExICA9ICAzLjEyMzI0Mjg2ZS0wMUYsIC8qICAweDEuM2ZkMWYwcC0yICovCi1xcTIgID0gIDIuMTYwNzAzMDJlLTAyRiwgLyogIDB4MS42MjAyNzRwLTYgKi8KLXFxMyAgPSAtMS45ODg1OTQxOWUtMDNGLCAvKiAtMHgxLjA0YTYyNnAtOSAqLworcHAwICA9ICAxLjI4Mzc5MTY2ZS0wMSwgLyogMHgzZTAzNzVkNCAqLworcHAxICA9IC0zLjM2MDMwMzk0ZS0wMSwgLyogMHhiZWFjMGMyZCAqLworcHAyICA9IC0xLjg2MjYxMzk1ZS0wMywgLyogMHhiYWY0MjJmNCAqLworcXExICA9ICAzLjEyMzI0MzE1ZS0wMSwgLyogMHgzZTlmZThmOSAqLworcXEyICA9ICAyLjE2MDcwNDE0ZS0wMiwgLyogMHgzY2IxMDE0MCAqLworcXEzICA9IC0xLjk4ODU5MzcyZS0wMywgLyogMHhiYjAyNTMxMSAqLwogLyoKLSAqIERvbWFpbiBbMC44NDM3NSwgMS4yNV0sIHJhbmdlIH5bLTEuOTUzZS0xMSwxLjk0MGUtMTFdOgotICogfChlcmYoeCkgLSBlcngpIC0gcCh4KS9xKHgpfCA8IDIqKi0zNi4KKyAqIERvbWFpbiBbMC44NDM3NSwgMS4yNV0sIHJhbmdlIH5bLTEuMDIzZS05LCAxLjAyM2UtOV06CisgKiB8KGVyZih4KSAtIGVyeCkgLSBwYSh4KS9xYSh4KXwgPCAyKiotMzEKICAqLwotZXJ4ICA9ICA4LjQyNjk3MTQ0ZS0wMUYsIC8qICAweDEuYWY3NjAwcC0xLiAgZXJmKDEpIHJvdW5kZWQgdG8gMTYgYml0cy4gKi8KLXBhMCAgPSAgMy42NDkzOTEzN2UtMDZGLCAvKiAgMHgxLmU5ZDAyMnAtMTkgKi8KLXBhMSAgPSAgNC4xNTEwOTY5NGUtMDFGLCAvKiAgMHgxLmE5MTI4NHAtMiAqLwotcGEyICA9IC0xLjY1MTc5OTM4ZS0wMUYsIC8qIC0weDEuNTI0OWRjcC0zICovCi1wYTMgID0gIDEuMTA5MTQ0OTFlLTAxRiwgLyogIDB4MS5jNjRlNDZwLTQgKi8KLXFhMSAgPSAgNi4wMjA3NDM4NWUtMDFGLCAvKiAgMHgxLjM0NDMxOHAtMSAqLwotcWEyICA9ICA1LjM1OTM0Njg3ZS0wMUYsIC8qICAweDEuMTI2NjA4cC0xICovCi1xYTMgID0gIDEuNjg1NzYxMDZlLTAxRiwgLyogIDB4MS41OTNlNmVwLTMgKi8KLXFhNCAgPSAgNS42MjE4MTIxMmUtMDJGLCAvKiAgMHgxLmNjODlmMnAtNSAqLworcGEwICA9ICAzLjY1MDQxMDQ2ZS0wNiwgLyogMHgzNjc0Zjk5MyAqLworcGExICA9ICA0LjE1MTA5MzA3ZS0wMSwgLyogMHgzZWQ0ODkzNSAqLworcGEyICA9IC0yLjA5Mzk1NzIyZS0wMSwgLyogMHhiZTU2NmJkNSAqLworcGEzICA9ICA4LjY3Njc3NTU0ZS0wMiwgLyogMHgzZGIxYjM0YiAqLworcWExICA9ICA0Ljk1NTYwOTc0ZS0wMSwgLyogMHgzZWZkYmEyYiAqLworcWEyICA9ICAzLjcxMjQ4NTEzZS0wMSwgLyogMHgzZWJlMTQ0OSAqLworcWEzICA9ICAzLjkyNDc4OTY1ZS0wMiwgLyogMHgzZDIwYzI2NyAqLwogLyoKLSAqIERvbWFpbiBbMS4yNSwxLzAuMzVdLCByYW5nZSB+Wy03LjA0M2UtMTAsNy40NTdlLTEwXToKLSAqIHxsb2coeCplcmZjKHgpKSArIHgqKjIgKyAwLjU2MjUgLSByKHgpL3MoeCl8IDwgMioqLTMwCisgKiBEb21haW4gWzEuMjUsMS8wLjM1XSwgcmFuZ2UgflstNC44MjFlLTksIDQuOTI3ZS05XToKKyAqIHxsb2coeCplcmZjKHgpKSArIHgqKjIgKyAwLjU2MjUgLSByYSh4KS9zYSh4KXwgPCAyKiotMjgKICAqLwotcmEwICA9IC05Ljg3MTMyNzMyZS0wM0YsIC8qIC0weDEuNDM3NmIycC03ICovCi1yYTEgID0gLTUuNTM2MDU5MTRlLTAxRiwgLyogLTB4MS4xYjcyM2NwLTEgKi8KLXJhMiAgPSAtMi4xNzU4OTE4OGUrMDBGLCAvKiAtMHgxLjE2ODNhMHArMSAqLwotcmEzICA9IC0xLjQzMjY4MDg1ZSswMEYsIC8qIC0weDEuNmVjNDJjcCswICovCi1zYTEgID0gIDUuNDU5OTU0MjZlKzAwRiwgLyogIDB4MS41ZDZmZTRwKzIgKi8KLXNhMiAgPSAgNi42OTc5ODA4OGUrMDBGLCAvKiAgMHgxLmFjYWJiOHArMiAqLwotc2EzICA9ICAxLjQzMTEzMDg5ZSswMEYsIC8qICAweDEuNmU1ZTk4cCswICovCi1zYTQgID0gLTUuNzczOTc0OTZlLTAyRiwgLyogLTB4MS5kOTAxMDhwLTUgKi8KK3JhMCAgPSAtOS44ODE1NjcyMWUtMDMsIC8qIDB4YmMyMWU2NGMgKi8KK3JhMSAgPSAtNS40MzY1ODM3NmUtMDEsIC8qIDB4YmYwYjJkMzIgKi8KK3JhMiAgPSAtMS42NjgyODMxMGUrMDAsIC8qIDB4YmZkNThhNGQgKi8KK3JhMyAgPSAtNi45MTU1NDE4OWUtMDEsIC8qIDB4YmYzMTA5YjIgKi8KK3NhMSAgPSAgNC40ODU4MTU1M2UrMDAsIC8qIDB4NDA4ZjhiY2QgKi8KK3NhMiAgPSAgNC4xMDc5OTE3MGUrMDAsIC8qIDB4NDA4Mzc0YWIgKi8KK3NhMyAgPSAgNS41Mzg1NTE4MWUtMDEsIC8qIDB4M2YwZGM5NzQgKi8KIC8qCi0gKiBEb21haW4gWzEvMC4zNSwgMTFdLCByYW5nZSB+Wy0yLjI2NGUtMTMsMi4zMzZlLTEzXToKLSAqIHxsb2coeCplcmZjKHgpKSArIHgqKjIgKyAwLjU2MjUgLSByKHgpL3MoeCl8IDwgMioqLTQyCisgKiBEb21haW4gWzIuODU3MTUsIDExXSwgcmFuZ2UgflstMS40ODRlLTksIDEuNTA1ZS05XToKKyAqIHxsb2coeCplcmZjKHgpKSArIHgqKjIgKyAwLjU2MjUgLSByYih4KS9zYih4KXwgPCAyKiotMzAKICAqLwotcmIwICA9IC05Ljg2NDk0MzEwZS0wM0YsIC8qIC0weDEuNDM0MTI0cC03ICovCi1yYjEgID0gLTYuMjUxNzEyNDRlLTAxRiwgLyogLTB4MS40MDE2NzJwLTEgKi8KLXJiMiAgPSAtNi4xNjQ5ODMyN2UrMDBGLCAvKiAtMHgxLjhhOGYxNnArMiAqLwotcmIzICA9IC0xLjY2Njk2ODczZSswMUYsIC8qIC0weDEuMGFiNzBhcCs0ICovCi1yYjQgID0gLTkuNTM3NjQzNDNlKzAwRiwgLyogLTB4MS4zMTM0NjBwKzMgKi8KLXNiMSAgPSAgMS4yNjg4NDg5OWUrMDFGLCAvKiAgMHgxLjk2MDgxY3ArMyAqLwotc2IyICA9ICA0LjUxODM5NTIzZSswMUYsIC8qICAweDEuNjk3OGJjcCs1ICovCi1zYjMgID0gIDQuNzI4MTAyMTFlKzAxRiwgLyogIDB4MS43YTNmODhwKzUgKi8KLXNiNCAgPSAgOC45MzAzMzMxNGUrMDBGOyAvKiAgMHgxLjFkYzU0YXArMyAqLworcmIwICA9IC05Ljg2NDk2OTE4ZS0wMywgLyogMHhiYzIxYTBhZSAqLworcmIxICA9IC01LjQ4MDQ5ODA4ZS0wMSwgLyogMHhiZjBjNGNmZSAqLworcmIyICA9IC0xLjg0MTE1Njg0ZSswMCwgLyogMHhiZmViYWIwNyAqLworc2IxICA9ICA0Ljg3MTMyNzQwZSswMCwgLyogMHg0MDliZTFlYSAqLworc2IyICA9ICAzLjA0OTgyNzEwZSswMCwgLyogMHg0MDQzMzA1ZSAqLworc2IzICA9IC03LjYxOTAwNjYzZS0wMTsgLyogMHhiZjQzMGJlYyAqLwogCiBmbG9hdAogZXJmZihmbG9hdCB4KQpAQCAtODUsOSArODQsOSBAQAogCWZsb2F0IFIsUyxQLFEscyx5LHoscjsKIAlHRVRfRkxPQVRfV09SRChoeCx4KTsKIAlpeCA9IGh4JjB4N2ZmZmZmZmY7Ci0JaWYoaXg+PTB4N2Y4MDAwMDApIHsJCS8qIGVyZihuYW4pPW5hbiAqLworCWlmKGl4Pj0weDdmODAwMDAwKSB7CQkvKiBlcmZmKG5hbik9bmFuICovCiAJICAgIGkgPSAoKHVfaW50MzJfdCloeD4+MzEpPDwxOwotCSAgICByZXR1cm4gKGZsb2F0KSgxLWkpK29uZS94OwkvKiBlcmYoKy1pbmYpPSstMSAqLworCSAgICByZXR1cm4gKGZsb2F0KSgxLWkpK29uZS94OwkvKiBlcmZmKCstaW5mKT0rLTEgKi8KIAl9CiAKIAlpZihpeCA8IDB4M2Y1ODAwMDApIHsJCS8qIHx4fDwwLjg0Mzc1ICovCkBAIC0xMDUsNyArMTA0LDcgQEAKIAlpZihpeCA8IDB4M2ZhMDAwMDApIHsJCS8qIDAuODQzNzUgPD0gfHh8IDwgMS4yNSAqLwogCSAgICBzID0gZmFic2YoeCktb25lOwogCSAgICBQID0gcGEwK3MqKHBhMStzKihwYTIrcypwYTMpKTsKLQkgICAgUSA9IG9uZStzKihxYTErcyoocWEyK3MqKHFhMytzKnFhNCkpKTsKKwkgICAgUSA9IG9uZStzKihxYTErcyoocWEyK3MqcWEzKSk7CiAJICAgIGlmKGh4Pj0wKSByZXR1cm4gZXJ4ICsgUC9ROyBlbHNlIHJldHVybiAtZXJ4IC0gUC9ROwogCX0KIAlpZiAoaXggPj0gMHg0MDgwMDAwMCkgewkJLyogaW5mPnx4fD49NCAqLwpAQCAtMTEzLDEyICsxMTIsMTIgQEAKIAl9CiAJeCA9IGZhYnNmKHgpOwogIAlzID0gb25lLyh4KngpOwotCWlmKGl4PCAweDQwMzZEQjZFKSB7CS8qIHx4fCA8IDEvMC4zNSAqLworCWlmKGl4PCAweDQwMzZkYjhjKSB7CS8qIHx4fCA8IDIuODU3MTUgfiAxLzAuMzUgKi8KIAkgICAgUj1yYTArcyoocmExK3MqKHJhMitzKnJhMykpOwotCSAgICBTPW9uZStzKihzYTErcyooc2EyK3MqKHNhMytzKnNhNCkpKTsKLQl9IGVsc2UgewkvKiB8eHwgPj0gMS8wLjM1ICovCi0JICAgIFI9cmIwK3MqKHJiMStzKihyYjIrcyoocmIzK3MqcmI0KSkpOwotCSAgICBTPW9uZStzKihzYjErcyooc2IyK3MqKHNiMytzKnNiNCkpKTsKKwkgICAgUz1vbmUrcyooc2ExK3MqKHNhMitzKnNhMykpOworCX0gZWxzZSB7CS8qIHx4fCA+PSAyLjg1NzE1IH4gMS8wLjM1ICovCisJICAgIFI9cmIwK3MqKHJiMStzKnJiMik7CisJICAgIFM9b25lK3MqKHNiMStzKihzYjIrcypzYjMpKTsKIAl9CiAJU0VUX0ZMT0FUX1dPUkQoeixoeCYweGZmZmZlMDAwKTsKIAlyICA9IGV4cGYoLXoqei0wLjU2MjVGKSpleHBmKCh6LXgpKih6K3gpK1IvUyk7CkBAIC0xMzIsOCArMTMxLDggQEAKIAlmbG9hdCBSLFMsUCxRLHMseSx6LHI7CiAJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CiAJaXggPSBoeCYweDdmZmZmZmZmOwotCWlmKGl4Pj0weDdmODAwMDAwKSB7CQkJLyogZXJmYyhuYW4pPW5hbiAqLwotCQkJCQkJLyogZXJmYygrLWluZik9MCwyICovCisJaWYoaXg+PTB4N2Y4MDAwMDApIHsJCQkvKiBlcmZjZihuYW4pPW5hbiAqLworCQkJCQkJLyogZXJmY2YoKy1pbmYpPTAsMiAqLwogCSAgICByZXR1cm4gKGZsb2F0KSgoKHVfaW50MzJfdCloeD4+MzEpPDwxKStvbmUveDsKIAl9CiAKQEAgLTE1NSw3ICsxNTQsNyBAQAogCWlmKGl4IDwgMHgzZmEwMDAwMCkgewkJLyogMC44NDM3NSA8PSB8eHwgPCAxLjI1ICovCiAJICAgIHMgPSBmYWJzZih4KS1vbmU7CiAJICAgIFAgPSBwYTArcyoocGExK3MqKHBhMitzKnBhMykpOwotCSAgICBRID0gb25lK3MqKHFhMStzKihxYTIrcyoocWEzK3MqcWE0KSkpOworCSAgICBRID0gb25lK3MqKHFhMStzKihxYTIrcypxYTMpKTsKIAkgICAgaWYoaHg+PTApIHsKIAkgICAgICAgIHogID0gb25lLWVyeDsgcmV0dXJuIHogLSBQL1E7CiAJICAgIH0gZWxzZSB7CkBAIC0xNjUsMTMgKzE2NCwxMyBAQAogCWlmIChpeCA8IDB4NDEzMDAwMDApIHsJCS8qIHx4fDwxMSAqLwogCSAgICB4ID0gZmFic2YoeCk7CiAgCSAgICBzID0gb25lLyh4KngpOwotCSAgICBpZihpeDwgMHg0MDM2REI2RCkgewkvKiB8eHwgPCAxLy4zNSB+IDIuODU3MTQzKi8KLQkgICAgICAgIFI9cmEwK3MqKHJhMStzKihyYTIrcypyYTMpKTsKLQkgICAgICAgIFM9b25lK3MqKHNhMStzKihzYTIrcyooc2EzK3Mqc2E0KSkpOwotCSAgICB9IGVsc2UgewkJCS8qIHx4fCA+PSAxLy4zNSB+IDIuODU3MTQzICovCisJICAgIGlmKGl4PCAweDQwMzZkYjhjKSB7CS8qIHx4fCA8IDIuODU3MTUgfiAxLy4zNSAqLworCQlSPXJhMCtzKihyYTErcyoocmEyK3MqcmEzKSk7CisJCVM9b25lK3MqKHNhMStzKihzYTIrcypzYTMpKTsKKwkgICAgfSBlbHNlIHsJCQkvKiB8eHwgPj0gMi44NTcxNSB+IDEvLjM1ICovCiAJCWlmKGh4PDAmJml4Pj0weDQwYTAwMDAwKSByZXR1cm4gdHdvLXRpbnk7LyogeCA8IC01ICovCi0JICAgICAgICBSPXJiMCtzKihyYjErcyoocmIyK3MqKHJiMytzKnJiNCkpKTsKLQkJUz1vbmUrcyooc2IxK3MqKHNiMitzKihzYjMrcypzYjQpKSk7CisJCVI9cmIwK3MqKHJiMStzKnJiMik7CisJCVM9b25lK3MqKHNiMStzKihzYjIrcypzYjMpKTsKIAkgICAgfQogCSAgICBTRVRfRkxPQVRfV09SRCh6LGh4JjB4ZmZmZmUwMDApOwogCSAgICByICA9IGV4cGYoLXoqei0wLjU2MjVGKSpleHBmKCh6LXgpKih6K3gpK1IvUyk7CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmVtcXVvbC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JlbXF1b2wuYwppbmRleCA4ODk5MjkzLi43MTI2NTFjIDEwMDY0NAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmVtcXVvbC5jCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW9sLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKICAqIGlzIHByZXNlcnZlZC4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JpbnRsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludGwuYwppbmRleCBlNTViNDBlLi5iNDNkZjg5IDEwMDY0NAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludGwuYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludGwuYwpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSA8ZmxvYXQuaD4KICNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+CiAKICNpbmNsdWRlICJmcG1hdGguaCIKIApkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JvdW5kLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfcm91bmQuYwppbmRleCA2NWRlMzFiLi5mYWIzMDE5IDEwMDY0NAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfcm91bmQuYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfcm91bmQuYwpAQCAtMjcsMjUgKzI3LDM0IEBACiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAKLSNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKIAogZG91YmxlCiByb3VuZChkb3VibGUgeCkKIHsKIAlkb3VibGUgdDsKKwl1aW50MzJfdCBoeDsKIAotCWlmICghaXNmaW5pdGUoeCkpCi0JCXJldHVybiAoeCk7CisJR0VUX0hJR0hfV09SRChoeCwgeCk7CisJaWYgKChoeCAmIDB4N2ZmZmZmZmYpID09IDB4N2ZmMDAwMDApCisJCXJldHVybiAoeCArIHgpOwogCi0JaWYgKHggPj0gMC4wKSB7CisJaWYgKCEoaHggJiAweDgwMDAwMDAwKSkgewogCQl0ID0gZmxvb3IoeCk7CiAJCWlmICh0IC0geCA8PSAtMC41KQotCQkJdCArPSAxLjA7CisJCQl0ICs9IDE7CiAJCXJldHVybiAodCk7CiAJfSBlbHNlIHsKIAkJdCA9IGZsb29yKC14KTsKIAkJaWYgKHQgKyB4IDw9IC0wLjUpCi0JCQl0ICs9IDEuMDsKKwkJCXQgKz0gMTsKIAkJcmV0dXJuICgtdCk7CiAJfQogfQorCisjaWYgKExEQkxfTUFOVF9ESUcgPT0gNTMpCitfX3dlYWtfcmVmZXJlbmNlKHJvdW5kLCByb3VuZGwpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfcm91bmRmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfcm91bmRmLmMKaW5kZXggOTUyZThlNy4uZTdlMmViOSAxMDA2NDQKLS0tIGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JvdW5kZi5jCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yb3VuZGYuYwpAQCAtMjcsMjUgKzI3LDI4IEBACiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAKLSNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgogCiBmbG9hdAogcm91bmRmKGZsb2F0IHgpCiB7CiAJZmxvYXQgdDsKKwl1aW50MzJfdCBoeDsKIAotCWlmICghaXNmaW5pdGUoeCkpCi0JCXJldHVybiAoeCk7CisJR0VUX0ZMT0FUX1dPUkQoaHgsIHgpOworCWlmICgoaHggJiAweDdmZmZmZmZmKSA9PSAweDdmODAwMDAwKQorCQlyZXR1cm4gKHggKyB4KTsKIAotCWlmICh4ID49IDAuMCkgeworCWlmICghKGh4ICYgMHg4MDAwMDAwMCkpIHsKIAkJdCA9IGZsb29yZih4KTsKLQkJaWYgKHQgLSB4IDw9IC0wLjUpCi0JCQl0ICs9IDEuMDsKKwkJaWYgKHQgLSB4IDw9IC0wLjVGKQorCQkJdCArPSAxOwogCQlyZXR1cm4gKHQpOwogCX0gZWxzZSB7CiAJCXQgPSBmbG9vcmYoLXgpOwotCQlpZiAodCArIHggPD0gLTAuNSkKLQkJCXQgKz0gMS4wOworCQlpZiAodCArIHggPD0gLTAuNUYpCisJCQl0ICs9IDE7CiAJCXJldHVybiAoLXQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yb3VuZGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yb3VuZGwuYwppbmRleCBhNzBiNjE3Li4yZDE1ZTEzIDEwMDY0NAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfcm91bmRsLmMKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JvdW5kbC5jCkBAIC0yNywyNSArMjcsMzYgQEAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKIAotI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorI2lmZGVmIF9faTM4Nl9fCisjaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImZwbWF0aC5oIgorI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKIAogbG9uZyBkb3VibGUKIHJvdW5kbChsb25nIGRvdWJsZSB4KQogewogCWxvbmcgZG91YmxlIHQ7CisJdWludDE2X3QgaHg7CiAKLQlpZiAoIWlzZmluaXRlKHgpKQotCQlyZXR1cm4gKHgpOworCUdFVF9MREJMX0VYUFNJR04oaHgsIHgpOworCWlmICgoaHggJiAweDdmZmYpID09IDB4N2ZmZikKKwkJcmV0dXJuICh4ICsgeCk7CiAKLQlpZiAoeCA+PSAwLjApIHsKKwlFTlRFUkkoKTsKKworCWlmICghKGh4ICYgMHg4MDAwKSkgewogCQl0ID0gZmxvb3JsKHgpOwotCQlpZiAodCAtIHggPD0gLTAuNSkKLQkJCXQgKz0gMS4wOwotCQlyZXR1cm4gKHQpOworCQlpZiAodCAtIHggPD0gLTAuNUwpCisJCQl0ICs9IDE7CisJCVJFVFVSTkkodCk7CiAJfSBlbHNlIHsKIAkJdCA9IGZsb29ybCgteCk7Ci0JCWlmICh0ICsgeCA8PSAtMC41KQotCQkJdCArPSAxLjA7Ci0JCXJldHVybiAoLXQpOworCQlpZiAodCArIHggPD0gLTAuNUwpCisJCQl0ICs9IDE7CisJCVJFVFVSTkkoLXQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW5oLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdGFuaC5jCmluZGV4IDk2ZTM1NjUuLjZkMjZjNjkgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW5oLmMKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RhbmguYwpAQCAtMzcsMTAgKzM3LDEzIEBACiAgKglvbmx5IHRhbmgoMCk9MCBpcyBleGFjdCBmb3IgZmluaXRlIGFyZ3VtZW50LgogICovCiAKKyNpbmNsdWRlIDxmbG9hdC5oPgorCiAjaW5jbHVkZSAibWF0aC5oIgogI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgogCi1zdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMCwgdHdvID0gMi4wLCB0aW55ID0gMS4wZS0zMDAsIGh1Z2UgPSAxLjBlMzAwOworc3RhdGljIGNvbnN0IHZvbGF0aWxlIGRvdWJsZSB0aW55ID0gMS4wZS0zMDA7CitzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMCwgdHdvID0gMi4wLCBodWdlID0gMS4wZTMwMDsKIAogZG91YmxlCiB0YW5oKGRvdWJsZSB4KQpAQCAtNzUsMyArNzgsNyBAQAogCX0KIAlyZXR1cm4gKGp4Pj0wKT8gejogLXo7CiB9CisKKyNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKK19fd2Vha19yZWZlcmVuY2UodGFuaCwgdGFuaGwpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdGFuaGYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW5oZi5jCmluZGV4IDA0ZjA5YzYuLmY1MzdiZTQgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW5oZi5jCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW5oZi5jCkBAIC0xOSw3ICsxOSw5IEBACiAjaW5jbHVkZSAibWF0aC5oIgogI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgogCi1zdGF0aWMgY29uc3QgZmxvYXQgb25lPTEuMCwgdHdvPTIuMCwgdGlueSA9IDEuMGUtMzAsIGh1Z2UgPSAxLjBlMzA7CitzdGF0aWMgY29uc3Qgdm9sYXRpbGUgZmxvYXQgdGlueSA9IDEuMGUtMzA7CitzdGF0aWMgY29uc3QgZmxvYXQgb25lPTEuMCwgdHdvPTIuMCwgaHVnZSA9IDEuMGUzMDsKKwogZmxvYXQKIHRhbmhmKGZsb2F0IHgpCiB7CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdGFuaGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW5obC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NjE1OGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdGFuaGwuYwpAQCAtMCwwICsxLDE3MiBAQAorLyogZnJvbTogRnJlZUJTRDogaGVhZC9saWIvbXN1bi9zcmMvc190YW5obC5jIFhYWCAqLworCisvKiBAKCMpc190YW5oLmMgNS4xIDkzLzA5LzI0ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIFNlZSBzX3RhbmguYyBmb3IgY29tcGxldGUgY29tbWVudHMuCisgKgorICogQ29udmVydGVkIHRvIGxvbmcgZG91YmxlIGJ5IEJydWNlIEQuIEV2YW5zLgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2lmZGVmIF9faTM4Nl9fCisjaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJmcG1hdGguaCIKKyNpbmNsdWRlICJrX2V4cGwuaCIKKworI2lmIExEQkxfTUFYX0VYUCAhPSAweDQwMDAKKy8qIFdlIGFsc28gcmVxdWlyZSB0aGUgdXN1YWwgZXhwc2lnbiBlbmNvZGluZy4gKi8KKyNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgorI2VuZGlmCisKKyNkZWZpbmUJQklBUwkoTERCTF9NQVhfRVhQIC0gMSkKKworc3RhdGljIGNvbnN0IHZvbGF0aWxlIGRvdWJsZSB0aW55ID0gMS4wZS0zMDA7CitzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyNpZiBMREJMX01BTlRfRElHID09IDY0CisvKgorICogRG9tYWluIFstMC4yNSwgMC4yNV0sIHJhbmdlIH5bLTEuNjMwNGUtMjIsIDEuNjMwNGUtMjJdOgorICogfHRhbmgoeCkveCAtIHQoeCl8IDwgMioqLTcyLjMKKyAqLworc3RhdGljIGNvbnN0IHVuaW9uIElFRUVsMmJpdHMKK1QzdSA9IExEODBDKDB4YWFhYWFhYWFhYWFhYWE5ZiwgLTIsIC0zLjMzMzMzMzMzMzMzMzMzMzMzMDE3ZS0xTCk7CisjZGVmaW5lCVQzCVQzdS5lCitzdGF0aWMgY29uc3QgZG91YmxlCitUNSAgPSAgMS4zMzMzMzMzMzMzMzMzMzE0ZS0xLAkJLyogIDB4MTExMTExMTExMTExMGEuMHAtNTUgKi8KK1Q3ICA9IC01LjM5NjgyNTM5NjgyMTA0ODVlLTIsCQkvKiAtMHgxYmExYmExYmExYTFhMS4wcC01NyAqLworVDkgID0gIDIuMTg2OTQ4ODUzMTM5MzgxN2UtMiwJCS8qICAweDE2NjRmNDg4MTcyMDIyLjBwLTU4ICovCitUMTEgPSAtOC44NjMyMzUyMzQ1OTY0NTkxZS0zLAkJLyogLTB4MTIyNmUzNGJjMTM4ZDUuMHAtNTkgKi8KK1QxMyA9ICAzLjU5MjExNjk3MDk5OTM3NzFlLTMsCQkvKiAgMHgxZDZkMzcxZDNlNDAwZi4wcC02MSAqLworVDE1ID0gLTEuNDU1NTc4NjQxNTc1NjAwMWUtMywJCS8qIC0weDE3ZDkyM2FhNjM4MTRkLjBwLTYyICovCitUMTcgPSAgNS44NjQ1MjY3ODc2Mjk2NzkzZS00LAkJLyogIDB4MTMzNzg1ODliODVhYTcuMHAtNjMgKi8KK1QxOSA9IC0yLjExMjEwMzM1NzEzOTIyMjRlLTQ7CQkvKiAtMHgxYmFmMGFmODBjNDA5MC4wcC02NSAqLworI2VsaWYgTERCTF9NQU5UX0RJRyA9PSAxMTMKKy8qCisgKiBEb21haW4gWy0wLjI1LCAwLjI1XSwgcmFuZ2UgflstMi40MjExZS0zNywgMi40MjExZS0zN106CisgKiB8dGFuaCh4KS94IC0gdCh4KXwgPCAyKioxMjEuNgorICovCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK1QzID0gLTMuMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI5ODBlLTFMLAkvKiAtMHgxNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0ZS4wcC0xMTRMICovCitUNSAgPSAgMS4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMjcwNzI2MGUtMUwsCS8qICAweDExMTExMTExMTExMTExMTExMTExMTExMTBhYjdiLjBwLTExNUwgKi8KK1Q3ICA9IC01LjM5NjgyNTM5NjgyNTM5NjgyNTM5NjgyNTM1NzIzNDgyMzE0ZS0yTCwJLyogLTB4MWJhMWJhMWJhMWJhMWJhMWJhMWJhMTdiNWZjOTguMHAtMTE3TCAqLworVDkgID0gIDIuMTg2OTQ4ODUzNjE1NTIwMjgyMTg2OTM1OTExNDkwNjE3MTdlLTJMLAkvKiAgMHgxNjY0ZjQ4ODJjMTBmOWYzMmQ2YjFhMTJhMjVlNS4wcC0xMThMICovCitUMTEgPSAtOC44NjMyMzU1Mjk5MDIxOTY1Njg4Mzc2MjM0NzczNjM4MTg1MWUtM0wsCS8qIC0weDEyMjZlMzU1ZTZjMjNjOGY1YTVhMGYzODZjYjRkLjBwLTExOUwgKi8KK1QxMyA9ICAzLjU5MjEyODAzNjU3MjQ4MTAxMzU4MzE0Mzk4MjIwODIyNzIyZS0zTCwJLyogIDB4MWQ2ZDNkMGUxNTdkZGZiNDAzYWQzNjM3NDQyYzYuMHAtMTIxTCAqLworVDE1ID0gLTEuNDU1ODM0Mzg3MDUxMzE3OTY1MTI1NjgwMTAzNDg4NzQ2NjJlLTNMOwkvKiAtMHgxN2RhMzY0NTJiNzVlMTUwYzQ0Y2MzNDI1M2IzNC4wcC0xMjJMICovCitzdGF0aWMgY29uc3QgZG91YmxlCitUMTcgPSAgNS45MDAyNzQ0MDk0NTU2NjIxZS00LAkJLyogIDB4MTM1NTgyNDgwMzY2OGUuMHAtNjMgKi8KK1QxOSA9IC0yLjM5MTI5MTE0MjQyNjA1MTZlLTQsCQkvKiAtMHgxZjU3ZDc3MzRjOGRkZS4wcC02NSAqLworVDIxID0gIDkuNjkxNTM3OTUzNTUxMjg5OGUtNSwJCS8qICAweDE5NjdlMThhZDZhNmNhLjBwLTY2ICovCitUMjMgPSAtMy45Mjc4MzIyOTgzMTU2MzUzZS01LAkJLyogLTB4MTQ5N2Q4ZTZiNzU3MjkuMHAtNjcgKi8KK1QyNSA9ICAxLjU5MTg4ODcyMjAxNDM4NjllLTUsCQkvKiAgMHgxMGIxMzE5OTk4Y2FmYS4wcC02OCAqLworVDI3ID0gLTYuNDUxNDI5NTIzMTYzMDk1NmUtNiwJCS8qIC0weDFiMGYyYjcxYjIxOGViLjBwLTcwICovCitUMjkgPSAgMi42MTIwNzU0MDQzOTY0MzY1ZS02LAkJLyogIDB4MTVlOTYzYTNjZjNhMzkuMHAtNzEgKi8KK1QzMSA9IC0xLjA0MDc1NjcyMzEwMDMzMTRlLTYsCQkvKiAtMHgxMTc2MDQxZTY1Njg2OS4wcC03MiAqLworVDMzID0gIDMuNDc0NDExNzU1NDA2MzU3NGUtNzsJCS8qICAweDE3NTBmZTczMmNhYjljLjBwLTc0ICovCisjZW5kaWYgLyogTERCTF9NQU5UX0RJRyA9PSA2NCAqLworCitzdGF0aWMgaW5saW5lIGxvbmcgZG91YmxlCitkaXZsKGxvbmcgZG91YmxlIGEsIGxvbmcgZG91YmxlIGIsIGxvbmcgZG91YmxlIGMsIGxvbmcgZG91YmxlIGQsCisgICAgbG9uZyBkb3VibGUgZSwgbG9uZyBkb3VibGUgZikKK3sKKwlsb25nIGRvdWJsZSBpbnYsIHI7CisJZmxvYXQgZnIsIGZ3OworCisJXzJzdW1GKGEsIGMpOworCWIgPSBiICsgYzsKKwlfMnN1bUYoZCwgZik7CisJZSA9IGUgKyBmOworCisJaW52ID0gMSAvIChkICsgZSk7CisKKwlyID0gKGEgKyBiKSAqIGludjsKKwlmciA9IHI7CisJciA9IGZyOworCisJZncgPSBkICsgZTsKKwllID0gZCAtIGZ3ICsgZTsKKwlkID0gZnc7CisKKwlyID0gciArIChhIC0gZCAqIHIgKyBiIC0gZSAqIHIpICogaW52OworCisJcmV0dXJuIHI7Cit9CisKK2xvbmcgZG91YmxlCit0YW5obChsb25nIGRvdWJsZSB4KQoreworCWxvbmcgZG91YmxlIGhpLGxvLHMseDIseDQsejsKKwlkb3VibGUgZHgyOworCWludDE2X3QgangsaXg7CisKKwlHRVRfTERCTF9FWFBTSUdOKGp4LHgpOworCWl4ID0gangmMHg3ZmZmOworCisgICAgLyogeCBpcyBJTkYgb3IgTmFOICovCisJaWYoaXg+PTB4N2ZmZikgeworCSAgICBpZiAoang+PTApIHJldHVybiBvbmUveCtvbmU7ICAgIC8qIHRhbmgoKy1pbmYpPSstMSAqLworCSAgICBlbHNlICAgICAgIHJldHVybiBvbmUveC1vbmU7ICAgIC8qIHRhbmgoTmFOKSA9IE5hTiAqLworCX0KKworCUVOVEVSSSgpOworCisgICAgLyogfHh8IDwgNDAgKi8KKwlpZiAoaXggPCAweDQwMDQgfHwgZmFic2woeCkgPCA0MCkgewkvKiB8eHw8NDAgKi8KKwkgICAgaWYgKF9fcHJlZGljdF9mYWxzZShpeDxCSUFTLShMREJMX01BTlRfRElHKzEpLzIpKSB7CS8qIHx4fDxUSU5ZICovCisJCS8qIHRhbmgoKy0wKSA9ICswOyB0YW5oKHRpbnkpID0gdGlueSgtKykgd2l0aCBpbmV4YWN0OiAqLworCQlyZXR1cm4gKHggPT0gMCA/IHggOiAoMHgxcDIwMCAqIHggLSB4KSAqIDB4MXAtMjAwKTsKKwkgICAgfQorCSAgICBpZiAoaXg8MHgzZmZkKSB7CQkvKiB8eHw8MC4yNSAqLworCQl4MiA9IHgqeDsKKyNpZiBMREJMX01BTlRfRElHID09IDY0CisJCXg0ID0geDIqeDI7CisJCVJFVFVSTkkoKChUMTkqeDIgKyBUMTcpKng0ICsgKFQxNSp4MiArIFQxMykpKih4Mip4KngyKng0Kng0KSArCisJCSAgICAoKFQxMSp4MiArIFQ5KSp4NCArIChUNyp4MiArIFQ1KSkqKHgyKngqeDIpICsKKwkJICAgIFQzKih4Mip4KSArIHgpOworI2VsaWYgTERCTF9NQU5UX0RJRyA9PSAxMTMKKwkJZHgyID0geDI7CisjaWYgMAorCQlSRVRVUk5JKCgoKCgoKCgoKCgoKCgoVDMzKmR4MiArIFQzMSkqZHgyICsgVDI5KSpkeDIgKyBUMjcpKmR4MiArCisJCSAgICBUMjUpKngyICsgVDIzKSp4MiArIFQyMSkqeDIgKyBUMTkpKngyICsgVDE3KSp4MiArCisJCSAgICBUMTUpKngyICsgVDEzKSp4MiArIFQxMSkqeDIgKyBUOSkqeDIgKyBUNykqeDIgKyBUNSkqCisJCSAgICAoeDIqeCp4MikgKworCQkgICAgVDMqKHgyKngpICsgeCk7CisjZWxzZQorCQlsb25nIGRvdWJsZSBxID0gKCgoKCgoKCgoKCgoKChUMzMqZHgyICsgVDMxKSpkeDIgKyBUMjkpKmR4MiArIFQyNykqZHgyICsKKwkJICAgIFQyNSkqeDIgKyBUMjMpKngyICsgVDIxKSp4MiArIFQxOSkqeDIgKyBUMTcpKngyICsKKwkJICAgIFQxNSkqeDIgKyBUMTMpKngyICsgVDExKSp4MiArIFQ5KSp4MiArIFQ3KSp4MiArIFQ1KSoKKwkJICAgICh4Mip4KngyKTsKKwkJUkVUVVJOSShxICsgVDMqKHgyKngpICsgeCk7CisjZW5kaWYKKyNlbmRpZgorCSAgICB9CisJICAgIGtfaGV4cGwoMipmYWJzbCh4KSwgJmhpLCAmbG8pOworCSAgICBpZiAoaXg8MHg0MDAxICYmIGZhYnNsKHgpIDwgMS41KQkvKiB8eHw8MS41ICovCisJCXogPSBkaXZsKGhpLCBsbywgLTAuNSwgaGksIGxvLCAwLjUpOworCSAgICBlbHNlCisJCXogPSBvbmUgLSBvbmUvKGxvKzAuNStoaSk7CisgICAgLyogfHh8ID49IDQwLCByZXR1cm4gKy0xICovCisJfSBlbHNlIHsKKwkgICAgeiA9IG9uZSAtIHRpbnk7CQkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KKwl9CisJcyA9IDE7CisJaWYgKGp4PDApIHMgPSAtMTsKKwlSRVRVUk5JKHMqeik7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKysvaW5jbHVkZS9jbWF0aCBiL2xpYnN0ZGMrKy9pbmNsdWRlL2NtYXRoCmluZGV4IGJlNzAzNDMuLmExNWIyYWMgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy9pbmNsdWRlL2NtYXRoCisrKyBiL2xpYnN0ZGMrKy9pbmNsdWRlL2NtYXRoCkBAIC0zMSw3ICszMSw3IEBACiAjZGVmaW5lIEJJT05JQ19MSUJTVERDUFBfSU5DTFVERV9DTUFUSF9fCiAKIC8qCi0gKiBTdGFuZGFyZCBDKysgTGlicmFyeSB3cmFwcGVyIGFyb3VuZCB0aGUgQyB0aW1lLmggaGVhZGVyIGZpbGUuCisgKiBTdGFuZGFyZCBDKysgTGlicmFyeSB3cmFwcGVyIGFyb3VuZCB0aGUgQyBtYXRoLmggaGVhZGVyIGZpbGUuCiAgKi8KIAogI2luY2x1ZGUgPGNzdGRkZWY+CmRpZmYgLS1naXQgYS9saWJzdGRjKysvaW5jbHVkZS9uZXcgYi9saWJzdGRjKysvaW5jbHVkZS9uZXcKaW5kZXggMDI1M2U4Yi4uYzVhNDNkZSAxMDA2NDQKLS0tIGEvbGlic3RkYysrL2luY2x1ZGUvbmV3CisrKyBiL2xpYnN0ZGMrKy9pbmNsdWRlL25ldwpAQCAtMTMsMTkgKzEzLDE5IEBACiAKIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCk7CiB2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCk7Ci12b2lkICBvcGVyYXRvciBkZWxldGUodm9pZCopOwotdm9pZCAgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopOwordm9pZCAgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwordm9pZCAgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93KCk7CiB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190Jik7CiB2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKTsKLXZvaWQgIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKTsKLXZvaWQgIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpOwordm9pZCAgb3BlcmF0b3IgZGVsZXRlKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7Cit2b2lkICBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwogCiBpbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBwOyB9CiBpbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0KIAogLy8gdGhlc2UgbmV4dCB0d28gYXJlIG5vdCByZWFsbHkgcmVxdWlyZWQsIHNpbmNlIGV4Y2VwdGlvbnMgYXJlIG9mZgotaW5saW5lIHZvaWQgIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgdm9pZCopIHsgfQotaW5saW5lIHZvaWQgIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCB2b2lkKikgeyB9CitpbmxpbmUgdm9pZCAgb3BlcmF0b3IgZGVsZXRlKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH0KK2lubGluZSB2b2lkICBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9CiAKIH0gIC8vIGV4dGVybiBDKysKIApkaWZmIC0tZ2l0IGEvbGlua2VyL0FuZHJvaWQubWsgYi9saW5rZXIvQW5kcm9pZC5tawppbmRleCA0Mjk4MDMyLi5kNmUwMDk1IDEwMDY0NAotLS0gYS9saW5rZXIvQW5kcm9pZC5taworKysgYi9saW5rZXIvQW5kcm9pZC5tawpAQCAtNDUsMTMgKzQ1LDExIEBACiAjIFRPRE86IHNwbGl0IG91dCB0aGUgYXNmbGFncy4KIExPQ0FMX0FTRkxBR1MgOj0gJChMT0NBTF9DRkxBR1MpCiAKLUxPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tayAkKExPQ0FMX1BBVEgpL2xpbmtlcl9leGVjdXRhYmxlLm1rCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKIAogTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBsaWJjX25vbWFsbG9jCiAKLUxPQ0FMX0ZPUkNFX1NUQVRJQ19FWEVDVVRBQkxFIDo9IHRydWUgIyBub3QgbmVjZXNzYXJ5IHdoZW4gbm90IGluY2x1ZGluZyBCVUlMRF9FWEVDVVRBQkxFCi0KLUxPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVggOj0gJChsaW5rZXJfMm5kX2FyY2hfdmFyX3ByZWZpeCkKK0xPQ0FMX0ZPUkNFX1NUQVRJQ19FWEVDVVRBQkxFIDo9IHRydWUKIAogTE9DQUxfTU9EVUxFIDo9IGxpbmtlcgogTE9DQUxfTU9EVUxFX1NURU1fMzIgOj0gbGlua2VyCkBAIC02MiwxNyArNjAsMTIgQEAKICMgbWVhbmluZ2Z1bCBuYW1lIHJlc29sdXRpb24uCiBMT0NBTF9TVFJJUF9NT0RVTEUgOj0ga2VlcF9zeW1ib2xzCiAKLWluY2x1ZGUgJChMT0NBTF9QQVRIKS9saW5rZXJfZXhlY3V0YWJsZS5tawotaWZkZWYgVEFSR0VUXzJORF9BUkNICi1MT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYIDo9ICQoVEFSR0VUXzJORF9BUkNIX1ZBUl9QUkVGSVgpCi1PVkVSUklERV9CVUlMVF9NT0RVTEVfUEFUSCA6PQotTE9DQUxfQlVJTFRfTU9EVUxFIDo9Ci1MT0NBTF9JTlNUQUxMRURfTU9EVUxFIDo9Ci1MT0NBTF9NT0RVTEVfU1RFTSA6PQotTE9DQUxfQlVJTFRfTU9EVUxFX1NURU0gOj0KLUxPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTSA6PQotTE9DQUxfSU5URVJNRURJQVRFX1RBUkdFVFMgOj0KLWluY2x1ZGUgJChMT0NBTF9QQVRIKS9saW5rZXJfZXhlY3V0YWJsZS5tawotZW5kaWYKKyMgSW5zZXJ0IGFuIGV4dHJhIG9iamNvcHkgc3RlcCB0byBhZGQgcHJlZml4IHRvIHN5bWJvbHMuCisjIE5vdGUgd2UgYXJlIHVzaW5nICI9IiBpbnN0ZWFkIG9mICI6PSIgdG8gZGVmZXIgdGhlIGV2YWx1YXRpb24sCisjIGJlY2F1c2UgTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWCBvciBsaW5rZWRfbW9kdWxlIGlzbid0IHNldCBwcm9wZXJseSB5ZXQgYXQgdGhpcyBwb2ludC4KK0xPQ0FMX1BPU1RfTElOS19DTUQgPSAkKGhpZGUpICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9PQkpDT1BZKSBcCisgIC0tcHJlZml4LXN5bWJvbHM9X19kbF8gJChsaW5rZWRfbW9kdWxlKQorCitpbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKIAogaW5jbHVkZSAkKGNhbGwgZmlyc3QtbWFrZWZpbGVzLXVuZGVyLCQoTE9DQUxfUEFUSCkpCmRpZmYgLS1naXQgYS9saW5rZXIvZGxmY24uY3BwIGIvbGlua2VyL2RsZmNuLmNwcAppbmRleCAzZWI1YmVhLi41N2IyYzIzIDEwMDY0NAotLS0gYS9saW5rZXIvZGxmY24uY3BwCisrKyBiL2xpbmtlci9kbGZjbi5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKIAogLyogVGhpcyBmaWxlIGhpamFja3MgdGhlIHN5bWJvbHMgc3R1YmJlZCBvdXQgaW4gbGliZGwuc28uICovCiAKLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgZ19kbF9tdXRleCA9IFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnX2RsX211dGV4ID0gUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVJfTlA7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBfX2Jpb25pY19zZXRfZGxlcnJvcihjaGFyKiBuZXdfdmFsdWUpIHsKICAgY2hhcioqIGRsZXJyb3Jfc2xvdCA9ICZyZWludGVycHJldF9jYXN0PGNoYXIqKj4oX19nZXRfdGxzKCkpW1RMU19TTE9UX0RMRVJST1JdOwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgIGluZm8tPmRsaV9mYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNpLT5iYXNlKTsKIAogICAvLyBEZXRlcm1pbmUgaWYgYW55IHN5bWJvbCBpbiB0aGUgbGlicmFyeSBjb250YWlucyB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuCi0gIEVsZlcoU3ltKSogc3ltID0gZGxhZGRyX2ZpbmRfc3ltYm9sKHNpLCBhZGRyKTsKKyAgRWxmVyhTeW0pKiBzeW0gPSBzaS0+ZmluZF9zeW1ib2xfYnlfYWRkcmVzcyhhZGRyKTsKICAgaWYgKHN5bSAhPSBudWxscHRyKSB7CiAgICAgaW5mby0+ZGxpX3NuYW1lID0gc2ktPmdldF9zdHJpbmcoc3ltLT5zdF9uYW1lKTsKICAgICBpbmZvLT5kbGlfc2FkZHIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzaS0+cmVzb2x2ZV9zeW1ib2xfYWRkcmVzcyhzeW0pKTsKQEAgLTIzMiwyMCArMjMyLDIwIEBACiBzdGF0aWMgdW5zaWduZWQgZ19saWJkbF9jaGFpbnNbXSA9IHsgMCwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMCB9OwogI2VuZGlmCiAKLXN0YXRpYyBzb2luZm8gX19saWJkbF9pbmZvKCJsaWJkbC5zbyIsIG51bGxwdHIsIDApOworc3RhdGljIHNvaW5mbyBfX2xpYmRsX2luZm8oImxpYmRsLnNvIiwgbnVsbHB0ciwgMCwgUlRMRF9HTE9CQUwpOwogCiAvLyBUaGlzIGlzIHVzZWQgYnkgdGhlIGR5bmFtaWMgbGlua2VyLiBFdmVyeSBwcm9jZXNzIGdldHMgdGhlc2Ugc3ltYm9scyBmb3IgZnJlZS4KIHNvaW5mbyogZ2V0X2xpYmRsX2luZm8oKSB7CiAgIGlmICgoX19saWJkbF9pbmZvLmZsYWdzICYgRkxBR19MSU5LRUQpID09IDApIHsKICAgICBfX2xpYmRsX2luZm8uZmxhZ3MgfD0gRkxBR19MSU5LRUQ7Ci0gICAgX19saWJkbF9pbmZvLnN0cnRhYiA9IEFORFJPSURfTElCRExfU1RSVEFCOwotICAgIF9fbGliZGxfaW5mby5zeW10YWIgPSBnX2xpYmRsX3N5bXRhYjsKLSAgICBfX2xpYmRsX2luZm8ubmJ1Y2tldCA9IHNpemVvZihnX2xpYmRsX2J1Y2tldHMpL3NpemVvZih1bnNpZ25lZCk7Ci0gICAgX19saWJkbF9pbmZvLm5jaGFpbiA9IHNpemVvZihnX2xpYmRsX2NoYWlucykvc2l6ZW9mKHVuc2lnbmVkKTsKLSAgICBfX2xpYmRsX2luZm8uYnVja2V0ID0gZ19saWJkbF9idWNrZXRzOwotICAgIF9fbGliZGxfaW5mby5jaGFpbiA9IGdfbGliZGxfY2hhaW5zOworICAgIF9fbGliZGxfaW5mby5zdHJ0YWJfID0gQU5EUk9JRF9MSUJETF9TVFJUQUI7CisgICAgX19saWJkbF9pbmZvLnN5bXRhYl8gPSBnX2xpYmRsX3N5bXRhYjsKKyAgICBfX2xpYmRsX2luZm8ubmJ1Y2tldF8gPSBzaXplb2YoZ19saWJkbF9idWNrZXRzKS9zaXplb2YodW5zaWduZWQpOworICAgIF9fbGliZGxfaW5mby5uY2hhaW5fID0gc2l6ZW9mKGdfbGliZGxfY2hhaW5zKS9zaXplb2YodW5zaWduZWQpOworICAgIF9fbGliZGxfaW5mby5idWNrZXRfID0gZ19saWJkbF9idWNrZXRzOworICAgIF9fbGliZGxfaW5mby5jaGFpbl8gPSBnX2xpYmRsX2NoYWluczsKICAgICBfX2xpYmRsX2luZm8ucmVmX2NvdW50ID0gMTsKLSAgICBfX2xpYmRsX2luZm8uc3RydGFiX3NpemUgPSBzaXplb2YoQU5EUk9JRF9MSUJETF9TVFJUQUIpOworICAgIF9fbGliZGxfaW5mby5zdHJ0YWJfc2l6ZV8gPSBzaXplb2YoQU5EUk9JRF9MSUJETF9TVFJUQUIpOwogICB9CiAKICAgcmV0dXJuICZfX2xpYmRsX2luZm87CmRpZmYgLS1naXQgYS9saW5rZXIvbGlua2VkX2xpc3QuaCBiL2xpbmtlci9saW5rZWRfbGlzdC5oCmluZGV4IDRlNjJlMjAuLmIwODgwNjEgMTAwNjQ0Ci0tLSBhL2xpbmtlci9saW5rZWRfbGlzdC5oCisrKyBiL2xpbmtlci9saW5rZWRfbGlzdC5oCkBAIC0zNiw2ICszNiwxMiBAQAogICAgIGNsZWFyKCk7CiAgIH0KIAorICBMaW5rZWRMaXN0KExpbmtlZExpc3QmJiB0aGF0KSB7CisgICAgdGhpcy0+aGVhZF8gPSB0aGF0LmhlYWRfOworICAgIHRoaXMtPnRhaWxfID0gdGhhdC50YWlsXzsKKyAgICB0aGF0LmhlYWRfID0gdGhhdC50YWlsXyA9IG51bGxwdHI7CisgIH0KKwogICB2b2lkIHB1c2hfZnJvbnQoVCogY29uc3QgZWxlbWVudCkgewogICAgIExpbmtlZExpc3RFbnRyeTxUPiogbmV3X2VudHJ5ID0gQWxsb2NhdG9yOjphbGxvYygpOwogICAgIG5ld19lbnRyeS0+bmV4dCA9IGhlYWRfOwpAQCAtODYsNyArOTIsNyBAQAogICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgRj4KLSAgdm9pZCBmb3JfZWFjaChGIGFjdGlvbikgeworICB2b2lkIGZvcl9lYWNoKEYgYWN0aW9uKSBjb25zdCB7CiAgICAgdmlzaXQoWyZdIChUKiBzaSkgewogICAgICAgYWN0aW9uKHNpKTsKICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTQsNyArMTAwLDcgQEAKICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIEY+Ci0gIGJvb2wgdmlzaXQoRiBhY3Rpb24pIHsKKyAgYm9vbCB2aXNpdChGIGFjdGlvbikgY29uc3QgewogICAgIGZvciAoTGlua2VkTGlzdEVudHJ5PFQ+KiBlID0gaGVhZF87IGUgIT0gbnVsbHB0cjsgZSA9IGUtPm5leHQpIHsKICAgICAgIGlmICghYWN0aW9uKGUtPmVsZW1lbnQpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MCw2ICsxNDYsMTIgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAorICBzdGF0aWMgTGlua2VkTGlzdCBtYWtlX2xpc3QoVCogY29uc3QgZWxlbWVudCkgeworICAgIExpbmtlZExpc3Q8VCwgQWxsb2NhdG9yPiBvbmVfZWxlbWVudF9saXN0OworICAgIG9uZV9lbGVtZW50X2xpc3QucHVzaF9iYWNrKGVsZW1lbnQpOworICAgIHJldHVybiBvbmVfZWxlbWVudF9saXN0OworICB9CisKICBwcml2YXRlOgogICBMaW5rZWRMaXN0RW50cnk8VD4qIGhlYWRfOwogICBMaW5rZWRMaXN0RW50cnk8VD4qIHRhaWxfOwpkaWZmIC0tZ2l0IGEvbGlua2VyL2xpbmtlci5jcHAgYi9saW5rZXIvbGlua2VyLmNwcAppbmRleCAzNWM4Y2JkLi4xZDY4ZGI1IDEwMDY0NAotLS0gYS9saW5rZXIvbGlua2VyLmNwcAorKysgYi9saW5rZXIvbGlua2VyLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlIDxuZXc+CkBAIC0xOTQsNyArMTk1LDcgQEAKICAgLy8gQ29weSB0aGUgbmVjZXNzYXJ5IGZpZWxkcyBpbnRvIHRoZSBkZWJ1ZyBzdHJ1Y3R1cmUuCiAgIGxpbmtfbWFwKiBtYXAgPSAmKGluZm8tPmxpbmtfbWFwX2hlYWQpOwogICBtYXAtPmxfYWRkciA9IGluZm8tPmxvYWRfYmlhczsKLSAgbWFwLT5sX25hbWUgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihpbmZvLT5uYW1lKTsKKyAgbWFwLT5sX25hbWUgPSBpbmZvLT5uYW1lOwogICBtYXAtPmxfbGQgPSBpbmZvLT5keW5hbWljOwogCiAgIC8vIFN0aWNrIHRoZSBuZXcgbGlicmFyeSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgpAQCAtMjgyLDEzICsyODMsMTMgQEAKICAgZ19zb2luZm9fbGlua3NfYWxsb2NhdG9yLnByb3RlY3RfYWxsKHByb3RlY3Rpb24pOwogfQogCi1zdGF0aWMgc29pbmZvKiBzb2luZm9fYWxsb2MoY29uc3QgY2hhciogbmFtZSwgc3RydWN0IHN0YXQqIGZpbGVfc3RhdCwgb2ZmNjRfdCBmaWxlX29mZnNldCkgeworc3RhdGljIHNvaW5mbyogc29pbmZvX2FsbG9jKGNvbnN0IGNoYXIqIG5hbWUsIHN0cnVjdCBzdGF0KiBmaWxlX3N0YXQsIG9mZjY0X3QgZmlsZV9vZmZzZXQsIHVpbnQzMl90IHJ0bGRfZmxhZ3MpIHsKICAgaWYgKHN0cmxlbihuYW1lKSA+PSBTT0lORk9fTkFNRV9MRU4pIHsKICAgICBETF9FUlIoImxpYnJhcnkgbmFtZSBcIiVzXCIgdG9vIGxvbmciLCBuYW1lKTsKICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQogCi0gIHNvaW5mbyogc2kgPSBuZXcgKGdfc29pbmZvX2FsbG9jYXRvci5hbGxvYygpKSBzb2luZm8obmFtZSwgZmlsZV9zdGF0LCBmaWxlX29mZnNldCk7CisgIHNvaW5mbyogc2kgPSBuZXcgKGdfc29pbmZvX2FsbG9jYXRvci5hbGxvYygpKSBzb2luZm8obmFtZSwgZmlsZV9zdGF0LCBmaWxlX29mZnNldCwgcnRsZF9mbGFncyk7CiAKICAgc29uZXh0LT5uZXh0ID0gc2k7CiAgIHNvbmV4dCA9IHNpOwpAQCAtMzE2LDYgKzMxNyw3IEBACiAgICAgfQogICAgIHByZXYgPSB0cmF2OwogICB9CisKICAgaWYgKHRyYXYgPT0gbnVsbHB0cikgewogICAgIC8vIHNpIHdhcyBub3QgaW4gc29saXN0CiAgICAgRExfRVJSKCJuYW1lIFwiJXNcIiBpcyBub3QgaW4gc29saXN0ISIsIHNpLT5uYW1lKTsKQEAgLTMzNSw3ICszMzcsNiBAQAogICBnX3NvaW5mb19hbGxvY2F0b3IuZnJlZShzaSk7CiB9CiAKLQogc3RhdGljIHZvaWQgcGFyc2VfcGF0aChjb25zdCBjaGFyKiBwYXRoLCBjb25zdCBjaGFyKiBkZWxpbWl0ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogYXJyYXksIGNoYXIqIGJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QgbWF4X2NvdW50KSB7CiAgIGlmIChwYXRoID09IG51bGxwdHIpIHsKQEAgLTQxNSw3MiArNDE2LDEzMCBAQAogICByZXR1cm4gcnY7CiB9CiAKLXN0YXRpYyBFbGZXKFN5bSkqIHNvaW5mb19lbGZfbG9va3VwKHNvaW5mbyogc2ksIHVuc2lnbmVkIGhhc2gsIGNvbnN0IGNoYXIqIG5hbWUpIHsKLSAgRWxmVyhTeW0pKiBzeW10YWIgPSBzaS0+c3ltdGFiOworRWxmVyhTeW0pKiBzb2luZm86OmZpbmRfc3ltYm9sX2J5X25hbWUoU3ltYm9sTmFtZSYgc3ltYm9sX25hbWUpIHsKKyAgcmV0dXJuIGlzX2dudV9oYXNoKCkgPyBnbnVfbG9va3VwKHN5bWJvbF9uYW1lKSA6IGVsZl9sb29rdXAoc3ltYm9sX25hbWUpOworfQogCi0gIFRSQUNFX1RZUEUoTE9PS1VQLCAiU0VBUkNIICVzIGluICVzQCVwICV4ICV6ZCIsCi0gICAgICAgICAgICAgbmFtZSwgc2ktPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNpLT5iYXNlKSwgaGFzaCwgaGFzaCAlIHNpLT5uYnVja2V0KTsKLQotICBmb3IgKHVuc2lnbmVkIG4gPSBzaS0+YnVja2V0W2hhc2ggJSBzaS0+bmJ1Y2tldF07IG4gIT0gMDsgbiA9IHNpLT5jaGFpbltuXSkgewotICAgIEVsZlcoU3ltKSogcyA9IHN5bXRhYiArIG47Ci0gICAgaWYgKHN0cmNtcChzaS0+Z2V0X3N0cmluZyhzLT5zdF9uYW1lKSwgbmFtZSkpIGNvbnRpbnVlOwotCi0gICAgLy8gb25seSBjb25jZXJuIG91cnNlbHZlcyB3aXRoIGdsb2JhbCBhbmQgd2VhayBzeW1ib2wgZGVmaW5pdGlvbnMKLSAgICBzd2l0Y2ggKEVMRl9TVF9CSU5EKHMtPnN0X2luZm8pKSB7Ci0gICAgICBjYXNlIFNUQl9HTE9CQUw6Ci0gICAgICBjYXNlIFNUQl9XRUFLOgotICAgICAgICBpZiAocy0+c3Rfc2huZHggPT0gU0hOX1VOREVGKSB7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBUUkFDRV9UWVBFKExPT0tVUCwgIkZPVU5EICVzIGluICVzICglcCkgJXpkIiwKLSAgICAgICAgICAgICAgICAgbmFtZSwgc2ktPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMtPnN0X3ZhbHVlKSwKLSAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihzLT5zdF9zaXplKSk7Ci0gICAgICAgIHJldHVybiBzOwotICAgICAgY2FzZSBTVEJfTE9DQUw6Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgX19saWJjX2ZhdGFsKCJFUlJPUjogVW5leHBlY3RlZCBTVF9CSU5EIHZhbHVlOiAlZCBmb3IgJyVzJyBpbiAnJXMnIiwKLSAgICAgICAgICAgIEVMRl9TVF9CSU5EKHMtPnN0X2luZm8pLCBuYW1lLCBzaS0+bmFtZSk7Ci0gICAgfQorc3RhdGljIGJvb2wgaXNfc3ltYm9sX2dsb2JhbF9hbmRfZGVmaW5lZChjb25zdCBzb2luZm8qIHNpLCBjb25zdCBFbGZXKFN5bSkqIHMpIHsKKyAgaWYgKEVMRl9TVF9CSU5EKHMtPnN0X2luZm8pID09IFNUQl9HTE9CQUwgfHwKKyAgICAgIEVMRl9TVF9CSU5EKHMtPnN0X2luZm8pID09IFNUQl9XRUFLKSB7CisgICAgcmV0dXJuIHMtPnN0X3NobmR4ICE9IFNITl9VTkRFRjsKKyAgfSBlbHNlIGlmIChFTEZfU1RfQklORChzLT5zdF9pbmZvKSAhPSBTVEJfTE9DQUwpIHsKKyAgICBETF9XQVJOKCJ1bmV4cGVjdGVkIFNUX0JJTkQgdmFsdWU6ICVkIGZvciAnJXMnIGluICclcyciLAorICAgICAgICBFTEZfU1RfQklORChzLT5zdF9pbmZvKSwgc2ktPmdldF9zdHJpbmcocy0+c3RfbmFtZSksIHNpLT5uYW1lKTsKICAgfQogCi0gIFRSQUNFX1RZUEUoTE9PS1VQLCAiTk9UIEZPVU5EICVzIGluICVzQCVwICV4ICV6ZCIsCi0gICAgICAgICAgICAgbmFtZSwgc2ktPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNpLT5iYXNlKSwgaGFzaCwgaGFzaCAlIHNpLT5uYnVja2V0KTsKKyAgcmV0dXJuIGZhbHNlOworfQogCitFbGZXKFN5bSkqIHNvaW5mbzo6Z251X2xvb2t1cChTeW1ib2xOYW1lJiBzeW1ib2xfbmFtZSkgeworICB1aW50MzJfdCBoYXNoID0gc3ltYm9sX25hbWUuZ251X2hhc2goKTsKKyAgdWludDMyX3QgaDIgPSBoYXNoID4+IGdudV9zaGlmdDJfOworCisgIHVpbnQzMl90IGJsb29tX21hc2tfYml0cyA9IHNpemVvZihFbGZXKEFkZHIpKSo4OworICB1aW50MzJfdCB3b3JkX251bSA9IChoYXNoIC8gYmxvb21fbWFza19iaXRzKSAmIGdudV9tYXNrd29yZHNfOworICBFbGZXKEFkZHIpIGJsb29tX3dvcmQgPSBnbnVfYmxvb21fZmlsdGVyX1t3b3JkX251bV07CisKKyAgLy8gdGVzdCBhZ2FpbnN0IGJsb29tIGZpbHRlcgorICBpZiAoKDEgJiAoYmxvb21fd29yZCA+PiAoaGFzaCAlIGJsb29tX21hc2tfYml0cykpICYgKGJsb29tX3dvcmQgPj4gKGgyICUgYmxvb21fbWFza19iaXRzKSkpID09IDApIHsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyAgfQorCisgIC8vIGJsb29tIHRlc3Qgc2F5cyAicHJvYmFibHkgeWVzIi4uLgorICB1aW50MzJfdCBuID0gYnVja2V0X1toYXNoICUgbmJ1Y2tldF9dOworCisgIGlmIChuID09IDApIHsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyAgfQorCisgIGRvIHsKKyAgICBFbGZXKFN5bSkqIHMgPSBzeW10YWJfICsgbjsKKyAgICBpZiAoKChjaGFpbl9bbl0gXiBoYXNoKSA+PiAxKSA9PSAwICYmCisgICAgICAgIHN0cmNtcChnZXRfc3RyaW5nKHMtPnN0X25hbWUpLCBzeW1ib2xfbmFtZS5nZXRfbmFtZSgpKSA9PSAwICYmCisgICAgICAgIGlzX3N5bWJvbF9nbG9iYWxfYW5kX2RlZmluZWQodGhpcywgcykpIHsKKyAgICAgIHJldHVybiBzOworICAgIH0KKyAgfSB3aGlsZSAoKGNoYWluX1tuKytdICYgMSkgPT0gMCk7CiAKICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXNvaW5mbzo6c29pbmZvKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IHN0cnVjdCBzdGF0KiBmaWxlX3N0YXQsIG9mZjY0X3QgZmlsZV9vZmZzZXQpIHsKK0VsZlcoU3ltKSogc29pbmZvOjplbGZfbG9va3VwKFN5bWJvbE5hbWUmIHN5bWJvbF9uYW1lKSB7CisgIHVpbnQzMl90IGhhc2ggPSBzeW1ib2xfbmFtZS5lbGZfaGFzaCgpOworCisgIFRSQUNFX1RZUEUoTE9PS1VQLCAiU0VBUkNIICVzIGluICVzQCVwIGg9JXgoZWxmKSAlemQiLAorICAgICAgICAgICAgIHN5bWJvbF9uYW1lLmdldF9uYW1lKCksIG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2UpLCBoYXNoLCBoYXNoICUgbmJ1Y2tldF8pOworCisgIGZvciAodWludDMyX3QgbiA9IGJ1Y2tldF9baGFzaCAlIG5idWNrZXRfXTsgbiAhPSAwOyBuID0gY2hhaW5fW25dKSB7CisgICAgRWxmVyhTeW0pKiBzID0gc3ltdGFiXyArIG47CisgICAgaWYgKHN0cmNtcChnZXRfc3RyaW5nKHMtPnN0X25hbWUpLCBzeW1ib2xfbmFtZS5nZXRfbmFtZSgpKSA9PSAwICYmIGlzX3N5bWJvbF9nbG9iYWxfYW5kX2RlZmluZWQodGhpcywgcykpIHsKKyAgICAgIFRSQUNFX1RZUEUoTE9PS1VQLCAiRk9VTkQgJXMgaW4gJXMgKCVwKSAlemQiLAorICAgICAgICAgICAgICAgc3ltYm9sX25hbWUuZ2V0X25hbWUoKSwgbmFtZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocy0+c3RfdmFsdWUpLAorICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihzLT5zdF9zaXplKSk7CisgICAgICByZXR1cm4gczsKKyAgICB9CisgIH0KKworICBUUkFDRV9UWVBFKExPT0tVUCwgIk5PVCBGT1VORCAlcyBpbiAlc0AlcCAleCAlemQiLAorICAgICAgICAgICAgIHN5bWJvbF9uYW1lLmdldF9uYW1lKCksIG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2UpLCBoYXNoLCBoYXNoICUgbmJ1Y2tldF8pOworCisgIHJldHVybiBudWxscHRyOworfQorCitzb2luZm86OnNvaW5mbyhjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBzdHJ1Y3Qgc3RhdCogZmlsZV9zdGF0LCBvZmY2NF90IGZpbGVfb2Zmc2V0LCBpbnQgcnRsZF9mbGFncykgewogICBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7CiAKICAgc3RybGNweSh0aGlzLT5uYW1lLCBuYW1lLCBzaXplb2YodGhpcy0+bmFtZSkpOwogICBmbGFncyA9IEZMQUdfTkVXX1NPSU5GTzsKLSAgdmVyc2lvbiA9IFNPSU5GT19WRVJTSU9OOworICB2ZXJzaW9uXyA9IFNPSU5GT19WRVJTSU9OOwogCiAgIGlmIChmaWxlX3N0YXQgIT0gbnVsbHB0cikgewotICAgIHRoaXMtPnN0X2RldiA9IGZpbGVfc3RhdC0+c3RfZGV2OwotICAgIHRoaXMtPnN0X2lubyA9IGZpbGVfc3RhdC0+c3RfaW5vOwotICAgIHRoaXMtPmZpbGVfb2Zmc2V0ID0gZmlsZV9vZmZzZXQ7CisgICAgdGhpcy0+c3RfZGV2XyA9IGZpbGVfc3RhdC0+c3RfZGV2OworICAgIHRoaXMtPnN0X2lub18gPSBmaWxlX3N0YXQtPnN0X2lubzsKKyAgICB0aGlzLT5maWxlX29mZnNldF8gPSBmaWxlX29mZnNldDsKICAgfQorCisgIHRoaXMtPnJ0bGRfZmxhZ3NfID0gcnRsZF9mbGFnczsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGVsZmhhc2goY29uc3QgY2hhciogX25hbWUpIHsKLSAgY29uc3QgdW5zaWduZWQgY2hhciogbmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KF9uYW1lKTsKLSAgdW5zaWduZWQgaCA9IDAsIGc7CiAKLSAgd2hpbGUgKCpuYW1lKSB7Ci0gICAgaCA9IChoIDw8IDQpICsgKm5hbWUrKzsKLSAgICBnID0gaCAmIDB4ZjAwMDAwMDA7Ci0gICAgaCBePSBnOwotICAgIGggXj0gZyA+PiAyNDsKK3VpbnQzMl90IFN5bWJvbE5hbWU6OmVsZl9oYXNoKCkgeworICBpZiAoIWhhc19lbGZfaGFzaF8pIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBuYW1lID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4obmFtZV8pOworICAgIHVpbnQzMl90IGggPSAwLCBnOworCisgICAgd2hpbGUgKCpuYW1lKSB7CisgICAgICBoID0gKGggPDwgNCkgKyAqbmFtZSsrOworICAgICAgZyA9IGggJiAweGYwMDAwMDAwOworICAgICAgaCBePSBnOworICAgICAgaCBePSBnID4+IDI0OworICAgIH0KKworICAgIGVsZl9oYXNoXyA9IGg7CisgICAgaGFzX2VsZl9oYXNoXyA9IHRydWU7CiAgIH0KLSAgcmV0dXJuIGg7CisKKyAgcmV0dXJuIGVsZl9oYXNoXzsKIH0KIAotc3RhdGljIEVsZlcoU3ltKSogc29pbmZvX2RvX2xvb2t1cChzb2luZm8qIHNpLCBjb25zdCBjaGFyKiBuYW1lLCBzb2luZm8qKiBsc2kpIHsKLSAgdW5zaWduZWQgZWxmX2hhc2ggPSBlbGZoYXNoKG5hbWUpOwordWludDMyX3QgU3ltYm9sTmFtZTo6Z251X2hhc2goKSB7CisgIGlmICghaGFzX2dudV9oYXNoXykgeworICAgIHVpbnQzMl90IGggPSA1MzgxOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG5hbWUgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihuYW1lXyk7CisgICAgd2hpbGUgKCpuYW1lICE9IDApIHsKKyAgICAgIGggKz0gKGggPDwgNSkgKyAqbmFtZSsrOyAvLyBoKjMzICsgYyA9IGggKyBoICogMzIgKyBjID0gaCArIGggPDwgNSArIGMKKyAgICB9CisKKyAgICBnbnVfaGFzaF8gPSAgaDsKKyAgICBoYXNfZ251X2hhc2hfID0gdHJ1ZTsKKyAgfQorCisgIHJldHVybiBnbnVfaGFzaF87Cit9CisKK3N0YXRpYyBFbGZXKFN5bSkqIHNvaW5mb19kb19sb29rdXAoc29pbmZvKiBzaV9mcm9tLCBjb25zdCBjaGFyKiBuYW1lLCBzb2luZm8qKiBzaV9mb3VuZF9pbiwKKyAgICBjb25zdCBzb2luZm86OnNvaW5mb19saXN0X3QmIGdsb2JhbF9ncm91cCwgY29uc3Qgc29pbmZvOjpzb2luZm9fbGlzdF90JiBsb2NhbF9ncm91cCkgeworICBTeW1ib2xOYW1lIHN5bWJvbF9uYW1lKG5hbWUpOwogICBFbGZXKFN5bSkqIHMgPSBudWxscHRyOwogCiAgIC8qICJUaGlzIGVsZW1lbnQncyBwcmVzZW5jZSBpbiBhIHNoYXJlZCBvYmplY3QgbGlicmFyeSBhbHRlcnMgdGhlIGR5bmFtaWMgbGlua2VyJ3MKQEAgLTQ5NCw2MyArNTUzLDQzIEBACiAgICAqIE5vdGUgdGhhdCB0aGlzIGlzIHVubGlrZWx5IHNpbmNlIHN0YXRpYyBsaW5rZXIgYXZvaWRzIGdlbmVyYXRpbmcKICAgICogcmVsb2NhdGlvbnMgZm9yIC1Cc3ltYm9saWMgbGlua2VkIGR5bmFtaWMgZXhlY3V0YWJsZXMuCiAgICAqLwotICBpZiAoc2ktPmhhc19EVF9TWU1CT0xJQykgewotICAgIERFQlVHKCIlczogbG9va2luZyB1cCAlcyBpbiBsb2NhbCBzY29wZSAoRFRfU1lNQk9MSUMpIiwgc2ktPm5hbWUsIG5hbWUpOwotICAgIHMgPSBzb2luZm9fZWxmX2xvb2t1cChzaSwgZWxmX2hhc2gsIG5hbWUpOworICBpZiAoc2lfZnJvbS0+aGFzX0RUX1NZTUJPTElDKSB7CisgICAgREVCVUcoIiVzOiBsb29raW5nIHVwICVzIGluIGxvY2FsIHNjb3BlIChEVF9TWU1CT0xJQykiLCBzaV9mcm9tLT5uYW1lLCBuYW1lKTsKKyAgICBzID0gc2lfZnJvbS0+ZmluZF9zeW1ib2xfYnlfbmFtZShzeW1ib2xfbmFtZSk7CiAgICAgaWYgKHMgIT0gbnVsbHB0cikgewotICAgICAgKmxzaSA9IHNpOworICAgICAgKnNpX2ZvdW5kX2luID0gc2lfZnJvbTsKICAgICB9CiAgIH0KIAotICBpZiAocyA9PSBudWxscHRyICYmIHNvbWFpbiAhPSBudWxscHRyKSB7Ci0gICAgLy8gMS4gTG9vayBmb3IgaXQgaW4gdGhlIG1haW4gZXhlY3V0YWJsZSB1bmxlc3Mgd2UgYWxyZWFkeSBkaWQuCi0gICAgaWYgKHNpICE9IHNvbWFpbiB8fCAhc2ktPmhhc19EVF9TWU1CT0xJQykgewotICAgICAgREVCVUcoIiVzOiBsb29raW5nIHVwICVzIGluIGV4ZWN1dGFibGUgJXMiLAotICAgICAgICAgICAgc2ktPm5hbWUsIG5hbWUsIHNvbWFpbi0+bmFtZSk7Ci0gICAgICBzID0gc29pbmZvX2VsZl9sb29rdXAoc29tYWluLCBlbGZfaGFzaCwgbmFtZSk7Ci0gICAgICBpZiAocyAhPSBudWxscHRyKSB7Ci0gICAgICAgICpsc2kgPSBzb21haW47Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gMi4gTG9vayBmb3IgaXQgaW4gdGhlIGxkX3ByZWxvYWRzCi0gICAgaWYgKHMgPT0gbnVsbHB0cikgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGdfbGRfcHJlbG9hZHNbaV0gIT0gTlVMTDsgaSsrKSB7Ci0gICAgICAgIHMgPSBzb2luZm9fZWxmX2xvb2t1cChnX2xkX3ByZWxvYWRzW2ldLCBlbGZfaGFzaCwgbmFtZSk7Ci0gICAgICAgIGlmIChzICE9IG51bGxwdHIpIHsKLSAgICAgICAgICAqbHNpID0gZ19sZF9wcmVsb2Fkc1tpXTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIExvb2sgZm9yIHN5bWJvbHMgaW4gdGhlIGxvY2FsIHNjb3BlICh0aGUgb2JqZWN0IHdobyBpcwotICAgKiBzZWFyY2hpbmcpLiBUaGlzIGhhcHBlbnMgd2l0aCBDKysgdGVtcGxhdGVzIG9uIHg4NiBmb3Igc29tZQotICAgKiByZWFzb24uCi0gICAqCi0gICAqIE5vdGVzIG9uIHdlYWsgc3ltYm9sczoKLSAgICogVGhlIEVMRiBzcGVjcyBhcmUgYW1iaWd1b3VzIGFib3V0IHRyZWF0bWVudCBvZiB3ZWFrIGRlZmluaXRpb25zIGluCi0gICAqIGR5bmFtaWMgbGlua2luZy4gIFNvbWUgc3lzdGVtcyByZXR1cm4gdGhlIGZpcnN0IGRlZmluaXRpb24gZm91bmQKLSAgICogYW5kIHNvbWUgdGhlIGZpcnN0IG5vbi13ZWFrIGRlZmluaXRpb24uICAgVGhpcyBpcyBzeXN0ZW0gZGVwZW5kZW50LgotICAgKiBIZXJlIHdlIHJldHVybiB0aGUgZmlyc3QgZGVmaW5pdGlvbiBmb3VuZCBmb3Igc2ltcGxpY2l0eS4gICovCi0KLSAgaWYgKHMgPT0gbnVsbHB0ciAmJiAhc2ktPmhhc19EVF9TWU1CT0xJQykgewotICAgIERFQlVHKCIlczogbG9va2luZyB1cCAlcyBpbiBsb2NhbCBzY29wZSIsIHNpLT5uYW1lLCBuYW1lKTsKLSAgICBzID0gc29pbmZvX2VsZl9sb29rdXAoc2ksIGVsZl9oYXNoLCBuYW1lKTsKLSAgICBpZiAocyAhPSBudWxscHRyKSB7Ci0gICAgICAqbHNpID0gc2k7Ci0gICAgfQotICB9Ci0KKyAgLy8gMS4gTG9vayBmb3IgaXQgaW4gZ2xvYmFsX2dyb3VwCiAgIGlmIChzID09IG51bGxwdHIpIHsKLSAgICBzaS0+Z2V0X2NoaWxkcmVuKCkudmlzaXQoWyZdKHNvaW5mbyogY2hpbGQpIHsKLSAgICAgIERFQlVHKCIlczogbG9va2luZyB1cCAlcyBpbiAlcyIsIHNpLT5uYW1lLCBuYW1lLCBjaGlsZC0+bmFtZSk7Ci0gICAgICBzID0gc29pbmZvX2VsZl9sb29rdXAoY2hpbGQsIGVsZl9oYXNoLCBuYW1lKTsKKyAgICBnbG9iYWxfZ3JvdXAudmlzaXQoWyZdKHNvaW5mbyogZ2xvYmFsX3NpKSB7CisgICAgICBERUJVRygiJXM6IGxvb2tpbmcgdXAgJXMgaW4gJXMgKGZyb20gZ2xvYmFsIGdyb3VwKSIsIHNpX2Zyb20tPm5hbWUsIG5hbWUsIGdsb2JhbF9zaS0+bmFtZSk7CisgICAgICBzID0gZ2xvYmFsX3NpLT5maW5kX3N5bWJvbF9ieV9uYW1lKHN5bWJvbF9uYW1lKTsKICAgICAgIGlmIChzICE9IG51bGxwdHIpIHsKLSAgICAgICAgKmxzaSA9IGNoaWxkOworICAgICAgICAqc2lfZm91bmRfaW4gPSBnbG9iYWxfc2k7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KKworICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CisgIH0KKworICAvLyAyLiBMb29rIGZvciBpdCBpbiB0aGUgbG9jYWwgZ3JvdXAKKyAgaWYgKHMgPT0gbnVsbHB0cikgeworICAgIGxvY2FsX2dyb3VwLnZpc2l0KFsmXShzb2luZm8qIGxvY2FsX3NpKSB7CisgICAgICBpZiAobG9jYWxfc2kgPT0gc2lfZnJvbSAmJiBzaV9mcm9tLT5oYXNfRFRfU1lNQk9MSUMpIHsKKyAgICAgICAgLy8gd2UgYWxyZWFkeSBkaWQgdGhpcyAtIHNraXAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisKKyAgICAgIERFQlVHKCIlczogbG9va2luZyB1cCAlcyBpbiAlcyAoZnJvbSBsb2NhbCBncm91cCkiLCBzaV9mcm9tLT5uYW1lLCBuYW1lLCBsb2NhbF9zaS0+bmFtZSk7CisgICAgICBzID0gbG9jYWxfc2ktPmZpbmRfc3ltYm9sX2J5X25hbWUoc3ltYm9sX25hbWUpOworICAgICAgaWYgKHMgIT0gbnVsbHB0cikgeworICAgICAgICAqc2lfZm91bmRfaW4gPSBsb2NhbF9zaTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKICAgfQpAQCAtNTU4LDkgKzU5Nyw5IEBACiAgIGlmIChzICE9IG51bGxwdHIpIHsKICAgICBUUkFDRV9UWVBFKExPT0tVUCwgInNpICVzIHN5bSAlcyBzLT5zdF92YWx1ZSA9ICVwLCAiCiAgICAgICAgICAgICAgICAiZm91bmQgaW4gJXMsIGJhc2UgPSAlcCwgbG9hZCBiaWFzID0gJXAiLAotICAgICAgICAgICAgICAgc2ktPm5hbWUsIG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMtPnN0X3ZhbHVlKSwKLSAgICAgICAgICAgICAgICgqbHNpKS0+bmFtZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKCpsc2kpLT5iYXNlKSwKLSAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCgqbHNpKS0+bG9hZF9iaWFzKSk7CisgICAgICAgICAgICAgICBzaV9mcm9tLT5uYW1lLCBuYW1lLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzLT5zdF92YWx1ZSksCisgICAgICAgICAgICAgICAoKnNpX2ZvdW5kX2luKS0+bmFtZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKCpzaV9mb3VuZF9pbiktPmJhc2UpLAorICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKCpzaV9mb3VuZF9pbiktPmxvYWRfYmlhcykpOwogICB9CiAKICAgcmV0dXJuIHM7CkBAIC02NDEsMzMgKzY4MCw2MSBAQAogdHlwZWRlZiBsaW5rZWRfbGlzdF90PExvYWRUYXNrPiBMb2FkVGFza0xpc3Q7CiAKIAotLy8gVGhpcyBpcyB1c2VkIGJ5IGRsc3ltKDMpLiAgSXQgcGVyZm9ybXMgc3ltYm9sIGxvb2t1cCBvbmx5IHdpdGhpbiB0aGUKLS8vIHNwZWNpZmllZCBzb2luZm8gb2JqZWN0IGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluIGJyZWFkdGggZmlyc3Qgb3JkZXIuCi1FbGZXKFN5bSkqIGRsc3ltX2hhbmRsZV9sb29rdXAoc29pbmZvKiBzaSwgc29pbmZvKiogZm91bmQsIGNvbnN0IGNoYXIqIG5hbWUpIHsKKy8vIFRoaXMgZnVuY3Rpb24gd2Fsa3MgZG93biB0aGUgdHJlZSBvZiBzb2luZm8gZGVwZW5kZW5jaWVzCisvLyBpbiBicmVhZHRoLWZpcnN0IG9yZGVyIGFuZAorLy8gICAqIGNhbGxzIGFjdGlvbihzb2luZm8qIHNpKSBmb3IgZWFjaCBub2RlLCBhbmQKKy8vICAgKiB0ZXJtaW5hdGVzIHdhbGsgaWYgYWN0aW9uIHJldHVybnMgZmFsc2UuCisvLworLy8gd2Fsa19kZXBlbmRlbmNpZXNfdHJlZSByZXR1cm5zIGZhbHNlIGlmIHdhbGsgd2FzIHRlcm1pbmF0ZWQKKy8vIGJ5IHRoZSBhY3Rpb24gYW5kIHRydWUgb3RoZXJ3aXNlLgordGVtcGxhdGU8dHlwZW5hbWUgRj4KK3N0YXRpYyBib29sIHdhbGtfZGVwZW5kZW5jaWVzX3RyZWUoc29pbmZvKiByb290X3NvaW5mb3NbXSwgc2l6ZV90IHJvb3Rfc29pbmZvc19zaXplLCBGIGFjdGlvbikgewogICBTb2luZm9MaW5rZWRMaXN0IHZpc2l0X2xpc3Q7CiAgIFNvaW5mb0xpbmtlZExpc3QgdmlzaXRlZDsKIAotICB2aXNpdF9saXN0LnB1c2hfYmFjayhzaSk7Ci0gIHNvaW5mbyogY3VycmVudF9zb2luZm87Ci0gIHdoaWxlICgoY3VycmVudF9zb2luZm8gPSB2aXNpdF9saXN0LnBvcF9mcm9udCgpKSAhPSBudWxscHRyKSB7Ci0gICAgaWYgKHZpc2l0ZWQuY29udGFpbnMoY3VycmVudF9zb2luZm8pKSB7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdF9zb2luZm9zX3NpemU7ICsraSkgeworICAgIHZpc2l0X2xpc3QucHVzaF9iYWNrKHJvb3Rfc29pbmZvc1tpXSk7CisgIH0KKworICBzb2luZm8qIHNpOworICB3aGlsZSAoKHNpID0gdmlzaXRfbGlzdC5wb3BfZnJvbnQoKSkgIT0gbnVsbHB0cikgeworICAgIGlmICh2aXNpdGVkLmNvbnRhaW5zKHNpKSkgewogICAgICAgY29udGludWU7CiAgICAgfQogCi0gICAgRWxmVyhTeW0pKiByZXN1bHQgPSBzb2luZm9fZWxmX2xvb2t1cChjdXJyZW50X3NvaW5mbywgZWxmaGFzaChuYW1lKSwgbmFtZSk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IG51bGxwdHIpIHsKLSAgICAgICpmb3VuZCA9IGN1cnJlbnRfc29pbmZvOwotICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoIWFjdGlvbihzaSkpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgdmlzaXRlZC5wdXNoX2JhY2soY3VycmVudF9zb2luZm8pOwogCi0gICAgY3VycmVudF9zb2luZm8tPmdldF9jaGlsZHJlbigpLmZvcl9lYWNoKFsmXShzb2luZm8qIGNoaWxkKSB7CisgICAgdmlzaXRlZC5wdXNoX2JhY2soc2kpOworCisgICAgc2ktPmdldF9jaGlsZHJlbigpLmZvcl9lYWNoKFsmXShzb2luZm8qIGNoaWxkKSB7CiAgICAgICB2aXNpdF9saXN0LnB1c2hfYmFjayhjaGlsZCk7CiAgICAgfSk7CiAgIH0KIAotICByZXR1cm4gbnVsbHB0cjsKKyAgcmV0dXJuIHRydWU7Cit9CisKKworLy8gVGhpcyBpcyB1c2VkIGJ5IGRsc3ltKDMpLiAgSXQgcGVyZm9ybXMgc3ltYm9sIGxvb2t1cCBvbmx5IHdpdGhpbiB0aGUKKy8vIHNwZWNpZmllZCBzb2luZm8gb2JqZWN0IGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluIGJyZWFkdGggZmlyc3Qgb3JkZXIuCitFbGZXKFN5bSkqIGRsc3ltX2hhbmRsZV9sb29rdXAoc29pbmZvKiBzaSwgc29pbmZvKiogZm91bmQsIGNvbnN0IGNoYXIqIG5hbWUpIHsKKyAgRWxmVyhTeW0pKiByZXN1bHQgPSBudWxscHRyOworICBTeW1ib2xOYW1lIHN5bWJvbF9uYW1lKG5hbWUpOworCisKKyAgd2Fsa19kZXBlbmRlbmNpZXNfdHJlZSgmc2ksIDEsIFsmXShzb2luZm8qIGN1cnJlbnRfc29pbmZvKSB7CisgICAgcmVzdWx0ID0gY3VycmVudF9zb2luZm8tPmZpbmRfc3ltYm9sX2J5X25hbWUoc3ltYm9sX25hbWUpOworICAgIGlmIChyZXN1bHQgIT0gbnVsbHB0cikgeworICAgICAgKmZvdW5kID0gY3VycmVudF9zb2luZm87CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CisgIH0pOworCisgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8qIFRoaXMgaXMgdXNlZCBieSBkbHN5bSgzKSB0byBwZXJmb3JtcyBhIGdsb2JhbCBzeW1ib2wgbG9va3VwLiBJZiB0aGUKQEAgLTY3Niw3ICs3NDMsNyBAQAogICAgc3BlY2lmaWVkIHNvaW5mbyAoZm9yIFJUTERfTkVYVCkuCiAgKi8KIEVsZlcoU3ltKSogZGxzeW1fbGluZWFyX2xvb2t1cChjb25zdCBjaGFyKiBuYW1lLCBzb2luZm8qKiBmb3VuZCwgc29pbmZvKiBzdGFydCkgewotICB1bnNpZ25lZCBlbGZfaGFzaCA9IGVsZmhhc2gobmFtZSk7CisgIFN5bWJvbE5hbWUgc3ltYm9sX25hbWUobmFtZSk7CiAKICAgaWYgKHN0YXJ0ID09IG51bGxwdHIpIHsKICAgICBzdGFydCA9IHNvbGlzdDsKQEAgLTY4NCw3ICs3NTEsMTEgQEAKIAogICBFbGZXKFN5bSkqIHMgPSBudWxscHRyOwogICBmb3IgKHNvaW5mbyogc2kgPSBzdGFydDsgKHMgPT0gbnVsbHB0cikgJiYgKHNpICE9IG51bGxwdHIpOyBzaSA9IHNpLT5uZXh0KSB7Ci0gICAgcyA9IHNvaW5mb19lbGZfbG9va3VwKHNpLCBlbGZfaGFzaCwgbmFtZSk7CisgICAgaWYgKChzaS0+Z2V0X3J0bGRfZmxhZ3MoKSAmIFJUTERfR0xPQkFMKSA9PSAwKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBzID0gc2ktPmZpbmRfc3ltYm9sX2J5X25hbWUoc3ltYm9sX25hbWUpOwogICAgIGlmIChzICE9IG51bGxwdHIpIHsKICAgICAgICpmb3VuZCA9IHNpOwogICAgICAgYnJlYWs7CkBAIC03MDksMTYgKzc4MCw0NSBAQAogICByZXR1cm4gbnVsbHB0cjsKIH0KIAotRWxmVyhTeW0pKiBkbGFkZHJfZmluZF9zeW1ib2woc29pbmZvKiBzaSwgY29uc3Qgdm9pZCogYWRkcikgewotICBFbGZXKEFkZHIpIHNvYWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKT4oYWRkcikgLSBzaS0+YmFzZTsKK0VsZlcoU3ltKSogc29pbmZvOjpmaW5kX3N5bWJvbF9ieV9hZGRyZXNzKGNvbnN0IHZvaWQqIGFkZHIpIHsKKyAgcmV0dXJuIGlzX2dudV9oYXNoKCkgPyBnbnVfYWRkcl9sb29rdXAoYWRkcikgOiBlbGZfYWRkcl9sb29rdXAoYWRkcik7Cit9CisKK3N0YXRpYyBib29sIHN5bWJvbF9tYXRjaGVzX3NvYWRkcihjb25zdCBFbGZXKFN5bSkqIHN5bSwgRWxmVyhBZGRyKSBzb2FkZHIpIHsKKyAgcmV0dXJuIHN5bS0+c3Rfc2huZHggIT0gU0hOX1VOREVGICYmCisgICAgICBzb2FkZHIgPj0gc3ltLT5zdF92YWx1ZSAmJgorICAgICAgc29hZGRyIDwgc3ltLT5zdF92YWx1ZSArIHN5bS0+c3Rfc2l6ZTsKK30KKworRWxmVyhTeW0pKiBzb2luZm86OmdudV9hZGRyX2xvb2t1cChjb25zdCB2b2lkKiBhZGRyKSB7CisgIEVsZlcoQWRkcikgc29hZGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpPihhZGRyKSAtIGJhc2U7CisKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYnVja2V0XzsgKytpKSB7CisgICAgdWludDMyX3QgbiA9IGJ1Y2tldF9baV07CisKKyAgICBpZiAobiA9PSAwKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBkbyB7CisgICAgICBFbGZXKFN5bSkqIHN5bSA9IHN5bXRhYl8gKyBuOworICAgICAgaWYgKHN5bWJvbF9tYXRjaGVzX3NvYWRkcihzeW0sIHNvYWRkcikpIHsKKyAgICAgICAgcmV0dXJuIHN5bTsKKyAgICAgIH0KKyAgICB9IHdoaWxlICgoY2hhaW5fW24rK10gJiAxKSA9PSAwKTsKKyAgfQorCisgIHJldHVybiBudWxscHRyOworfQorCitFbGZXKFN5bSkqIHNvaW5mbzo6ZWxmX2FkZHJfbG9va3VwKGNvbnN0IHZvaWQqIGFkZHIpIHsKKyAgRWxmVyhBZGRyKSBzb2FkZHIgPSByZWludGVycHJldF9jYXN0PEVsZlcoQWRkcik+KGFkZHIpIC0gYmFzZTsKIAogICAvLyBTZWFyY2ggdGhlIGxpYnJhcnkncyBzeW1ib2wgdGFibGUgZm9yIGFueSBkZWZpbmVkIHN5bWJvbCB3aGljaAogICAvLyBjb250YWlucyB0aGlzIGFkZHJlc3MuCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2ktPm5jaGFpbjsgKytpKSB7Ci0gICAgRWxmVyhTeW0pKiBzeW0gPSAmc2ktPnN5bXRhYltpXTsKLSAgICBpZiAoc3ltLT5zdF9zaG5keCAhPSBTSE5fVU5ERUYgJiYKLSAgICAgICAgc29hZGRyID49IHN5bS0+c3RfdmFsdWUgJiYKLSAgICAgICAgc29hZGRyIDwgc3ltLT5zdF92YWx1ZSArIHN5bS0+c3Rfc2l6ZSkgeworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5jaGFpbl87ICsraSkgeworICAgIEVsZlcoU3ltKSogc3ltID0gc3ltdGFiXyArIGk7CisgICAgaWYgKHN5bWJvbF9tYXRjaGVzX3NvYWRkcihzeW0sIHNvYWRkcikpIHsKICAgICAgIHJldHVybiBzeW07CiAgICAgfQogICB9CkBAIC03NzQsNyArODc0LDcgQEAKICAgfQogfQogCi1zdGF0aWMgc29pbmZvKiBsb2FkX2xpYnJhcnkoTG9hZFRhc2tMaXN0JiBsb2FkX3Rhc2tzLCBjb25zdCBjaGFyKiBuYW1lLCBpbnQgZGxmbGFncywgY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pIHsKK3N0YXRpYyBzb2luZm8qIGxvYWRfbGlicmFyeShMb2FkVGFza0xpc3QmIGxvYWRfdGFza3MsIGNvbnN0IGNoYXIqIG5hbWUsIGludCBydGxkX2ZsYWdzLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbykgewogICBpbnQgZmQgPSAtMTsKICAgb2ZmNjRfdCBmaWxlX29mZnNldCA9IDA7CiAgIFNjb3BlZEZkIGZpbGVfZ3VhcmQoLTEpOwpAQCAtNzk5LDEyICs4OTksMjAgQEAKICAgICBETF9FUlIoImZpbGUgb2Zmc2V0IGZvciB0aGUgbGlicmFyeSBcIiVzXCIgaXMgbm90IHBhZ2UtYWxpZ25lZDogJSIgUFJJZDY0LCBuYW1lLCBmaWxlX29mZnNldCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KKyAgaWYgKGZpbGVfb2Zmc2V0IDwgMCkgeworICAgIERMX0VSUigiZmlsZSBvZmZzZXQgZm9yIHRoZSBsaWJyYXJ5IFwiJXNcIiBpcyBuZWdhdGl2ZTogJSIgUFJJZDY0LCBuYW1lLCBmaWxlX29mZnNldCk7CisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KIAogICBzdHJ1Y3Qgc3RhdCBmaWxlX3N0YXQ7CiAgIGlmIChURU1QX0ZBSUxVUkVfUkVUUlkoZnN0YXQoZmQsICZmaWxlX3N0YXQpKSAhPSAwKSB7CiAgICAgRExfRVJSKCJ1bmFibGUgdG8gc3RhdCBmaWxlIGZvciB0aGUgbGlicmFyeSBcIiVzXCI6ICVzIiwgbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQorICBpZiAoZmlsZV9vZmZzZXQgPj0gZmlsZV9zdGF0LnN0X3NpemUpIHsKKyAgICBETF9FUlIoImZpbGUgb2Zmc2V0IGZvciB0aGUgbGlicmFyeSBcIiVzXCIgPj0gZmlsZSBzaXplOiAlIiBQUklkNjQgIiA+PSAlIiBQUklkNjQsIG5hbWUsIGZpbGVfb2Zmc2V0LCBmaWxlX3N0YXQuc3Rfc2l6ZSk7CisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KIAogICAvLyBDaGVjayBmb3Igc3ltbGluayBhbmQgb3RoZXIgc2l0dWF0aW9ucyB3aGVyZQogICAvLyBmaWxlIGNhbiBoYXZlIGRpZmZlcmVudCBuYW1lcy4KQEAgLTgxOSw3ICs5MjcsNyBAQAogICAgIH0KICAgfQogCi0gIGlmICgoZGxmbGFncyAmIFJUTERfTk9MT0FEKSAhPSAwKSB7CisgIGlmICgocnRsZF9mbGFncyAmIFJUTERfTk9MT0FEKSAhPSAwKSB7CiAgICAgRExfRVJSKCJsaWJyYXJ5IFwiJXNcIiB3YXNuJ3QgbG9hZGVkIGFuZCBSVExEX05PTE9BRCBwcmV2ZW50ZWQgaXQiLCBuYW1lKTsKICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQpAQCAtODMwLDcgKzkzOCw3IEBACiAgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KIAotICBzb2luZm8qIHNpID0gc29pbmZvX2FsbG9jKFNFQVJDSF9OQU1FKG5hbWUpLCAmZmlsZV9zdGF0LCBmaWxlX29mZnNldCk7CisgIHNvaW5mbyogc2kgPSBzb2luZm9fYWxsb2MoU0VBUkNIX05BTUUobmFtZSksICZmaWxlX3N0YXQsIGZpbGVfb2Zmc2V0LCBydGxkX2ZsYWdzKTsKICAgaWYgKHNpID09IG51bGxwdHIpIHsKICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQpAQCAtODQwLDcgKzk0OCw3IEBACiAgIHNpLT5waG51bSA9IGVsZl9yZWFkZXIucGhkcl9jb3VudCgpOwogICBzaS0+cGhkciA9IGVsZl9yZWFkZXIubG9hZGVkX3BoZHIoKTsKIAotICBpZiAoIXNpLT5QcmVsaW5rSW1hZ2UoKSkgeworICBpZiAoIXNpLT5wcmVsaW5rX2ltYWdlKCkpIHsKICAgICBzb2luZm9fZnJlZShzaSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KQEAgLTg2Miw3ICs5NzAsNyBAQAogICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIHNvaW5mbyogZmluZF9saWJyYXJ5X2ludGVybmFsKExvYWRUYXNrTGlzdCYgbG9hZF90YXNrcywgY29uc3QgY2hhciogbmFtZSwgaW50IGRsZmxhZ3MsIGNvbnN0IGFuZHJvaWRfZGxleHRpbmZvKiBleHRpbmZvKSB7CitzdGF0aWMgc29pbmZvKiBmaW5kX2xpYnJhcnlfaW50ZXJuYWwoTG9hZFRhc2tMaXN0JiBsb2FkX3Rhc2tzLCBjb25zdCBjaGFyKiBuYW1lLCBpbnQgcnRsZF9mbGFncywgY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pIHsKIAogICBzb2luZm8qIHNpID0gZmluZF9sb2FkZWRfbGlicmFyeV9ieV9uYW1lKG5hbWUpOwogCkBAIC04NzAsNyArOTc4LDcgQEAKICAgLy8gb2YgdGhpcyBmYWN0IGlzIGRvbmUgYnkgbG9hZF9saWJyYXJ5LgogICBpZiAoc2kgPT0gbnVsbHB0cikgewogICAgIFRSQUNFKCJbICclcycgaGFzIG5vdCBiZWVuIGZvdW5kIGJ5IG5hbWUuICBUcnlpbmcgaGFyZGVyLi4uXSIsIG5hbWUpOwotICAgIHNpID0gbG9hZF9saWJyYXJ5KGxvYWRfdGFza3MsIG5hbWUsIGRsZmxhZ3MsIGV4dGluZm8pOworICAgIHNpID0gbG9hZF9saWJyYXJ5KGxvYWRfdGFza3MsIG5hbWUsIHJ0bGRfZmxhZ3MsIGV4dGluZm8pOwogICB9CiAKICAgcmV0dXJuIHNpOwpAQCAtODkzLDE5ICsxMDAxLDUxIEBACiAgIH0pOwogfQogCi1zdGF0aWMgYm9vbCBmaW5kX2xpYnJhcmllcyhjb25zdCBjaGFyKiBjb25zdCBsaWJyYXJ5X25hbWVzW10sIHNpemVfdCBsaWJyYXJ5X25hbWVzX3NpemUsIHNvaW5mbyogc29pbmZvc1tdLAotICAgIHNvaW5mbyogbGRfcHJlbG9hZHNbXSwgc2l6ZV90IGxkX3ByZWxvYWRzX3NpemUsIGludCBkbGZsYWdzLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbykgewotICAvLyBTdGVwIDA6IHByZXBhcmUuCi0gIExvYWRUYXNrTGlzdCBsb2FkX3Rhc2tzOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpYnJhcnlfbmFtZXNfc2l6ZTsgKytpKSB7Ci0gICAgY29uc3QgY2hhciogbmFtZSA9IGxpYnJhcnlfbmFtZXNbaV07Ci0gICAgbG9hZF90YXNrcy5wdXNoX2JhY2soTG9hZFRhc2s6OmNyZWF0ZShuYW1lLCBudWxscHRyKSk7CisvLyBUT0RPOiB0aGlzIGlzIHNsaWdodGx5IHVudXN1YWwgd2F5IHRvIGNvbnN0cnVjdAorLy8gdGhlIGdsb2JhbCBncm91cCBmb3IgcmVsb2NhdGlvbi4gTm90IGV2ZXJ5IFJUTERfR0xPQkFMCisvLyBsaWJyYXJ5IGlzIGluY2x1ZGVkIGluIHRoaXMgZ3JvdXAgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5CisvLyByZWFzb25zLgorLy8KKy8vIFRoaXMgZ3JvdXAgY29uc2lzdHMgb2YgdGhlIG1haW4gZXhlY3V0YWJsZSwgTERfUFJFTE9BRHMKKy8vIGFuZCBsaWJyYXJpZXMgd2l0aCB0aGUgREZfMV9HTE9CQUwgZmxhZyBzZXQuCitzdGF0aWMgc29pbmZvOjpzb2luZm9fbGlzdF90IG1ha2VfZ2xvYmFsX2dyb3VwKCkgeworICBzb2luZm86OnNvaW5mb19saXN0X3QgZ2xvYmFsX2dyb3VwOworICBmb3IgKHNvaW5mbyogc2kgPSBzb21haW47IHNpICE9IG51bGxwdHI7IHNpID0gc2ktPm5leHQpIHsKKyAgICBpZiAoKHNpLT5nZXRfZHRfZmxhZ3NfMSgpICYgREZfMV9HTE9CQUwpICE9IDApIHsKKyAgICAgIGdsb2JhbF9ncm91cC5wdXNoX2JhY2soc2kpOworICAgIH0KICAgfQogCi0gIC8vIExpYnJhcmllcyBhZGRlZCB0byB0aGlzIGxpc3QgaW4gcmV2ZXJzZSBvcmRlciBzbyB0aGF0IHdlIGNhbgotICAvLyBzdGFydCBsaW5raW5nIGZyb20gYm90dG9tLXVwIC0gc2VlIHN0ZXAgMi4KLSAgU29pbmZvTGlua2VkTGlzdCBmb3VuZF9saWJzOwotICBzaXplX3Qgc29pbmZvc19zaXplID0gMDsKKyAgcmV0dXJuIGdsb2JhbF9ncm91cDsKK30KKworc3RhdGljIGJvb2wgZmluZF9saWJyYXJpZXMoc29pbmZvKiBzdGFydF93aXRoLCBjb25zdCBjaGFyKiBjb25zdCBsaWJyYXJ5X25hbWVzW10sIHNpemVfdCBsaWJyYXJ5X25hbWVzX2NvdW50LCBzb2luZm8qIHNvaW5mb3NbXSwKKyAgICBzb2luZm8qIGxkX3ByZWxvYWRzW10sIHNpemVfdCBsZF9wcmVsb2Fkc19jb3VudCwgaW50IHJ0bGRfZmxhZ3MsIGNvbnN0IGFuZHJvaWRfZGxleHRpbmZvKiBleHRpbmZvKSB7CisgIC8vIFN0ZXAgMDogcHJlcGFyZS4KKyAgTG9hZFRhc2tMaXN0IGxvYWRfdGFza3M7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlicmFyeV9uYW1lc19jb3VudDsgKytpKSB7CisgICAgY29uc3QgY2hhciogbmFtZSA9IGxpYnJhcnlfbmFtZXNbaV07CisgICAgbG9hZF90YXNrcy5wdXNoX2JhY2soTG9hZFRhc2s6OmNyZWF0ZShuYW1lLCBzdGFydF93aXRoKSk7CisgIH0KKworICAvLyBDb25zdHJ1Y3QgZ2xvYmFsX2dyb3VwLgorICBzb2luZm86OnNvaW5mb19saXN0X3QgZ2xvYmFsX2dyb3VwID0gbWFrZV9nbG9iYWxfZ3JvdXAoKTsKKworICAvLyBJZiBzb2luZm9zIGFycmF5IGlzIG51bGwgYWxsb2NhdGUgb25lIG9uIHN0YWNrLgorICAvLyBUaGUgYXJyYXkgaXMgbmVlZGVkIGluIGNhc2Ugb2YgZmFpbHVyZTsgZm9yIGV4YW1wbGUKKyAgLy8gd2hlbiBsaWJyYXJ5X25hbWVzW10gPSB7bGlib25lLnNvLCBsaWJ0d28uc299IGFuZCBsaWJvbmUuc28KKyAgLy8gaXMgbG9hZGVkIGNvcnJlY3RseSBidXQgbGlidHdvLnNvIGZhaWxlZCBmb3Igc29tZSByZWFzb24uCisgIC8vIEluIHRoaXMgY2FzZSBsaWJvbmUuc28gc2hvdWxkIGJlIHVubG9hZGVkIG9uIHJldHVybi4KKyAgLy8gU2VlIGFsc28gaW1wbGVtZW50YXRpb24gb2YgZmFpbHVyZV9ndWFyZCBiZWxvdy4KKworICBpZiAoc29pbmZvcyA9PSBudWxscHRyKSB7CisgICAgc2l6ZV90IHNvaW5mb3Nfc2l6ZSA9IHNpemVvZihzb2luZm8qKSpsaWJyYXJ5X25hbWVzX2NvdW50OworICAgIHNvaW5mb3MgPSByZWludGVycHJldF9jYXN0PHNvaW5mbyoqPihhbGxvY2Eoc29pbmZvc19zaXplKSk7CisgICAgbWVtc2V0KHNvaW5mb3MsIDAsIHNvaW5mb3Nfc2l6ZSk7CisgIH0KKworICAvLyBsaXN0IG9mIGxpYnJhcmllcyB0byBsaW5rIC0gc2VlIHN0ZXAgMi4KKyAgc2l6ZV90IHNvaW5mb3NfY291bnQgPSAwOwogCiAgIGF1dG8gZmFpbHVyZV9ndWFyZCA9IG1ha2Vfc2NvcGVfZ3VhcmQoWyZdKCkgewogICAgIC8vIEhvdXNla2VlcGluZwpAQCAtOTEzLDE0ICsxMDUzLDE0IEBACiAgICAgICBMb2FkVGFzazo6ZGVsZXRlcih0KTsKICAgICB9KTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpPHNvaW5mb3Nfc2l6ZTsgKytpKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGk8c29pbmZvc19jb3VudDsgKytpKSB7CiAgICAgICBzb2luZm9fdW5sb2FkKHNvaW5mb3NbaV0pOwogICAgIH0KICAgfSk7CiAKICAgLy8gU3RlcCAxOiBsb2FkIGFuZCBwcmUtbGluayBhbGwgRFRfTkVFREVEIGxpYnJhcmllcyBpbiBicmVhZHRoIGZpcnN0IG9yZGVyLgogICBmb3IgKExvYWRUYXNrOjp1bmlxdWVfcHRyIHRhc2sobG9hZF90YXNrcy5wb3BfZnJvbnQoKSk7IHRhc2suZ2V0KCkgIT0gbnVsbHB0cjsgdGFzay5yZXNldChsb2FkX3Rhc2tzLnBvcF9mcm9udCgpKSkgewotICAgIHNvaW5mbyogc2kgPSBmaW5kX2xpYnJhcnlfaW50ZXJuYWwobG9hZF90YXNrcywgdGFzay0+Z2V0X25hbWUoKSwgZGxmbGFncywgZXh0aW5mbyk7CisgICAgc29pbmZvKiBzaSA9IGZpbmRfbGlicmFyeV9pbnRlcm5hbChsb2FkX3Rhc2tzLCB0YXNrLT5nZXRfbmFtZSgpLCBydGxkX2ZsYWdzLCBleHRpbmZvKTsKICAgICBpZiAoc2kgPT0gbnVsbHB0cikgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTkzNSwzNyArMTA3NSw1MiBAQAogICAgIGlmIChuZWVkZWRfYnkgIT0gbnVsbHB0cikgewogICAgICAgbmVlZGVkX2J5LT5hZGRfY2hpbGQoc2kpOwogICAgIH0KLSAgICBmb3VuZF9saWJzLnB1c2hfZnJvbnQoc2kpOwogCi0gICAgLy8gV2hlbiBsZF9wcmVsb2FkcyBpcyBub3QgbnVsbCBmaXJzdAotICAgIC8vIGxkX3ByZWxvYWRzX3NpemUgbGlicyBhcmUgaW4gZmFjdCBsZF9wcmVsb2Fkcy4KLSAgICBpZiAobGRfcHJlbG9hZHMgIT0gbnVsbHB0ciAmJiBzb2luZm9zX3NpemUgPCBsZF9wcmVsb2Fkc19zaXplKSB7Ci0gICAgICBsZF9wcmVsb2Fkc1tzb2luZm9zX3NpemVdID0gc2k7CisgICAgLy8gV2hlbiBsZF9wcmVsb2FkcyBpcyBub3QgbnVsbCwgdGhlIGZpcnN0CisgICAgLy8gbGRfcHJlbG9hZHNfY291bnQgbGlicyBhcmUgaW4gZmFjdCBsZF9wcmVsb2Fkcy4KKyAgICBpZiAobGRfcHJlbG9hZHMgIT0gbnVsbHB0ciAmJiBzb2luZm9zX2NvdW50IDwgbGRfcHJlbG9hZHNfY291bnQpIHsKKyAgICAgIC8vIEFkZCBMRF9QUkVMT0FEZWQgbGlicmFyaWVzIHRvIHRoZSBnbG9iYWwgZ3JvdXAgZm9yIGZ1dHVyZSBydW5zLgorICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBleHBsaWNpdGx5IGFkZCB0aGVtIHRvIHRoZSBnbG9iYWwgZ3JvdXAKKyAgICAgIC8vIGZvciB0aGlzIHJ1biBiZWNhdXNlIHRoZXkgYXJlIGdvaW5nIHRvIGFwcGVhciBpbiB0aGUgbG9jYWwKKyAgICAgIC8vIGdyb3VwIGluIHRoZSBjb3JyZWN0IG9yZGVyLgorICAgICAgc2ktPnNldF9kdF9mbGFnc18xKHNpLT5nZXRfZHRfZmxhZ3NfMSgpIHwgREZfMV9HTE9CQUwpOworICAgICAgbGRfcHJlbG9hZHNbc29pbmZvc19jb3VudF0gPSBzaTsKICAgICB9CiAKLSAgICBpZiAoc29pbmZvc19zaXplPGxpYnJhcnlfbmFtZXNfc2l6ZSkgewotICAgICAgc29pbmZvc1tzb2luZm9zX3NpemUrK10gPSBzaTsKKyAgICBpZiAoc29pbmZvc19jb3VudCA8IGxpYnJhcnlfbmFtZXNfY291bnQpIHsKKyAgICAgIHNvaW5mb3Nbc29pbmZvc19jb3VudCsrXSA9IHNpOwogICAgIH0KICAgfQogCiAgIC8vIFN0ZXAgMjogbGluayBsaWJyYXJpZXMuCi0gIHNvaW5mbyogc2k7Ci0gIHdoaWxlICgoc2kgPSBmb3VuZF9saWJzLnBvcF9mcm9udCgpKSAhPSBudWxscHRyKSB7CisgIHNvaW5mbzo6c29pbmZvX2xpc3RfdCBsb2NhbF9ncm91cDsKKyAgd2Fsa19kZXBlbmRlbmNpZXNfdHJlZSgKKyAgICAgIHN0YXJ0X3dpdGggPT0gbnVsbHB0ciA/IHNvaW5mb3MgOiAmc3RhcnRfd2l0aCwKKyAgICAgIHN0YXJ0X3dpdGggPT0gbnVsbHB0ciA/IHNvaW5mb3NfY291bnQgOiAxLAorICAgICAgWyZdIChzb2luZm8qIHNpKSB7CisgICAgbG9jYWxfZ3JvdXAucHVzaF9iYWNrKHNpKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfSk7CisKKyAgYm9vbCBsaW5rZWQgPSBsb2NhbF9ncm91cC52aXNpdChbJl0oc29pbmZvKiBzaSkgewogICAgIGlmICgoc2ktPmZsYWdzICYgRkxBR19MSU5LRUQpID09IDApIHsKLSAgICAgIGlmICghc2ktPkxpbmtJbWFnZShleHRpbmZvKSkgeworICAgICAgaWYgKCFzaS0+bGlua19pbWFnZShnbG9iYWxfZ3JvdXAsIGxvY2FsX2dyb3VwLCBleHRpbmZvKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9CiAgICAgICBzaS0+ZmxhZ3MgfD0gRkxBR19MSU5LRUQ7CiAgICAgfQorCisgICAgcmV0dXJuIHRydWU7CisgIH0pOworCisgIGlmIChsaW5rZWQpIHsKKyAgICBmYWlsdXJlX2d1YXJkLmRpc2FibGUoKTsKICAgfQogCi0gIC8vIEFsbCBpcyB3ZWxsIC0gZm91bmRfbGlicyBhbmQgbG9hZF90YXNrcyBhcmUgZW1wdHkgYXQgdGhpcyBwb2ludAotICAvLyBhbmQgYWxsIGxpYnMgYXJlIHN1Y2Nlc3NmdWxseSBsaW5rZWQuCi0gIGZhaWx1cmVfZ3VhcmQuZGlzYWJsZSgpOwotICByZXR1cm4gdHJ1ZTsKKyAgcmV0dXJuIGxpbmtlZDsKIH0KIAotc3RhdGljIHNvaW5mbyogZmluZF9saWJyYXJ5KGNvbnN0IGNoYXIqIG5hbWUsIGludCBkbGZsYWdzLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbykgeworc3RhdGljIHNvaW5mbyogZmluZF9saWJyYXJ5KGNvbnN0IGNoYXIqIG5hbWUsIGludCBydGxkX2ZsYWdzLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbykgewogICBpZiAobmFtZSA9PSBudWxscHRyKSB7CiAgICAgc29tYWluLT5yZWZfY291bnQrKzsKICAgICByZXR1cm4gc29tYWluOwpAQCAtOTczLDMwICsxMTI4LDM0IEBACiAKICAgc29pbmZvKiBzaTsKIAotICBpZiAoIWZpbmRfbGlicmFyaWVzKCZuYW1lLCAxLCAmc2ksIG51bGxwdHIsIDAsIGRsZmxhZ3MsIGV4dGluZm8pKSB7CisgIGlmICghZmluZF9saWJyYXJpZXMobnVsbHB0ciwgJm5hbWUsIDEsICZzaSwgbnVsbHB0ciwgMCwgcnRsZF9mbGFncywgZXh0aW5mbykpIHsKICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQogCiAgIHJldHVybiBzaTsKIH0KIAotc3RhdGljIHZvaWQgc29pbmZvX3VubG9hZChzb2luZm8qIHNpKSB7CitzdGF0aWMgdm9pZCBzb2luZm9fdW5sb2FkX3NjaGVkdWxlKHNvaW5mbzo6c29pbmZvX2xpc3RfdCYgdW5sb2FkX2xpc3QsIHNvaW5mbyogc2kpIHsKKyAgaWYgKCFzaS0+Y2FuX3VubG9hZCgpKSB7CisgICAgVFJBQ0UoIm5vdCB1bmxvYWRpbmcgJyVzJyAtIHRoZSBiaW5hcnkgaXMgZmxhZ2dlZCB3aXRoIE5PREVMRVRFIiwgc2ktPm5hbWUpOworICAgIHJldHVybjsKKyAgfQorCiAgIGlmIChzaS0+cmVmX2NvdW50ID09IDEpIHsKLSAgICBUUkFDRSgidW5sb2FkaW5nICclcyciLCBzaS0+bmFtZSk7Ci0gICAgc2ktPkNhbGxEZXN0cnVjdG9ycygpOworICAgIHVubG9hZF9saXN0LnB1c2hfYmFjayhzaSk7CiAKICAgICBpZiAoc2ktPmhhc19taW5fdmVyc2lvbigwKSkgewogICAgICAgc29pbmZvKiBjaGlsZCA9IG51bGxwdHI7CiAgICAgICB3aGlsZSAoKGNoaWxkID0gc2ktPmdldF9jaGlsZHJlbigpLnBvcF9mcm9udCgpKSAhPSBudWxscHRyKSB7CiAgICAgICAgIFRSQUNFKCIlcyBuZWVkcyB0byB1bmxvYWQgJXMiLCBzaS0+bmFtZSwgY2hpbGQtPm5hbWUpOwotICAgICAgICBzb2luZm9fdW5sb2FkKGNoaWxkKTsKKyAgICAgICAgc29pbmZvX3VubG9hZF9zY2hlZHVsZSh1bmxvYWRfbGlzdCwgY2hpbGQpOwogICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICBmb3JfZWFjaF9kdF9uZWVkZWQoc2ksIFsmXSAoY29uc3QgY2hhciogbGlicmFyeV9uYW1lKSB7CiAgICAgICAgIFRSQUNFKCJkZXByZWNhdGVkIChvbGQgZm9ybWF0IG9mIHNvaW5mbyk6ICVzIG5lZWRzIHRvIHVubG9hZCAlcyIsIHNpLT5uYW1lLCBsaWJyYXJ5X25hbWUpOwogICAgICAgICBzb2luZm8qIG5lZWRlZCA9IGZpbmRfbGlicmFyeShsaWJyYXJ5X25hbWUsIFJUTERfTk9MT0FELCBudWxscHRyKTsKICAgICAgICAgaWYgKG5lZWRlZCAhPSBudWxscHRyKSB7Ci0gICAgICAgICAgc29pbmZvX3VubG9hZChuZWVkZWQpOworICAgICAgICAgIHNvaW5mb191bmxvYWRfc2NoZWR1bGUodW5sb2FkX2xpc3QsIG5lZWRlZCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgLy8gTm90IGZvdW5kOiBmb3IgZXhhbXBsZSBpZiBzeW1saW5rIHdhcyBkZWxldGVkIGJldHdlZW4gZGxvcGVuIGFuZCBkbGNsb3NlCiAgICAgICAgICAgLy8gU2luY2Ugd2UgY2Fubm90IHJlYWxseSBoYW5kbGUgZXJyb3JzIGF0IHRoaXMgcG9pbnQgLSBwcmludCBhbmQgY29udGludWUuCkBAIC0xMDA1LDE1ICsxMTY0LDI4IEBACiAgICAgICB9KTsKICAgICB9CiAKLSAgICBub3RpZnlfZ2RiX29mX3VubG9hZChzaSk7CiAgICAgc2ktPnJlZl9jb3VudCA9IDA7Ci0gICAgc29pbmZvX2ZyZWUoc2kpOwogICB9IGVsc2UgewogICAgIHNpLT5yZWZfY291bnQtLTsKICAgICBUUkFDRSgibm90IHVubG9hZGluZyAnJXMnLCBkZWNyZW1lbnRpbmcgcmVmX2NvdW50IHRvICV6ZCIsIHNpLT5uYW1lLCBzaS0+cmVmX2NvdW50KTsKICAgfQogfQogCitzdGF0aWMgdm9pZCBzb2luZm9fdW5sb2FkKHNvaW5mbyogcm9vdCkgeworICBzb2luZm86OnNvaW5mb19saXN0X3QgdW5sb2FkX2xpc3Q7CisgIHNvaW5mb191bmxvYWRfc2NoZWR1bGUodW5sb2FkX2xpc3QsIHJvb3QpOworICB1bmxvYWRfbGlzdC5mb3JfZWFjaChbXShzb2luZm8qIHNpKSB7CisgICAgc2ktPmNhbGxfZGVzdHJ1Y3RvcnMoKTsKKyAgfSk7CisKKyAgc29pbmZvKiBzaSA9IG51bGxwdHI7CisgIHdoaWxlICgoc2kgPSB1bmxvYWRfbGlzdC5wb3BfZnJvbnQoKSkgIT0gbnVsbHB0cikgeworICAgIFRSQUNFKCJ1bmxvYWRpbmcgJyVzJyIsIHNpLT5uYW1lKTsKKyAgICBub3RpZnlfZ2RiX29mX3VubG9hZChzaSk7CisgICAgc29pbmZvX2ZyZWUoc2kpOworICB9Cit9CisKIHZvaWQgZG9fYW5kcm9pZF9nZXRfTERfTElCUkFSWV9QQVRIKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKSB7CiAgIC8vIFVzZSBiYXNpYyBzdHJpbmcgbWFuaXB1bGF0aW9uIGNhbGxzIHRvIGF2b2lkIHNucHJpbnRmLgogICAvLyBzbnByaW50ZiBpbmRpcmVjdGx5IGNhbGxzIHB0aHJlYWRfZ2V0c3BlY2lmaWMgdG8gZ2V0IHRoZSBzaXplIG9mIGEgYnVmZmVyLgpAQCAtMTAzOSw3ICsxMjExLDcgQEAKIH0KIAogc29pbmZvKiBkb19kbG9wZW4oY29uc3QgY2hhciogbmFtZSwgaW50IGZsYWdzLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbykgewotICBpZiAoKGZsYWdzICYgfihSVExEX05PV3xSVExEX0xBWll8UlRMRF9MT0NBTHxSVExEX0dMT0JBTHxSVExEX05PTE9BRCkpICE9IDApIHsKKyAgaWYgKChmbGFncyAmIH4oUlRMRF9OT1d8UlRMRF9MQVpZfFJUTERfTE9DQUx8UlRMRF9HTE9CQUx8UlRMRF9OT0RFTEVURXxSVExEX05PTE9BRCkpICE9IDApIHsKICAgICBETF9FUlIoImludmFsaWQgZmxhZ3MgdG8gZGxvcGVuOiAleCIsIGZsYWdzKTsKICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQpAQCAtMTA1Nyw3ICsxMjI5LDcgQEAKICAgcHJvdGVjdF9kYXRhKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwogICBzb2luZm8qIHNpID0gZmluZF9saWJyYXJ5KG5hbWUsIGZsYWdzLCBleHRpbmZvKTsKICAgaWYgKHNpICE9IG51bGxwdHIpIHsKLSAgICBzaS0+Q2FsbENvbnN0cnVjdG9ycygpOworICAgIHNpLT5jYWxsX2NvbnN0cnVjdG9ycygpOwogICB9CiAgIHByb3RlY3RfZGF0YShQUk9UX1JFQUQpOwogICByZXR1cm4gc2k7CkBAIC0xMDc5LDcgKzEyNTEsNyBAQAogfQogCiAjaWYgZGVmaW5lZChVU0VfUkVMQSkKLWludCBzb2luZm86OlJlbG9jYXRlKEVsZlcoUmVsYSkqIHJlbGEsIHVuc2lnbmVkIGNvdW50KSB7CitpbnQgc29pbmZvOjpyZWxvY2F0ZShFbGZXKFJlbGEpKiByZWxhLCB1bnNpZ25lZCBjb3VudCwgY29uc3Qgc29pbmZvX2xpc3RfdCYgZ2xvYmFsX2dyb3VwLCBjb25zdCBzb2luZm9fbGlzdF90JiBsb2NhbF9ncm91cCkgewogICBmb3IgKHNpemVfdCBpZHggPSAwOyBpZHggPCBjb3VudDsgKytpZHgsICsrcmVsYSkgewogICAgIHVuc2lnbmVkIHR5cGUgPSBFTEZXKFJfVFlQRSkocmVsYS0+cl9pbmZvKTsKICAgICB1bnNpZ25lZCBzeW0gPSBFTEZXKFJfU1lNKShyZWxhLT5yX2luZm8pOwpAQCAtMTA5NiwxMSArMTI2OCwxMSBAQAogICAgIHNvaW5mbyogbHNpID0gbnVsbHB0cjsKIAogICAgIGlmIChzeW0gIT0gMCkgewotICAgICAgc3ltX25hbWUgPSBnZXRfc3RyaW5nKHN5bXRhYltzeW1dLnN0X25hbWUpOwotICAgICAgcyA9IHNvaW5mb19kb19sb29rdXAodGhpcywgc3ltX25hbWUsICZsc2kpOworICAgICAgc3ltX25hbWUgPSBnZXRfc3RyaW5nKHN5bXRhYl9bc3ltXS5zdF9uYW1lKTsKKyAgICAgIHMgPSBzb2luZm9fZG9fbG9va3VwKHRoaXMsIHN5bV9uYW1lLCAmbHNpLCBnbG9iYWxfZ3JvdXAsbG9jYWxfZ3JvdXApOwogICAgICAgaWYgKHMgPT0gbnVsbHB0cikgewogICAgICAgICAvLyBXZSBvbmx5IGFsbG93IGFuIHVuZGVmaW5lZCBzeW1ib2wgaWYgdGhpcyBpcyBhIHdlYWsgcmVmZXJlbmNlLi4uCi0gICAgICAgIHMgPSAmc3ltdGFiW3N5bV07CisgICAgICAgIHMgPSAmc3ltdGFiX1tzeW1dOwogICAgICAgICBpZiAoRUxGX1NUX0JJTkQocy0+c3RfaW5mbykgIT0gU1RCX1dFQUspIHsKICAgICAgICAgICBETF9FUlIoImNhbm5vdCBsb2NhdGUgc3ltYm9sIFwiJXNcIiByZWZlcmVuY2VkIGJ5IFwiJXNcIi4uLiIsIHN5bV9uYW1lLCBuYW1lKTsKICAgICAgICAgICByZXR1cm4gLTE7CkBAIC0xMzU2LDcgKzE1MjgsNyBAQAogfQogCiAjZWxzZSAvLyBSRUwsIG5vdCBSRUxBLgotaW50IHNvaW5mbzo6UmVsb2NhdGUoRWxmVyhSZWwpKiByZWwsIHVuc2lnbmVkIGNvdW50KSB7CitpbnQgc29pbmZvOjpyZWxvY2F0ZShFbGZXKFJlbCkqIHJlbCwgdW5zaWduZWQgY291bnQsIGNvbnN0IHNvaW5mb19saXN0X3QmIGdsb2JhbF9ncm91cCwgY29uc3Qgc29pbmZvX2xpc3RfdCYgbG9jYWxfZ3JvdXApIHsKICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwgY291bnQ7ICsraWR4LCArK3JlbCkgewogICAgIHVuc2lnbmVkIHR5cGUgPSBFTEZXKFJfVFlQRSkocmVsLT5yX2luZm8pOwogICAgIC8vIFRPRE86IGRvbid0IHVzZSB1bnNpZ25lZCBmb3IgJ3N5bScuIFVzZSB1aW50MzJfdCBvciBFbGZXKEFkZHIpIGluc3RlYWQuCkBAIC0xMzc0LDExICsxNTQ2LDExIEBACiAgICAgc29pbmZvKiBsc2kgPSBudWxscHRyOwogCiAgICAgaWYgKHN5bSAhPSAwKSB7Ci0gICAgICBzeW1fbmFtZSA9IGdldF9zdHJpbmcoc3ltdGFiW3N5bV0uc3RfbmFtZSk7Ci0gICAgICBzID0gc29pbmZvX2RvX2xvb2t1cCh0aGlzLCBzeW1fbmFtZSwgJmxzaSk7CisgICAgICBzeW1fbmFtZSA9IGdldF9zdHJpbmcoc3ltdGFiX1tzeW1dLnN0X25hbWUpOworICAgICAgcyA9IHNvaW5mb19kb19sb29rdXAodGhpcywgc3ltX25hbWUsICZsc2ksIGdsb2JhbF9ncm91cCwgbG9jYWxfZ3JvdXApOwogICAgICAgaWYgKHMgPT0gbnVsbHB0cikgewogICAgICAgICAvLyBXZSBvbmx5IGFsbG93IGFuIHVuZGVmaW5lZCBzeW1ib2wgaWYgdGhpcyBpcyBhIHdlYWsgcmVmZXJlbmNlLi4uCi0gICAgICAgIHMgPSAmc3ltdGFiW3N5bV07CisgICAgICAgIHMgPSAmc3ltdGFiX1tzeW1dOwogICAgICAgICBpZiAoRUxGX1NUX0JJTkQocy0+c3RfaW5mbykgIT0gU1RCX1dFQUspIHsKICAgICAgICAgICBETF9FUlIoImNhbm5vdCBsb2NhdGUgc3ltYm9sIFwiJXNcIiByZWZlcmVuY2VkIGJ5IFwiJXNcIi4uLiIsIHN5bV9uYW1lLCBuYW1lKTsKICAgICAgICAgICByZXR1cm4gLTE7CkBAIC0xNTYxLDQzICsxNzMzLDM5IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoX19taXBzX18pCi1zdGF0aWMgYm9vbCBtaXBzX3JlbG9jYXRlX2dvdChzb2luZm8qIHNpKSB7Ci0gIEVsZlcoQWRkcikqKiBnb3QgPSBzaS0+cGx0X2dvdDsKK2Jvb2wgc29pbmZvOjptaXBzX3JlbG9jYXRlX2dvdChjb25zdCBzb2luZm9fbGlzdF90JiBnbG9iYWxfZ3JvdXAsIGNvbnN0IHNvaW5mb19saXN0X3QmIGxvY2FsX2dyb3VwKSB7CisgIEVsZlcoQWRkcikqKiBnb3QgPSBwbHRfZ290XzsKICAgaWYgKGdvdCA9PSBudWxscHRyKSB7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KLSAgdW5zaWduZWQgbG9jYWxfZ290bm8gPSBzaS0+bWlwc19sb2NhbF9nb3RubzsKLSAgdW5zaWduZWQgZ290c3ltID0gc2ktPm1pcHNfZ290c3ltOwotICB1bnNpZ25lZCBzeW10YWJubyA9IHNpLT5taXBzX3N5bXRhYm5vOwotICBFbGZXKFN5bSkqIHN5bXRhYiA9IHNpLT5zeW10YWI7CiAKICAgLy8gZ290WzBdIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBsYXp5IHJlc29sdmVyIGZ1bmN0aW9uLgogICAvLyBnb3RbMV0gbWF5IGJlIHVzZWQgZm9yIGEgR05VIGV4dGVuc2lvbi4KICAgLy8gU2V0IGl0IHRvIGEgcmVjb2duaXphYmxlIGFkZHJlc3MgaW4gY2FzZSBzb21lb25lIGNhbGxzIGl0IChzaG91bGQgYmUgX3J0bGRfYmluZF9zdGFydCkuCiAgIC8vIEZJWE1FOiBtYXliZSB0aGlzIHNob3VsZCBiZSBpbiBhIHNlcGFyYXRlIHJvdXRpbmU/Ci0gIGlmICgoc2ktPmZsYWdzICYgRkxBR19MSU5LRVIpID09IDApIHsKKyAgaWYgKChmbGFncyAmIEZMQUdfTElOS0VSKSA9PSAwKSB7CiAgICAgc2l6ZV90IGcgPSAwOwogICAgIGdvdFtnKytdID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4oMHhkZWFkYmVlZik7CiAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGdvdFtnXSkgPCAwKSB7CiAgICAgICBnb3RbZysrXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KDB4ZGVhZGZlZWQpOwogICAgIH0KICAgICAvLyBSZWxvY2F0ZSB0aGUgbG9jYWwgR09UIGVudHJpZXMuCi0gICAgZm9yICg7IGcgPCBsb2NhbF9nb3RubzsgZysrKSB7Ci0gICAgICBnb3RbZ10gPSByZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZ290W2ddKSArIHNpLT5sb2FkX2JpYXMpOworICAgIGZvciAoOyBnIDwgbWlwc19sb2NhbF9nb3Rub187IGcrKykgeworICAgICAgZ290W2ddID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGdvdFtnXSkgKyBsb2FkX2JpYXMpOwogICAgIH0KICAgfQogCiAgIC8vIE5vdyBmb3IgdGhlIGdsb2JhbCBHT1QgZW50cmllcy4uLgotICBFbGZXKFN5bSkqIHN5bSA9IHN5bXRhYiArIGdvdHN5bTsKLSAgZ290ID0gc2ktPnBsdF9nb3QgKyBsb2NhbF9nb3RubzsKLSAgZm9yIChzaXplX3QgZyA9IGdvdHN5bTsgZyA8IHN5bXRhYm5vOyBnKyssIHN5bSsrLCBnb3QrKykgeworICBFbGZXKFN5bSkqIHN5bSA9IHN5bXRhYl8gKyBtaXBzX2dvdHN5bV87CisgIGdvdCA9IHBsdF9nb3RfICsgbWlwc19sb2NhbF9nb3Rub187CisgIGZvciAoc2l6ZV90IGcgPSBtaXBzX2dvdHN5bV87IGcgPCBtaXBzX3N5bXRhYm5vXzsgZysrLCBzeW0rKywgZ290KyspIHsKICAgICAvLyBUaGlzIGlzIGFuIHVuZGVmaW5lZCByZWZlcmVuY2UuLi4gdHJ5IHRvIGxvY2F0ZSBpdC4KLSAgICBjb25zdCBjaGFyKiBzeW1fbmFtZSA9IHNpLT5nZXRfc3RyaW5nKHN5bS0+c3RfbmFtZSk7CisgICAgY29uc3QgY2hhciogc3ltX25hbWUgPSBnZXRfc3RyaW5nKHN5bS0+c3RfbmFtZSk7CiAgICAgc29pbmZvKiBsc2kgPSBudWxscHRyOwotICAgIEVsZlcoU3ltKSogcyA9IHNvaW5mb19kb19sb29rdXAoc2ksIHN5bV9uYW1lLCAmbHNpKTsKKyAgICBFbGZXKFN5bSkqIHMgPSBzb2luZm9fZG9fbG9va3VwKHRoaXMsIHN5bV9uYW1lLCAmbHNpLCBnbG9iYWxfZ3JvdXAsIGxvY2FsX2dyb3VwKTsKICAgICBpZiAocyA9PSBudWxscHRyKSB7CiAgICAgICAvLyBXZSBvbmx5IGFsbG93IGFuIHVuZGVmaW5lZCBzeW1ib2wgaWYgdGhpcyBpcyBhIHdlYWsgcmVmZXJlbmNlLgotICAgICAgcyA9ICZzeW10YWJbZ107CisgICAgICBzID0gJnN5bXRhYl9bZ107CiAgICAgICBpZiAoRUxGX1NUX0JJTkQocy0+c3RfaW5mbykgIT0gU1RCX1dFQUspIHsKICAgICAgICAgRExfRVJSKCJjYW5ub3QgbG9jYXRlIFwiJXNcIi4uLiIsIHN5bV9uYW1lKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTYxNCw3ICsxNzgyLDcgQEAKIH0KICNlbmRpZgogCi12b2lkIHNvaW5mbzo6Q2FsbEFycmF5KGNvbnN0IGNoYXIqIGFycmF5X25hbWUgX191bnVzZWQsIGxpbmtlcl9mdW5jdGlvbl90KiBmdW5jdGlvbnMsIHNpemVfdCBjb3VudCwgYm9vbCByZXZlcnNlKSB7Cit2b2lkIHNvaW5mbzo6Y2FsbF9hcnJheShjb25zdCBjaGFyKiBhcnJheV9uYW1lIF9fdW51c2VkLCBsaW5rZXJfZnVuY3Rpb25fdCogZnVuY3Rpb25zLCBzaXplX3QgY291bnQsIGJvb2wgcmV2ZXJzZSkgewogICBpZiAoZnVuY3Rpb25zID09IG51bGxwdHIpIHsKICAgICByZXR1cm47CiAgIH0KQEAgLTE2MjcsMTMgKzE3OTUsMTMgQEAKIAogICBmb3IgKGludCBpID0gYmVnaW47IGkgIT0gZW5kOyBpICs9IHN0ZXApIHsKICAgICBUUkFDRSgiWyAlc1slZF0gPT0gJXAgXSIsIGFycmF5X25hbWUsIGksIGZ1bmN0aW9uc1tpXSk7Ci0gICAgQ2FsbEZ1bmN0aW9uKCJmdW5jdGlvbiIsIGZ1bmN0aW9uc1tpXSk7CisgICAgY2FsbF9mdW5jdGlvbigiZnVuY3Rpb24iLCBmdW5jdGlvbnNbaV0pOwogICB9CiAKICAgVFJBQ0UoIlsgRG9uZSBjYWxsaW5nICVzIGZvciAnJXMnIF0iLCBhcnJheV9uYW1lLCBuYW1lKTsKIH0KIAotdm9pZCBzb2luZm86OkNhbGxGdW5jdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbl9uYW1lIF9fdW51c2VkLCBsaW5rZXJfZnVuY3Rpb25fdCBmdW5jdGlvbikgewordm9pZCBzb2luZm86OmNhbGxfZnVuY3Rpb24oY29uc3QgY2hhciogZnVuY3Rpb25fbmFtZSBfX3VudXNlZCwgbGlua2VyX2Z1bmN0aW9uX3QgZnVuY3Rpb24pIHsKICAgaWYgKGZ1bmN0aW9uID09IG51bGxwdHIgfHwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGZ1bmN0aW9uKSA9PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KC0xKSkgewogICAgIHJldHVybjsKICAgfQpAQCAtMTY0NywxMyArMTgxNSwxMyBAQAogICBwcm90ZWN0X2RhdGEoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CiB9CiAKLXZvaWQgc29pbmZvOjpDYWxsUHJlSW5pdENvbnN0cnVjdG9ycygpIHsKK3ZvaWQgc29pbmZvOjpjYWxsX3ByZV9pbml0X2NvbnN0cnVjdG9ycygpIHsKICAgLy8gRFRfUFJFSU5JVF9BUlJBWSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIGNvbnN0cnVjdG9ycyBmb3IgZXhlY3V0YWJsZXMsCiAgIC8vIGJ1dCBpZ25vcmVkIGluIGEgc2hhcmVkIGxpYnJhcnkuCi0gIENhbGxBcnJheSgiRFRfUFJFSU5JVF9BUlJBWSIsIHByZWluaXRfYXJyYXksIHByZWluaXRfYXJyYXlfY291bnQsIGZhbHNlKTsKKyAgY2FsbF9hcnJheSgiRFRfUFJFSU5JVF9BUlJBWSIsIHByZWluaXRfYXJyYXlfLCBwcmVpbml0X2FycmF5X2NvdW50XywgZmFsc2UpOwogfQogCi12b2lkIHNvaW5mbzo6Q2FsbENvbnN0cnVjdG9ycygpIHsKK3ZvaWQgc29pbmZvOjpjYWxsX2NvbnN0cnVjdG9ycygpIHsKICAgaWYgKGNvbnN0cnVjdG9yc19jYWxsZWQpIHsKICAgICByZXR1cm47CiAgIH0KQEAgLTE2NzAsMzQgKzE4MzgsMzQgQEAKICAgLy8gICAgb3V0IGFib3ZlLCB0aGUgbGliYyBjb25zdHJ1Y3RvciB3aWxsIGJlIGNhbGxlZCBhZ2FpbiAocmVjdXJzaXZlbHkhKS4KICAgY29uc3RydWN0b3JzX2NhbGxlZCA9IHRydWU7CiAKLSAgaWYgKChmbGFncyAmIEZMQUdfRVhFKSA9PSAwICYmIHByZWluaXRfYXJyYXkgIT0gbnVsbHB0cikgeworICBpZiAoKGZsYWdzICYgRkxBR19FWEUpID09IDAgJiYgcHJlaW5pdF9hcnJheV8gIT0gbnVsbHB0cikgewogICAgIC8vIFRoZSBHTlUgZHluYW1pYyBsaW5rZXIgc2lsZW50bHkgaWdub3JlcyB0aGVzZSwgYnV0IHdlIHdhcm4gdGhlIGRldmVsb3Blci4KICAgICBQUklOVCgiXCIlc1wiOiBpZ25vcmluZyAlemQtZW50cnkgRFRfUFJFSU5JVF9BUlJBWSBpbiBzaGFyZWQgbGlicmFyeSEiLAotICAgICAgICAgIG5hbWUsIHByZWluaXRfYXJyYXlfY291bnQpOworICAgICAgICAgIG5hbWUsIHByZWluaXRfYXJyYXlfY291bnRfKTsKICAgfQogCiAgIGdldF9jaGlsZHJlbigpLmZvcl9lYWNoKFtdIChzb2luZm8qIHNpKSB7Ci0gICAgc2ktPkNhbGxDb25zdHJ1Y3RvcnMoKTsKKyAgICBzaS0+Y2FsbF9jb25zdHJ1Y3RvcnMoKTsKICAgfSk7CiAKICAgVFJBQ0UoIlwiJXNcIjogY2FsbGluZyBjb25zdHJ1Y3RvcnMiLCBuYW1lKTsKIAogICAvLyBEVF9JTklUIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIERUX0lOSVRfQVJSQVkgaWYgYm90aCBhcmUgcHJlc2VudC4KLSAgQ2FsbEZ1bmN0aW9uKCJEVF9JTklUIiwgaW5pdF9mdW5jKTsKLSAgQ2FsbEFycmF5KCJEVF9JTklUX0FSUkFZIiwgaW5pdF9hcnJheSwgaW5pdF9hcnJheV9jb3VudCwgZmFsc2UpOworICBjYWxsX2Z1bmN0aW9uKCJEVF9JTklUIiwgaW5pdF9mdW5jXyk7CisgIGNhbGxfYXJyYXkoIkRUX0lOSVRfQVJSQVkiLCBpbml0X2FycmF5XywgaW5pdF9hcnJheV9jb3VudF8sIGZhbHNlKTsKIH0KIAotdm9pZCBzb2luZm86OkNhbGxEZXN0cnVjdG9ycygpIHsKK3ZvaWQgc29pbmZvOjpjYWxsX2Rlc3RydWN0b3JzKCkgewogICBpZiAoIWNvbnN0cnVjdG9yc19jYWxsZWQpIHsKICAgICByZXR1cm47CiAgIH0KICAgVFJBQ0UoIlwiJXNcIjogY2FsbGluZyBkZXN0cnVjdG9ycyIsIG5hbWUpOwogCiAgIC8vIERUX0ZJTklfQVJSQVkgbXVzdCBiZSBwYXJzZWQgaW4gcmV2ZXJzZSBvcmRlci4KLSAgQ2FsbEFycmF5KCJEVF9GSU5JX0FSUkFZIiwgZmluaV9hcnJheSwgZmluaV9hcnJheV9jb3VudCwgdHJ1ZSk7CisgIGNhbGxfYXJyYXkoIkRUX0ZJTklfQVJSQVkiLCBmaW5pX2FycmF5XywgZmluaV9hcnJheV9jb3VudF8sIHRydWUpOwogCiAgIC8vIERUX0ZJTkkgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBEVF9GSU5JX0FSUkFZIGlmIGJvdGggYXJlIHByZXNlbnQuCi0gIENhbGxGdW5jdGlvbigiRFRfRklOSSIsIGZpbmlfZnVuYyk7CisgIGNhbGxfZnVuY3Rpb24oIkRUX0ZJTkkiLCBmaW5pX2Z1bmNfKTsKIAogICAvLyBUaGlzIGlzIG5lZWRlZCBvbiBzZWNvbmQgY2FsbCB0byBkbG9wZW4KICAgLy8gYWZ0ZXIgbGlicmFyeSBoYXMgYmVlbiB1bmxvYWRlZCB3aXRoIFJUTERfTk9ERUxFVEUKQEAgLTE3MDYsOCArMTg3NCw4IEBACiAKIHZvaWQgc29pbmZvOjphZGRfY2hpbGQoc29pbmZvKiBjaGlsZCkgewogICBpZiAoaGFzX21pbl92ZXJzaW9uKDApKSB7Ci0gICAgY2hpbGQtPnBhcmVudHMucHVzaF9iYWNrKHRoaXMpOwotICAgIHRoaXMtPmNoaWxkcmVuLnB1c2hfYmFjayhjaGlsZCk7CisgICAgY2hpbGQtPnBhcmVudHNfLnB1c2hfYmFjayh0aGlzKTsKKyAgICB0aGlzLT5jaGlsZHJlbl8ucHVzaF9iYWNrKGNoaWxkKTsKICAgfQogfQogCkBAIC0xNzE3LDY1ICsxODg1LDk0IEBACiAgIH0KIAogICAvLyAxLiBVbnRpZSBjb25uZWN0ZWQgc29pbmZvcyBmcm9tICd0aGlzJy4KLSAgY2hpbGRyZW4uZm9yX2VhY2goWyZdIChzb2luZm8qIGNoaWxkKSB7Ci0gICAgY2hpbGQtPnBhcmVudHMucmVtb3ZlX2lmKFsmXSAoY29uc3Qgc29pbmZvKiBwYXJlbnQpIHsKKyAgY2hpbGRyZW5fLmZvcl9lYWNoKFsmXSAoc29pbmZvKiBjaGlsZCkgeworICAgIGNoaWxkLT5wYXJlbnRzXy5yZW1vdmVfaWYoWyZdIChjb25zdCBzb2luZm8qIHBhcmVudCkgewogICAgICAgcmV0dXJuIHBhcmVudCA9PSB0aGlzOwogICAgIH0pOwogICB9KTsKIAotICBwYXJlbnRzLmZvcl9lYWNoKFsmXSAoc29pbmZvKiBwYXJlbnQpIHsKLSAgICBwYXJlbnQtPmNoaWxkcmVuLnJlbW92ZV9pZihbJl0gKGNvbnN0IHNvaW5mbyogY2hpbGQpIHsKKyAgcGFyZW50c18uZm9yX2VhY2goWyZdIChzb2luZm8qIHBhcmVudCkgeworICAgIHBhcmVudC0+Y2hpbGRyZW5fLnJlbW92ZV9pZihbJl0gKGNvbnN0IHNvaW5mbyogY2hpbGQpIHsKICAgICAgIHJldHVybiBjaGlsZCA9PSB0aGlzOwogICAgIH0pOwogICB9KTsKIAogICAvLyAyLiBPbmNlIGV2ZXJ5dGhpbmcgdW50aWVkIC0gY2xlYXIgbG9jYWwgbGlzdHMuCi0gIHBhcmVudHMuY2xlYXIoKTsKLSAgY2hpbGRyZW4uY2xlYXIoKTsKKyAgcGFyZW50c18uY2xlYXIoKTsKKyAgY2hpbGRyZW5fLmNsZWFyKCk7CiB9CiAKLWRldl90IHNvaW5mbzo6Z2V0X3N0X2RldigpIHsKK2Rldl90IHNvaW5mbzo6Z2V0X3N0X2RldigpIGNvbnN0IHsKICAgaWYgKGhhc19taW5fdmVyc2lvbigwKSkgewotICAgIHJldHVybiBzdF9kZXY7CisgICAgcmV0dXJuIHN0X2Rldl87CiAgIH0KIAogICByZXR1cm4gMDsKIH07CiAKLWlub190IHNvaW5mbzo6Z2V0X3N0X2lubygpIHsKK2lub190IHNvaW5mbzo6Z2V0X3N0X2lubygpIGNvbnN0IHsKICAgaWYgKGhhc19taW5fdmVyc2lvbigwKSkgewotICAgIHJldHVybiBzdF9pbm87CisgICAgcmV0dXJuIHN0X2lub187CiAgIH0KIAogICByZXR1cm4gMDsKIH0KIAotb2ZmNjRfdCBzb2luZm86OmdldF9maWxlX29mZnNldCgpIHsKK29mZjY0X3Qgc29pbmZvOjpnZXRfZmlsZV9vZmZzZXQoKSBjb25zdCB7CiAgIGlmIChoYXNfbWluX3ZlcnNpb24oMSkpIHsKLSAgICByZXR1cm4gZmlsZV9vZmZzZXQ7CisgICAgcmV0dXJuIGZpbGVfb2Zmc2V0XzsKICAgfQogCiAgIHJldHVybiAwOwogfQogCit1aW50MzJfdCBzb2luZm86OmdldF9ydGxkX2ZsYWdzKCkgY29uc3QgeworICBpZiAoaGFzX21pbl92ZXJzaW9uKDEpKSB7CisgICAgcmV0dXJuIHJ0bGRfZmxhZ3NfOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3VpbnQzMl90IHNvaW5mbzo6Z2V0X2R0X2ZsYWdzXzEoKSBjb25zdCB7CisgIGlmIChoYXNfbWluX3ZlcnNpb24oMSkpIHsKKyAgICByZXR1cm4gZHRfZmxhZ3NfMV87CisgIH0KKworICByZXR1cm4gMDsKK30KK3ZvaWQgc29pbmZvOjpzZXRfZHRfZmxhZ3NfMSh1aW50MzJfdCBkdF9mbGFnc18xKSB7CisgIGlmIChoYXNfbWluX3ZlcnNpb24oMSkpIHsKKyAgICBpZiAoKGR0X2ZsYWdzXzEgJiBERl8xX0dMT0JBTCkgIT0gMCkgeworICAgICAgcnRsZF9mbGFnc18gfD0gUlRMRF9HTE9CQUw7CisgICAgfQorCisgICAgaWYgKChkdF9mbGFnc18xICYgREZfMV9OT0RFTEVURSkgIT0gMCkgeworICAgICAgcnRsZF9mbGFnc18gfD0gUlRMRF9OT0RFTEVURTsKKyAgICB9CisKKyAgICBkdF9mbGFnc18xXyA9IGR0X2ZsYWdzXzE7CisgIH0KK30KKwogLy8gVGhpcyBpcyBhIHJldHVybiBvbiBnZXRfY2hpbGRyZW4oKS9nZXRfcGFyZW50cygpIGlmCiAvLyAndGhpcy0+ZmxhZ3MnIGRvZXMgbm90IGhhdmUgRkxBR19ORVdfU09JTkZPIHNldC4KIHN0YXRpYyBzb2luZm86OnNvaW5mb19saXN0X3QgZ19lbXB0eV9saXN0OwogCiBzb2luZm86OnNvaW5mb19saXN0X3QmIHNvaW5mbzo6Z2V0X2NoaWxkcmVuKCkgewogICBpZiAoaGFzX21pbl92ZXJzaW9uKDApKSB7Ci0gICAgcmV0dXJuIHRoaXMtPmNoaWxkcmVuOworICAgIHJldHVybiBjaGlsZHJlbl87CiAgIH0KIAogICByZXR1cm4gZ19lbXB0eV9saXN0OwogfQogCiBzb2luZm86OnNvaW5mb19saXN0X3QmIHNvaW5mbzo6Z2V0X3BhcmVudHMoKSB7Ci0gIGlmICgodGhpcy0+ZmxhZ3MgJiBGTEFHX05FV19TT0lORk8pID09IDApIHsKLSAgICByZXR1cm4gZ19lbXB0eV9saXN0OworICBpZiAoaGFzX21pbl92ZXJzaW9uKDApKSB7CisgICAgcmV0dXJuIHBhcmVudHNfOwogICB9CiAKLSAgcmV0dXJuIHRoaXMtPnBhcmVudHM7CisgIHJldHVybiBnX2VtcHR5X2xpc3Q7CiB9CiAKIEVsZlcoQWRkcikgc29pbmZvOjpyZXNvbHZlX3N5bWJvbF9hZGRyZXNzKEVsZlcoU3ltKSogcykgewpAQCAtMTc4NywxMSArMTk4NCwxOSBAQAogfQogCiBjb25zdCBjaGFyKiBzb2luZm86OmdldF9zdHJpbmcoRWxmVyhXb3JkKSBpbmRleCkgY29uc3QgewotICBpZiAoaGFzX21pbl92ZXJzaW9uKDEpICYmIChpbmRleCA+PSBzdHJ0YWJfc2l6ZSkpIHsKLSAgICBfX2xpYmNfZmF0YWwoIiVzOiBzdHJ0YWIgb3V0IG9mIGJvdW5kcyBlcnJvcjsgU1RSU1o9JXpkLCBuYW1lPSVkIiwgbmFtZSwgc3RydGFiX3NpemUsIGluZGV4KTsKKyAgaWYgKGhhc19taW5fdmVyc2lvbigxKSAmJiAoaW5kZXggPj0gc3RydGFiX3NpemVfKSkgeworICAgIF9fbGliY19mYXRhbCgiJXM6IHN0cnRhYiBvdXQgb2YgYm91bmRzIGVycm9yOyBTVFJTWj0lemQsIG5hbWU9JWQiLCBuYW1lLCBzdHJ0YWJfc2l6ZV8sIGluZGV4KTsKICAgfQogCi0gIHJldHVybiBzdHJ0YWIgKyBpbmRleDsKKyAgcmV0dXJuIHN0cnRhYl8gKyBpbmRleDsKK30KKworYm9vbCBzb2luZm86OmlzX2dudV9oYXNoKCkgY29uc3QgeworICByZXR1cm4gKGZsYWdzICYgRkxBR19HTlVfSEFTSCkgIT0gMDsKK30KKworYm9vbCBzb2luZm86OmNhbl91bmxvYWQoKSBjb25zdCB7CisgIHJldHVybiAoZ2V0X3J0bGRfZmxhZ3MoKSAmIChSVExEX05PREVMRVRFIHwgUlRMRF9HTE9CQUwpKSA9PSAwOwogfQogCiAvKiBGb3JjZSBhbnkgb2YgdGhlIGNsb3NlZCBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoCkBAIC0xODU1LDcgKzIwNjAsNyBAQAogICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCi1ib29sIHNvaW5mbzo6UHJlbGlua0ltYWdlKCkgeworYm9vbCBzb2luZm86OnByZWxpbmtfaW1hZ2UoKSB7CiAgIC8qIEV4dHJhY3QgZHluYW1pYyBzZWN0aW9uICovCiAgIEVsZlcoV29yZCkgZHluYW1pY19mbGFncyA9IDA7CiAgIHBoZHJfdGFibGVfZ2V0X2R5bmFtaWNfc2VjdGlvbihwaGRyLCBwaG51bSwgbG9hZF9iaWFzLCAmZHluYW1pYywgJmR5bmFtaWNfZmxhZ3MpOwpAQCAtMTg5NSwyNyArMjEwMCw1NyBAQAogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBEVF9IQVNIOgotICAgICAgICBuYnVja2V0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIpWzBdOwotICAgICAgICBuY2hhaW4gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4obG9hZF9iaWFzICsgZC0+ZF91bi5kX3B0cilbMV07Ci0gICAgICAgIGJ1Y2tldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihsb2FkX2JpYXMgKyBkLT5kX3VuLmRfcHRyICsgOCk7Ci0gICAgICAgIGNoYWluID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIgKyA4ICsgbmJ1Y2tldCAqIDQpOworICAgICAgICBpZiAobmJ1Y2tldF8gIT0gMCkgeworICAgICAgICAgIC8vIGluIGNhc2Ugb2YgLS1oYXNoLXN0eWxlPWJvdGgsIHdlIHByZWZlciBnbnUKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG5idWNrZXRfID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIpWzBdOworICAgICAgICBuY2hhaW5fID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIpWzFdOworICAgICAgICBidWNrZXRfID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIgKyA4KTsKKyAgICAgICAgY2hhaW5fID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIgKyA4ICsgbmJ1Y2tldF8gKiA0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFRfR05VX0hBU0g6CisgICAgICAgIGlmIChuYnVja2V0XyAhPSAwKSB7CisgICAgICAgICAgLy8gaW4gY2FzZSBvZiAtLWhhc2gtc3R5bGU9Ym90aCwgd2UgcHJlZmVyIGdudQorICAgICAgICAgIG5jaGFpbl8gPSAwOworICAgICAgICB9CisKKyAgICAgICAgbmJ1Y2tldF8gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4obG9hZF9iaWFzICsgZC0+ZF91bi5kX3B0cilbMF07CisgICAgICAgIC8vIHNraXAgc3ltbmR4CisgICAgICAgIGdudV9tYXNrd29yZHNfID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIpWzJdOworICAgICAgICBnbnVfc2hpZnQyXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihsb2FkX2JpYXMgKyBkLT5kX3VuLmRfcHRyKVszXTsKKworICAgICAgICBnbnVfYmxvb21fZmlsdGVyXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIgKyAxNik7CisgICAgICAgIGJ1Y2tldF8gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZ251X2Jsb29tX2ZpbHRlcl8gKyBnbnVfbWFza3dvcmRzXyk7CisgICAgICAgIC8vIGFtZW5kIGNoYWluIGZvciBzeW1uZHggPSBoZWFkZXJbMV0KKyAgICAgICAgY2hhaW5fID0gYnVja2V0XyArIG5idWNrZXRfIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIpWzFdOworCisgICAgICAgIGlmICghcG93ZXJvZjIoZ251X21hc2t3b3Jkc18pKSB7CisgICAgICAgICAgRExfRVJSKCJpbnZhbGlkIG1hc2t3b3JkcyBmb3IgZ251X2hhc2ggPSAweCV4LCBpbiBcIiVzXCIgZXhwZWN0aW5nIHBvd2VyIHRvIHR3byIsIGdudV9tYXNrd29yZHNfLCBuYW1lKTsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLS1nbnVfbWFza3dvcmRzXzsKKworICAgICAgICBmbGFncyB8PSBGTEFHX0dOVV9IQVNIOwogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBEVF9TVFJUQUI6Ci0gICAgICAgIHN0cnRhYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICBzdHJ0YWJfID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obG9hZF9iaWFzICsgZC0+ZF91bi5kX3B0cik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIERUX1NUUlNaOgotICAgICAgICBzdHJ0YWJfc2l6ZSA9IGQtPmRfdW4uZF92YWw7CisgICAgICAgIHN0cnRhYl9zaXplXyA9IGQtPmRfdW4uZF92YWw7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIERUX1NZTVRBQjoKLSAgICAgICAgc3ltdGFiID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFN5bSkqPihsb2FkX2JpYXMgKyBkLT5kX3VuLmRfcHRyKTsKKyAgICAgICAgc3ltdGFiXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhTeW0pKj4obG9hZF9iaWFzICsgZC0+ZF91bi5kX3B0cik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIERUX1NZTUVOVDoKICAgICAgICAgaWYgKGQtPmRfdW4uZF92YWwgIT0gc2l6ZW9mKEVsZlcoU3ltKSkpIHsKLSAgICAgICAgICBETF9FUlIoImludmFsaWQgRFRfU1lNRU5UOiAlemQiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGQtPmRfdW4uZF92YWwpKTsKKyAgICAgICAgICBETF9FUlIoImludmFsaWQgRFRfU1lNRU5UOiAlemQgaW4gXCIlc1wiIiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkLT5kX3VuLmRfdmFsKSwgbmFtZSk7CiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTkzNiwyNCArMjE3MSwyNCBAQAogCiAgICAgICBjYXNlIERUX0pNUFJFTDoKICNpZiBkZWZpbmVkKFVTRV9SRUxBKQotICAgICAgICBwbHRfcmVsYSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhSZWxhKSo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICBwbHRfcmVsYV8gPSByZWludGVycHJldF9jYXN0PEVsZlcoUmVsYSkqPihsb2FkX2JpYXMgKyBkLT5kX3VuLmRfcHRyKTsKICNlbHNlCi0gICAgICAgIHBsdF9yZWwgPSByZWludGVycHJldF9jYXN0PEVsZlcoUmVsKSo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICBwbHRfcmVsXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhSZWwpKj4obG9hZF9iaWFzICsgZC0+ZF91bi5kX3B0cik7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRFRfUExUUkVMU1o6CiAjaWYgZGVmaW5lZChVU0VfUkVMQSkKLSAgICAgICAgcGx0X3JlbGFfY291bnQgPSBkLT5kX3VuLmRfdmFsIC8gc2l6ZW9mKEVsZlcoUmVsYSkpOworICAgICAgICBwbHRfcmVsYV9jb3VudF8gPSBkLT5kX3VuLmRfdmFsIC8gc2l6ZW9mKEVsZlcoUmVsYSkpOwogI2Vsc2UKLSAgICAgICAgcGx0X3JlbF9jb3VudCA9IGQtPmRfdW4uZF92YWwgLyBzaXplb2YoRWxmVyhSZWwpKTsKKyAgICAgICAgcGx0X3JlbF9jb3VudF8gPSBkLT5kX3VuLmRfdmFsIC8gc2l6ZW9mKEVsZlcoUmVsKSk7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRFRfUExUR09UOgogI2lmIGRlZmluZWQoX19taXBzX18pCiAgICAgICAgIC8vIFVzZWQgYnkgbWlwcyBhbmQgbWlwczY0LgotICAgICAgICBwbHRfZ290ID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKio+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICBwbHRfZ290XyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSoqPihsb2FkX2JpYXMgKyBkLT5kX3VuLmRfcHRyKTsKICNlbmRpZgogICAgICAgICAvLyBJZ25vcmUgZm9yIG90aGVyIHBsYXRmb3Jtcy4uLiAoYmVjYXVzZSBSVExEX0xBWlkgaXMgbm90IHN1cHBvcnRlZCkKICAgICAgICAgYnJlYWs7CkBAIC0xOTczLDExICsyMjA4LDExIEBACiAjZW5kaWYKICNpZiBkZWZpbmVkKFVTRV9SRUxBKQogICAgICAgY2FzZSBEVF9SRUxBOgotICAgICAgICByZWxhID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFJlbGEpKj4obG9hZF9iaWFzICsgZC0+ZF91bi5kX3B0cik7CisgICAgICAgIHJlbGFfID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFJlbGEpKj4obG9hZF9iaWFzICsgZC0+ZF91bi5kX3B0cik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIERUX1JFTEFTWjoKLSAgICAgICAgcmVsYV9jb3VudCA9IGQtPmRfdW4uZF92YWwgLyBzaXplb2YoRWxmVyhSZWxhKSk7CisgICAgICAgIHJlbGFfY291bnRfID0gZC0+ZF91bi5kX3ZhbCAvIHNpemVvZihFbGZXKFJlbGEpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRFRfUkVMQUVOVDoKQEAgLTIwMDAsMTEgKzIyMzUsMTEgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKICAgICAgIGNhc2UgRFRfUkVMOgotICAgICAgICByZWwgPSByZWludGVycHJldF9jYXN0PEVsZlcoUmVsKSo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICByZWxfID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFJlbCkqPihsb2FkX2JpYXMgKyBkLT5kX3VuLmRfcHRyKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRFRfUkVMU1o6Ci0gICAgICAgIHJlbF9jb3VudCA9IGQtPmRfdW4uZF92YWwgLyBzaXplb2YoRWxmVyhSZWwpKTsKKyAgICAgICAgcmVsX2NvdW50XyA9IGQtPmRfdW4uZF92YWwgLyBzaXplb2YoRWxmVyhSZWwpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRFRfUkVMRU5UOgpAQCAtMjAyNiw0MCArMjI2MSw0MCBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKICAgICAgIGNhc2UgRFRfSU5JVDoKLSAgICAgICAgaW5pdF9mdW5jID0gcmVpbnRlcnByZXRfY2FzdDxsaW5rZXJfZnVuY3Rpb25fdD4obG9hZF9iaWFzICsgZC0+ZF91bi5kX3B0cik7Ci0gICAgICAgIERFQlVHKCIlcyBjb25zdHJ1Y3RvcnMgKERUX0lOSVQpIGZvdW5kIGF0ICVwIiwgbmFtZSwgaW5pdF9mdW5jKTsKKyAgICAgICAgaW5pdF9mdW5jXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8bGlua2VyX2Z1bmN0aW9uX3Q+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICBERUJVRygiJXMgY29uc3RydWN0b3JzIChEVF9JTklUKSBmb3VuZCBhdCAlcCIsIG5hbWUsIGluaXRfZnVuY18pOwogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBEVF9GSU5JOgotICAgICAgICBmaW5pX2Z1bmMgPSByZWludGVycHJldF9jYXN0PGxpbmtlcl9mdW5jdGlvbl90Pihsb2FkX2JpYXMgKyBkLT5kX3VuLmRfcHRyKTsKLSAgICAgICAgREVCVUcoIiVzIGRlc3RydWN0b3JzIChEVF9GSU5JKSBmb3VuZCBhdCAlcCIsIG5hbWUsIGZpbmlfZnVuYyk7CisgICAgICAgIGZpbmlfZnVuY18gPSByZWludGVycHJldF9jYXN0PGxpbmtlcl9mdW5jdGlvbl90Pihsb2FkX2JpYXMgKyBkLT5kX3VuLmRfcHRyKTsKKyAgICAgICAgREVCVUcoIiVzIGRlc3RydWN0b3JzIChEVF9GSU5JKSBmb3VuZCBhdCAlcCIsIG5hbWUsIGZpbmlfZnVuY18pOwogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBEVF9JTklUX0FSUkFZOgotICAgICAgICBpbml0X2FycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxsaW5rZXJfZnVuY3Rpb25fdCo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIpOwotICAgICAgICBERUJVRygiJXMgY29uc3RydWN0b3JzIChEVF9JTklUX0FSUkFZKSBmb3VuZCBhdCAlcCIsIG5hbWUsIGluaXRfYXJyYXkpOworICAgICAgICBpbml0X2FycmF5XyA9IHJlaW50ZXJwcmV0X2Nhc3Q8bGlua2VyX2Z1bmN0aW9uX3QqPihsb2FkX2JpYXMgKyBkLT5kX3VuLmRfcHRyKTsKKyAgICAgICAgREVCVUcoIiVzIGNvbnN0cnVjdG9ycyAoRFRfSU5JVF9BUlJBWSkgZm91bmQgYXQgJXAiLCBuYW1lLCBpbml0X2FycmF5Xyk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIERUX0lOSVRfQVJSQVlTWjoKLSAgICAgICAgaW5pdF9hcnJheV9jb3VudCA9ICgodW5zaWduZWQpZC0+ZF91bi5kX3ZhbCkgLyBzaXplb2YoRWxmVyhBZGRyKSk7CisgICAgICAgIGluaXRfYXJyYXlfY291bnRfID0gKCh1bnNpZ25lZClkLT5kX3VuLmRfdmFsKSAvIHNpemVvZihFbGZXKEFkZHIpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRFRfRklOSV9BUlJBWToKLSAgICAgICAgZmluaV9hcnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8bGlua2VyX2Z1bmN0aW9uX3QqPihsb2FkX2JpYXMgKyBkLT5kX3VuLmRfcHRyKTsKLSAgICAgICAgREVCVUcoIiVzIGRlc3RydWN0b3JzIChEVF9GSU5JX0FSUkFZKSBmb3VuZCBhdCAlcCIsIG5hbWUsIGZpbmlfYXJyYXkpOworICAgICAgICBmaW5pX2FycmF5XyA9IHJlaW50ZXJwcmV0X2Nhc3Q8bGlua2VyX2Z1bmN0aW9uX3QqPihsb2FkX2JpYXMgKyBkLT5kX3VuLmRfcHRyKTsKKyAgICAgICAgREVCVUcoIiVzIGRlc3RydWN0b3JzIChEVF9GSU5JX0FSUkFZKSBmb3VuZCBhdCAlcCIsIG5hbWUsIGZpbmlfYXJyYXlfKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRFRfRklOSV9BUlJBWVNaOgotICAgICAgICBmaW5pX2FycmF5X2NvdW50ID0gKCh1bnNpZ25lZClkLT5kX3VuLmRfdmFsKSAvIHNpemVvZihFbGZXKEFkZHIpKTsKKyAgICAgICAgZmluaV9hcnJheV9jb3VudF8gPSAoKHVuc2lnbmVkKWQtPmRfdW4uZF92YWwpIC8gc2l6ZW9mKEVsZlcoQWRkcikpOwogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBEVF9QUkVJTklUX0FSUkFZOgotICAgICAgICBwcmVpbml0X2FycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxsaW5rZXJfZnVuY3Rpb25fdCo+KGxvYWRfYmlhcyArIGQtPmRfdW4uZF9wdHIpOwotICAgICAgICBERUJVRygiJXMgY29uc3RydWN0b3JzIChEVF9QUkVJTklUX0FSUkFZKSBmb3VuZCBhdCAlcCIsIG5hbWUsIHByZWluaXRfYXJyYXkpOworICAgICAgICBwcmVpbml0X2FycmF5XyA9IHJlaW50ZXJwcmV0X2Nhc3Q8bGlua2VyX2Z1bmN0aW9uX3QqPihsb2FkX2JpYXMgKyBkLT5kX3VuLmRfcHRyKTsKKyAgICAgICAgREVCVUcoIiVzIGNvbnN0cnVjdG9ycyAoRFRfUFJFSU5JVF9BUlJBWSkgZm91bmQgYXQgJXAiLCBuYW1lLCBwcmVpbml0X2FycmF5Xyk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIERUX1BSRUlOSVRfQVJSQVlTWjoKLSAgICAgICAgcHJlaW5pdF9hcnJheV9jb3VudCA9ICgodW5zaWduZWQpZC0+ZF91bi5kX3ZhbCkgLyBzaXplb2YoRWxmVyhBZGRyKSk7CisgICAgICAgIHByZWluaXRfYXJyYXlfY291bnRfID0gKCh1bnNpZ25lZClkLT5kX3VuLmRfdmFsKSAvIHNpemVvZihFbGZXKEFkZHIpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRFRfVEVYVFJFTDoKQEAgLTIwOTQsMTIgKzIzMjksOSBAQAogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBEVF9GTEFHU18xOgotICAgICAgICBpZiAoKGQtPmRfdW4uZF92YWwgJiBERl8xX0dMT0JBTCkgIT0gMCkgewotICAgICAgICAgIHJ0bGRfZmxhZ3MgfD0gUlRMRF9HTE9CQUw7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IG90aGVyIGZsYWdzCisgICAgICAgIHNldF9kdF9mbGFnc18xKGQtPmRfdW4uZF92YWwpOwogCi0gICAgICAgIGlmICgoZC0+ZF91bi5kX3ZhbCAmIH4oREZfMV9OT1cgfCBERl8xX0dMT0JBTCkpICE9IDApIHsKKyAgICAgICAgaWYgKChkLT5kX3VuLmRfdmFsICYgflNVUFBPUlRFRF9EVF9GTEFHU18xKSAhPSAwKSB7CiAgICAgICAgICAgRExfV0FSTigiVW5zdXBwb3J0ZWQgZmxhZ3MgRFRfRkxBR1NfMT0lcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGQtPmRfdW4uZF92YWwpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTIxMTksMTUgKzIzNTEsMTUgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRFRfTUlQU19TWU1UQUJOTzoKLSAgICAgICAgbWlwc19zeW10YWJubyA9IGQtPmRfdW4uZF92YWw7CisgICAgICAgIG1pcHNfc3ltdGFibm9fID0gZC0+ZF91bi5kX3ZhbDsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRFRfTUlQU19MT0NBTF9HT1ROTzoKLSAgICAgICAgbWlwc19sb2NhbF9nb3RubyA9IGQtPmRfdW4uZF92YWw7CisgICAgICAgIG1pcHNfbG9jYWxfZ290bm9fID0gZC0+ZF91bi5kX3ZhbDsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRFRfTUlQU19HT1RTWU06Ci0gICAgICAgIG1pcHNfZ290c3ltID0gZC0+ZF91bi5kX3ZhbDsKKyAgICAgICAgbWlwc19nb3RzeW1fID0gZC0+ZF91bi5kX3ZhbDsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICAgIC8vIElnbm9yZWQ6ICJJdHMgdXNlIGhhcyBiZWVuIHN1cGVyc2VkZWQgYnkgdGhlIERGX0JJTkRfTk9XIGZsYWciCkBAIC0yMTUwLDI5ICsyMzgyLDI5IEBACiAgIH0KIAogICBERUJVRygic2ktPmJhc2UgPSAlcCwgc2ktPnN0cnRhYiA9ICVwLCBzaS0+c3ltdGFiID0gJXAiLAotICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlKSwgc3RydGFiLCBzeW10YWIpOworICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlKSwgc3RydGFiXywgc3ltdGFiXyk7CiAKICAgLy8gU2FuaXR5IGNoZWNrcy4KICAgaWYgKHJlbG9jYXRpbmdfbGlua2VyICYmIG5lZWRlZF9jb3VudCAhPSAwKSB7CiAgICAgRExfRVJSKCJsaW5rZXIgY2Fubm90IGhhdmUgRFRfTkVFREVEIGRlcGVuZGVuY2llcyBvbiBvdGhlciBsaWJyYXJpZXMiKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgaWYgKG5idWNrZXQgPT0gMCkgewotICAgIERMX0VSUigiZW1wdHkvbWlzc2luZyBEVF9IQVNIIGluIFwiJXNcIiAoYnVpbHQgd2l0aCAtLWhhc2gtc3R5bGU9Z251PykiLCBuYW1lKTsKKyAgaWYgKG5idWNrZXRfID09IDApIHsKKyAgICBETF9FUlIoImVtcHR5L21pc3NpbmcgRFRfSEFTSC9EVF9HTlVfSEFTSCBpbiBcIiVzXCIgKG5ldyBoYXNoIHR5cGUgZnJvbSB0aGUgZnV0dXJlPykiLCBuYW1lKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgaWYgKHN0cnRhYiA9PSAwKSB7CisgIGlmIChzdHJ0YWJfID09IDApIHsKICAgICBETF9FUlIoImVtcHR5L21pc3NpbmcgRFRfU1RSVEFCIGluIFwiJXNcIiIsIG5hbWUpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBpZiAoc3ltdGFiID09IDApIHsKKyAgaWYgKHN5bXRhYl8gPT0gMCkgewogICAgIERMX0VSUigiZW1wdHkvbWlzc2luZyBEVF9TWU1UQUIgaW4gXCIlc1wiIiwgbmFtZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNvaW5mbzo6TGlua0ltYWdlKGNvbnN0IGFuZHJvaWRfZGxleHRpbmZvKiBleHRpbmZvKSB7Citib29sIHNvaW5mbzo6bGlua19pbWFnZShjb25zdCBzb2luZm9fbGlzdF90JiBnbG9iYWxfZ3JvdXAsIGNvbnN0IHNvaW5mb19saXN0X3QmIGxvY2FsX2dyb3VwLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbykgewogCiAjaWYgIWRlZmluZWQoX19MUDY0X18pCiAgIGlmIChoYXNfdGV4dF9yZWxvY2F0aW9ucykgewpAQCAtMjE4OSwzNSArMjQyMSwzNSBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFVTRV9SRUxBKQotICBpZiAocmVsYSAhPSBudWxscHRyKSB7CisgIGlmIChyZWxhXyAhPSBudWxscHRyKSB7CiAgICAgREVCVUcoIlsgcmVsb2NhdGluZyAlcyBdIiwgbmFtZSk7Ci0gICAgaWYgKFJlbG9jYXRlKHJlbGEsIHJlbGFfY291bnQpKSB7CisgICAgaWYgKHJlbG9jYXRlKHJlbGFfLCByZWxhX2NvdW50XywgZ2xvYmFsX2dyb3VwLCBsb2NhbF9ncm91cCkpIHsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgIH0KLSAgaWYgKHBsdF9yZWxhICE9IG51bGxwdHIpIHsKKyAgaWYgKHBsdF9yZWxhXyAhPSBudWxscHRyKSB7CiAgICAgREVCVUcoIlsgcmVsb2NhdGluZyAlcyBwbHQgXSIsIG5hbWUpOwotICAgIGlmIChSZWxvY2F0ZShwbHRfcmVsYSwgcGx0X3JlbGFfY291bnQpKSB7CisgICAgaWYgKHJlbG9jYXRlKHBsdF9yZWxhXywgcGx0X3JlbGFfY291bnRfLCBnbG9iYWxfZ3JvdXAsIGxvY2FsX2dyb3VwKSkgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgfQogI2Vsc2UKLSAgaWYgKHJlbCAhPSBudWxscHRyKSB7CisgIGlmIChyZWxfICE9IG51bGxwdHIpIHsKICAgICBERUJVRygiWyByZWxvY2F0aW5nICVzIF0iLCBuYW1lKTsKLSAgICBpZiAoUmVsb2NhdGUocmVsLCByZWxfY291bnQpKSB7CisgICAgaWYgKHJlbG9jYXRlKHJlbF8sIHJlbF9jb3VudF8sIGdsb2JhbF9ncm91cCwgbG9jYWxfZ3JvdXApKSB7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICB9Ci0gIGlmIChwbHRfcmVsICE9IG51bGxwdHIpIHsKKyAgaWYgKHBsdF9yZWxfICE9IG51bGxwdHIpIHsKICAgICBERUJVRygiWyByZWxvY2F0aW5nICVzIHBsdCBdIiwgbmFtZSk7Ci0gICAgaWYgKFJlbG9jYXRlKHBsdF9yZWwsIHBsdF9yZWxfY291bnQpKSB7CisgICAgaWYgKHJlbG9jYXRlKHBsdF9yZWxfLCBwbHRfcmVsX2NvdW50XywgZ2xvYmFsX2dyb3VwLCBsb2NhbF9ncm91cCkpIHsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgIH0KICNlbmRpZgogCiAjaWYgZGVmaW5lZChfX21pcHNfXykKLSAgaWYgKCFtaXBzX3JlbG9jYXRlX2dvdCh0aGlzKSkgeworICBpZiAoIW1pcHNfcmVsb2NhdGVfZ290KGdsb2JhbF9ncm91cCwgbG9jYWxfZ3JvdXApKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAjZW5kaWYKQEAgLTIyNzUsNyArMjUwNyw3IEBACiAgICAgcmV0dXJuOwogICB9CiAKLSAgc29pbmZvKiBzaSA9IHNvaW5mb19hbGxvYygiW3Zkc29dIiwgbnVsbHB0ciwgMCk7CisgIHNvaW5mbyogc2kgPSBzb2luZm9fYWxsb2MoIlt2ZHNvXSIsIG51bGxwdHIsIDAsIDApOwogCiAgIHNpLT5waGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFBoZHIpKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZWhkcl92ZHNvKSArIGVoZHJfdmRzby0+ZV9waG9mZik7CiAgIHNpLT5waG51bSA9IGVoZHJfdmRzby0+ZV9waG51bTsKQEAgLTIyODMsOCArMjUxNSw4IEBACiAgIHNpLT5zaXplID0gcGhkcl90YWJsZV9nZXRfbG9hZF9zaXplKHNpLT5waGRyLCBzaS0+cGhudW0pOwogICBzaS0+bG9hZF9iaWFzID0gZ2V0X2VsZl9leGVjX2xvYWRfYmlhcyhlaGRyX3Zkc28pOwogCi0gIHNpLT5QcmVsaW5rSW1hZ2UoKTsKLSAgc2ktPkxpbmtJbWFnZShudWxscHRyKTsKKyAgc2ktPnByZWxpbmtfaW1hZ2UoKTsKKyAgc2ktPmxpbmtfaW1hZ2UoZ19lbXB0eV9saXN0LCBzb2luZm86OnNvaW5mb19saXN0X3Q6Om1ha2VfbGlzdChzaSksIG51bGxwdHIpOwogI2VuZGlmCiB9CiAKQEAgLTIyOTYsNyArMjUyOCw3IEBACiAjZWxzZQogI2RlZmluZSBMSU5LRVJfUEFUSCAiL3N5c3RlbS9iaW4vbGlua2VyIgogI2VuZGlmCi1zdGF0aWMgc29pbmZvIGxpbmtlcl9zb2luZm9fZm9yX2dkYihMSU5LRVJfUEFUSCwgbnVsbHB0ciwgMCk7CitzdGF0aWMgc29pbmZvIGxpbmtlcl9zb2luZm9fZm9yX2dkYihMSU5LRVJfUEFUSCwgbnVsbHB0ciwgMCwgMCk7CiAKIC8qIGdkYiBleHBlY3RzIHRoZSBsaW5rZXIgdG8gYmUgaW4gdGhlIGRlYnVnIHNoYXJlZCBvYmplY3QgbGlzdC4KICAqIFdpdGhvdXQgdGhpcywgZ2RiIGhhcyB0cm91YmxlIGxvY2F0aW5nIHRoZSBsaW5rZXIncyAiLnRleHQiCkBAIC0yMzYwLDcgKzI1OTIsNyBAQAogCiAgIElORk8oIlsgYW5kcm9pZCBsaW5rZXIgJiBkZWJ1Z2dlciBdIik7CiAKLSAgc29pbmZvKiBzaSA9IHNvaW5mb19hbGxvYyhhcmdzLmFyZ3ZbMF0sIG51bGxwdHIsIDApOworICBzb2luZm8qIHNpID0gc29pbmZvX2FsbG9jKGFyZ3MuYXJndlswXSwgbnVsbHB0ciwgMCwgUlRMRF9HTE9CQUwpOwogICBpZiAoc2kgPT0gbnVsbHB0cikgewogICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgfQpAQCAtMjQxMyw3ICsyNjQ1LDEwIEBACiAKICAgc29tYWluID0gc2k7CiAKLSAgc2ktPlByZWxpbmtJbWFnZSgpOworICBzaS0+cHJlbGlua19pbWFnZSgpOworCisgIC8vIGFkZCBzb21haW4gdG8gZ2xvYmFsIGdyb3VwCisgIHNpLT5zZXRfZHRfZmxhZ3NfMShzaS0+Z2V0X2R0X2ZsYWdzXzEoKSB8IERGXzFfR0xPQkFMKTsKIAogICAvLyBMb2FkIGxkX3ByZWxvYWRzIGFuZCBkZXBlbmRlbmNpZXMuCiAgIFN0cmluZ0xpbmtlZExpc3QgbmVlZGVkX2xpYnJhcnlfbmFtZV9saXN0OwpAQCAtMjQzMCwzNiArMjY2NSwyNiBAQAogICB9KTsKIAogICBjb25zdCBjaGFyKiBuZWVkZWRfbGlicmFyeV9uYW1lc1tuZWVkZWRfbGlicmFyaWVzX2NvdW50XTsKLSAgc29pbmZvKiBuZWVkZWRfbGlicmFyeV9zaVtuZWVkZWRfbGlicmFyaWVzX2NvdW50XTsKIAogICBtZW1zZXQobmVlZGVkX2xpYnJhcnlfbmFtZXMsIDAsIHNpemVvZihuZWVkZWRfbGlicmFyeV9uYW1lcykpOwogICBuZWVkZWRfbGlicmFyeV9uYW1lX2xpc3QuY29weV90b19hcnJheShuZWVkZWRfbGlicmFyeV9uYW1lcywgbmVlZGVkX2xpYnJhcmllc19jb3VudCk7CiAKLSAgaWYgKG5lZWRlZF9saWJyYXJpZXNfY291bnQgPiAwICYmICFmaW5kX2xpYnJhcmllcyhuZWVkZWRfbGlicmFyeV9uYW1lcywgbmVlZGVkX2xpYnJhcmllc19jb3VudCwgbmVlZGVkX2xpYnJhcnlfc2ksIGdfbGRfcHJlbG9hZHMsIGxkX3ByZWxvYWRzX2NvdW50LCAwLCBudWxscHRyKSkgewotICAgIF9fbGliY19mb3JtYXRfZmQoMiwgIkNBTk5PVCBMSU5LIEVYRUNVVEFCTEUgREVQRU5ERU5DSUVTOiAlc1xuIiwgbGlua2VyX2dldF9lcnJvcl9idWZmZXIoKSk7Ci0gICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICB9Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGk8bmVlZGVkX2xpYnJhcmllc19jb3VudDsgKytpKSB7Ci0gICAgc2ktPmFkZF9jaGlsZChuZWVkZWRfbGlicmFyeV9zaVtpXSk7Ci0gIH0KLQotICBpZiAoIXNpLT5MaW5rSW1hZ2UobnVsbHB0cikpIHsKKyAgaWYgKG5lZWRlZF9saWJyYXJpZXNfY291bnQgPiAwICYmICFmaW5kX2xpYnJhcmllcyhzaSwgbmVlZGVkX2xpYnJhcnlfbmFtZXMsIG5lZWRlZF9saWJyYXJpZXNfY291bnQsIG51bGxwdHIsIGdfbGRfcHJlbG9hZHMsIGxkX3ByZWxvYWRzX2NvdW50LCBSVExEX0dMT0JBTCwgbnVsbHB0cikpIHsKICAgICBfX2xpYmNfZm9ybWF0X2ZkKDIsICJDQU5OT1QgTElOSyBFWEVDVVRBQkxFOiAlc1xuIiwgbGlua2VyX2dldF9lcnJvcl9idWZmZXIoKSk7CiAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICB9CiAKICAgYWRkX3Zkc28oYXJncyk7CiAKLSAgc2ktPkNhbGxQcmVJbml0Q29uc3RydWN0b3JzKCk7CisgIHNpLT5jYWxsX3ByZV9pbml0X2NvbnN0cnVjdG9ycygpOwogCi0gIC8qIEFmdGVyIHRoZSBQcmVsaW5rSW1hZ2UsIHRoZSBzaS0+bG9hZF9iaWFzIGlzIGluaXRpYWxpemVkLgorICAvKiBBZnRlciB0aGUgcHJlbGlua19pbWFnZSwgdGhlIHNpLT5sb2FkX2JpYXMgaXMgaW5pdGlhbGl6ZWQuCiAgICAqIEZvciBzbyBsaWIsIHRoZSBtYXAtPmxfYWRkciB3aWxsIGJlIHVwZGF0ZWQgaW4gbm90aWZ5X2dkYl9vZl9sb2FkLgogICAgKiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHZhbHVlIGZvciBzbyBleGUgaGVyZS4gU28gVW53aW5kX0JhY2t0cmFjZQogICAgKiBmb3Igc29tZSBhcmNoIGxpa2UgeDg2IGNvdWxkIHdvcmsgY29ycmVjdGx5IHdpdGhpbiBzbyBleGUuCiAgICAqLwogICBtYXAtPmxfYWRkciA9IHNpLT5sb2FkX2JpYXM7Ci0gIHNpLT5DYWxsQ29uc3RydWN0b3JzKCk7CisgIHNpLT5jYWxsX2NvbnN0cnVjdG9ycygpOwogCiAjaWYgVElNSU5HCiAgIGdldHRpbWVvZmRheSgmdDEsIG51bGxwdHIpOwpAQCAtMjU0OCw3ICsyNzczLDcgQEAKICAgRWxmVyhFaGRyKSogZWxmX2hkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhFaGRyKSo+KGxpbmtlcl9hZGRyKTsKICAgRWxmVyhQaGRyKSogcGhkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhQaGRyKSo+KGxpbmtlcl9hZGRyICsgZWxmX2hkci0+ZV9waG9mZik7CiAKLSAgc29pbmZvIGxpbmtlcl9zbygiW2R5bmFtaWMgbGlua2VyXSIsIG51bGxwdHIsIDApOworICBzb2luZm8gbGlua2VyX3NvKCJbZHluYW1pYyBsaW5rZXJdIiwgbnVsbHB0ciwgMCwgMCk7CiAKICAgLy8gSWYgdGhlIGxpbmtlciBpcyBub3QgYWN0aW5nIGFzIFBUX0lOVEVSUCBlbnRyeV9wb2ludCBpcyBlcXVhbCB0bwogICAvLyBfc3RhcnQuIFdoaWNoIG1lYW5zIHRoYXQgdGhlIGxpbmtlciBpcyBydW5uaW5nIGFzIGFuIGV4ZWN1dGFibGUgYW5kCkBAIC0yNTY4LDcgKzI3OTMsMTMgQEAKICAgbGlua2VyX3NvLnBobnVtID0gZWxmX2hkci0+ZV9waG51bTsKICAgbGlua2VyX3NvLmZsYWdzIHw9IEZMQUdfTElOS0VSOwogCi0gIGlmICghKGxpbmtlcl9zby5QcmVsaW5rSW1hZ2UoKSAmJiBsaW5rZXJfc28uTGlua0ltYWdlKG51bGxwdHIpKSkgeworICAvLyBUaGlzIG1pZ2h0IG5vdCBiZSBvYnZpb3VzLi4uIFRoZSByZWFzb25zIHdoeSB3ZSBwYXNzIGdfZW1wdHlfbGlzdAorICAvLyBpbiBwbGFjZSBvZiBsb2NhbF9ncm91cCBoZXJlIGFyZSAoMSkgd2UgZG8gbm90IHJlYWxseSBuZWVkIGl0LCBiZWNhdXNlCisgIC8vIGxpbmtlciBpcyBidWlsdCB3aXRoIERUX1NZTUJPTElDIGFuZCB0aGVyZWZvcmUgcmVsb2NhdGVzIGl0cyBzeW1ib2xzIGFnYWluc3QKKyAgLy8gaXRzZWxmIHdpdGhvdXQgaGF2aW5nIHRvIGxvb2sgaW50byBsb2NhbF9ncm91cCBhbmQgKDIpIGFsbG9jYXRvcnMKKyAgLy8gYXJlIG5vdCB5ZXQgaW5pdGlhbGl6ZWQsIGFuZCB0aGVyZWZvcmUgd2UgY2Fubm90IHVzZSBsaW5rZWRfbGlzdC5wdXNoXyoKKyAgLy8gZnVuY3Rpb25zIGF0IHRoaXMgcG9pbnQuCisgIGlmICghKGxpbmtlcl9zby5wcmVsaW5rX2ltYWdlKCkgJiYgbGlua2VyX3NvLmxpbmtfaW1hZ2UoZ19lbXB0eV9saXN0LCBnX2VtcHR5X2xpc3QsIG51bGxwdHIpKSkgewogICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGlmIHRoZSBsaW5rZXIKICAgICAvLyBjYW4ndCBsaW5rIGl0c2VsZiwgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCB3ZSdsbCBiZSBhYmxlIHRvCiAgICAgLy8gY2FsbCB3cml0ZSgpIChiZWNhdXNlIGl0IGludm9sdmVzIGEgR09UIHJlZmVyZW5jZSkuIFdlIG1heSBhcwpAQCAtMjU4Myw3ICsyODE0LDcgQEAKICAgX19saWJjX2luaXRfdGxzKGFyZ3MpOwogCiAgIC8vIEluaXRpYWxpemUgdGhlIGxpbmtlcidzIG93biBnbG9iYWwgdmFyaWFibGVzCi0gIGxpbmtlcl9zby5DYWxsQ29uc3RydWN0b3JzKCk7CisgIGxpbmtlcl9zby5jYWxsX2NvbnN0cnVjdG9ycygpOwogCiAgIC8vIEluaXRpYWxpemUgc3RhdGljIHZhcmlhYmxlcy4gTm90ZSB0aGF0IGluIG9yZGVyIHRvCiAgIC8vIGdldCBjb3JyZWN0IGxpYmRsX2luZm8gd2UgbmVlZCB0byBjYWxsIGNvbnN0cnVjdG9ycwpkaWZmIC0tZ2l0IGEvbGlua2VyL2xpbmtlci5oIGIvbGlua2VyL2xpbmtlci5oCmluZGV4IGZhMzhjN2YuLmQyOGY3MGUgMTAwNjQ0Ci0tLSBhL2xpbmtlci9saW5rZXIuaAorKysgYi9saW5rZXIvbGlua2VyLmgKQEAgLTg3LDkgKzg3LDEyIEBACiAjZGVmaW5lIEZMQUdfTElOS0VEICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIEZMQUdfRVhFICAgICAgICAweDAwMDAwMDA0IC8vIFRoZSBtYWluIGV4ZWN1dGFibGUKICNkZWZpbmUgRkxBR19MSU5LRVIgICAgIDB4MDAwMDAwMTAgLy8gVGhlIGxpbmtlciBpdHNlbGYKKyNkZWZpbmUgRkxBR19HTlVfSEFTSCAgIDB4MDAwMDAwNDAgLy8gdXNlcyBnbnUgaGFzaAogI2RlZmluZSBGTEFHX05FV19TT0lORk8gMHg0MDAwMDAwMCAvLyBuZXcgc29pbmZvIGZvcm1hdAogCi0jZGVmaW5lIFNPSU5GT19WRVJTSU9OIDAKKyNkZWZpbmUgU1VQUE9SVEVEX0RUX0ZMQUdTXzEgKERGXzFfTk9XIHwgREZfMV9HTE9CQUwgfCBERl8xX05PREVMRVRFKQorCisjZGVmaW5lIFNPSU5GT19WRVJTSU9OIDEKIAogI2RlZmluZSBTT0lORk9fTkFNRV9MRU4gMTI4CiAKQEAgLTEwMywxNCArMTA2LDM4IEBACiBzdHJ1Y3Qgc29pbmZvOwogCiBjbGFzcyBTb2luZm9MaXN0QWxsb2NhdG9yIHsKLXB1YmxpYzoKKyBwdWJsaWM6CiAgIHN0YXRpYyBMaW5rZWRMaXN0RW50cnk8c29pbmZvPiogYWxsb2MoKTsKICAgc3RhdGljIHZvaWQgZnJlZShMaW5rZWRMaXN0RW50cnk8c29pbmZvPiogZW50cnkpOwotcHJpdmF0ZToKKworIHByaXZhdGU6CiAgIC8vIHVuY29uc3RydWN0YWJsZQogICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoU29pbmZvTGlzdEFsbG9jYXRvcik7CiB9OwogCitjbGFzcyBTeW1ib2xOYW1lIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IFN5bWJvbE5hbWUoY29uc3QgY2hhciogbmFtZSkKKyAgICAgIDogbmFtZV8obmFtZSksIGhhc19lbGZfaGFzaF8oZmFsc2UpLCBoYXNfZ251X2hhc2hfKGZhbHNlKSwKKyAgICAgICAgZWxmX2hhc2hfKDApLCBnbnVfaGFzaF8oMCkgeyB9CisKKyAgY29uc3QgY2hhciogZ2V0X25hbWUoKSB7CisgICAgcmV0dXJuIG5hbWVfOworICB9CisKKyAgdWludDMyX3QgZWxmX2hhc2goKTsKKyAgdWludDMyX3QgZ251X2hhc2goKTsKKworIHByaXZhdGU6CisgIGNvbnN0IGNoYXIqIG5hbWVfOworICBib29sIGhhc19lbGZfaGFzaF87CisgIGJvb2wgaGFzX2dudV9oYXNoXzsKKyAgdWludDMyX3QgZWxmX2hhc2hfOworICB1aW50MzJfdCBnbnVfaGFzaF87CisKKyAgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFN5bWJvbE5hbWUpOworfTsKKwogc3RydWN0IHNvaW5mbyB7CiAgcHVibGljOgogICB0eXBlZGVmIExpbmtlZExpc3Q8c29pbmZvLCBTb2luZm9MaXN0QWxsb2NhdG9yPiBzb2luZm9fbGlzdF90OwpAQCAtMTM0LDU5ICsxNjEsNjMgQEAKICNlbmRpZgogCiAgIHNvaW5mbyogbmV4dDsKLSAgdW5zaWduZWQgZmxhZ3M7CisgIHVpbnQzMl90IGZsYWdzOwogCiAgcHJpdmF0ZToKLSAgY29uc3QgY2hhciogc3RydGFiOwotIHB1YmxpYzoKLSAgRWxmVyhTeW0pKiBzeW10YWI7CisgIGNvbnN0IGNoYXIqIHN0cnRhYl87CisgIEVsZlcoU3ltKSogc3ltdGFiXzsKIAotICBzaXplX3QgbmJ1Y2tldDsKLSAgc2l6ZV90IG5jaGFpbjsKLSAgdW5zaWduZWQqIGJ1Y2tldDsKLSAgdW5zaWduZWQqIGNoYWluOworICBzaXplX3QgbmJ1Y2tldF87CisgIHNpemVfdCBuY2hhaW5fOworICB1aW50MzJfdCogYnVja2V0XzsKKyAgdWludDMyX3QqIGNoYWluXzsKIAogI2lmIGRlZmluZWQoX19taXBzX18pIHx8ICFkZWZpbmVkKF9fTFA2NF9fKQogICAvLyBUaGlzIGlzIG9ubHkgdXNlZCBieSBtaXBzIGFuZCBtaXBzNjQsIGJ1dCBuZWVkcyB0byBiZSBoZXJlIGZvcgogICAvLyBhbGwgMzItYml0IGFyY2hpdGVjdHVyZXMgdG8gcHJlc2VydmUgYmluYXJ5IGNvbXBhdGliaWxpdHkuCi0gIEVsZlcoQWRkcikqKiBwbHRfZ290OworICBFbGZXKEFkZHIpKiogcGx0X2dvdF87CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoVVNFX1JFTEEpCi0gIEVsZlcoUmVsYSkqIHBsdF9yZWxhOwotICBzaXplX3QgcGx0X3JlbGFfY291bnQ7CisgIEVsZlcoUmVsYSkqIHBsdF9yZWxhXzsKKyAgc2l6ZV90IHBsdF9yZWxhX2NvdW50XzsKIAotICBFbGZXKFJlbGEpKiByZWxhOwotICBzaXplX3QgcmVsYV9jb3VudDsKKyAgRWxmVyhSZWxhKSogcmVsYV87CisgIHNpemVfdCByZWxhX2NvdW50XzsKICNlbHNlCi0gIEVsZlcoUmVsKSogcGx0X3JlbDsKLSAgc2l6ZV90IHBsdF9yZWxfY291bnQ7CisgIEVsZlcoUmVsKSogcGx0X3JlbF87CisgIHNpemVfdCBwbHRfcmVsX2NvdW50XzsKIAotICBFbGZXKFJlbCkqIHJlbDsKLSAgc2l6ZV90IHJlbF9jb3VudDsKKyAgRWxmVyhSZWwpKiByZWxfOworICBzaXplX3QgcmVsX2NvdW50XzsKICNlbmRpZgogCi0gIGxpbmtlcl9mdW5jdGlvbl90KiBwcmVpbml0X2FycmF5OwotICBzaXplX3QgcHJlaW5pdF9hcnJheV9jb3VudDsKKyAgbGlua2VyX2Z1bmN0aW9uX3QqIHByZWluaXRfYXJyYXlfOworICBzaXplX3QgcHJlaW5pdF9hcnJheV9jb3VudF87CiAKLSAgbGlua2VyX2Z1bmN0aW9uX3QqIGluaXRfYXJyYXk7Ci0gIHNpemVfdCBpbml0X2FycmF5X2NvdW50OwotICBsaW5rZXJfZnVuY3Rpb25fdCogZmluaV9hcnJheTsKLSAgc2l6ZV90IGZpbmlfYXJyYXlfY291bnQ7CisgIGxpbmtlcl9mdW5jdGlvbl90KiBpbml0X2FycmF5XzsKKyAgc2l6ZV90IGluaXRfYXJyYXlfY291bnRfOworICBsaW5rZXJfZnVuY3Rpb25fdCogZmluaV9hcnJheV87CisgIHNpemVfdCBmaW5pX2FycmF5X2NvdW50XzsKIAotICBsaW5rZXJfZnVuY3Rpb25fdCBpbml0X2Z1bmM7Ci0gIGxpbmtlcl9mdW5jdGlvbl90IGZpbmlfZnVuYzsKKyAgbGlua2VyX2Z1bmN0aW9uX3QgaW5pdF9mdW5jXzsKKyAgbGlua2VyX2Z1bmN0aW9uX3QgZmluaV9mdW5jXzsKIAorIHB1YmxpYzoKICNpZiBkZWZpbmVkKF9fYXJtX18pCiAgIC8vIEFSTSBFQUJJIHNlY3Rpb24gdXNlZCBmb3Igc3RhY2sgdW53aW5kaW5nLgotICB1bnNpZ25lZCogQVJNX2V4aWR4OworICB1aW50MzJfdCogQVJNX2V4aWR4OwogICBzaXplX3QgQVJNX2V4aWR4X2NvdW50OwogI2VsaWYgZGVmaW5lZChfX21pcHNfXykKLSAgdW5zaWduZWQgbWlwc19zeW10YWJubzsKLSAgdW5zaWduZWQgbWlwc19sb2NhbF9nb3RubzsKLSAgdW5zaWduZWQgbWlwc19nb3RzeW07CisgcHJpdmF0ZToKKyAgdWludDMyX3QgbWlwc19zeW10YWJub187CisgIHVpbnQzMl90IG1pcHNfbG9jYWxfZ290bm9fOworICB1aW50MzJfdCBtaXBzX2dvdHN5bV87CisgIGJvb2wgbWlwc19yZWxvY2F0ZV9nb3QoY29uc3Qgc29pbmZvX2xpc3RfdCYgZ2xvYmFsX2dyb3VwLCBjb25zdCBzb2luZm9fbGlzdF90JiBsb2NhbF9ncm91cCk7CisKICNlbmRpZgogCisgcHVibGljOgogICBzaXplX3QgcmVmX2NvdW50OwogICBsaW5rX21hcCBsaW5rX21hcF9oZWFkOwogCkBAIC0yMDEsNjIgKzIzMiw4NCBAQAogI2VuZGlmCiAgIGJvb2wgaGFzX0RUX1NZTUJPTElDOwogCi0gIHNvaW5mbyhjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBzdHJ1Y3Qgc3RhdCogZmlsZV9zdGF0LCBvZmY2NF90IGZpbGVfb2Zmc2V0KTsKKyBwdWJsaWM6CisgIHNvaW5mbyhjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBzdHJ1Y3Qgc3RhdCogZmlsZV9zdGF0LCBvZmY2NF90IGZpbGVfb2Zmc2V0LCBpbnQgcnRsZF9mbGFncyk7CiAKLSAgdm9pZCBDYWxsQ29uc3RydWN0b3JzKCk7Ci0gIHZvaWQgQ2FsbERlc3RydWN0b3JzKCk7Ci0gIHZvaWQgQ2FsbFByZUluaXRDb25zdHJ1Y3RvcnMoKTsKLSAgYm9vbCBQcmVsaW5rSW1hZ2UoKTsKLSAgYm9vbCBMaW5rSW1hZ2UoY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pOworICB2b2lkIGNhbGxfY29uc3RydWN0b3JzKCk7CisgIHZvaWQgY2FsbF9kZXN0cnVjdG9ycygpOworICB2b2lkIGNhbGxfcHJlX2luaXRfY29uc3RydWN0b3JzKCk7CisgIGJvb2wgcHJlbGlua19pbWFnZSgpOworICBib29sIGxpbmtfaW1hZ2UoY29uc3Qgc29pbmZvX2xpc3RfdCYgZ2xvYmFsX2dyb3VwLCBjb25zdCBzb2luZm9fbGlzdF90JiBsb2NhbF9ncm91cCwgY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pOwogCiAgIHZvaWQgYWRkX2NoaWxkKHNvaW5mbyogY2hpbGQpOwogICB2b2lkIHJlbW92ZV9hbGxfbGlua3MoKTsKIAotICBpbm9fdCBnZXRfc3RfaW5vKCk7Ci0gIGRldl90IGdldF9zdF9kZXYoKTsKLSAgb2ZmNjRfdCBnZXRfZmlsZV9vZmZzZXQoKTsKKyAgaW5vX3QgZ2V0X3N0X2lubygpIGNvbnN0OworICBkZXZfdCBnZXRfc3RfZGV2KCkgY29uc3Q7CisgIG9mZjY0X3QgZ2V0X2ZpbGVfb2Zmc2V0KCkgY29uc3Q7CisKKyAgdWludDMyX3QgZ2V0X3J0bGRfZmxhZ3MoKSBjb25zdDsKKyAgdWludDMyX3QgZ2V0X2R0X2ZsYWdzXzEoKSBjb25zdDsKKyAgdm9pZCBzZXRfZHRfZmxhZ3NfMSh1aW50MzJfdCBkdF9mbGFnc18xKTsKIAogICBzb2luZm9fbGlzdF90JiBnZXRfY2hpbGRyZW4oKTsKICAgc29pbmZvX2xpc3RfdCYgZ2V0X3BhcmVudHMoKTsKIAorICBFbGZXKFN5bSkqIGZpbmRfc3ltYm9sX2J5X25hbWUoU3ltYm9sTmFtZSYgc3ltYm9sX25hbWUpOworICBFbGZXKFN5bSkqIGZpbmRfc3ltYm9sX2J5X2FkZHJlc3MoY29uc3Qgdm9pZCogYWRkcik7CiAgIEVsZlcoQWRkcikgcmVzb2x2ZV9zeW1ib2xfYWRkcmVzcyhFbGZXKFN5bSkqIHMpOwogCiAgIGNvbnN0IGNoYXIqIGdldF9zdHJpbmcoRWxmVyhXb3JkKSBpbmRleCkgY29uc3Q7CisgIGJvb2wgY2FuX3VubG9hZCgpIGNvbnN0OworICBib29sIGlzX2dudV9oYXNoKCkgY29uc3Q7CiAKICAgYm9vbCBpbmxpbmUgaGFzX21pbl92ZXJzaW9uKHVpbnQzMl90IG1pbl92ZXJzaW9uKSBjb25zdCB7Ci0gICAgcmV0dXJuIChmbGFncyAmIEZMQUdfTkVXX1NPSU5GTykgIT0gMCAmJiB2ZXJzaW9uID49IG1pbl92ZXJzaW9uOworICAgIHJldHVybiAoZmxhZ3MgJiBGTEFHX05FV19TT0lORk8pICE9IDAgJiYgdmVyc2lvbl8gPj0gbWluX3ZlcnNpb247CiAgIH0KKwogIHByaXZhdGU6Ci0gIHZvaWQgQ2FsbEFycmF5KGNvbnN0IGNoYXIqIGFycmF5X25hbWUsIGxpbmtlcl9mdW5jdGlvbl90KiBmdW5jdGlvbnMsIHNpemVfdCBjb3VudCwgYm9vbCByZXZlcnNlKTsKLSAgdm9pZCBDYWxsRnVuY3Rpb24oY29uc3QgY2hhciogZnVuY3Rpb25fbmFtZSwgbGlua2VyX2Z1bmN0aW9uX3QgZnVuY3Rpb24pOworICBFbGZXKFN5bSkqIGVsZl9sb29rdXAoU3ltYm9sTmFtZSYgc3ltYm9sX25hbWUpOworICBFbGZXKFN5bSkqIGVsZl9hZGRyX2xvb2t1cChjb25zdCB2b2lkKiBhZGRyKTsKKyAgRWxmVyhTeW0pKiBnbnVfbG9va3VwKFN5bWJvbE5hbWUmIHN5bWJvbF9uYW1lKTsKKyAgRWxmVyhTeW0pKiBnbnVfYWRkcl9sb29rdXAoY29uc3Qgdm9pZCogYWRkcik7CisKKyAgdm9pZCBjYWxsX2FycmF5KGNvbnN0IGNoYXIqIGFycmF5X25hbWUsIGxpbmtlcl9mdW5jdGlvbl90KiBmdW5jdGlvbnMsIHNpemVfdCBjb3VudCwgYm9vbCByZXZlcnNlKTsKKyAgdm9pZCBjYWxsX2Z1bmN0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uX25hbWUsIGxpbmtlcl9mdW5jdGlvbl90IGZ1bmN0aW9uKTsKICNpZiBkZWZpbmVkKFVTRV9SRUxBKQotICBpbnQgUmVsb2NhdGUoRWxmVyhSZWxhKSogcmVsYSwgdW5zaWduZWQgY291bnQpOworICBpbnQgcmVsb2NhdGUoRWxmVyhSZWxhKSogcmVsYSwgdW5zaWduZWQgY291bnQsIGNvbnN0IHNvaW5mb19saXN0X3QmIGdsb2JhbF9ncm91cCwgY29uc3Qgc29pbmZvX2xpc3RfdCYgbG9jYWxfZ3JvdXApOwogI2Vsc2UKLSAgaW50IFJlbG9jYXRlKEVsZlcoUmVsKSogcmVsLCB1bnNpZ25lZCBjb3VudCk7CisgIGludCByZWxvY2F0ZShFbGZXKFJlbCkqIHJlbCwgdW5zaWduZWQgY291bnQsIGNvbnN0IHNvaW5mb19saXN0X3QmIGdsb2JhbF9ncm91cCwgY29uc3Qgc29pbmZvX2xpc3RfdCYgbG9jYWxfZ3JvdXApOwogI2VuZGlmCiAKICBwcml2YXRlOgogICAvLyBUaGlzIHBhcnQgb2YgdGhlIHN0cnVjdHVyZSBpcyBvbmx5IGF2YWlsYWJsZQogICAvLyB3aGVuIEZMQUdfTkVXX1NPSU5GTyBpcyBzZXQgaW4gdGhpcy0+ZmxhZ3MuCi0gIHVpbnQzMl90IHZlcnNpb247CisgIHVpbnQzMl90IHZlcnNpb25fOwogCiAgIC8vIHZlcnNpb24gPj0gMAotICBkZXZfdCBzdF9kZXY7Ci0gIGlub190IHN0X2lubzsKKyAgZGV2X3Qgc3RfZGV2XzsKKyAgaW5vX3Qgc3RfaW5vXzsKIAogICAvLyBkZXBlbmRlbmN5IGdyYXBoCi0gIHNvaW5mb19saXN0X3QgY2hpbGRyZW47Ci0gIHNvaW5mb19saXN0X3QgcGFyZW50czsKKyAgc29pbmZvX2xpc3RfdCBjaGlsZHJlbl87CisgIHNvaW5mb19saXN0X3QgcGFyZW50c187CiAKICAgLy8gdmVyc2lvbiA+PSAxCi0gIG9mZjY0X3QgZmlsZV9vZmZzZXQ7Ci0gIGludCBydGxkX2ZsYWdzOwotICBzaXplX3Qgc3RydGFiX3NpemU7CisgIG9mZjY0X3QgZmlsZV9vZmZzZXRfOworICB1aW50MzJfdCBydGxkX2ZsYWdzXzsKKyAgdWludDMyX3QgZHRfZmxhZ3NfMV87CisgIHNpemVfdCBzdHJ0YWJfc2l6ZV87CisKKyAgLy8gdmVyc2lvbiA+PSAyCisgIHVpbnQzMl90IGdudV9tYXNrd29yZHNfOworICB1aW50MzJfdCBnbnVfc2hpZnQyXzsKKworICBFbGZXKEFkZHIpKiBnbnVfYmxvb21fZmlsdGVyXzsKIAogICBmcmllbmQgc29pbmZvKiBnZXRfbGliZGxfaW5mbygpOwogfTsKIAotZXh0ZXJuIHNvaW5mbyogZ2V0X2xpYmRsX2luZm8oKTsKK3NvaW5mbyogZ2V0X2xpYmRsX2luZm8oKTsKIAogdm9pZCBkb19hbmRyb2lkX2dldF9MRF9MSUJSQVJZX1BBVEgoY2hhciosIHNpemVfdCk7CiB2b2lkIGRvX2FuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSChjb25zdCBjaGFyKiBsZF9saWJyYXJ5X3BhdGgpOwpAQCAtMjY2LDcgKzMxOSw2IEBACiBFbGZXKFN5bSkqIGRsc3ltX2xpbmVhcl9sb29rdXAoY29uc3QgY2hhciogbmFtZSwgc29pbmZvKiogZm91bmQsIHNvaW5mbyogc3RhcnQpOwogc29pbmZvKiBmaW5kX2NvbnRhaW5pbmdfbGlicmFyeShjb25zdCB2b2lkKiBhZGRyKTsKIAotRWxmVyhTeW0pKiBkbGFkZHJfZmluZF9zeW1ib2woc29pbmZvKiBzaSwgY29uc3Qgdm9pZCogYWRkcik7CiBFbGZXKFN5bSkqIGRsc3ltX2hhbmRsZV9sb29rdXAoc29pbmZvKiBzaSwgc29pbmZvKiogZm91bmQsIGNvbnN0IGNoYXIqIG5hbWUpOwogCiB2b2lkIGRlYnVnZ2VyZF9pbml0KCk7CmRpZmYgLS1naXQgYS9saW5rZXIvbGlua2VyX2V4ZWN1dGFibGUubWsgYi9saW5rZXIvbGlua2VyX2V4ZWN1dGFibGUubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1OTZhNDguLjAwMDAwMDAKLS0tIGEvbGlua2VyL2xpbmtlcl9leGVjdXRhYmxlLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotCi0jCi0jIEluc3RlYWQgb2YgaW5jbHVkaW5nICQoQlVJTERfRVhFQ1VUQUJMRSksIHdlIGV4ZWN1dGUgdGhlIHN0ZXBzIHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIGJ5Ci0jIGhhbmQsIGFzIHdlIHdhbnQgdG8gaW5zZXJ0IGFuIGV4dHJhIG9iamNvcHkgc3RlcCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJ1aWxkCi0jIHN5c3RlbSwgYW5kIGlzIHByb2JhYmx5IHNwZWNpZmljIHRoZSBsaW5rZXIgb25seSwgc28gdGhlcmUncyBubyBuZWVkIHRvIG1vZGlmeSB0aGUgYnVpbGQKLSMgc3lzdGVtIGZvciB0aGUgcHVycG9zZS4KLSMKLQotTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVYRUNVVEFCTEVTCi1MT0NBTF9NT0RVTEVfU1VGRklYIDo9ICQoVEFSR0VUX0VYRUNVVEFCTEVfU1VGRklYKQotCi0jIENsYW5nIGNhbGxzIC91c3IvYmluL2xkOiB1bnJlY29nbml6ZWQgb3B0aW9uICctLWljZj1zYWZlJywgaHR0cDovL2IvMTc0MDM2NzQuCi1MT0NBTF9DTEFORyA6PSBmYWxzZQotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvZHluYW1pY19iaW5hcnkubWsKLQotIyBTZWUgYnVpbGQvY29yZS9leGVjdXRhYmxlX2ludGVybmFsLm1rCi0kKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9HTE9CQUxfTERfRElSUyA6PSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfR0xPQkFMX0xEX0RJUlMpCi0kKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9HTE9CQUxfTERGTEFHUyA6PSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfR0xPQkFMX0xERkxBR1MpCi0kKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9GRE9fTElCIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9GRE9fTElCKQotJChsaW5rZWRfbW9kdWxlKTogUFJJVkFURV9UQVJHRVRfTElCR0NDIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9MSUJHQ0MpCi0kKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9DUlRCRUdJTl9EWU5BTUlDX08gOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX0NSVEJFR0lOX0RZTkFNSUNfTykKLSQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX0NSVEJFR0lOX1NUQVRJQ19PIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9DUlRCRUdJTl9TVEFUSUNfTykKLSQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX0NSVEVORF9PIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9DUlRFTkRfTykKLSQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX09CSkNPUFkgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX09CSkNPUFkpCi0kKGxpbmtlZF9tb2R1bGUpOiAkKFRBUkdFVF9DUlRCRUdJTl9TVEFUSUNfTykgJChhbGxfb2JqZWN0cykgJChhbGxfbGlicmFyaWVzKSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfQ1JURU5EX08pCi0JJCh0cmFuc2Zvcm0tby10by1zdGF0aWMtZXhlY3V0YWJsZSkKLQlAZWNobyAidGFyZ2V0IFByZWZpeFN5bWJvbHM6ICQoUFJJVkFURV9NT0RVTEUpICgkQCkiCi0JJChoaWRlKSAkKFBSSVZBVEVfVEFSR0VUX09CSkNPUFkpIC0tcHJlZml4LXN5bWJvbHM9X19kbF8gJEAKZGlmZiAtLWdpdCBhL2xpbmtlci9saW5rZXJfbGliY19zdXBwb3J0LmMgYi9saW5rZXIvbGlua2VyX2xpYmNfc3VwcG9ydC5jCmluZGV4IDE3ZGI2ZDQuLjRjNDkzODQgMTAwNjQ0Ci0tLSBhL2xpbmtlci9saW5rZXJfbGliY19zdXBwb3J0LmMKKysrIGIvbGlua2VyL2xpbmtlcl9saWJjX3N1cHBvcnQuYwpAQCAtMTUsMyArMTUsNyBAQAogICovCiAKICNpbmNsdWRlICIuLi9saWJjL2FyY2gtY29tbW9uL2Jpb25pYy9fX2Rzb19oYW5kbGUuaCIKKworaW50IGF0ZXhpdCh2b2lkICgqZnVuY3Rpb24pKHZvaWQpIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKSkgeworICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9saW5rZXIvbGlua2VyX3BoZHIuY3BwIGIvbGlua2VyL2xpbmtlcl9waGRyLmNwcAppbmRleCA0YjFjMGNhLi42MWFlNWFiIDEwMDY0NAotLS0gYS9saW5rZXIvbGlua2VyX3BoZHIuY3BwCisrKyBiL2xpbmtlci9saW5rZXJfcGhkci5jcHAKQEAgLTcyMiw5ICs3MjIsOSBAQAogICB9CiB9CiAKLS8vIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHByb2dyYW0gaGVhZGVyIHRhYmxlIGFzIGl0IGFwcGVhcnMgaW4gdGhlIGxvYWRlZAotLy8gc2VnbWVudHMgaW4gbWVtb3J5LiBUaGlzIGlzIGluIGNvbnRyYXN0IHdpdGggJ3BoZHJfdGFibGVfJyB3aGljaAotLy8gaXMgdGVtcG9yYXJ5IGFuZCB3aWxsIGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgbGlicmFyeSBpcyByZWxvY2F0ZWQuCisvLyBTZXRzIGxvYWRlZF9waGRyXyB0byB0aGUgYWRkcmVzcyBvZiB0aGUgcHJvZ3JhbSBoZWFkZXIgdGFibGUgYXMgaXQgYXBwZWFycworLy8gaW4gdGhlIGxvYWRlZCBzZWdtZW50cyBpbiBtZW1vcnkuIFRoaXMgaXMgaW4gY29udHJhc3Qgd2l0aCBwaGRyX3RhYmxlXywKKy8vIHdoaWNoIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgogYm9vbCBFbGZSZWFkZXI6OkZpbmRQaGRyKCkgewogICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyX2xpbWl0ID0gcGhkcl90YWJsZV8gKyBwaGRyX251bV87CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL0FuZHJvaWQuYnVpbGQubWsgYi90ZXN0cy9BbmRyb2lkLmJ1aWxkLm1rCmluZGV4IDYzNzI5ZGEuLjViMmI0MTcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL0FuZHJvaWQuYnVpbGQubWsKKysrIGIvdGVzdHMvQW5kcm9pZC5idWlsZC5tawpAQCAtMzYsOCArMzYsMTQgQEAKIAogTE9DQUxfQ0xBTkcgOj0gJCgkKG1vZHVsZSlfY2xhbmdfJChidWlsZF90eXBlKSkKIAoraWZuZXEgKCQoJChtb2R1bGUpX2FsbG93X2FzYW4pLHRydWUpCitMT0NBTF9BRERSRVNTX1NBTklUSVpFUiA6PSBmYWxzZQorZW5kaWYKKwogTE9DQUxfRk9SQ0VfU1RBVElDX0VYRUNVVEFCTEUgOj0gJCgkKG1vZHVsZSlfZm9yY2Vfc3RhdGljX2V4ZWN1dGFibGUpCiAKK0xPQ0FMX0FMTE9XX1VOREVGSU5FRF9TWU1CT0xTIDo9ICQoJChtb2R1bGUpX2FsbG93X3VuZGVmaW5lZF9zeW1ib2xzKQorCiBpZm5lcSAoJCgkKG1vZHVsZSlfbXVsdGlsaWIpLCkKICAgICBMT0NBTF9NVUxUSUxJQiA6PSAkKCQobW9kdWxlKV9tdWx0aWxpYikKIGVuZGlmCkBAIC04Niw5ICs5MiwxMyBAQAogICAgICQoJChtb2R1bGUpX2xkbGlicykgXAogICAgICQoJChtb2R1bGUpX2xkbGlic18kKGJ1aWxkX3R5cGUpKSBcCiAKLWlmZXEgKCQoYnVpbGRfdHlwZSksdGFyZ2V0KQotICBpbmNsdWRlIGV4dGVybmFsL3N0bHBvcnQvbGlic3RscG9ydC5taworaWZlcSAoJChMT0NBTF9GT1JDRV9TVEFUSUNfRVhFQ1VUQUJMRSksdHJ1ZSkKK0xPQ0FMX0NYWF9TVEwgOj0gbGliYysrX3N0YXRpYworZWxzZQorTE9DQUxfQ1hYX1NUTCA6PSBsaWJjKysKK2VuZGlmCiAKK2lmZXEgKCQoYnVpbGRfdHlwZSksdGFyZ2V0KQogICBpbmNsdWRlICQoQlVJTERfJChidWlsZF90YXJnZXQpKQogZW5kaWYKIApkaWZmIC0tZ2l0IGEvdGVzdHMvQW5kcm9pZC5tayBiL3Rlc3RzL0FuZHJvaWQubWsKaW5kZXggOGIwYjBhMC4uNGM0ZWUxMyAxMDA2NDQKLS0tIGEvdGVzdHMvQW5kcm9pZC5taworKysgYi90ZXN0cy9BbmRyb2lkLm1rCkBAIC01NCw2ICs1NCw3IEBACiBsaWJCaW9uaWNTdGFuZGFyZFRlc3RzX3NyY19maWxlcyA6PSBcCiAgICAgYXJwYV9pbmV0X3Rlc3QuY3BwIFwKICAgICBidWZmZXJfdGVzdHMuY3BwIFwKKyAgICBjb21wbGV4X3Rlc3QuY3BwIFwKICAgICBjdHlwZV90ZXN0LmNwcCBcCiAgICAgZGlyZW50X3Rlc3QuY3BwIFwKICAgICBldmVudGZkX3Rlc3QuY3BwIFwKQEAgLTY3LDIwICs2OCw2IEBACiAgICAgbGliZ2VuX3Rlc3QuY3BwIFwKICAgICBsb2NhbGVfdGVzdC5jcHAgXAogICAgIG1hbGxvY190ZXN0LmNwcCBcCi0gICAgbWF0aF9jb3NfdGVzdC5jcHAgXAotICAgIG1hdGhfY29zZl90ZXN0LmNwcCBcCi0gICAgbWF0aF9leHBfdGVzdC5jcHAgXAotICAgIG1hdGhfZXhwZl90ZXN0LmNwcCBcCi0gICAgbWF0aF9sb2dfdGVzdC5jcHAgXAotICAgIG1hdGhfbG9nZl90ZXN0LmNwcCBcCi0gICAgbWF0aF9wb3dfdGVzdC5jcHAgXAotICAgIG1hdGhfcG93Zl90ZXN0LmNwcCBcCi0gICAgbWF0aF9zaW5fdGVzdC5jcHAgXAotICAgIG1hdGhfc2luZl90ZXN0LmNwcCBcCi0gICAgbWF0aF9zaW5jb3NfdGVzdC5jcHAgXAotICAgIG1hdGhfc2luY29zZl90ZXN0LmNwcCBcCi0gICAgbWF0aF90YW5fdGVzdC5jcHAgXAotICAgIG1hdGhfdGFuZl90ZXN0LmNwcCBcCiAgICAgbWF0aF90ZXN0LmNwcCBcCiAgICAgbW50ZW50X3Rlc3QuY3BwIFwKICAgICBuZXRkYl90ZXN0LmNwcCBcCkBAIC04OCwxNCArNzUsMTggQEAKICAgICByZWdleF90ZXN0LmNwcCBcCiAgICAgc2NoZWRfdGVzdC5jcHAgXAogICAgIHNlYXJjaF90ZXN0LmNwcCBcCisgICAgc2VtYXBob3JlX3Rlc3QuY3BwIFwKKyAgICBzZXRqbXBfdGVzdC5jcHAgXAogICAgIHNpZ25hbF90ZXN0LmNwcCBcCiAgICAgc3RhY2tfcHJvdGVjdG9yX3Rlc3QuY3BwIFwKICAgICBzdGFja191bndpbmRpbmdfdGVzdC5jcHAgXAogICAgIHN0ZGF0b21pY190ZXN0LmNwcCBcCiAgICAgc3RkaW50X3Rlc3QuY3BwIFwKICAgICBzdGRpb190ZXN0LmNwcCBcCisgICAgc3RkaW9fZXh0X3Rlc3QuY3BwIFwKICAgICBzdGRsaWJfdGVzdC5jcHAgXAogICAgIHN0cmluZ190ZXN0LmNwcCBcCisgICAgc3RyaW5nX3Bvc2l4X3N0cmVycm9yX3JfdGVzdC5jcHAgXAogICAgIHN0cmluZ3NfdGVzdC5jcHAgXAogICAgIHN0dWJzX3Rlc3QuY3BwIFwKICAgICBzc3RyZWFtX3Rlc3QuY3BwIFwKQEAgLTEwOCw2ICs5OSw3IEBACiAgICAgc3lzX3N0YXRfdGVzdC5jcHAgXAogICAgIHN5c19zdGF0dmZzX3Rlc3QuY3BwIFwKICAgICBzeXNfc3lzY2FsbF90ZXN0LmNwcCBcCisgICAgc3lzX3N5c2luZm9fdGVzdC5jcHAgXAogICAgIHN5c190aW1lX3Rlc3QuY3BwIFwKICAgICBzeXNfdHlwZXNfdGVzdC5jcHAgXAogICAgIHN5c192ZnNfdGVzdC5jcHAgXApAQCAtMTMyLDYgKzEyNCw3IEBACiAKIGxpYkJpb25pY1N0YW5kYXJkVGVzdHNfY19pbmNsdWRlcyA6PSBcCiAgICAgYmlvbmljL2xpYmMgXAorICAgIGV4dGVybmFsL3Rpbnl4bWwyIFwKIAogbGliQmlvbmljU3RhbmRhcmRUZXN0c19sZGxpYnNfaG9zdCA6PSBcCiAgICAgLWxydCBcCkBAIC0yMjMsOCArMjE2LDEzIEBACiBiaW9uaWMtdW5pdC10ZXN0c193aG9sZV9zdGF0aWNfbGlicmFyaWVzIDo9IFwKICAgICBsaWJCaW9uaWNUZXN0cyBcCiAKK2Jpb25pYy11bml0LXRlc3RzX3N0YXRpY19saWJyYXJpZXMgOj0gXAorICAgIGxpYnRpbnl4bWwyIFwKKyAgICBsaWJsb2cgXAorCiBiaW9uaWMtdW5pdC10ZXN0c19zcmNfZmlsZXMgOj0gXAogICAgIGF0ZXhpdF90ZXN0LmNwcCBcCisgICAgZGxfdGVzdC5jcHAgXAogICAgIGRsZXh0X3Rlc3QuY3BwIFwKICAgICBkbGZjbl90ZXN0LmNwcCBcCiAKQEAgLTIzNyw4ICsyMzUsNyBAQAogYmlvbmljLXVuaXQtdGVzdHNfY3BwZmxhZ3MgOj0gJCh0ZXN0X2NwcGZsYWdzKQogCiBiaW9uaWMtdW5pdC10ZXN0c19sZGZsYWdzIDo9IFwKLSAgICAtV2wsLS1leHBvcnQtZHluYW1pYyBcCi0gICAgLVdsLC11LERsU3ltVGVzdEZ1bmN0aW9uIFwKKyAgICAtV2wsLS1leHBvcnQtZHluYW1pYwogCiBiaW9uaWMtdW5pdC10ZXN0c19jX2luY2x1ZGVzIDo9IFwKICAgICBiaW9uaWMvbGliYyBcCkBAIC0yNDcsNiArMjQ0LDEyIEBACiBiaW9uaWMtdW5pdC10ZXN0c19zaGFyZWRfbGlicmFyaWVzX3RhcmdldCA6PSBcCiAgICAgbGliZGwgXAogICAgIGxpYnBhZ2VtYXAgXAorICAgIGxpYmRsX3ByZWVtcHRfdGVzdF8xIFwKKyAgICBsaWJkbF9wcmVlbXB0X3Rlc3RfMgorCitpZm5lcSAoJChmaWx0ZXIgJChUQVJHRVRfQVJDSCksYXJtIGFybTY0KSwkKFRBUkdFVF9BUkNIKSkKK2Jpb25pYy11bml0LXRlc3RzX3NoYXJlZF9saWJyYXJpZXNfdGFyZ2V0ICs9IGxpYmRsX3Rlc3RfZGZfMV9nbG9iYWwKK2VuZGlmCiAKIG1vZHVsZSA6PSBiaW9uaWMtdW5pdC10ZXN0cwogbW9kdWxlX3RhZyA6PSBvcHRpb25hbApAQCAtMjYzLDEzICsyNjYsMjEgQEAKICAgICBsaWJCaW9uaWNUZXN0cyBcCiAKIGJpb25pYy11bml0LXRlc3RzLXN0YXRpY19zdGF0aWNfbGlicmFyaWVzIDo9IFwKLSAgICBsaWJzdGxwb3J0X3N0YXRpYyBcCiAgICAgbGlibSBcCiAgICAgbGliYyBcCi0gICAgbGlic3RkYysrIFwKKyAgICBsaWJjKytfc3RhdGljIFwKKyAgICBsaWJkbCBcCisgICAgbGlidGlueXhtbDIgXAorICAgIGxpYmxvZyBcCiAKIGJpb25pYy11bml0LXRlc3RzLXN0YXRpY19mb3JjZV9zdGF0aWNfZXhlY3V0YWJsZSA6PSB0cnVlCiAKKyMgbGliYyBhbmQgbGliYysrIGJvdGggZGVmaW5lIHN0ZDo6bm90aHJvdy4gbGliYydzIGlzIGEgcHJpdmF0ZSBzeW1ib2wsIGJ1dCB0aGlzCisjIHN0aWxsIGNhdXNlcyBpc3N1ZXMgd2hlbiBsaW5raW5nIGxpYmMuYSBhbmQgbGliYysrLmEsIHNpbmNlIHByaXZhdGUgaXNuJ3QKKyMgZWZmZWN0aXZlIHVudGlsIGl0IGhhcyBiZWVuIGxpbmtlZC4gVG8gZml4IHRoaXMsIGp1c3QgYWxsb3cgbXVsdGlwbGUgc3ltYm9sCisjIGRlZmluaXRpb25zIGZvciB0aGUgc3RhdGljIHRlc3RzLgorYmlvbmljLXVuaXQtdGVzdHMtc3RhdGljX2xkZmxhZ3MgOj0gLVdsLC0tYWxsb3ctbXVsdGlwbGUtZGVmaW5pdGlvbgorCiBtb2R1bGUgOj0gYmlvbmljLXVuaXQtdGVzdHMtc3RhdGljCiBtb2R1bGVfdGFnIDo9IG9wdGlvbmFsCiBidWlsZF90eXBlIDo9IHRhcmdldApAQCAtMjg2LDYgKzI5NywxMyBAQAogYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmNfc3JjX2ZpbGVzIDo9IFwKICAgICBhdGV4aXRfdGVzdC5jcHAgXAogICAgIGRsZmNuX3Rlc3QuY3BwIFwKKyAgICBkbF90ZXN0LmNwcCBcCisKK2Jpb25pYy11bml0LXRlc3RzLWdsaWJjX3NoYXJlZF9saWJyYXJpZXMgOj0gXAorICAgIGxpYmRsX3ByZWVtcHRfdGVzdF8xIFwKKyAgICBsaWJkbF9wcmVlbXB0X3Rlc3RfMgorCitiaW9uaWMtdW5pdC10ZXN0cy1nbGliY19zaGFyZWRfbGlicmFyaWVzICs9IGxpYmRsX3Rlc3RfZGZfMV9nbG9iYWwKIAogYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmNfd2hvbGVfc3RhdGljX2xpYnJhcmllcyA6PSBcCiAgICAgbGliQmlvbmljU3RhbmRhcmRUZXN0cyBcCkBAIC0zMDAsMTIgKzMxOCw2MSBAQAogYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmNfY3BwZmxhZ3MgOj0gJCh0ZXN0X2NwcGZsYWdzKQogYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmNfbGRmbGFncyA6PSAtV2wsLS1leHBvcnQtZHluYW1pYwogCitiaW9uaWMtdW5pdC10ZXN0cy1nbGliY19hbGxvd19hc2FuIDo9IHRydWUKKwogbW9kdWxlIDo9IGJpb25pYy11bml0LXRlc3RzLWdsaWJjCiBtb2R1bGVfdGFnIDo9IG9wdGlvbmFsCiBidWlsZF90eXBlIDo9IGhvc3QKIGJ1aWxkX3RhcmdldCA6PSBOQVRJVkVfVEVTVAogaW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKIAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21waWxlIHRpbWUgdGVzdHMuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgU29tZSBvZiB0aGVzZSBhcmUgaW50ZW50aW9uYWxseSB1c2luZyA9IGluc3RlYWQgb2YgOj0gc2luY2Ugd2UgbmVlZCBhY2Nlc3MgdG8KKyMgc29tZSB2YXJpYWJsZXMgbm90IGluaXRpYWx0aXplZCB1bnRpbCB3ZSdyZSBpbiB0aGUgYnVpbGQgc3lzdGVtLgorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9IFwKKyAgICAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsgXAorICAgICQoTE9DQUxfUEFUSCkvZmlsZS1jaGVjay1jeHggXAorICAgIHwgJChIT1NUX09VVF9FWEVDVVRBQkxFUykvRmlsZUNoZWNrJChIT1NUX0VYRUNVVEFCTEVfU1VGRklYKSBcCisKK0xPQ0FMX0NYWCA9ICQoTE9DQUxfUEFUSCkvZmlsZS1jaGVjay1jeHggXAorICAgICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL0ZpbGVDaGVjayBcCisgICAgJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpQ1hYX0JBUkUpIFwKKyAgICBHQ0MgXAorCitMT0NBTF9DTEFORyA6PSBmYWxzZQorTE9DQUxfTU9EVUxFIDo9IGJpb25pYy1jb21waWxlLXRpbWUtdGVzdHMtZysrCitMT0NBTF9DWFhGTEFHUyA6PSAtV2FsbAorTE9DQUxfU1JDX0ZJTEVTIDo9IGZvcnRpZnlfc3ByaW50Zl93YXJuaW5ncy5jcHAKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSBcCisgICAgJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rIFwKKyAgICAkKExPQ0FMX1BBVEgpL2ZpbGUtY2hlY2stY3h4IFwKKyAgICB8ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL0ZpbGVDaGVjayQoSE9TVF9FWEVDVVRBQkxFX1NVRkZJWCkgXAorCitMT0NBTF9DWFggOj0gJChMT0NBTF9QQVRIKS9maWxlLWNoZWNrLWN4eCBcCisgICAgJChIT1NUX09VVF9FWEVDVVRBQkxFUykvRmlsZUNoZWNrIFwKKyAgICAkKExMVk1fUFJFQlVJTFRTX1BBVEgpL2NsYW5nKysgXAorICAgIENMQU5HIFwKKworTE9DQUxfQ0xBTkcgOj0gdHJ1ZQorTE9DQUxfTU9EVUxFIDo9IGJpb25pYy1jb21waWxlLXRpbWUtdGVzdHMtY2xhbmcrKworTE9DQUxfQ1hYRkxBR1MgOj0gLVdhbGwKKyMgRmlsZUNoZWNrIHdpbGwgZXJyb3IgaWYgdGhlcmUgYXJlbid0IGFueSBDTEFORzogbGluZXMgaW4gdGhlIGZpbGUsIGJ1dCB0aGVyZQorIyBkb24ndCBhcHBlYXIgdG8gYmUgYW55IGNhc2VzIHdoZXJlIGNsYW5nIF9kb2VzXyBlbWl0IHdhcm5pbmdzIGZvciBzbj9wcmludGYgOigKK0xPQ0FMX1NSQ19GSUxFUyA6PQoraW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhvc3QgZ2xpYmMgdGVzdHMuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIGlmbmVxICgkKFRBUkdFVF9BUkNIKSwkKGZpbHRlciAkKFRBUkdFVF9BUkNIKSxhcm0gbWlwcyB4ODYpKQogTElOS0VSID0gbGlua2VyNjQKIE5BVElWRV9URVNUX1NVRkZJWD02NApAQCAtMzMzLDE1ICs0MDAsMTggQEAKICMgTWFrZSBzdXJlIHRvIGNyZWF0ZSBBTkRST0lEX0RBVEEvbG9jYWwvdG1wIGlmIGRvZXNuJ3QgZXhpc3QuCiAjIGJpb25pYyBpdHNlbGYgc2hvdWxkIGFsd2F5cyB3b3JrIHJlbGF0aXZlIHRvIEFORFJPSURfREFUQSBvciBBTkRST0lEX1JPT1QuCiAjIEJJT05JQ19URVNUX0ZMQUdTIGlzIGVpdGhlciBlbXB0eSBvciBpdCBjb21lcyBmcm9tIHRoZSB1c2VyLgotYmlvbmljLXVuaXQtdGVzdHMtcnVuLW9uLWhvc3Q6IGJpb25pYy11bml0LXRlc3RzICQoVEFSR0VUX09VVF9FWEVDVVRBQkxFUykvJChMSU5LRVIpICQoVEFSR0VUX09VVF9FWEVDVVRBQkxFUykvc2gKLQlpZiBbICEgLWQgL3N5c3RlbSAtbyAhIC1kIC9zeXN0ZW0vYmluIF07IHRoZW4gXAotCSAgZWNobyAiQXR0ZW1wdGluZyB0byBjcmVhdGUgL3N5c3RlbS9iaW4iOyBcCi0JICBzdWRvIG1rZGlyIC1wIC1tIDA3NzcgL3N5c3RlbS9iaW47IFwKK2Jpb25pYy11bml0LXRlc3RzLXJ1bi1vbi1ob3N0LXByZXBhcmU6ICQoVEFSR0VUX09VVF9FWEVDVVRBQkxFUykvJChMSU5LRVIpICQoVEFSR0VUX09VVCkvZXRjL2hvc3RzICQoVEFSR0VUX09VVF9FWEVDVVRBQkxFUykvc2gKKwlpZiBbICEgLWQgL3N5c3RlbSBdOyB0aGVuIFwKKwkgIGVjaG8gIkF0dGVtcHRpbmcgdG8gY3JlYXRlIC9zeXN0ZW0iOyBcCisJICBzdWRvIG1rZGlyIC1wIC1tIDA3NzcgL3N5c3RlbTsgXAogCWZpCiAJbWtkaXIgLXAgJChUQVJHRVRfT1VUX0RBVEEpL2xvY2FsL3RtcAotCWNwICQoVEFSR0VUX09VVF9FWEVDVVRBQkxFUykvJChMSU5LRVIpIC9zeXN0ZW0vYmluCi0JY3AgJChUQVJHRVRfT1VUX0VYRUNVVEFCTEVTKS9zaCAvc3lzdGVtL2JpbgorCWxuIC1mcyBgcmVhbHBhdGggJChUQVJHRVRfT1VUKS9iaW5gIC9zeXN0ZW0vCisJbG4gLWZzIGByZWFscGF0aCAkKFRBUkdFVF9PVVQpL2V0Y2AgL3N5c3RlbS8KKworYmlvbmljLXVuaXQtdGVzdHMtcnVuLW9uLWhvc3Q6IGJpb25pYy11bml0LXRlc3RzIGJpb25pYy11bml0LXRlc3RzLXJ1bi1vbi1ob3N0LXByZXBhcmUKIAlBTkRST0lEX0RBVEE9JChUQVJHRVRfT1VUX0RBVEEpIFwKKwlBTkRST0lEX0ROU19NT0RFPWxvY2FsIFwKIAlBTkRST0lEX1JPT1Q9JChUQVJHRVRfT1VUKSBcCiAJTERfTElCUkFSWV9QQVRIPSQoVEFSR0VUX09VVF9TSEFSRURfTElCUkFSSUVTKSBcCiAJCSQoVEFSR0VUX09VVF9EQVRBX05BVElWRV9URVNUUykvYmlvbmljLXVuaXQtdGVzdHMvYmlvbmljLXVuaXQtdGVzdHMkKE5BVElWRV9URVNUX1NVRkZJWCkgJChCSU9OSUNfVEVTVF9GTEFHUykKQEAgLTM0OSwxNSArNDE5LDkgQEAKIAogaWZlcSAoJChUQVJHRVRfQVJDSCksJChmaWx0ZXIgJChUQVJHRVRfQVJDSCkseDg2XzY0KSkKICMgYWRkIHRhcmdldCB0byBydW4gbHAzMiB0ZXN0cwotYmlvbmljLXVuaXQtdGVzdHMtcnVuLW9uLWhvc3QzMjogYmlvbmljLXVuaXQtdGVzdHNfMzIgJChUQVJHRVRfT1VUX0VYRUNVVEFCTEVTKS8kKExJTktFUikgJChUQVJHRVRfT1VUX0VYRUNVVEFCTEVTKS9zaAotCWlmIFsgISAtZCAvc3lzdGVtIC1vICEgLWQgL3N5c3RlbS9iaW4gXTsgdGhlbiBcCi0JICBlY2hvICJBdHRlbXB0aW5nIHRvIGNyZWF0ZSAvc3lzdGVtL2JpbiI7IFwKLQkgIHN1ZG8gbWtkaXIgLXAgLW0gMDc3NyAvc3lzdGVtL2JpbjsgXAotCWZpCi0JbWtkaXIgLXAgJChUQVJHRVRfT1VUX0RBVEEpL2xvY2FsL3RtcAotCWNwICQoVEFSR0VUX09VVF9FWEVDVVRBQkxFUykvbGlua2VyIC9zeXN0ZW0vYmluCi0JY3AgJChUQVJHRVRfT1VUX0VYRUNVVEFCTEVTKS9zaCAvc3lzdGVtL2JpbgorYmlvbmljLXVuaXQtdGVzdHMtcnVuLW9uLWhvc3QzMjogYmlvbmljLXVuaXQtdGVzdHNfMzIgYmlvbmljLXVuaXQtdGVzdHMtcnVuLW9uLWhvc3QtcHJlcGFyZQogCUFORFJPSURfREFUQT0kKFRBUkdFVF9PVVRfREFUQSkgXAorCUFORFJPSURfRE5TX01PREU9bG9jYWwgXAogCUFORFJPSURfUk9PVD0kKFRBUkdFVF9PVVQpIFwKIAlMRF9MSUJSQVJZX1BBVEg9JCgyTkRfVEFSR0VUX09VVF9TSEFSRURfTElCUkFSSUVTKSBcCiAJCSQoMk5EX1RBUkdFVF9PVVRfREFUQV9OQVRJVkVfVEVTVFMpL2Jpb25pYy11bml0LXRlc3RzL2Jpb25pYy11bml0LXRlc3RzMzIgJChCSU9OSUNfVEVTVF9GTEFHUykKZGlmZiAtLWdpdCBhL3Rlc3RzL0Jpb25pY0RlYXRoVGVzdC5oIGIvdGVzdHMvQmlvbmljRGVhdGhUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkMmQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL0Jpb25pY0RlYXRoVGVzdC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEJJT05JQ19URVNUU19CSU9OSUNfREVBVEhfVEVTVF9IXworI2RlZmluZSBCSU9OSUNfVEVTVFNfQklPTklDX0RFQVRIX1RFU1RfSF8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKworY2xhc3MgQmlvbmljRGVhdGhUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworIHByb3RlY3RlZDoKKyAgdmlydHVhbCB2b2lkIFNldFVwKCkgeworICAgIC8vIFN1cHByZXNzIGRlYnVnZ2VyZCBzdGFjayB0cmFjZXMuIFRvbyBzbG93LgorICAgIG9sZF9kdW1wYWJsZV8gPSBwcmN0bChQUl9HRVRfRFVNUEFCTEUsIDAsIDAsIDAsIDApOworICAgIHByY3RsKFBSX1NFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCk7CisgICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICB9CisKKyAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkgeworICAgIHByY3RsKFBSX1NFVF9EVU1QQUJMRSwgb2xkX2R1bXBhYmxlXywgMCwgMCwgMCwgMCk7CisgIH0KKworIHByaXZhdGU6CisgIGludCBvbGRfZHVtcGFibGVfOworfTsKKworI2VuZGlmIC8vIEJJT05JQ19URVNUU19CSU9OSUNfREVBVEhfVEVTVF9IXwpkaWZmIC0tZ2l0IGEvdGVzdHMvVGVtcG9yYXJ5RmlsZS5oIGIvdGVzdHMvVGVtcG9yYXJ5RmlsZS5oCmluZGV4IGM0ZWUyZDUuLjVjMmZlNGYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL1RlbXBvcmFyeUZpbGUuaAorKysgYi90ZXN0cy9UZW1wb3JhcnlGaWxlLmgKQEAgLTE3LDI0ICsxNywyNiBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLXRlbXBsYXRlPGludCAoKm1rX2ZuKShjaGFyKik+CisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmgiCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUID0gaW50ICgqKShjaGFyKik+CiBjbGFzcyBHZW5lcmljVGVtcG9yYXJ5RmlsZSB7CiAgcHVibGljOgotICBHZW5lcmljVGVtcG9yYXJ5RmlsZShjb25zdCBjaGFyKiBkaXJwYXRoID0gTlVMTCkgewotICAgIGlmIChkaXJwYXRoICE9IE5VTEwpIHsKLSAgICAgIGluaXQoZGlycGF0aCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIFNpbmNlIHdlIG1pZ2h0IGJlIHJ1bm5pbmcgb24gdGhlIGhvc3Qgb3IgdGhlIHRhcmdldCwgYW5kIGlmIHdlJ3JlCi0gICAgICAvLyBydW5uaW5nIG9uIHRoZSBob3N0IHdlIG1pZ2h0IGJlIHJ1bm5pbmcgdW5kZXIgYmlvbmljIG9yIGdsaWJjLAotICAgICAgLy8gbGV0J3MganVzdCB0cnkgYm90aCBwb3NzaWJsZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgYW5kIHRha2UgdGhlCi0gICAgICAvLyBmaXJzdCBvbmUgdGhhdCB3b3Jrcy4KLSAgICAgIGluaXQoIi9kYXRhL2xvY2FsL3RtcCIpOwotICAgICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgIGluaXQoIi90bXAiKTsKLSAgICAgIH0KKyAgR2VuZXJpY1RlbXBvcmFyeUZpbGUoVCBta19mbiA9IG1rc3RlbXApIDogbWtfZm4obWtfZm4pIHsKKyAgICAvLyBTaW5jZSB3ZSBtaWdodCBiZSBydW5uaW5nIG9uIHRoZSBob3N0IG9yIHRoZSB0YXJnZXQsIGFuZCBpZiB3ZSdyZQorICAgIC8vIHJ1bm5pbmcgb24gdGhlIGhvc3Qgd2UgbWlnaHQgYmUgcnVubmluZyB1bmRlciBiaW9uaWMgb3IgZ2xpYmMsCisgICAgLy8gbGV0J3MganVzdCB0cnkgYm90aCBwb3NzaWJsZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgYW5kIHRha2UgdGhlCisgICAgLy8gZmlyc3Qgb25lIHRoYXQgd29ya3MuCisgICAgaW5pdCgiL2RhdGEvbG9jYWwvdG1wIik7CisgICAgaWYgKGZkID09IC0xKSB7CisgICAgICBpbml0KCIvdG1wIik7CiAgICAgfQogICB9CiAKKyAgR2VuZXJpY1RlbXBvcmFyeUZpbGUoY29uc3QgY2hhciogZGlycGF0aCwgVCBta19mbiA9IG1rc3RlbXApIDogbWtfZm4obWtfZm4pIHsKKyAgICBpbml0KGRpcnBhdGgpOworICB9CisKICAgfkdlbmVyaWNUZW1wb3JhcnlGaWxlKCkgewogICAgIGNsb3NlKGZkKTsKICAgICB1bmxpbmsoZmlsZW5hbWUpOwpAQCAtNDksMTMgKzUxLDE3IEBACiAgIGNoYXIgZmlsZW5hbWVbMTAyNF07CiAKICBwcml2YXRlOgorICBUIG1rX2ZuOworCiAgIHZvaWQgaW5pdChjb25zdCBjaGFyKiB0bXBfZGlyKSB7CiAgICAgc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcy9UZW1wb3JhcnlGaWxlLVhYWFhYWCIsIHRtcF9kaXIpOwogICAgIGZkID0gbWtfZm4oZmlsZW5hbWUpOwogICB9CisKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEdlbmVyaWNUZW1wb3JhcnlGaWxlKTsKIH07CiAKLXR5cGVkZWYgR2VuZXJpY1RlbXBvcmFyeUZpbGU8bWtzdGVtcD4gVGVtcG9yYXJ5RmlsZTsKK3R5cGVkZWYgR2VuZXJpY1RlbXBvcmFyeUZpbGU8PiBUZW1wb3JhcnlGaWxlOwogCiBjbGFzcyBUZW1wb3JhcnlEaXIgewogIHB1YmxpYzoKQEAgLTc3LDQgKzgzLDUgQEAKICAgICByZXR1cm4gKG1rZHRlbXAoZGlybmFtZSkgIT0gTlVMTCk7CiAgIH0KIAorICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGVtcG9yYXJ5RGlyKTsKIH07CmRpZmYgLS1naXQgYS90ZXN0cy9hdGV4aXRfdGVzdC5jcHAgYi90ZXN0cy9hdGV4aXRfdGVzdC5jcHAKaW5kZXggZTAxMjIwZS4uZTkyODg5ZCAxMDA2NDQKLS0tIGEvdGVzdHMvYXRleGl0X3Rlc3QuY3BwCisrKyBiL3Rlc3RzL2F0ZXhpdF90ZXN0LmNwcApAQCAtMjQsMjAgKzI0LDMzIEBACiAKICNpbmNsdWRlIDxzdHJpbmc+CiAKLVRFU1QoYXRleGl0LCBkbGNsb3NlKSB7CitURVNUKGF0ZXhpdCwgc29maWxlKSB7CiAgIHN0ZDo6c3RyaW5nIGF0ZXhpdF9jYWxsX3NlcXVlbmNlOwogICBib29sIHZhbGlkX3RoaXNfaW5fc3RhdGljX2R0b3IgPSBmYWxzZTsKKyAgYm9vbCBhdHRyX2R0b3JfY2FsbGVkID0gZmFsc2U7CisKICAgdm9pZCogaGFuZGxlID0gZGxvcGVuKCJsaWJ0ZXN0X2F0ZXhpdC5zbyIsIFJUTERfTk9XKTsKLSAgQVNTRVJUX1RSVUUoaGFuZGxlICE9IE5VTEwpOworICBBU1NFUlRfVFJVRShoYW5kbGUgIT0gbnVsbHB0cik7CisKKyAgdHlwZWRlZiBpbnQgKCppbnRfZm4pKHZvaWQpOworICBpbnRfZm4gZ2V0X2N4eF9jdG9yX2NhbGxlZCwgZ2V0X2F0dHJfY3Rvcl9jYWxsZWQ7CisgIGdldF9jeHhfY3Rvcl9jYWxsZWQgPSByZWludGVycHJldF9jYXN0PGludF9mbj4oZGxzeW0oaGFuZGxlLCAiZ2V0X2N4eF9jdG9yX2NhbGxlZCIpKTsKKyAgZ2V0X2F0dHJfY3Rvcl9jYWxsZWQgPSByZWludGVycHJldF9jYXN0PGludF9mbj4oZGxzeW0oaGFuZGxlLCAiZ2V0X2F0dHJfY3Rvcl9jYWxsZWQiKSk7CisgIEFTU0VSVF9UUlVFKGdldF9jeHhfY3Rvcl9jYWxsZWQgIT0gbnVsbHB0cik7CisgIEFTU0VSVF9UUlVFKGdldF9hdHRyX2N0b3JfY2FsbGVkICE9IG51bGxwdHIpOworCisgIEFTU0VSVF9FUSgxLCBnZXRfY3h4X2N0b3JfY2FsbGVkKCkpOworICBBU1NFUlRfRVEoMSwgZ2V0X2F0dHJfY3Rvcl9jYWxsZWQoKSk7CiAKICAgdm9pZCogc3ltID0gZGxzeW0oaGFuZGxlLCAicmVnaXN0ZXJfYXRleGl0Iik7Ci0gIEFTU0VSVF9UUlVFKHN5bSAhPSBOVUxMKTsKLSAgcmVpbnRlcnByZXRfY2FzdDx2b2lkICgqKShzdGQ6OnN0cmluZyosIGJvb2wqKT4oc3ltKSgmYXRleGl0X2NhbGxfc2VxdWVuY2UsICZ2YWxpZF90aGlzX2luX3N0YXRpY19kdG9yKTsKKyAgQVNTRVJUX1RSVUUoc3ltICE9IG51bGxwdHIpOworICByZWludGVycHJldF9jYXN0PHZvaWQgKCopKHN0ZDo6c3RyaW5nKiwgYm9vbCosIGJvb2wqKT4oc3ltKSgmYXRleGl0X2NhbGxfc2VxdWVuY2UsICZ2YWxpZF90aGlzX2luX3N0YXRpY19kdG9yLCAmYXR0cl9kdG9yX2NhbGxlZCk7CiAKICAgQVNTRVJUX0VRKDAsIGRsY2xvc2UoaGFuZGxlKSk7CiAgIC8vIHRoaXMgdGVzdCB2ZXJpZmllcyBhdGV4aXQgY2FsbCBmcm9tIGF0ZXhpdCBoYW5kbGVyLiBhcyB3ZWxsIGFzIHRoZSBvcmRlciBvZiBjYWxscwogICBBU1NFUlRfRVEoIkh1bXB0eSBEdW1wdHkgc2F0IG9uIGEgd2FsbCIsIGF0ZXhpdF9jYWxsX3NlcXVlbmNlKTsKICAgQVNTRVJUX1RSVUUodmFsaWRfdGhpc19pbl9zdGF0aWNfZHRvcik7CisgIEFTU0VSVF9UUlVFKGF0dHJfZHRvcl9jYWxsZWQpOwogfQogCiBjbGFzcyBUZXN0TWFpblN0YXRpY0R0b3JDbGFzcyB7CkBAIC01Nyw3ICs3MCw3IEBACiAgIHN0YXRpYyBjb25zdCBUZXN0TWFpblN0YXRpY0R0b3JDbGFzcyogZXhwZWN0ZWRfdGhpczsKIH07CiAKLWNvbnN0IFRlc3RNYWluU3RhdGljRHRvckNsYXNzKiBUZXN0TWFpblN0YXRpY0R0b3JDbGFzczo6ZXhwZWN0ZWRfdGhpcyA9IE5VTEw7Citjb25zdCBUZXN0TWFpblN0YXRpY0R0b3JDbGFzcyogVGVzdE1haW5TdGF0aWNEdG9yQ2xhc3M6OmV4cGVjdGVkX3RoaXMgPSBudWxscHRyOwogCiBzdGF0aWMgdm9pZCBhdGV4aXRfZnVuYzUoKSB7CiAgIGZwcmludGYoc3RkZXJyLCAiNSIpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY29tcGxleF90ZXN0LmNwcCBiL3Rlc3RzL2NvbXBsZXhfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc5NjRmNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NvbXBsZXhfdGVzdC5jcHAKQEAgLTAsMCArMSwyNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworLy8gbGliYysrIGFjdGl2ZWx5IGdldHMgaW4gdGhlIHdheSBvZiBpbmNsdWRpbmcgPGNvbXBsZXguaD4gZnJvbSBDKyssIHNvIHdlCisvLyBoYXZlIHRvIGRlY2xhcmUgdGhlIGNvbXBsZXggbWF0aCBmdW5jdGlvbnMgb3Vyc2VsdmVzLgorLy8gKGxpYmMrKyBhbHNvIHNlZW1zIHRvIGhhdmUgcmVhbGx5IGJhZCBpbXBsZW1lbnRhdGlvbnMgb2YgaXRzIG93biB0aGF0IGlnbm9yZQorLy8gdGhlIGludHJpY2FjaWVzIG9mIGZsb2F0aW5nIHBvaW50IG1hdGguKQorLy8gaHR0cDovL2xsdm0ub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTIxNTA0CisKKyNpbmNsdWRlIDxtYXRoLmg+IC8vIEZvciBNX1BJLgorCitleHRlcm4gIkMiIGRvdWJsZSBjYWJzKGRvdWJsZSBfQ29tcGxleCk7CitURVNUKGNvbXBsZXgsIGNhYnMpIHsKKyAgQVNTRVJUX0VRKDAuMCwgY2FicygwKSk7Cit9CisKK2V4dGVybiAiQyIgZmxvYXQgY2Fic2YoZmxvYXQgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjYWJzZikgeworICBBU1NFUlRfRVEoMC4wLCBjYWJzZigwKSk7Cit9CisKK2V4dGVybiAiQyIgbG9uZyBkb3VibGUgY2Fic2wobG9uZyBkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjYWJzbCkgeworICBBU1NFUlRfRVEoMC4wLCBjYWJzbCgwKSk7Cit9CisKK2V4dGVybiAiQyIgZG91YmxlIF9Db21wbGV4IGNhY29zKGRvdWJsZSBfQ29tcGxleCk7CitURVNUKGNvbXBsZXgsIGNhY29zKSB7CisgIEFTU0VSVF9FUShNX1BJLzIuMCwgY2Fjb3MoMC4wKSk7Cit9CisKK2V4dGVybiAiQyIgZmxvYXQgX0NvbXBsZXggY2Fjb3NmKGZsb2F0IF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY2Fjb3NmKSB7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxmbG9hdD4oTV9QSSkvMi4wZiwgY2Fjb3NmKDAuMCkpOworfQorCitleHRlcm4gIkMiIGRvdWJsZSBfQ29tcGxleCBjYWNvc2goZG91YmxlIF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY2Fjb3NoKSB7CisgIEFTU0VSVF9FUSgwLjAsIGNhY29zaCgxLjApKTsKK30KKworZXh0ZXJuICJDIiBmbG9hdCBfQ29tcGxleCBjYWNvc2hmKGZsb2F0IF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY2Fjb3NoZikgeworICBBU1NFUlRfRVEoMC4wLCBjYWNvc2hmKDEuMCkpOworfQorCitleHRlcm4gIkMiIGRvdWJsZSBjYXJnKGRvdWJsZSBfQ29tcGxleCk7CitURVNUKGNvbXBsZXgsIGNhcmcpIHsKKyAgQVNTRVJUX0VRKDAuMCwgY2FyZygwKSk7Cit9CisKK2V4dGVybiAiQyIgZmxvYXQgY2FyZ2YoZmxvYXQgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjYXJnZikgeworICBBU1NFUlRfRVEoMC4wLCBjYXJnZigwKSk7Cit9CisKK2V4dGVybiAiQyIgbG9uZyBkb3VibGUgY2FyZ2wobG9uZyBkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjYXJnbCkgeworICBBU1NFUlRfRVEoMC4wLCBjYXJnbCgwKSk7Cit9CisKK2V4dGVybiAiQyIgZG91YmxlIF9Db21wbGV4IGNhc2luKGRvdWJsZSBfQ29tcGxleCk7CitURVNUKGNvbXBsZXgsIGNhc2luKSB7CisgIEFTU0VSVF9FUSgwLjAsIGNhc2luKDApKTsKK30KKworZXh0ZXJuICJDIiBmbG9hdCBfQ29tcGxleCBjYXNpbmYoZmxvYXQgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjYXNpbmYpIHsKKyAgQVNTRVJUX0VRKDAuMCwgY2FzaW5mKDApKTsKK30KKworZXh0ZXJuICJDIiBkb3VibGUgX0NvbXBsZXggY2FzaW5oKGRvdWJsZSBfQ29tcGxleCk7CitURVNUKGNvbXBsZXgsIGNhc2luaCkgeworICBBU1NFUlRfRVEoMC4wLCBjYXNpbmgoMCkpOworfQorCitleHRlcm4gIkMiIGZsb2F0IF9Db21wbGV4IGNhc2luaGYoZmxvYXQgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjYXNpbmhmKSB7CisgIEFTU0VSVF9FUSgwLjAsIGNhc2luaGYoMCkpOworfQorCitleHRlcm4gIkMiIGRvdWJsZSBfQ29tcGxleCBjYXRhbihkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjYXRhbikgeworICBBU1NFUlRfRVEoMC4wLCBjYXRhbigwKSk7Cit9CisKK2V4dGVybiAiQyIgZmxvYXQgX0NvbXBsZXggY2F0YW5mKGZsb2F0IF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY2F0YW5mKSB7CisgIEFTU0VSVF9FUSgwLjAsIGNhdGFuZigwKSk7Cit9CisKK2V4dGVybiAiQyIgZG91YmxlIF9Db21wbGV4IGNhdGFuaChkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjYXRhbmgpIHsKKyAgQVNTRVJUX0VRKDAuMCwgY2F0YW5oKDApKTsKK30KKworZXh0ZXJuICJDIiBmbG9hdCBfQ29tcGxleCBjYXRhbmhmKGZsb2F0IF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY2F0YW5oZikgeworICBBU1NFUlRfRVEoMC4wLCBjYXRhbmhmKDApKTsKK30KKworZXh0ZXJuICJDIiBkb3VibGUgX0NvbXBsZXggY2Nvcyhkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjY29zKSB7CisgIEFTU0VSVF9FUSgxLjAsIGNjb3MoMCkpOworfQorCitleHRlcm4gIkMiIGZsb2F0IF9Db21wbGV4IGNjb3NmKGZsb2F0IF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY2Nvc2YpIHsKKyAgQVNTRVJUX0VRKDEuMCwgY2Nvc2YoMCkpOworfQorCitleHRlcm4gIkMiIGRvdWJsZSBfQ29tcGxleCBjY29zaChkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjY29zaCkgeworICBBU1NFUlRfRVEoMS4wLCBjY29zaCgwKSk7Cit9CisKK2V4dGVybiAiQyIgZmxvYXQgX0NvbXBsZXggY2Nvc2hmKGZsb2F0IF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY2Nvc2hmKSB7CisgIEFTU0VSVF9FUSgxLjAsIGNjb3NoZigwKSk7Cit9CisKK2V4dGVybiAiQyIgZG91YmxlIF9Db21wbGV4IGNleHAoZG91YmxlIF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY2V4cCkgeworICBBU1NFUlRfRVEoMS4wLCBjZXhwKDApKTsKK30KKworZXh0ZXJuICJDIiBmbG9hdCBfQ29tcGxleCBjZXhwZihmbG9hdCBfQ29tcGxleCk7CitURVNUKGNvbXBsZXgsIGNleHBmKSB7CisgIEFTU0VSVF9FUSgxLjAsIGNleHBmKDApKTsKK30KKworZXh0ZXJuICJDIiBkb3VibGUgY2ltYWcoZG91YmxlIF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY2ltYWcpIHsKKyAgQVNTRVJUX0VRKDAuMCwgY2ltYWcoMCkpOworfQorCitleHRlcm4gIkMiIGZsb2F0IGNpbWFnZihmbG9hdCBfQ29tcGxleCk7CitURVNUKGNvbXBsZXgsIGNpbWFnZikgeworICBBU1NFUlRfRVEoMC4wZiwgY2ltYWdmKDApKTsKK30KKworZXh0ZXJuICJDIiBsb25nIGRvdWJsZSBjaW1hZ2wobG9uZyBkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjaW1hZ2wpIHsKKyAgQVNTRVJUX0VRKDAuMCwgY2ltYWdsKDApKTsKK30KKworZXh0ZXJuICJDIiBkb3VibGUgX0NvbXBsZXggY29uaihkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjb25qKSB7CisgIEFTU0VSVF9FUSgwLjAsIGNvbmooMCkpOworfQorCitleHRlcm4gIkMiIGZsb2F0IF9Db21wbGV4IGNvbmpmKGZsb2F0IF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY29uamYpIHsKKyAgQVNTRVJUX0VRKDAuMGYsIGNvbmpmKDApKTsKK30KKworZXh0ZXJuICJDIiBsb25nIGRvdWJsZSBfQ29tcGxleCBjb25qbChsb25nIGRvdWJsZSBfQ29tcGxleCk7CitURVNUKGNvbXBsZXgsIGNvbmpsKSB7CisgIEFTU0VSVF9FUSgwLjAsIGNvbmpsKDApKTsKK30KKworZXh0ZXJuICJDIiBkb3VibGUgX0NvbXBsZXggY3Byb2ooZG91YmxlIF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY3Byb2opIHsKKyAgQVNTRVJUX0VRKDAuMCwgY3Byb2ooMCkpOworfQorCitleHRlcm4gIkMiIGZsb2F0IF9Db21wbGV4IGNwcm9qZihmbG9hdCBfQ29tcGxleCk7CitURVNUKGNvbXBsZXgsIGNwcm9qZikgeworICBBU1NFUlRfRVEoMC4wZiwgY3Byb2pmKDApKTsKK30KKworZXh0ZXJuICJDIiBsb25nIGRvdWJsZSBfQ29tcGxleCBjcHJvamwobG9uZyBkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjcHJvamwpIHsKKyAgQVNTRVJUX0VRKDAuMCwgY3Byb2psKDApKTsKK30KKworZXh0ZXJuICJDIiBkb3VibGUgY3JlYWwoZG91YmxlIF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY3JlYWwpIHsKKyAgQVNTRVJUX0VRKDAuMCwgY3JlYWwoMCkpOworfQorCitleHRlcm4gIkMiIGZsb2F0IGNyZWFsZihmbG9hdCBfQ29tcGxleCk7CitURVNUKGNvbXBsZXgsIGNyZWFsZikgeworICBBU1NFUlRfRVEoMC4wZiwgY3JlYWxmKDApKTsKK30KKworZXh0ZXJuICJDIiBsb25nIGRvdWJsZSBjcmVhbGwobG9uZyBkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjcmVhbGwpIHsKKyAgQVNTRVJUX0VRKDAuMCwgY3JlYWxsKDApKTsKK30KKworZXh0ZXJuICJDIiBkb3VibGUgX0NvbXBsZXggY3Npbihkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjc2luKSB7CisgIEFTU0VSVF9FUSgwLjAsIGNzaW4oMCkpOworfQorCitleHRlcm4gIkMiIGZsb2F0IF9Db21wbGV4IGNzaW5mKGZsb2F0IF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY3NpbmYpIHsKKyAgQVNTRVJUX0VRKDAuMCwgY3NpbmYoMCkpOworfQorCitleHRlcm4gIkMiIGRvdWJsZSBfQ29tcGxleCBjc2luaChkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjc2luaCkgeworICBBU1NFUlRfRVEoMC4wLCBjc2luaCgwKSk7Cit9CisKK2V4dGVybiAiQyIgZmxvYXQgX0NvbXBsZXggY3NpbmhmKGZsb2F0IF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY3NpbmhmKSB7CisgIEFTU0VSVF9FUSgwLjAsIGNzaW5oZigwKSk7Cit9CisKK2V4dGVybiAiQyIgZG91YmxlIF9Db21wbGV4IGNzcXJ0KGRvdWJsZSBfQ29tcGxleCk7CitURVNUKGNvbXBsZXgsIGNzcXJ0KSB7CisgIEFTU0VSVF9FUSgwLjAsIGNzcXJ0KDApKTsKK30KKworZXh0ZXJuICJDIiBmbG9hdCBfQ29tcGxleCBjc3FydGYoZmxvYXQgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjc3FydGYpIHsKKyAgQVNTRVJUX0VRKDAuMGYsIGNzcXJ0KDApKTsKK30KKworZXh0ZXJuICJDIiBsb25nIGRvdWJsZSBfQ29tcGxleCBjc3FydGwobG9uZyBkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjc3FydGwpIHsKKyAgQVNTRVJUX0VRKDAuMCwgY3NxcnRsKDApKTsKK30KKworZXh0ZXJuICJDIiBkb3VibGUgX0NvbXBsZXggY3Rhbihkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjdGFuKSB7CisgIEFTU0VSVF9FUSgwLjAsIGN0YW4oMCkpOworfQorCitleHRlcm4gIkMiIGZsb2F0IF9Db21wbGV4IGN0YW5mKGZsb2F0IF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY3RhbmYpIHsKKyAgQVNTRVJUX0VRKDAuMCwgY3RhbmYoMCkpOworfQorCitleHRlcm4gIkMiIGRvdWJsZSBfQ29tcGxleCBjdGFuaChkb3VibGUgX0NvbXBsZXgpOworVEVTVChjb21wbGV4LCBjdGFuaCkgeworICBBU1NFUlRfRVEoMC4wLCBjdGFuaCgwKSk7Cit9CisKK2V4dGVybiAiQyIgZmxvYXQgX0NvbXBsZXggY3RhbmhmKGZsb2F0IF9Db21wbGV4KTsKK1RFU1QoY29tcGxleCwgY3RhbmhmKSB7CisgIEFTU0VSVF9FUSgwLjAsIGN0YW5oZigwKSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9kaXJlbnRfdGVzdC5jcHAgYi90ZXN0cy9kaXJlbnRfdGVzdC5jcHAKaW5kZXggNmFhZGIzNy4uMjE0ZGQ3OCAxMDA2NDQKLS0tIGEvdGVzdHMvZGlyZW50X3Rlc3QuY3BwCisrKyBiL3Rlc3RzL2RpcmVudF90ZXN0LmNwcApAQCAtMjMxLDMgKzIzMSw1MCBAQAogICAgIEFTU0VSVF9FUShwYXNzMVtpXSwgcGFzczJbaV0pOwogICB9CiB9CisKK1RFU1QoZGlyZW50LCBzZWVrZGlyX3RlbGxkaXIpIHsKKyAgRElSKiBkID0gb3BlbmRpcigiL3Byb2Mvc2VsZiIpOworICBBU1NFUlRfVFJVRShkICE9IE5VTEwpOworICBzdGQ6OnZlY3Rvcjxsb25nPiBvZmZzZXRfbGlzdDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5hbWVfbGlzdDsKKyAgZGlyZW50KiBlID0gTlVMTDsKKworICBvZmZzZXRfbGlzdC5wdXNoX2JhY2sodGVsbGRpcihkKSk7CisgIEFTU0VSVF9FUSgwTCwgb2Zmc2V0X2xpc3QuYmFjaygpKTsKKworICB3aGlsZSAoKGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7CisgICAgbmFtZV9saXN0LnB1c2hfYmFjayhlLT5kX25hbWUpOworICAgIG9mZnNldF9saXN0LnB1c2hfYmFjayh0ZWxsZGlyKGQpKTsKKyAgICAvLyBNYWtlIHN1cmUgdGVsbGRpcigpIHBvaW50IHRvIHRoZSBuZXh0IGVudHJ5LgorICAgIEFTU0VSVF9FUShlLT5kX29mZiwgb2Zmc2V0X2xpc3QuYmFjaygpKTsKKyAgfQorCisgIGxvbmcgZW5kX29mZnNldCA9IHRlbGxkaXIoZCk7CisgIC8vIHRlbGxkaXIoKSBzaG91bGQgbm90IHBhc3MgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKyAgQVNTRVJUX0VRKG9mZnNldF9saXN0LmJhY2soKSwgZW5kX29mZnNldCk7CisgIG9mZnNldF9saXN0LnBvcF9iYWNrKCk7CisKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvZmZzZXRfbGlzdC5zaXplKCk7ICsraSkgeworICAgIHNlZWtkaXIoZCwgb2Zmc2V0X2xpc3RbaV0pOworICAgIEFTU0VSVF9FUShvZmZzZXRfbGlzdFtpXSwgdGVsbGRpcihkKSk7CisgICAgZSA9IHJlYWRkaXIoZCk7CisgICAgQVNTRVJUX1RSVUUoZSAhPSBOVUxMKTsKKyAgICBBU1NFUlRfU1RSRVEobmFtZV9saXN0W2ldLmNfc3RyKCksIGUtPmRfbmFtZSk7CisgIH0KKyAgZm9yIChpbnQgaSA9IHN0YXRpY19jYXN0PGludD4ob2Zmc2V0X2xpc3Quc2l6ZSgpKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgc2Vla2RpcihkLCBvZmZzZXRfbGlzdFtpXSk7CisgICAgQVNTRVJUX0VRKG9mZnNldF9saXN0W2ldLCB0ZWxsZGlyKGQpKTsKKyAgICBlID0gcmVhZGRpcihkKTsKKyAgICBBU1NFUlRfVFJVRShlICE9IE5VTEwpOworICAgIEFTU0VSVF9TVFJFUShuYW1lX2xpc3RbaV0uY19zdHIoKSwgZS0+ZF9uYW1lKTsKKyAgfQorCisgIC8vIFNlZWsgdG8gdGhlIGVuZCwgcmVhZCBOVUxMLgorICBzZWVrZGlyKGQsIGVuZF9vZmZzZXQpOworICBBU1NFUlRfRVEoZW5kX29mZnNldCwgdGVsbGRpcihkKSk7CisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKE5VTEwsIHJlYWRkaXIoZCkpOworICBBU1NFUlRfRVEoMCwgZXJybm8pOworCisgIEFTU0VSVF9FUSgwLCBjbG9zZWRpcihkKSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9kbF90ZXN0LmNwcCBiL3Rlc3RzL2RsX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YzdiNTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kbF90ZXN0LmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK2V4dGVybiAiQyIgaW50IG1haW5fZ2xvYmFsX2RlZmF1bHRfc2VyaWFsKCkgeworICByZXR1cm4gMzM3MDMxODsKK30KKworZXh0ZXJuICJDIiBpbnQgbWFpbl9nbG9iYWxfcHJvdGVjdGVkX3NlcmlhbCgpIHsKKyAgcmV0dXJuIDI3MTYwNTc7Cit9CisKKy8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIERUX05FRURFRAorLy8gbGliZGxfcHJlZW1wdF90ZXN0LnNvIGxpYnJhcnkuCisKKy8vIFRoaXMgb25lIGNhbGxzIG1haW5fZ2xvYmFsX2RlZmF1bHRfc2VyaWFsCitleHRlcm4gIkMiIGludCBtYWluX2dsb2JhbF9kZWZhdWx0X2dldF9zZXJpYWwoKTsKKworLy8gVGhpcyBvbmUgY2FsbHMgbWFpbl9nbG9iYWxfcHJvdGVjdGVkX3NlcmlhbAorZXh0ZXJuICJDIiBpbnQgbWFpbl9nbG9iYWxfcHJvdGVjdGVkX2dldF9zZXJpYWwoKTsKKworLy8gVGhpcyBvbmUgY2FsbHMgbGliX2dsb2JhbF9kZWZhdWx0X3NlcmlhbAorZXh0ZXJuICJDIiBpbnQgbGliX2dsb2JhbF9kZWZhdWx0X2dldF9zZXJpYWwoKTsKKworLy8gVGhpcyBvbmUgY2FsbHMgbGliX2dsb2JhbF9wcm90ZWN0ZWRfc2VyaWFsCitleHRlcm4gIkMiIGludCBsaWJfZ2xvYmFsX3Byb3RlY3RlZF9nZXRfc2VyaWFsKCk7CisKKy8vIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHRoZSBnbG9iYWwgZGVmYXVsdCBmdW5jdGlvbgorLy8gbWFpbl9nbG9iYWxfZGVmYXVsdF9zZXJpYWwoKSBpcyBwcmVlbXB0ZWQgYnkKKy8vIHRoZSBmdW5jdGlvbiBkZWZpbmVkIGFib3ZlLgorVEVTVChkbCwgbWFpbl9wcmVlbXB0c19nbG9iYWxfZGVmYXVsdCkgeworICBBU1NFUlRfRVEoMzM3MDMxOCwgbWFpbl9nbG9iYWxfZGVmYXVsdF9nZXRfc2VyaWFsKCkpOworfQorCisvLyBUaGlzIG9uZSBtYWtlcyBzdXJlIHRoYXQgdGhlIGdsb2JhbCBwcm90ZWN0ZWQKKy8vIHN5bWJvbHMgZG8gbm90IGdldCBwcmVlbXB0ZWQKK1RFU1QoZGwsIG1haW5fZG9lc19ub3RfcHJlZW1wdF9nbG9iYWxfcHJvdGVjdGVkKSB7CisgIEFTU0VSVF9FUSgzMzcwMzE4LCBtYWluX2dsb2JhbF9wcm90ZWN0ZWRfZ2V0X3NlcmlhbCgpKTsKK30KKworLy8gY2hlY2sgc2FtZSB0aGluZ3MgZm9yIGxpYgorVEVTVChkbCwgbGliX3ByZWVtcHRzX2dsb2JhbF9kZWZhdWx0KSB7CisgIEFTU0VSVF9FUSgzMzcwMzE4LCBsaWJfZ2xvYmFsX2RlZmF1bHRfZ2V0X3NlcmlhbCgpKTsKK30KKworVEVTVChkbCwgbGliX2RvZXNfbm90X3ByZWVtcHRfZ2xvYmFsX3Byb3RlY3RlZCkgeworICBBU1NFUlRfRVEoMzM3MDMxOCwgbGliX2dsb2JhbF9wcm90ZWN0ZWRfZ2V0X3NlcmlhbCgpKTsKK30KKworLy8gVE9ETzogQWRkIHRlc3RzIGZvciBMRF9QUkVMT0FEcwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGxleHRfdGVzdC5jcHAgYi90ZXN0cy9kbGV4dF90ZXN0LmNwcAppbmRleCA3ZjcwNmMxLi41YjMxMzY0IDEwMDY0NAotLS0gYS90ZXN0cy9kbGV4dF90ZXN0LmNwcAorKysgYi90ZXN0cy9kbGV4dF90ZXN0LmNwcApAQCAtMTcsOCArMTcsMTAgQEAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiAjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxlbGYuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgpAQCAtMzksNiArNDEsOSBAQAogI2RlZmluZSBBU1NFUlRfTk9FUlJPUihpKSBcCiAgICAgQVNTRVJUX05FKC0xLCBpKSA8PCAiZXJybm86ICIgPDwgc3RyZXJyb3IoZXJybm8pCiAKKyNkZWZpbmUgQVNTRVJUX1NVQlNUUihuZWVkbGUsIGhheXN0YWNrKSBcCisgICAgQVNTRVJUX1BSRURfRk9STUFUMig6OnRlc3Rpbmc6OklzU3Vic3RyaW5nLCBuZWVkbGUsIGhheXN0YWNrKQorCiAKIHR5cGVkZWYgaW50ICgqZm4pKHZvaWQpOwogI2RlZmluZSBMSUJOQU1FICJsaWJkbGV4dF90ZXN0LnNvIgpAQCAtMTM4LDcgKzE0Myw3IEBACiAgIEFTU0VSVF9UUlVFKGFuZHJvaWRfZGF0YSAhPSBudWxscHRyKTsKIAogICBjaGFyIGxpYl9wYXRoW1BBVEhfTUFYXTsKLSAgc25wcmludGYobGliX3BhdGgsIHNpemVvZihsaWJfcGF0aCksIExJQlpJUFBBVEgsIGFuZHJvaWRfZGF0YSk7CisgIHNucHJpbnRmKGxpYl9wYXRoLCBzaXplb2YobGliX3BhdGgpLCBMSUJQQVRILCBhbmRyb2lkX2RhdGEpOwogCiAgIGFuZHJvaWRfZGxleHRpbmZvIGV4dGluZm87CiAgIGV4dGluZm8uZmxhZ3MgPSBBTkRST0lEX0RMRVhUX1VTRV9MSUJSQVJZX0ZEIHwgQU5EUk9JRF9ETEVYVF9VU0VfTElCUkFSWV9GRF9PRkZTRVQ7CkBAIC0xNDksMTEgKzE1NCwyMCBAQAogICBBU1NFUlRfVFJVRShoYW5kbGVfID09IG51bGxwdHIpOwogICBBU1NFUlRfU1RSRVEoImRsb3BlbiBmYWlsZWQ6IGZpbGUgb2Zmc2V0IGZvciB0aGUgbGlicmFyeSBcImxpYm5hbWVfcGxhY2Vob2xkZXJcIiBpcyBub3QgcGFnZS1hbGlnbmVkOiAxNyIsIGRsZXJyb3IoKSk7CiAKLSAgZXh0aW5mby5saWJyYXJ5X2ZkX29mZnNldCA9ICg1TEw8PDU4KSArIFBBR0VfU0laRTsKKyAgLy8gVGVzdCBhbiBhZGRyZXNzIGFib3ZlIDJeNDQsIGZvciBodHRwOi8vYi8xODE3ODEyMSAuCisgIGV4dGluZm8ubGlicmFyeV9mZF9vZmZzZXQgPSAoNUxMPDw0OCkgKyBQQUdFX1NJWkU7CiAgIGhhbmRsZV8gPSBhbmRyb2lkX2Rsb3Blbl9leHQoImxpYm5hbWVfcGxhY2Vob2xkZXIiLCBSVExEX05PVywgJmV4dGluZm8pOwotCiAgIEFTU0VSVF9UUlVFKGhhbmRsZV8gPT0gbnVsbHB0cik7Ci0gIC8vIFRPRE86IEJldHRlciBlcnJvciBtZXNzYWdlIHdoZW4gcmVhZGluZyB3aXRoIG9mZnNldCA+IGZpbGVfc2l6ZQorICBBU1NFUlRfU1VCU1RSKCJkbG9wZW4gZmFpbGVkOiBmaWxlIG9mZnNldCBmb3IgdGhlIGxpYnJhcnkgXCJsaWJuYW1lX3BsYWNlaG9sZGVyXCIgPj0gZmlsZSBzaXplIiwgZGxlcnJvcigpKTsKKworICBleHRpbmZvLmxpYnJhcnlfZmRfb2Zmc2V0ID0gMExMIC0gUEFHRV9TSVpFOworICBoYW5kbGVfID0gYW5kcm9pZF9kbG9wZW5fZXh0KCJsaWJuYW1lX3BsYWNlaG9sZGVyIiwgUlRMRF9OT1csICZleHRpbmZvKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlXyA9PSBudWxscHRyKTsKKyAgQVNTRVJUX1NVQlNUUigiZGxvcGVuIGZhaWxlZDogZmlsZSBvZmZzZXQgZm9yIHRoZSBsaWJyYXJ5IFwibGlibmFtZV9wbGFjZWhvbGRlclwiIGlzIG5lZ2F0aXZlIiwgZGxlcnJvcigpKTsKKworICBleHRpbmZvLmxpYnJhcnlfZmRfb2Zmc2V0ID0gUEFHRV9TSVpFOworICBoYW5kbGVfID0gYW5kcm9pZF9kbG9wZW5fZXh0KCJsaWJuYW1lX3BsYWNlaG9sZGVyIiwgUlRMRF9OT1csICZleHRpbmZvKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlXyA9PSBudWxscHRyKTsKICAgQVNTRVJUX1NUUkVRKCJkbG9wZW4gZmFpbGVkOiBcImxpYm5hbWVfcGxhY2Vob2xkZXJcIiBoYXMgYmFkIEVMRiBtYWdpYyIsIGRsZXJyb3IoKSk7CiAKICAgY2xvc2UoZXh0aW5mby5saWJyYXJ5X2ZkKTsKQEAgLTE4MSw3ICsxOTUsNyBAQAogICBBU1NFUlRfRExfTk9UTlVMTChoYW5kbGVfKTsKICAgZm4gZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zm4+KGRsc3ltKGhhbmRsZV8sICJnZXRSYW5kb21OdW1iZXIiKSk7CiAgIEFTU0VSVF9ETF9OT1ROVUxMKGYpOwotICBFWFBFQ1RfR0UoZiwgc3RhcnQpOworICBFWFBFQ1RfR0UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZiksIHN0YXJ0KTsKICAgRVhQRUNUX0xUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGYpLAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpICsgTElCU0laRSk7CiAgIEVYUEVDVF9FUSg0LCBmKCkpOwpAQCAtMjExLDcgKzIyNSw3IEBACiAgIEFTU0VSVF9ETF9OT1ROVUxMKGhhbmRsZV8pOwogICBmbiBmID0gcmVpbnRlcnByZXRfY2FzdDxmbj4oZGxzeW0oaGFuZGxlXywgImdldFJhbmRvbU51bWJlciIpKTsKICAgQVNTRVJUX0RMX05PVE5VTEwoZik7Ci0gIEVYUEVDVF9HRShmLCBzdGFydCk7CisgIEVYUEVDVF9HRShyZWludGVycHJldF9jYXN0PHZvaWQqPihmKSwgc3RhcnQpOwogICBFWFBFQ1RfTFQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZiksCiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPihzdGFydCkgKyBMSUJTSVpFKTsKICAgRVhQRUNUX0VRKDQsIGYoKSk7CkBAIC0yMjksOCArMjQzLDkgQEAKICAgQVNTRVJUX0RMX05PVE5VTEwoaGFuZGxlXyk7CiAgIGZuIGYgPSByZWludGVycHJldF9jYXN0PGZuPihkbHN5bShoYW5kbGVfLCAiZ2V0UmFuZG9tTnVtYmVyIikpOwogICBBU1NFUlRfRExfTk9UTlVMTChmKTsKLSAgRVhQRUNUX1RSVUUoZiA8IHN0YXJ0IHx8IChyZWludGVycHJldF9jYXN0PHZvaWQqPihmKSA+PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0YXJ0KSArIFBBR0VfU0laRSkpOworICBFWFBFQ1RfVFJVRShyZWludGVycHJldF9jYXN0PHZvaWQqPihmKSA8IHN0YXJ0IHx8CisgICAgICAgICAgICAgIChyZWludGVycHJldF9jYXN0PHZvaWQqPihmKSA+PQorICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpICsgUEFHRV9TSVpFKSk7CiAgIEVYUEVDVF9FUSg0LCBmKCkpOwogfQogCkBAIC0zMjMsNiArMzM4LDExIEBACiB9CiAKIFRFU1RfRihEbEV4dFJlbHJvU2hhcmluZ1Rlc3QsIFZlcmlmeU1lbW9yeVNhdmluZykgeworICBpZiAoZ2V0ZXVpZCgpICE9IDApIHsKKyAgICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgbXVzdCBiZSBydW4gYXMgcm9vdC5cbiI7CisgICAgcmV0dXJuOworICB9CisKICAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoQ3JlYXRlUmVscm9GaWxlKExJQk5BTUUpKTsKICAgaW50IHJlbHJvX2ZkID0gb3BlbihyZWxyb19maWxlXywgT19SRE9OTFkpOwogICBBU1NFUlRfTk9FUlJPUihyZWxyb19mZCk7CmRpZmYgLS1naXQgYS90ZXN0cy9kbGZjbl90ZXN0LmNwcCBiL3Rlc3RzL2RsZmNuX3Rlc3QuY3BwCmluZGV4IGUyNGFmMTMuLmVhMjA4NjkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RsZmNuX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL2RsZmNuX3Rlc3QuY3BwCkBAIC05MCw3ICs5MCw3IEBACiB9CiAKIC8vIGlmdW5jcyBhcmUgb25seSBzdXBwb3J0ZWQgb24gaW50ZWwgYW5kIGFybTY0IGZvciBub3cKLSNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjaWYgZGVmaW5lZCAoX19hYXJjaDY0X18pIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKIFRFU1QoZGxmY24sIGlmdW5jKSB7CiAgIHR5cGVkZWYgY29uc3QgY2hhciogKCpmbl9wdHIpKCk7CiAKQEAgLTE2MiwzOSArMTYyLDM5IEBACiAgIEFTU0VSVF9FUSgxLCBmbigpKTsKIH0KIAotVEVTVChkbGZjbiwgZGxvcGVuX2NoZWNrX29yZGVyKSB7CitURVNUKGRsZmNuLCBkbG9wZW5fY2hlY2tfb3JkZXJfZGxzeW0pIHsKICAgLy8gSGVyZSBpcyBob3cgdGhlIHRlc3QgbGlicmFyeSBhbmQgaXRzIGR0X25lZWRlZAogICAvLyBsaWJyYXJpZXMgYXJlIGFycmFuZ2VkCiAgIC8vCi0gIC8vICBsaWJ0ZXN0X2NoZWNrX29yZGVyLnNvCisgIC8vICBsaWJ0ZXN0X2NoZWNrX29yZGVyX2NoaWxkcmVuLnNvCiAgIC8vICB8Ci0gIC8vICArLT4gbGlidGVzdF9jaGVja19vcmRlcl8xX2xlZnQuc28KKyAgLy8gICstPiAuLi5fMV9sZWZ0LnNvCiAgIC8vICB8ICAgfAotICAvLyAgfCAgICstPiBsaWJ0ZXN0X2NoZWNrX29yZGVyX2Euc28KKyAgLy8gIHwgICArLT4gLi4uX2Euc28KICAgLy8gIHwgICB8Ci0gIC8vICB8ICAgKy0+IGxpYnRlc3RfY2hlY2tfb3JkZXJfYi5zbworICAvLyAgfCAgICstPiAuLi5yX2Iuc28KICAgLy8gIHwKLSAgLy8gICstPiBsaWJ0ZXN0X2NoZWNrX29yZGVyXzJfcmlnaHQuc28KKyAgLy8gICstPiAuLi5fMl9yaWdodC5zbwogICAvLyAgfCAgIHwKLSAgLy8gIHwgICArLT4gbGlidGVzdF9jaGVja19vcmRlcl9kLnNvCisgIC8vICB8ICAgKy0+IC4uLl9kLnNvCiAgIC8vICB8ICAgICAgIHwKLSAgLy8gIHwgICAgICAgKy0+IGxpYnRlc3RfY2hlY2tfb3JkZXJfYi5zbworICAvLyAgfCAgICAgICArLT4gLi4uX2Iuc28KICAgLy8gIHwKLSAgLy8gICstPiBsaWJ0ZXN0X2NoZWNrX29yZGVyXzNfYy5zbworICAvLyAgKy0+IC4uLl8zX2Muc28KICAgLy8KICAgLy8gIGxvYWQgb3JkZXIgc2hvdWxkIGJlICgxLCAyLCAzLCBhLCBiLCBkKQogICAvLwogICAvLyBnZXRfYW5zd2VyKCkgaXMgZGVmaW5lZCBpbiAoMiwgMywgYSwgYiwgYykKICAgLy8gZ2V0X2Fuc3dlcjIoKSBpcyBkZWZpbmVkIGluIChiLCBkKQotICB2b2lkKiBzeW0gPSBkbHN5bShSVExEX0RFRkFVTFQsICJkbG9wZW5fdGVzdF9nZXRfYW5zd2VyIik7CisgIHZvaWQqIHN5bSA9IGRsc3ltKFJUTERfREVGQVVMVCwgImNoZWNrX29yZGVyX2Rsc3ltX2dldF9hbnN3ZXIiKTsKICAgQVNTRVJUX1RSVUUoc3ltID09IG51bGxwdHIpOwotICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4oImxpYnRlc3RfY2hlY2tfb3JkZXIuc28iLCBSVExEX05PVyB8IFJUTERfR0xPQkFMKTsKLSAgQVNTRVJUX1RSVUUoaGFuZGxlICE9IG51bGxwdHIpOworICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4oImxpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW0uc28iLCBSVExEX05PVyB8IFJUTERfR0xPQkFMKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlICE9IG51bGxwdHIpIDw8IGRsZXJyb3IoKTsKICAgdHlwZWRlZiBpbnQgKCpmbl90KSAodm9pZCk7CiAgIGZuX3QgZm4sIGZuMjsKLSAgZm4gPSByZWludGVycHJldF9jYXN0PGZuX3Q+KGRsc3ltKFJUTERfREVGQVVMVCwgImRsb3Blbl90ZXN0X2dldF9hbnN3ZXIiKSk7CisgIGZuID0gcmVpbnRlcnByZXRfY2FzdDxmbl90PihkbHN5bShSVExEX0RFRkFVTFQsICJjaGVja19vcmRlcl9kbHN5bV9nZXRfYW5zd2VyIikpOwogICBBU1NFUlRfVFJVRShmbiAhPSBOVUxMKSA8PCBkbGVycm9yKCk7Ci0gIGZuMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zm5fdD4oZGxzeW0oUlRMRF9ERUZBVUxULCAiZGxvcGVuX3Rlc3RfZ2V0X2Fuc3dlcjIiKSk7CisgIGZuMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zm5fdD4oZGxzeW0oUlRMRF9ERUZBVUxULCAiY2hlY2tfb3JkZXJfZGxzeW1fZ2V0X2Fuc3dlcjIiKSk7CiAgIEFTU0VSVF9UUlVFKGZuMiAhPSBOVUxMKSA8PCBkbGVycm9yKCk7CiAKICAgQVNTRVJUX0VRKDQyLCBmbigpKTsKQEAgLTIwMiw2ICsyMDIsMjQyIEBACiAgIGRsY2xvc2UoaGFuZGxlKTsKIH0KIAorVEVTVChkbGZjbiwgZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzKSB7CisgIC8vIFRoaXMgaXMgaG93IHRoaXMgb25lIHdvcmtzOgorICAvLyB3ZSBsb29rdXAgYW5kIGNhbGwgZ2V0X2Fuc3dlciB3aGljaCBpcyBkZWZpbmVkIGluICdfMi5zbycKKyAgLy8gYW5kIGluIHR1cm4gY2FsbHMgZXh0ZXJuYWwgZ2V0X2Fuc3dlcl9pbXBsKCkgZGVmaW5lZCBpbiBfMS5zbyBhbmQgaW4gJ19bYS1mXS5zbycKKyAgLy8gdGhlIGNvcnJlY3QgX2ltcGwoKSBpcyBpbXBsZW1lbnRlZCBieSAnX2Euc28nOworICAvLworICAvLyBOb3RlIHRoYXQgdGhpcyBpcyB0ZXN0IGZvciBSVExEX0xPQ0FMIChUT0RPOiB0ZXN0IGZvciBHTE9CQUw/KQorICAvLworICAvLyBIZXJlIGlzIHRoZSBwaWN0dXJlOgorICAvLworICAvLyBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzLnNvCisgIC8vIHwKKyAgLy8gKy0+IC4uLl8xLnNvIDwtIGVtcHR5CisgIC8vIHwgICB8CisgIC8vIHwgICArLT4gLi4uX2Euc28gPC0gZXhwb3J0cyBjb3JyZWN0IGFuc3dlcl9pbXBsKCkKKyAgLy8gfCAgIHwKKyAgLy8gfCAgICstPiAuLi5fYi5zbyA8LSBldmVyeSBvdGhlciBsZXR0ZXIgZXhwb3J0aW5nIGluY29ycmVjdCBvbmUuCisgIC8vIHwKKyAgLy8gKy0+IC4uLl8yLnNvIDwtIGVtcHR5CisgIC8vIHwgICB8CisgIC8vIHwgICArLT4gLi4uX2Muc28KKyAgLy8gfCAgIHwKKyAgLy8gfCAgICstPiAuLi5fZC5zbworICAvLyB8CisgIC8vICstPiAuLi5fMy5zbyA8LSBlbXB0eQorICAvLyAgICAgfAorICAvLyAgICAgKy0+IC4uLl9lLnNvCisgIC8vICAgICB8CisgIC8vICAgICArLT4gLi4uX2Yuc28gPC0gZXhwb3J0cyBnZXRfYW5zd2VyKCkgdGhhdCBjYWxscyBnZXRfYW5zZXJfaW1wbCgpOworICAvLyAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudHMgaW5jb3JyZWN0IGdldF9hbnN3ZXJfaW1wbCgpCisKKyAgdm9pZCogaGFuZGxlID0gZGxvcGVuKCJsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzLnNvIiwgUlRMRF9OT1cgfCBSVExEX05PTE9BRCk7CisgIEFTU0VSVF9UUlVFKGhhbmRsZSA9PSBudWxscHRyKTsKKyNpZmRlZiBfX0JJT05JQ19fCisgIC8vIFRPRE86IGdsaWJjIHJldHVybnMgbnVsbHB0ciBvbiBkbGVycm9yKCkgaGVyZS4gSXMgaXQgYnVnPworICBBU1NFUlRfU1RSRVEoImRsb3BlbiBmYWlsZWQ6IGxpYnJhcnkgXCJsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzLnNvXCIgd2Fzbid0IGxvYWRlZCBhbmQgUlRMRF9OT0xPQUQgcHJldmVudGVkIGl0IiwgZGxlcnJvcigpKTsKKyNlbmRpZgorCisgIGhhbmRsZSA9IGRsb3BlbigibGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5ncy5zbyIsIFJUTERfTk9XIHwgUlRMRF9MT0NBTCk7CisgIEFTU0VSVF9UUlVFKGhhbmRsZSAhPSBudWxscHRyKSA8PCBkbGVycm9yKCk7CisKKyAgdHlwZWRlZiBpbnQgKCpmbl90KSAodm9pZCk7CisgIGZuX3QgZm4gPSByZWludGVycHJldF9jYXN0PGZuX3Q+KGRsc3ltKGhhbmRsZSwgImNoZWNrX29yZGVyX3JlbG9jX2dldF9hbnN3ZXIiKSk7CisgIEFTU0VSVF9UUlVFKGZuICE9IG51bGxwdHIpIDw8IGRsZXJyb3IoKTsKKyAgQVNTRVJUX0VRKDQyLCBmbigpKTsKKworICBBU1NFUlRfRVEoMCwgZGxjbG9zZShoYW5kbGUpKTsKK30KKworVEVTVChkbGZjbiwgZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX3dpdGhfcHJlbG9hZCkgeworICAvLyBUaGlzIHRlc3QgdXNlcyB0aGUgc2FtZSBsaWJyYXJ5IGFzIGRsb3Blbl9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5ncy4KKyAgLy8gVW5saWtlIGRsb3Blbl9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5ncyBpdCBwcmVsb2FkcworICAvLyBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzXzEuc28gKGZpcnN0IGRlcGVuZGVuY3kpIHByaW9yIHRvCisgIC8vIGRsb3BlbihsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzLnNvKQorCisgIHZvaWQqIGhhbmRsZSA9IGRsb3BlbigibGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5ncy5zbyIsIFJUTERfTk9XIHwgUlRMRF9OT0xPQUQpOworICBBU1NFUlRfVFJVRShoYW5kbGUgPT0gbnVsbHB0cik7CisgIGhhbmRsZSA9IGRsb3BlbigibGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc18xLnNvIiwgUlRMRF9OT1cgfCBSVExEX05PTE9BRCk7CisgIEFTU0VSVF9UUlVFKGhhbmRsZSA9PSBudWxscHRyKTsKKworICB2b2lkKiBoYW5kbGVfZm9yXzEgPSBkbG9wZW4oImxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfMS5zbyIsIFJUTERfTk9XIHwgUlRMRF9MT0NBTCk7CisgIEFTU0VSVF9UUlVFKGhhbmRsZV9mb3JfMSAhPSBudWxscHRyKSA8PCBkbGVycm9yKCk7CisKKyAgaGFuZGxlID0gZGxvcGVuKCJsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzLnNvIiwgUlRMRF9OT1cgfCBSVExEX0xPQ0FMKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlICE9IG51bGxwdHIpIDw8IGRsZXJyb3IoKTsKKworICBBU1NFUlRfRVEoMCwgZGxjbG9zZShoYW5kbGVfZm9yXzEpKTsKKworICB0eXBlZGVmIGludCAoKmZuX3QpICh2b2lkKTsKKyAgZm5fdCBmbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zm5fdD4oZGxzeW0oaGFuZGxlLCAiY2hlY2tfb3JkZXJfcmVsb2NfZ2V0X2Fuc3dlciIpKTsKKyAgQVNTRVJUX1RSVUUoZm4gIT0gbnVsbHB0cikgPDwgZGxlcnJvcigpOworICBBU1NFUlRfRVEoNDIsIGZuKCkpOworCisgIEFTU0VSVF9FUSgwLCBkbGNsb3NlKGhhbmRsZSkpOworfQorCitURVNUKGRsZmNuLCBkbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2NfZ3JhbmRjaGlsZCkgeworICAvLyBUaGlzIGlzIGhvdyB0aGlzIG9uZSB3b3JrczoKKyAgLy8gd2UgbG9va3VwIGFuZCBjYWxsIGdyYW5kY2hpbGRfZ2V0X2Fuc3dlciB3aGljaCBpcyBkZWZpbmVkIGluICdfMi5zbycKKyAgLy8gYW5kIGluIHR1cm4gY2FsbHMgZXh0ZXJuYWwgZ2V0X2Fuc3dlcl9pbXBsKCkgZGVmaW5lZCBpbiAnX2NfMS5zbyBhbmQgX2NfMi5zbycKKyAgLy8gdGhlIGNvcnJlY3QgX2ltcGwoKSBpcyBpbXBsZW1lbnRlZCBieSAnX2NfMS5zbyc7CisgIC8vCisgIC8vIEhlcmUgaXMgdGhlIHBpY3R1cmUgb2Ygc3VidHJlZToKKyAgLy8KKyAgLy8gbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5ncy5zbworICAvLyB8CisgIC8vICstPiAuLi5fMi5zbyA8LSBncmFuZGNoaWxkX2dldF9hbnN3ZXIoKQorICAvLyAgICAgfAorICAvLyAgICAgKy0+IC4uLl9jLnNvIDwtIGVtcHR5CisgIC8vICAgICB8ICAgfAorICAvLyAgICAgfCAgICstPiBfY18xLnNvIDwtIGV4cG9ydHMgY29ycmVjdCBhbnN3ZXJfaW1wbCgpCisgIC8vICAgICB8ICAgfAorICAvLyAgICAgfCAgICstPiBfY18yLnNvIDwtIGV4cG9ydHMgaW5jb3JyZWN0IGFuc3dlcl9pbXBsKCkKKyAgLy8gICAgIHwKKyAgLy8gICAgICstPiAuLi5fZC5zbyA8LSBlbXB0eQorCisgIHZvaWQqIGhhbmRsZSA9IGRsb3BlbigibGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5ncy5zbyIsIFJUTERfTk9XIHwgUlRMRF9OT0xPQUQpOworICBBU1NFUlRfVFJVRShoYW5kbGUgPT0gbnVsbHB0cik7CisjaWZkZWYgX19CSU9OSUNfXworICAvLyBUT0RPOiBnbGliYyByZXR1cm5zIG51bGxwdHIgb24gZGxlcnJvcigpIGhlcmUuIElzIGl0IGJ1Zz8KKyAgQVNTRVJUX1NUUkVRKCJkbG9wZW4gZmFpbGVkOiBsaWJyYXJ5IFwibGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5ncy5zb1wiIHdhc24ndCBsb2FkZWQgYW5kIFJUTERfTk9MT0FEIHByZXZlbnRlZCBpdCIsIGRsZXJyb3IoKSk7CisjZW5kaWYKKworICBoYW5kbGUgPSBkbG9wZW4oImxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3Muc28iLCBSVExEX05PVyB8IFJUTERfTE9DQUwpOworICBBU1NFUlRfVFJVRShoYW5kbGUgIT0gbnVsbHB0cikgPDwgZGxlcnJvcigpOworCisgIHR5cGVkZWYgaW50ICgqZm5fdCkgKHZvaWQpOworICBmbl90IGZuID0gcmVpbnRlcnByZXRfY2FzdDxmbl90PihkbHN5bShoYW5kbGUsICJjaGVja19vcmRlcl9yZWxvY19ncmFuZGNoaWxkX2dldF9hbnN3ZXIiKSk7CisgIEFTU0VSVF9UUlVFKGZuICE9IG51bGxwdHIpIDw8IGRsZXJyb3IoKTsKKyAgQVNTRVJUX0VRKDQyLCBmbigpKTsKKworICBBU1NFUlRfRVEoMCwgZGxjbG9zZShoYW5kbGUpKTsKK30KKworVEVTVChkbGZjbiwgZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX25lcGhldykgeworICAvLyBUaGlzIGlzIGhvdyB0aGlzIG9uZSB3b3JrczoKKyAgLy8gd2UgbG9va3VwIGFuZCBjYWxsIG5lcGhld19nZXRfYW5zd2VyIHdoaWNoIGlzIGRlZmluZWQgaW4gJ18yLnNvJworICAvLyBhbmQgaW4gdHVybiBjYWxscyBleHRlcm5hbCBnZXRfYW5zd2VyX2ltcGwoKSBkZWZpbmVkIGluICdfW2EtZl0uc28nCisgIC8vIHRoZSBjb3JyZWN0IF9pbXBsKCkgaXMgaW1wbGVtZW50ZWQgYnkgJ19hLnNvJzsKKyAgLy8KKyAgLy8gSGVyZSBpcyB0aGUgcGljdHVyZToKKyAgLy8KKyAgLy8gbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5ncy5zbworICAvLyB8CisgIC8vICstPiAuLi5fMS5zbyA8LSBlbXB0eQorICAvLyB8ICAgfAorICAvLyB8ICAgKy0+IC4uLl9hLnNvIDwtIGV4cG9ydHMgY29ycmVjdCBhbnN3ZXJfaW1wbCgpCisgIC8vIHwgICB8CisgIC8vIHwgICArLT4gLi4uX2Iuc28gPC0gZXZlcnkgb3RoZXIgbGV0dGVyIGV4cG9ydGluZyBpbmNvcnJlY3Qgb25lLgorICAvLyB8CisgIC8vICstPiAuLi5fMi5zbyA8LSBlbXB0eQorICAvLyB8ICAgfAorICAvLyB8ICAgKy0+IC4uLl9jLnNvCisgIC8vIHwgICB8CisgIC8vIHwgICArLT4gLi4uX2Quc28KKyAgLy8gfAorICAvLyArLT4gLi4uXzMuc28gPC0gbmVwaGV3X2dldF9hbnN3ZXIoKSB0aGF0IGNhbGxzIGdldF9hbnN3ZXJfaW1wbCgpOworICAvLyAgICAgfAorICAvLyAgICAgKy0+IC4uLl9lLnNvCisgIC8vICAgICB8CisgIC8vICAgICArLT4gLi4uX2Yuc28KKworICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4oImxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3Muc28iLCBSVExEX05PVyB8IFJUTERfTk9MT0FEKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlID09IG51bGxwdHIpOworI2lmZGVmIF9fQklPTklDX18KKyAgLy8gVE9ETzogZ2xpYmMgcmV0dXJucyBudWxscHRyIG9uIGRsZXJyb3IoKSBoZXJlLiBJcyBpdCBidWc/CisgIEFTU0VSVF9TVFJFUSgiZGxvcGVuIGZhaWxlZDogbGlicmFyeSBcImxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3Muc29cIiB3YXNuJ3QgbG9hZGVkIGFuZCBSVExEX05PTE9BRCBwcmV2ZW50ZWQgaXQiLCBkbGVycm9yKCkpOworI2VuZGlmCisKKyAgaGFuZGxlID0gZGxvcGVuKCJsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzLnNvIiwgUlRMRF9OT1cgfCBSVExEX0xPQ0FMKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlICE9IG51bGxwdHIpIDw8IGRsZXJyb3IoKTsKKworICB0eXBlZGVmIGludCAoKmZuX3QpICh2b2lkKTsKKyAgZm5fdCBmbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zm5fdD4oZGxzeW0oaGFuZGxlLCAiY2hlY2tfb3JkZXJfcmVsb2NfbmVwaGV3X2dldF9hbnN3ZXIiKSk7CisgIEFTU0VSVF9UUlVFKGZuICE9IG51bGxwdHIpIDw8IGRsZXJyb3IoKTsKKyAgQVNTRVJUX0VRKDQyLCBmbigpKTsKKworICBBU1NFUlRfRVEoMCwgZGxjbG9zZShoYW5kbGUpKTsKK30KKworZXh0ZXJuICJDIiBpbnQgY2hlY2tfb3JkZXJfcmVsb2Nfcm9vdF9nZXRfYW5zd2VyX2ltcGwoKSB7CisgIHJldHVybiA0MjsKK30KKworVEVTVChkbGZjbiwgZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX21haW5fZXhlY3V0YWJsZSkgeworICAvLyBUaGlzIGlzIGhvdyB0aGlzIG9uZSB3b3JrczoKKyAgLy8gd2UgbG9va3VwIGFuZCBjYWxsIGdldF9hbnN3ZXIzIHdoaWNoIGlzIGRlZmluZWQgaW4gJ3Jvb3Quc28nCisgIC8vIGFuZCBpbiB0dXJuIGNhbGxzIGV4dGVybmFsIHJvb3RfZ2V0X2Fuc3dlcl9pbXBsKCkgZGVmaW5lZCBpbiBfMi5zbyBhbmQKKyAgLy8gYWJvdmUgdGhlIGNvcnJlY3QgX2ltcGwoKSBpcyBvbmUgaW4gdGhlIGV4ZWN1dGFibGUuCisgIC8vCisgIC8vIGxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfcm9vdC5zbworICAvLyB8CisgIC8vICstPiAuLi5fMS5zbyA8LSBlbXB0eQorICAvLyB8CisgIC8vICstPiAuLi5fMi5zbyA8LSBnaXZlcyBpbmNvcnJlY3QgYW5zd2VyIGZvciBhbnN3ZXJfbWFpbl9pbXBsKCkKKyAgLy8KKworICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4oImxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfcm9vdC5zbyIsIFJUTERfTk9XIHwgUlRMRF9OT0xPQUQpOworICBBU1NFUlRfVFJVRShoYW5kbGUgPT0gbnVsbHB0cik7CisjaWZkZWYgX19CSU9OSUNfXworICAvLyBUT0RPOiBnbGliYyByZXR1cm5zIG51bGxwdHIgb24gZGxlcnJvcigpIGhlcmUuIElzIGl0IGJ1Zz8KKyAgQVNTRVJUX1NUUkVRKCJkbG9wZW4gZmFpbGVkOiBsaWJyYXJ5IFwibGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19yb290LnNvXCIgd2Fzbid0IGxvYWRlZCBhbmQgUlRMRF9OT0xPQUQgcHJldmVudGVkIGl0IiwgZGxlcnJvcigpKTsKKyNlbmRpZgorCisgIGhhbmRsZSA9IGRsb3BlbigibGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19yb290LnNvIiwgUlRMRF9OT1cgfCBSVExEX0xPQ0FMKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlICE9IG51bGxwdHIpIDw8IGRsZXJyb3IoKTsKKworICB0eXBlZGVmIGludCAoKmZuX3QpICh2b2lkKTsKKyAgZm5fdCBmbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zm5fdD4oZGxzeW0oaGFuZGxlLCAiY2hlY2tfb3JkZXJfcmVsb2Nfcm9vdF9nZXRfYW5zd2VyIikpOworICBBU1NFUlRfVFJVRShmbiAhPSBudWxscHRyKSA8PCBkbGVycm9yKCk7CisgIEFTU0VSVF9FUSg0MiwgZm4oKSk7CisKKyAgQVNTRVJUX0VRKDAsIGRsY2xvc2UoaGFuZGxlKSk7Cit9CisKK1RFU1QoZGxmY24sIGRsb3Blbl9jaGVja19ydGxkX2xvY2FsKSB7CisgIHZvaWQqIHN5bSA9IGRsc3ltKFJUTERfREVGQVVMVCwgImRsb3Blbl90ZXN0bGliX3NpbXBsZV9mdW5jIik7CisgIEFTU0VSVF9UUlVFKHN5bSA9PSBudWxscHRyKTsKKworICAvLyBpbXBsaWNpdCBSVExEX0xPQ0FMCisgIHZvaWQqIGhhbmRsZSA9IGRsb3BlbigibGlidGVzdF9zaW1wbGUuc28iLCBSVExEX05PVyk7CisgIHN5bSA9IGRsc3ltKFJUTERfREVGQVVMVCwgImRsb3Blbl90ZXN0bGliX3NpbXBsZV9mdW5jIik7CisgIEFTU0VSVF9UUlVFKHN5bSA9PSBudWxscHRyKTsKKyAgQVNTRVJUX1NVQlNUUigidW5kZWZpbmVkIHN5bWJvbDogZGxvcGVuX3Rlc3RsaWJfc2ltcGxlX2Z1bmMiLCBkbGVycm9yKCkpOworICBzeW0gPSBkbHN5bShoYW5kbGUsICJkbG9wZW5fdGVzdGxpYl9zaW1wbGVfZnVuYyIpOworICBBU1NFUlRfVFJVRShzeW0gIT0gbnVsbHB0cik7CisgIEFTU0VSVF9UUlVFKHJlaW50ZXJwcmV0X2Nhc3Q8Ym9vbCAoKikodm9pZCk+KHN5bSkoKSk7CisgIGRsY2xvc2UoaGFuZGxlKTsKKworICAvLyBleHBsaWNpdCBSVExEX0xPQ0FMCisgIGhhbmRsZSA9IGRsb3BlbigibGlidGVzdF9zaW1wbGUuc28iLCBSVExEX05PVyB8IFJUTERfTE9DQUwpOworICBzeW0gPSBkbHN5bShSVExEX0RFRkFVTFQsICJkbG9wZW5fdGVzdGxpYl9zaW1wbGVfZnVuYyIpOworICBBU1NFUlRfVFJVRShzeW0gPT0gbnVsbHB0cik7CisgIEFTU0VSVF9TVUJTVFIoInVuZGVmaW5lZCBzeW1ib2w6IGRsb3Blbl90ZXN0bGliX3NpbXBsZV9mdW5jIiwgZGxlcnJvcigpKTsKKyAgc3ltID0gZGxzeW0oaGFuZGxlLCAiZGxvcGVuX3Rlc3RsaWJfc2ltcGxlX2Z1bmMiKTsKKyAgQVNTRVJUX1RSVUUoc3ltICE9IG51bGxwdHIpOworICBBU1NFUlRfVFJVRShyZWludGVycHJldF9jYXN0PGJvb2wgKCopKHZvaWQpPihzeW0pKCkpOworICBkbGNsb3NlKGhhbmRsZSk7Cit9CisKK1RFU1QoZGxmY24sIGRsb3Blbl9jaGVja19ydGxkX2dsb2JhbCkgeworICB2b2lkKiBzeW0gPSBkbHN5bShSVExEX0RFRkFVTFQsICJkbG9wZW5fdGVzdGxpYl9zaW1wbGVfZnVuYyIpOworICBBU1NFUlRfVFJVRShzeW0gPT0gbnVsbHB0cik7CisKKyAgdm9pZCogaGFuZGxlID0gZGxvcGVuKCJsaWJ0ZXN0X3NpbXBsZS5zbyIsIFJUTERfTk9XIHwgUlRMRF9HTE9CQUwpOworICBBU1NFUlRfVFJVRShoYW5kbGUgIT0gbnVsbHB0cikgPDwgZGxlcnJvcigpOworICBzeW0gPSBkbHN5bShSVExEX0RFRkFVTFQsICJkbG9wZW5fdGVzdGxpYl9zaW1wbGVfZnVuYyIpOworICBBU1NFUlRfVFJVRShzeW0gIT0gbnVsbHB0cikgPDwgZGxlcnJvcigpOworICBBU1NFUlRfVFJVRShyZWludGVycHJldF9jYXN0PGJvb2wgKCopKHZvaWQpPihzeW0pKCkpOworICBkbGNsb3NlKGhhbmRsZSk7CisKKyAgLy8gUlRMRF9HTE9CQUwgaW1wbGllcyBSVExEX05PREVMRVRFLCBsZXQncyBjaGVjayB0aGF0CisgIHZvaWQqIHN5bV9hZnRlcl9kbGNsb3NlID0gZGxzeW0oUlRMRF9ERUZBVUxULCAiZGxvcGVuX3Rlc3RsaWJfc2ltcGxlX2Z1bmMiKTsKKyAgQVNTRVJUX0VRKHN5bSwgc3ltX2FmdGVyX2RsY2xvc2UpOworfQorCiAvLyBsaWJ0ZXN0X3dpdGhfZGVwZW5kZW5jeV9sb29wLnNvIC0+IGxpYnRlc3Rfd2l0aF9kZXBlbmRlbmN5X2xvb3BfYS5zbyAtPgogLy8gbGlidGVzdF93aXRoX2RlcGVuZGVuY3lfbG9vcF9iLnNvIC0+IGxpYnRlc3Rfd2l0aF9kZXBlbmRlbmN5X2xvb3BfYy5zbyAtPgogLy8gbGlidGVzdF93aXRoX2RlcGVuZGVuY3lfbG9vcF9hLnNvCkBAIC0yMjcsNiArNDYzLDk0IEBACiAjZW5kaWYKIH0KIAorVEVTVChkbGZjbiwgZGxvcGVuX25vZGVsZXRlKSB7CisgIHN0YXRpYyBib29sIGlzX3VubG9hZGVkID0gZmFsc2U7CisKKyAgdm9pZCogaGFuZGxlID0gZGxvcGVuKCJsaWJ0ZXN0X25vZGVsZXRlXzEuc28iLCBSVExEX05PVyB8IFJUTERfTk9ERUxFVEUpOworICBBU1NFUlRfVFJVRShoYW5kbGUgIT0gbnVsbHB0cikgPDwgZGxlcnJvcigpOworICB2b2lkICgqc2V0X3VubG9hZF9mbGFnX3B0cikoYm9vbCopOworICBzZXRfdW5sb2FkX2ZsYWdfcHRyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkICgqKShib29sKik+KGRsc3ltKGhhbmRsZSwgImRsb3Blbl9ub2RlbGV0ZV8xX3NldF91bmxvYWRfZmxhZ19wdHIiKSk7CisgIEFTU0VSVF9UUlVFKHNldF91bmxvYWRfZmxhZ19wdHIgIT0gbnVsbHB0cikgPDwgZGxlcnJvcigpOworICBzZXRfdW5sb2FkX2ZsYWdfcHRyKCZpc191bmxvYWRlZCk7CisKKyAgdWludDMyX3QqIHRheGljYWJfbnVtYmVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRsc3ltKGhhbmRsZSwgImRsb3Blbl9ub2RlbGV0ZV8xX3RheGljYWJfbnVtYmVyIikpOworICBBU1NFUlRfVFJVRSh0YXhpY2FiX251bWJlciAhPSBudWxscHRyKSA8PCBkbGVycm9yKCk7CisgIEFTU0VSVF9FUSgxNzI5VSwgKnRheGljYWJfbnVtYmVyKTsKKyAgKnRheGljYWJfbnVtYmVyID0gMjsKKworICBkbGNsb3NlKGhhbmRsZSk7CisgIEFTU0VSVF9UUlVFKCFpc191bmxvYWRlZCk7CisKKyAgdWludDMyX3QqIHRheGljYWJfbnVtYmVyX2FmdGVyX2RsY2xvc2UgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGxzeW0oaGFuZGxlLCAiZGxvcGVuX25vZGVsZXRlXzFfdGF4aWNhYl9udW1iZXIiKSk7CisgIEFTU0VSVF9FUSh0YXhpY2FiX251bWJlcl9hZnRlcl9kbGNsb3NlLCB0YXhpY2FiX251bWJlcik7CisgIEFTU0VSVF9FUSgyVSwgKnRheGljYWJfbnVtYmVyX2FmdGVyX2RsY2xvc2UpOworCisKKyAgaGFuZGxlID0gZGxvcGVuKCJsaWJ0ZXN0X25vZGVsZXRlXzEuc28iLCBSVExEX05PVyk7CisgIHVpbnQzMl90KiB0YXhpY2FiX251bWJlcjIgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGxzeW0oaGFuZGxlLCAiZGxvcGVuX25vZGVsZXRlXzFfdGF4aWNhYl9udW1iZXIiKSk7CisgIEFTU0VSVF9FUSh0YXhpY2FiX251bWJlcjIsIHRheGljYWJfbnVtYmVyKTsKKworICBBU1NFUlRfRVEoMlUsICp0YXhpY2FiX251bWJlcjIpOworCisgIGRsY2xvc2UoaGFuZGxlKTsKKyAgQVNTRVJUX1RSVUUoIWlzX3VubG9hZGVkKTsKK30KKworVEVTVChkbGZjbiwgZGxvcGVuX25vZGVsZXRlX29uX3NlY29uZF9kbG9wZW4pIHsKKyAgc3RhdGljIGJvb2wgaXNfdW5sb2FkZWQgPSBmYWxzZTsKKworICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4oImxpYnRlc3Rfbm9kZWxldGVfMi5zbyIsIFJUTERfTk9XKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlICE9IG51bGxwdHIpIDw8IGRsZXJyb3IoKTsKKyAgdm9pZCAoKnNldF91bmxvYWRfZmxhZ19wdHIpKGJvb2wqKTsKKyAgc2V0X3VubG9hZF9mbGFnX3B0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAoKikoYm9vbCopPihkbHN5bShoYW5kbGUsICJkbG9wZW5fbm9kZWxldGVfMl9zZXRfdW5sb2FkX2ZsYWdfcHRyIikpOworICBBU1NFUlRfVFJVRShzZXRfdW5sb2FkX2ZsYWdfcHRyICE9IG51bGxwdHIpIDw8IGRsZXJyb3IoKTsKKyAgc2V0X3VubG9hZF9mbGFnX3B0cigmaXNfdW5sb2FkZWQpOworCisgIHVpbnQzMl90KiB0YXhpY2FiX251bWJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkbHN5bShoYW5kbGUsICJkbG9wZW5fbm9kZWxldGVfMl90YXhpY2FiX251bWJlciIpKTsKKyAgQVNTRVJUX1RSVUUodGF4aWNhYl9udW1iZXIgIT0gbnVsbHB0cikgPDwgZGxlcnJvcigpOworCisgIEFTU0VSVF9FUSgxNzI5VSwgKnRheGljYWJfbnVtYmVyKTsKKyAgKnRheGljYWJfbnVtYmVyID0gMjsKKworICAvLyBUaGlzIFJUTERfTk9ERUxFVEUgc2hvdWxkIGJlIGlnbm9yZWQKKyAgdm9pZCogaGFuZGxlMSA9IGRsb3BlbigibGlidGVzdF9ub2RlbGV0ZV8yLnNvIiwgUlRMRF9OT1cgfCBSVExEX05PREVMRVRFKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlMSAhPSBudWxscHRyKSA8PCBkbGVycm9yKCk7CisgIEFTU0VSVF9FUShoYW5kbGUsIGhhbmRsZTEpOworCisgIGRsY2xvc2UoaGFuZGxlMSk7CisgIGRsY2xvc2UoaGFuZGxlKTsKKworICBBU1NFUlRfVFJVRShpc191bmxvYWRlZCk7Cit9CisKK1RFU1QoZGxmY24sIGRsb3Blbl9ub2RlbGV0ZV9kdF9mbGFnc18xKSB7CisgIHN0YXRpYyBib29sIGlzX3VubG9hZGVkID0gZmFsc2U7CisKKyAgdm9pZCogaGFuZGxlID0gZGxvcGVuKCJsaWJ0ZXN0X25vZGVsZXRlX2R0X2ZsYWdzXzEuc28iLCBSVExEX05PVyk7CisgIEFTU0VSVF9UUlVFKGhhbmRsZSAhPSBudWxscHRyKSA8PCBkbGVycm9yKCk7CisgIHZvaWQgKCpzZXRfdW5sb2FkX2ZsYWdfcHRyKShib29sKik7CisgIHNldF91bmxvYWRfZmxhZ19wdHIgPSByZWludGVycHJldF9jYXN0PHZvaWQgKCopKGJvb2wqKT4oZGxzeW0oaGFuZGxlLCAiZGxvcGVuX25vZGVsZXRlX2R0X2ZsYWdzXzFfc2V0X3VubG9hZF9mbGFnX3B0ciIpKTsKKyAgQVNTRVJUX1RSVUUoc2V0X3VubG9hZF9mbGFnX3B0ciAhPSBudWxscHRyKSA8PCBkbGVycm9yKCk7CisgIHNldF91bmxvYWRfZmxhZ19wdHIoJmlzX3VubG9hZGVkKTsKKworICBkbGNsb3NlKGhhbmRsZSk7CisgIEFTU0VSVF9UUlVFKCFpc191bmxvYWRlZCk7Cit9CisKK1RFU1QoZGxmY24sIGRsc3ltX2RmXzFfZ2xvYmFsKSB7CisjaWYgIWRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19hYXJjaDY0X18pCisgIHZvaWQqIGhhbmRsZSA9IGRsb3BlbigibGlidGVzdF9kbHN5bV9kZl8xX2dsb2JhbC5zbyIsIFJUTERfTk9XKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlICE9IG51bGxwdHIpIDw8IGRsZXJyb3IoKTsKKyAgaW50ICgqZ2V0X2Fuc3dlcikoKTsKKyAgZ2V0X2Fuc3dlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50ICgqKSgpPihkbHN5bShoYW5kbGUsICJkbF9kZl8xX2dsb2JhbF9nZXRfYW5zd2VyIikpOworICBBU1NFUlRfVFJVRShnZXRfYW5zd2VyICE9IG51bGxwdHIpIDw8IGRsZXJyb3IoKTsKKyAgQVNTRVJUX0VRKDQyLCBnZXRfYW5zd2VyKCkpOworICBBU1NFUlRfRVEoMCwgZGxjbG9zZShoYW5kbGUpKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcgb24gYXJtL2FybTY0ICh0byBiZSByZWVuYWJsZWQgb25jZSBiLzE4MTM3NTIwIG9yIGIvMTgxMzA0NTIgYXJlIGZpeGVkKS5cbiI7CisjZW5kaWYKK30KKwogVEVTVChkbGZjbiwgZGxvcGVuX2ZhaWx1cmUpIHsKICAgdm9pZCogc2VsZiA9IGRsb3BlbigiL2RvZXMvbm90L2V4aXN0IiwgUlRMRF9OT1cpOwogICBBU1NFUlRfVFJVRShzZWxmID09IE5VTEwpOwpAQCAtMzYyLDE5ICs2ODYsNTIgQEAKICAgQVNTRVJUX1RSVUUoZGxlcnJvcigpID09IE5VTEwpOyAvLyBkbGFkZHIoMykgZG9lc24ndCBzZXQgZGxlcnJvcigzKS4KIH0KIAotLy8gT3VyIGR5bmFtaWMgbGlua2VyIGRvZXNuJ3Qgc3VwcG9ydCBHTlUgaGFzaCB0YWJsZXMuCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQogLy8gR05VLXN0eWxlIEVMRiBoYXNoIHRhYmxlcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIE1JUFMgQUJJLgogLy8gTUlQUyByZXF1aXJlcyAuZHluc3ltIHRvIGJlIHNvcnRlZCB0byBtYXRjaCB0aGUgR09UIGJ1dCBHTlUtc3R5bGUgcmVxdWlyZXMgc29ydGluZyBieSBoYXNoIGNvZGUuCi0jaWYgIWRlZmluZWQoX19taXBzX18pCiBURVNUKGRsZmNuLCBkbG9wZW5fbGlicmFyeV93aXRoX29ubHlfZ251X2hhc2gpIHsKKyNpZiAhZGVmaW5lZChfX21pcHNfXykKICAgZGxlcnJvcigpOyAvLyBDbGVhciBhbnkgcGVuZGluZyBlcnJvcnMuCi0gIHZvaWQqIGhhbmRsZSA9IGRsb3Blbigibm8tZWxmLWhhc2gtdGFibGUtbGlicmFyeS5zbyIsIFJUTERfTk9XKTsKLSAgQVNTRVJUX1RSVUUoaGFuZGxlID09IE5VTEwpOwotICBBU1NFUlRfU1RSRVEoImRsb3BlbiBmYWlsZWQ6IGVtcHR5L21pc3NpbmcgRFRfSEFTSCBpbiBcIm5vLWVsZi1oYXNoLXRhYmxlLWxpYnJhcnkuc29cIiAoYnVpbHQgd2l0aCAtLWhhc2gtc3R5bGU9Z251PykiLCBkbGVycm9yKCkpOworICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4oImxpYmdudS1oYXNoLXRhYmxlLWxpYnJhcnkuc28iLCBSVExEX05PVyk7CisgIEFTU0VSVF9UUlVFKGhhbmRsZSAhPSBudWxscHRyKSA8PCBkbGVycm9yKCk7CisgIGF1dG8gZ3VhcmQgPSBtYWtlX3Njb3BlX2d1YXJkKFsmXSgpIHsKKyAgICBkbGNsb3NlKGhhbmRsZSk7CisgIH0pOworICB2b2lkKiBzeW0gPSBkbHN5bShoYW5kbGUsICJnZXRSYW5kb21OdW1iZXIiKTsKKyAgQVNTRVJUX1RSVUUoc3ltICE9IG51bGxwdHIpIDw8IGRsZXJyb3IoKTsKKyAgaW50ICgqZm4pKHZvaWQpOworICBmbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50ICgqKSh2b2lkKT4oc3ltKTsKKyAgRVhQRUNUX0VRKDQsIGZuKCkpOworCisgIERsX2luZm8gZGxpbmZvOworICBBU1NFUlRfVFJVRSgwICE9IGRsYWRkcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmbiksICZkbGluZm8pKTsKKworICBBU1NFUlRfVFJVRShmbiA9PSBkbGluZm8uZGxpX3NhZGRyKTsKKyAgQVNTRVJUX1NUUkVRKCJnZXRSYW5kb21OdW1iZXIiLCBkbGluZm8uZGxpX3NuYW1lKTsKKyAgQVNTRVJUX1NVQlNUUigibGliZ251LWhhc2gtdGFibGUtbGlicmFyeS5zbyIsIGRsaW5mby5kbGlfZm5hbWUpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZyBmb3IgbWlwcy9taXBzNjQ7IG1pcHMgdG9vbGNoYWluIGRvZXMgbm90IHN1cHBvcnQgJy0taGFzaC1zdHlsZT1nbnUnXG4iOworI2VuZGlmCiB9Ci0jZW5kaWYKLSNlbmRpZgorCitURVNUKGRsZmNuLCBkbG9wZW5fbGlicmFyeV93aXRoX29ubHlfc3lzdl9oYXNoKSB7CisgIHZvaWQqIGhhbmRsZSA9IGRsb3BlbigibGlic3lzdi1oYXNoLXRhYmxlLWxpYnJhcnkuc28iLCBSVExEX05PVyk7CisgIEFTU0VSVF9UUlVFKGhhbmRsZSAhPSBudWxscHRyKSA8PCBkbGVycm9yKCk7CisgIGF1dG8gZ3VhcmQgPSBtYWtlX3Njb3BlX2d1YXJkKFsmXSgpIHsKKyAgICBkbGNsb3NlKGhhbmRsZSk7CisgIH0pOworICB2b2lkKiBzeW0gPSBkbHN5bShoYW5kbGUsICJnZXRSYW5kb21OdW1iZXIiKTsKKyAgQVNTRVJUX1RSVUUoc3ltICE9IG51bGxwdHIpIDw8IGRsZXJyb3IoKTsKKyAgaW50ICgqZm4pKHZvaWQpOworICBmbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50ICgqKSh2b2lkKT4oc3ltKTsKKyAgRVhQRUNUX0VRKDQsIGZuKCkpOworCisgIERsX2luZm8gZGxpbmZvOworICBBU1NFUlRfVFJVRSgwICE9IGRsYWRkcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmbiksICZkbGluZm8pKTsKKworICBBU1NFUlRfVFJVRShmbiA9PSBkbGluZm8uZGxpX3NhZGRyKTsKKyAgQVNTRVJUX1NUUkVRKCJnZXRSYW5kb21OdW1iZXIiLCBkbGluZm8uZGxpX3NuYW1lKTsKKyAgQVNTRVJUX1NVQlNUUigibGlic3lzdi1oYXNoLXRhYmxlLWxpYnJhcnkuc28iLCBkbGluZm8uZGxpX2ZuYW1lKTsKK30KIAogVEVTVChkbGZjbiwgZGxvcGVuX2JhZF9mbGFncykgewogICBkbGVycm9yKCk7IC8vIENsZWFyIGFueSBwZW5kaW5nIGVycm9ycy4KQEAgLTQzNSw0ICs3OTIsNiBAQAogICBBU1NFUlRfVFJVRShoYW5kbGUxICE9IE5VTEwpOwogICBBU1NFUlRfVFJVRShoYW5kbGUyICE9IE5VTEwpOwogICBBU1NFUlRfRVEoaGFuZGxlMSwgaGFuZGxlMik7CisgIGRsY2xvc2UoaGFuZGxlMSk7CisgIGRsY2xvc2UoaGFuZGxlMik7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9maWxlLWNoZWNrLWN4eCBiL3Rlc3RzL2ZpbGUtY2hlY2stY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlY2U4MzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9maWxlLWNoZWNrLWN4eApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vYmFzaAorRklMRUNIRUNLPSQxCitDWFg9JDIKK1BSRUZJWD0kMworQVJHUz0keyo6NH0KK1NPVVJDRT0kKGVjaG8gJEFSR1MgfCBncmVwIC1vUCAnXFMrXC5jcHBcYicpCitPQko9JChlY2hvICRBUkdTIHwgZ3JlcCAtb1AgJ1xTK1wub1xiJykKKyRDWFggJEFSR1MgMj4mMSB8ICRGSUxFQ0hFQ0sgLWNoZWNrLXByZWZpeD0kUFJFRklYICRTT1VSQ0UKK2lmIFsgIiQ/IiAtZXEgMCBdOyB0aGVuCisgIHRvdWNoICRPQkoKK2Vsc2UKKyAgZXhpdCAxCitmaQpkaWZmIC0tZ2l0IGEvdGVzdHMvZm9ydGlmeV9zcHJpbnRmX3dhcm5pbmdzLmNwcCBiL3Rlc3RzL2ZvcnRpZnlfc3ByaW50Zl93YXJuaW5ncy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyZDNjNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZvcnRpZnlfc3ByaW50Zl93YXJuaW5ncy5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyN1bmRlZiBfRk9SVElGWV9TT1VSQ0UKKyNkZWZpbmUgX0ZPUlRJRllfU09VUkNFIDIKKyNpbmNsdWRlIDxzdGRpby5oPgorCit2b2lkIHRlc3Rfc3ByaW50ZigpIHsKKyAgY2hhciBidWZbNF07CisKKyAgLy8gTk9MSU5UTkVYVExJTkUod2hpdGVzcGFjZS9saW5lX2xlbmd0aCkKKyAgLy8gR0NDOiB3YXJuaW5nOiBjYWxsIHRvIGludCBfX2J1aWx0aW5fX19zcHJpbnRmX2NoayhjaGFyKiwgaW50LCB7eyhsb25nICk/fX11bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIqLCAuLi4pIHdpbGwgYWx3YXlzIG92ZXJmbG93IGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAvLyBjbGFuZyBzaG91bGQgZW1pdCBhIHdhcm5pbmcsIGJ1dCBkb2Vzbid0CisgIHNwcmludGYoYnVmLCAiZm9vYmFyIik7IC8vIE5PTElOVChydW50aW1lL3ByaW50ZikKKworICAvLyBOT0xJTlRORVhUTElORSh3aGl0ZXNwYWNlL2xpbmVfbGVuZ3RoKQorICAvLyBHQ0M6IHdhcm5pbmc6IGNhbGwgdG8gaW50IF9fYnVpbHRpbl9fX3NwcmludGZfY2hrKGNoYXIqLCBpbnQsIHt7KGxvbmcgKT99fXVuc2lnbmVkIGludCwgY29uc3QgY2hhciosIC4uLikgd2lsbCBhbHdheXMgb3ZlcmZsb3cgZGVzdGluYXRpb24gYnVmZmVyCisgIC8vIGNsYW5nIHNob3VsZCBlbWl0IGEgd2FybmluZywgYnV0IGRvZXNuJ3QKKyAgc3ByaW50ZihidWYsICIlcyIsICJmb29iYXIiKTsgLy8gTk9MSU5UKHJ1bnRpbWUvcHJpbnRmKQorfQorCit2b2lkIHRlc3Rfc25wcmludGYoKSB7CisgIGNoYXIgYnVmWzRdOworCisgIC8vIE5PTElOVE5FWFRMSU5FKHdoaXRlc3BhY2UvbGluZV9sZW5ndGgpCisgIC8vIEdDQzogd2FybmluZzogY2FsbCB0byBpbnQgX19idWlsdGluX19fc25wcmludGZfY2hrKGNoYXIqLCB7eyhsb25nICk/fX11bnNpZ25lZCBpbnQsIGludCwge3sobG9uZyApP319dW5zaWduZWQgaW50LCBjb25zdCBjaGFyKiwgLi4uKSB3aWxsIGFsd2F5cyBvdmVyZmxvdyBkZXN0aW5hdGlvbiBidWZmZXIKKyAgLy8gY2xhbmcgc2hvdWxkIGVtaXQgYSB3YXJuaW5nLCBidXQgZG9lc24ndAorICBzbnByaW50ZihidWYsIDUsICJmb29iYXIiKTsgLy8gTk9MSU5UKHJ1bnRpbWUvcHJpbnRmKQorCisgIC8vIE5PTElOVE5FWFRMSU5FKHdoaXRlc3BhY2UvbGluZV9sZW5ndGgpCisgIC8vIEdDQzogd2FybmluZzogY2FsbCB0byBpbnQgX19idWlsdGluX19fc25wcmludGZfY2hrKGNoYXIqLCB7eyhsb25nICk/fX11bnNpZ25lZCBpbnQsIGludCwge3sobG9uZyApP319dW5zaWduZWQgaW50LCBjb25zdCBjaGFyKiwgLi4uKSB3aWxsIGFsd2F5cyBvdmVyZmxvdyBkZXN0aW5hdGlvbiBidWZmZXIKKyAgLy8gY2xhbmcgc2hvdWxkIGVtaXQgYSB3YXJuaW5nLCBidXQgZG9lc24ndAorICBzbnByaW50ZihidWYsIDUsICIlcyIsICJmb29iYXIiKTsgLy8gTk9MSU5UKHJ1bnRpbWUvcHJpbnRmKQorCisgIC8vIE5PTElOVE5FWFRMSU5FKHdoaXRlc3BhY2UvbGluZV9sZW5ndGgpCisgIC8vIEdDQzogd2FybmluZzogY2FsbCB0byBpbnQgX19idWlsdGluX19fc25wcmludGZfY2hrKGNoYXIqLCB7eyhsb25nICk/fX11bnNpZ25lZCBpbnQsIGludCwge3sobG9uZyApP319dW5zaWduZWQgaW50LCBjb25zdCBjaGFyKiwgLi4uKSB3aWxsIGFsd2F5cyBvdmVyZmxvdyBkZXN0aW5hdGlvbiBidWZmZXIKKyAgLy8gY2xhbmcgc2hvdWxkIGVtaXQgYSB3YXJuaW5nLCBidXQgZG9lc24ndAorICBzbnByaW50ZihidWYsIDUsICIgJXMgIiwgImZvb2JhciIpOyAvLyBOT0xJTlQocnVudGltZS9wcmludGYpCisKKyAgLy8gTk9MSU5UTkVYVExJTkUod2hpdGVzcGFjZS9saW5lX2xlbmd0aCkKKyAgLy8gR0NDOiB3YXJuaW5nOiBjYWxsIHRvIGludCBfX2J1aWx0aW5fX19zbnByaW50Zl9jaGsoY2hhciosIHt7KGxvbmcgKT99fXVuc2lnbmVkIGludCwgaW50LCB7eyhsb25nICk/fX11bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIqLCAuLi4pIHdpbGwgYWx3YXlzIG92ZXJmbG93IGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAvLyBjbGFuZyBzaG91bGQgZW1pdCBhIHdhcm5pbmcsIGJ1dCBkb2Vzbid0CisgIHNucHJpbnRmKGJ1ZiwgNSwgIiVkIiwgMTAwMDAwKTsgLy8gTk9MSU5UKHJ1bnRpbWUvcHJpbnRmKQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZm9ydGlmeV90ZXN0LmNwcCBiL3Rlc3RzL2ZvcnRpZnlfdGVzdC5jcHAKaW5kZXggMzUyY2FjNi4uNDg3NjRhYSAxMDA2NDQKLS0tIGEvdGVzdHMvZm9ydGlmeV90ZXN0LmNwcAorKysgYi90ZXN0cy9mb3J0aWZ5X3Rlc3QuY3BwCkBAIC0xNSwzOCArMTUsMjQgQEAKICAqLwogCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxtYWxsb2MuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2luY2x1ZGUgIkJpb25pY0RlYXRoVGVzdC5oIgogCi0vLyBXZSBoYXZlIHRvIHNheSAiRGVhdGhUZXN0IiBoZXJlIHNvIGd0ZXN0IGtub3dzIHRvIHJ1biB0aGlzIHRlc3QgKHdoaWNoIGV4aXRzKQotLy8gaW4gaXRzIG93biBwcm9jZXNzLiBVbmZvcnR1bmF0ZWx5LCB0aGUgQyBwcmVwcm9jZXNzb3IgZG9lc24ndCBnaXZlIHVzIGFuCi0vLyBlYXN5IHdheSB0byBjb25jYXRlbmF0ZSBzdHJpbmdzLCBzbyB3ZSBuZWVkIHRvIHVzZSB0aGUgY29tcGxpY2F0ZWQgbWV0aG9kCi0vLyBiZWxvdy4gKnNpZ2gqCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLy8gRm9ydGlmeSB0ZXN0IGNvZGUgbmVlZHMgdG8gcnVuIG11bHRpcGxlIHRpbWVzLCBzbyBURVNUX05BTUUgbWFjcm8gaXMgdXNlZCB0bworLy8gZGlzdGluZ3Vpc2ggZGlmZmVyZW50IHRlc3RzLiBURVNUX05BTUUgaXMgZGVmaW5lZCBpbiBjb21waWxhdGlvbiBjb21tYW5kLgogI2RlZmluZSBERUFUSFRFU1RfUEFTVEVSKG5hbWUpIG5hbWUjI19EZWF0aFRlc3QKICNkZWZpbmUgREVBVEhURVNUX0VWQUxVQVRPUihuYW1lKSBERUFUSFRFU1RfUEFTVEVSKG5hbWUpCiAjZGVmaW5lIERFQVRIVEVTVCBERUFUSFRFU1RfRVZBTFVBVE9SKFRFU1RfTkFNRSkKIAotY2xhc3MgREVBVEhURVNUIDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgdmlydHVhbCB2b2lkIFNldFVwKCkgewotICAgIG9sZF9kdW1wYWJsZV8gPSBwcmN0bChQUl9HRVRfRFVNUEFCTEUsIDAsIDAsIDAsIDApOwotICAgIC8vIFN1cHByZXNzIGRlYnVnZ2VyZCBzdGFjayB0cmFjZXMuIFRvbyBzbG93LgotICAgIHByY3RsKFBSX1NFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCk7Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKSB7Ci0gICAgcHJjdGwoUFJfU0VUX0RVTVBBQkxFLCBvbGRfZHVtcGFibGVfLCAwLCAwLCAwLCAwKTsKLSAgfQotIHByaXZhdGU6Ci0gIGludCBvbGRfZHVtcGFibGVfOwotfTsKK2NsYXNzIERFQVRIVEVTVCA6IHB1YmxpYyBCaW9uaWNEZWF0aFRlc3Qge307CiAKICNpZiBkZWZpbmVkKF9GT1JUSUZZX1NPVVJDRSkgJiYgX0ZPUlRJRllfU09VUkNFID09IDIKIHN0cnVjdCBmb28gewpAQCAtNjAsNyArNDYsNiBAQAogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCiBURVNUX0YoREVBVEhURVNULCBzdHBuY3B5X2ZvcnRpZmllZDIpIHsKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIGludCBjb3B5X2FtdCA9IGF0b2koIjExIik7CiAgIEFTU0VSVF9FWElUKHN0cG5jcHkobXlmb28uYSwgIjAxMjM0NTY3ODkwIiwgY29weV9hbXQpLApAQCAtNzIsNyArNTcsNiBAQAogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCiBURVNUX0YoREVBVEhURVNULCBzdHBuY3B5Ml9mb3J0aWZpZWQyKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBtZW1zZXQoJm15Zm9vLCAwLCBzaXplb2YobXlmb28pKTsKICAgbXlmb28ub25lWzBdID0gJ0EnOyAvLyBub3QgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZwpAQCAtODUsNyArNjksNiBAQAogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCiBURVNUX0YoREVBVEhURVNULCBzdHJuY3B5X2ZvcnRpZmllZDIpIHsKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIGludCBjb3B5X2FtdCA9IGF0b2koIjExIik7CiAgIEFTU0VSVF9FWElUKHN0cm5jcHkobXlmb28uYSwgIjAxMjM0NTY3ODkwIiwgY29weV9hbXQpLApAQCAtOTcsNyArODAsNiBAQAogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCiBURVNUX0YoREVBVEhURVNULCBzdHJuY3B5Ml9mb3J0aWZpZWQyKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBtZW1zZXQoJm15Zm9vLCAwLCBzaXplb2YobXlmb28pKTsKICAgbXlmb28ub25lWzBdID0gJ0EnOyAvLyBub3QgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZwpAQCAtMTEwLDcgKzkyLDYgQEAKIC8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgogVEVTVF9GKERFQVRIVEVTVCwgc3ByaW50Zl9mb3J0aWZpZWQyKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBjaGFyIHNvdXJjZV9idWZbMTVdOwogICBtZW1jcHkoc291cmNlX2J1ZiwgIjEyMzQ1Njc4OTAxMjM0IiwgMTUpOwpAQCAtMTIzLDcgKzEwNCw2IEBACiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KIFRFU1RfRihERUFUSFRFU1QsIHNwcmludGYyX2ZvcnRpZmllZDIpIHsKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIEFTU0VSVF9FWElUKHNwcmludGYobXlmb28uYSwgIjAxMjM0NTY3ODkiKSwKICAgICAgICAgICAgICAgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKQEAgLTE0NSwxMiArMTI1LDEwIEBACiB9CiAKIFRFU1RfRihERUFUSFRFU1QsIHZzcHJpbnRmX2ZvcnRpZmllZDIpIHsKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBBU1NFUlRfRVhJVCh2c3ByaW50Zl9oZWxwZXIyKCIlcyIsICIwMTIzNDU2Nzg5IiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKIFRFU1RfRihERUFUSFRFU1QsIHZzcHJpbnRmMl9mb3J0aWZpZWQyKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgQVNTRVJUX0VYSVQodnNwcmludGZfaGVscGVyMigiMDEyMzQ1Njc4OSIpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogI2VuZGlmCkBAIC0xNzEsMTIgKzE0OSwxMCBAQAogfQogCiBURVNUX0YoREVBVEhURVNULCB2c25wcmludGZfZm9ydGlmaWVkMikgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIEFTU0VSVF9FWElUKHZzbnByaW50Zl9oZWxwZXIyKCIlcyIsICIwMTIzNDU2Nzg5IiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKIFRFU1RfRihERUFUSFRFU1QsIHZzbnByaW50ZjJfZm9ydGlmaWVkMikgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIEFTU0VSVF9FWElUKHZzbnByaW50Zl9oZWxwZXIyKCIwMTIzNDU2Nzg5IiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAjZW5kaWYKQEAgLTE4Nyw3ICsxNjMsNiBAQAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KIFRFU1RfRihERUFUSFRFU1QsIHN0cGNweV9mb3J0aWZpZWQyKSB7CiAjaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgY2hhciogc3JjID0gc3RyZHVwKCIiKTsKICAgQVNTRVJUX0VYSVQoc3RwY3B5KG15Zm9vLmVtcHR5LCBzcmMpLApAQCAtMjA1LDcgKzE4MCw2IEBACiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgogVEVTVF9GKERFQVRIVEVTVCwgc3RyY3B5X2ZvcnRpZmllZDIpIHsKICNpZiBkZWZpbmVkKF9fQklPTklDX18pCi0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBjaGFyKiBzcmMgPSBzdHJkdXAoIiIpOwogICBBU1NFUlRfRVhJVChzdHJjcHkobXlmb28uZW1wdHksIHNyYyksCkBAIC0yMjMsNyArMTk3LDYgQEAKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCiBURVNUX0YoREVBVEhURVNULCBzdHJjcHkyX2ZvcnRpZmllZDIpIHsKICNpZiBkZWZpbmVkKF9fQklPTklDX18pCi0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBjaGFyKiBzcmMgPSBzdHJkdXAoIjEiKTsKICAgQVNTRVJUX0VYSVQoc3RyY3B5KG15Zm9vLmVtcHR5LCBzcmMpLApAQCAtMjQxLDcgKzIxNCw2IEBACiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgogVEVTVF9GKERFQVRIVEVTVCwgc3RyY3B5M19mb3J0aWZpZWQyKSB7CiAjaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgY2hhciogc3JjID0gc3RyZHVwKCIxMiIpOwogICBBU1NFUlRfRVhJVChzdHJjcHkobXlmb28ub25lLCBzcmMpLApAQCAtMjU4LDcgKzIzMCw2IEBACiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgogVEVTVF9GKERFQVRIVEVTVCwgc3RyY2hyX2ZvcnRpZmllZDIpIHsKICNpZiBkZWZpbmVkKF9fQklPTklDX18pCi0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBtZW1jcHkobXlmb28uYSwgIjAxMjM0NTY3ODkiLCBzaXplb2YobXlmb28uYSkpOwogICBteWZvby5iWzBdID0gJ1wwJzsKQEAgLTI3NSw3ICsyNDYsNiBAQAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KIFRFU1RfRihERUFUSFRFU1QsIHN0cnJjaHJfZm9ydGlmaWVkMikgewogI2lmIGRlZmluZWQoX19CSU9OSUNfXykKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIG1lbWNweShteWZvby5hLCAiMDEyMzQ1Njc4OSIsIDEwKTsKICAgbWVtY3B5KG15Zm9vLmIsICIwMTIzNCIsIDYpOwpAQCAtMjkyLDcgKzI2Miw2IEBACiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgogVEVTVF9GKERFQVRIVEVTVCwgc3RybGNweV9mb3J0aWZpZWQyKSB7CiAjaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgc3RyY3B5KG15Zm9vLmEsICIwMSIpOwogICBzaXplX3QgbiA9IHN0cmxlbihteWZvby5hKTsKQEAgLTMwOSw3ICsyNzgsNiBAQAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KIFRFU1RfRihERUFUSFRFU1QsIHN0cmxjYXRfZm9ydGlmaWVkMikgewogI2lmIGRlZmluZWQoX19CSU9OSUNfXykKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIHN0cmNweShteWZvby5hLCAiMDEiKTsKICAgbXlmb28ub25lWzBdID0gJ1wwJzsKQEAgLTMyNiw3ICsyOTQsNiBAQAogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCiBURVNUX0YoREVBVEhURVNULCBzdHJuY2F0X2ZvcnRpZmllZDIpIHsKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIHNpemVfdCBuID0gYXRvaSgiMTAiKTsgLy8gYXZvaWQgY29tcGlsZXIgb3B0aW1pemF0aW9ucwogICBzdHJuY3B5KG15Zm9vLmEsICIwMTIzNDU2NzgiLCBuKTsKQEAgLTMzOCw3ICszMDUsNiBAQAogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCiBURVNUX0YoREVBVEhURVNULCBzdHJuY2F0Ml9mb3J0aWZpZWQyKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBteWZvby5hWzBdID0gJ1wwJzsKICAgc2l6ZV90IG4gPSBhdG9pKCIxMCIpOyAvLyBhdm9pZCBjb21waWxlciBvcHRpbWl6YXRpb25zCkBAIC0zNDcsNyArMzEzLDYgQEAKICNlbmRpZgogCiBURVNUX0YoREVBVEhURVNULCBzdHJuY2F0M19mb3J0aWZpZWQyKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBtZW1jcHkobXlmb28uYSwgIjAxMjM0NTY3ODkiLCBzaXplb2YobXlmb28uYSkpOyAvLyB1bnRlcm1pbmF0ZWQgc3RyaW5nCiAgIG15Zm9vLmJbMF0gPSAnXDAnOwpAQCAtMzU5LDcgKzMyNCw2IEBACiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KIFRFU1RfRihERUFUSFRFU1QsIHN0cmNhdF9mb3J0aWZpZWQyKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBzcmNbMTFdOwogICBzdHJjcHkoc3JjLCAiMDEyMzQ1Njc4OSIpOwogICBmb28gbXlmb287CkBAIC0zNjksNyArMzMzLDYgQEAKICNlbmRpZgogCiBURVNUX0YoREVBVEhURVNULCBzdHJjYXQyX2ZvcnRpZmllZDIpIHsKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIG1lbWNweShteWZvby5hLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihteWZvby5hKSk7IC8vIHVudGVybWluYXRlZCBzdHJpbmcKICAgbXlmb28uYlswXSA9ICdcMCc7CkBAIC0zNzcsNyArMzQwLDYgQEAKIH0KIAogVEVTVF9GKERFQVRIVEVTVCwgc25wcmludGZfZm9ydGlmaWVkMikgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgc3RyY3B5KG15Zm9vLmEsICIwMTIzNDU2NzgiKTsKICAgc2l6ZV90IG4gPSBzdHJsZW4obXlmb28uYSkgKyAyOwpAQCAtMzg1LDcgKzM0Nyw2IEBACiB9CiAKIFRFU1RfRihERUFUSFRFU1QsIGJ6ZXJvX2ZvcnRpZmllZDIpIHsKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIG1lbWNweShteWZvby5iLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihteWZvby5iKSk7CiAgIHNpemVfdCBuID0gYXRvaSgiMTEiKTsKQEAgLTM5Nyw3ICszNTgsNiBAQAogLy8gbXVsdGlieXRlIHRhcmdldCB3aGVyZSB3ZSBvdmVyIGZpbGwgKHNob3VsZCBmYWlsKQogVEVTVF9GKERFQVRIVEVTVCwgc3RyY3B5X2ZvcnRpZmllZCkgewogI2lmIGRlZmluZWQoX19CSU9OSUNfXykKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIGJ1ZlsxMF07CiAgIGNoYXIgKm9yaWcgPSBzdHJkdXAoIjAxMjM0NTY3ODkiKTsKICAgQVNTRVJUX0VYSVQoc3RyY3B5KGJ1Ziwgb3JpZyksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CkBAIC00MTAsNyArMzcwLDYgQEAKIC8vIHplcm8gc2l6ZWQgdGFyZ2V0IHdpdGggIlwwIiBzb3VyY2UgKHNob3VsZCBmYWlsKQogVEVTVF9GKERFQVRIVEVTVCwgc3RyY3B5Ml9mb3J0aWZpZWQpIHsKICNpZiBkZWZpbmVkKF9fQklPTklDX18pCi0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMF07CiAgIGNoYXIgKm9yaWcgPSBzdHJkdXAoIiIpOwogICBBU1NFUlRfRVhJVChzdHJjcHkoYnVmLCBvcmlnKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKQEAgLTQyMyw3ICszODIsNiBAQAogLy8gemVybyBzaXplZCB0YXJnZXQgd2l0aCBsb25nZXIgc291cmNlIChzaG91bGQgZmFpbCkKIFRFU1RfRihERUFUSFRFU1QsIHN0cmNweTNfZm9ydGlmaWVkKSB7CiAjaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzBdOwogICBjaGFyICpvcmlnID0gc3RyZHVwKCIxIik7CiAgIEFTU0VSVF9FWElUKHN0cmNweShidWYsIG9yaWcpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwpAQCAtNDM2LDcgKzM5NCw2IEBACiAvLyBvbmUgYnl0ZSB0YXJnZXQgd2l0aCBsb25nZXIgc291cmNlIChzaG91bGQgZmFpbCkKIFRFU1RfRihERUFUSFRFU1QsIHN0cmNweTRfZm9ydGlmaWVkKSB7CiAjaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzFdOwogICBjaGFyICpvcmlnID0gc3RyZHVwKCIxMiIpOwogICBBU1NFUlRfRVhJVChzdHJjcHkoYnVmLCBvcmlnKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKQEAgLTQ0OCw3ICs0MDUsNiBAQAogCiBURVNUX0YoREVBVEhURVNULCBzdHJsZW5fZm9ydGlmaWVkKSB7CiAjaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzEwXTsKICAgbWVtY3B5KGJ1ZiwgIjAxMjM0NTY3ODkiLCBzaXplb2YoYnVmKSk7CiAgIEFTU0VSVF9FWElUKHByaW50ZigiJXpkIiwgc3RybGVuKGJ1ZikpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwpAQCAtNDU5LDcgKzQxNSw2IEBACiAKIFRFU1RfRihERUFUSFRFU1QsIHN0cmNocl9mb3J0aWZpZWQpIHsKICNpZiBkZWZpbmVkKF9fQklPTklDX18pCi0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMTBdOwogICBtZW1jcHkoYnVmLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihidWYpKTsKICAgQVNTRVJUX0VYSVQocHJpbnRmKCIlcyIsIHN0cmNocihidWYsICdhJykpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwpAQCAtNDcwLDcgKzQyNSw2IEBACiAKIFRFU1RfRihERUFUSFRFU1QsIHN0cnJjaHJfZm9ydGlmaWVkKSB7CiAjaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzEwXTsKICAgbWVtY3B5KGJ1ZiwgIjAxMjM0NTY3ODkiLCBzaXplb2YoYnVmKSk7CiAgIEFTU0VSVF9FWElUKHByaW50ZigiJXMiLCBzdHJyY2hyKGJ1ZiwgJ2EnKSksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CkBAIC00ODEsNyArNDM1LDYgQEAKIAogVEVTVF9GKERFQVRIVEVTVCwgc3RybGNweV9mb3J0aWZpZWQpIHsKICNpZiBkZWZpbmVkKF9fQklPTklDX18pCi0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZhWzE1XTsKICAgY2hhciBidWZiWzEwXTsKICAgc3RyY3B5KGJ1ZmEsICIwMTIzNDU2Nzg5MDEyMyIpOwpAQCAtNDk0LDcgKzQ0Nyw2IEBACiAKIFRFU1RfRihERUFUSFRFU1QsIHN0cmxjYXRfZm9ydGlmaWVkKSB7CiAjaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmYVsxNV07CiAgIGNoYXIgYnVmYlsxMF07CiAgIGJ1ZmJbMF0gPSAnXDAnOwpAQCAtNTA3LDcgKzQ1OSw2IEBACiB9CiAKIFRFU1RfRihERUFUSFRFU1QsIHNwcmludGZfZm9ydGlmaWVkKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMTBdOwogICBjaGFyIHNvdXJjZV9idWZbMTVdOwogICBtZW1jcHkoc291cmNlX2J1ZiwgIjEyMzQ1Njc4OTAxMjM0IiwgMTUpOwpAQCAtNTE4LDcgKzQ2OSw2IEBACiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KIFRFU1RfRihERUFUSFRFU1QsIHNwcmludGZfbWFsbG9jX2ZvcnRpZmllZCkgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIqIGJ1ZiA9IChjaGFyICopIG1hbGxvYygxMCk7CiAgIGNoYXIgc291cmNlX2J1ZlsxMV07CiAgIG1lbWNweShzb3VyY2VfYnVmLCAiMTIzNDU2Nzg5MCIsIDExKTsKQEAgLTUyOCw3ICs0NzgsNiBAQAogI2VuZGlmCiAKIFRFU1RfRihERUFUSFRFU1QsIHNwcmludGYyX2ZvcnRpZmllZCkgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzVdOwogICBBU1NFUlRfRVhJVChzcHJpbnRmKGJ1ZiwgImFhYWFhIiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CkBAIC01NDUsMTIgKzQ5NCwxMCBAQAogfQogCiBURVNUX0YoREVBVEhURVNULCB2c3ByaW50Zl9mb3J0aWZpZWQpIHsKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBBU1NFUlRfRVhJVCh2c3ByaW50Zl9oZWxwZXIoIiVzIiwgIjAxMjM0NTY3ODkiKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAogVEVTVF9GKERFQVRIVEVTVCwgdnNwcmludGYyX2ZvcnRpZmllZCkgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIEFTU0VSVF9FWElUKHZzcHJpbnRmX2hlbHBlcigiMDEyMzQ1Njc4OSIpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCkBAIC01NjcsMTcgKzUxNCwxNCBAQAogfQogCiBURVNUX0YoREVBVEhURVNULCB2c25wcmludGZfZm9ydGlmaWVkKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgQVNTRVJUX0VYSVQodnNucHJpbnRmX2hlbHBlcigiJXMiLCAiMDEyMzQ1Njc4OSIpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCiBURVNUX0YoREVBVEhURVNULCB2c25wcmludGYyX2ZvcnRpZmllZCkgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIEFTU0VSVF9FWElUKHZzbnByaW50Zl9oZWxwZXIoIjAxMjM0NTY3ODkiKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAogVEVTVF9GKERFQVRIVEVTVCwgc3RybmNhdF9mb3J0aWZpZWQpIHsKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIGJ1ZlsxMF07CiAgIHNpemVfdCBuID0gYXRvaSgiMTAiKTsgLy8gYXZvaWQgY29tcGlsZXIgb3B0aW1pemF0aW9ucwogICBzdHJuY3B5KGJ1ZiwgIjAxMjM0NTY3OCIsIG4pOwpAQCAtNTg1LDcgKzUyOSw2IEBACiB9CiAKIFRFU1RfRihERUFUSFRFU1QsIHN0cm5jYXQyX2ZvcnRpZmllZCkgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzEwXTsKICAgYnVmWzBdID0gJ1wwJzsKICAgc2l6ZV90IG4gPSBhdG9pKCIxMCIpOyAvLyBhdm9pZCBjb21waWxlciBvcHRpbWl6YXRpb25zCkBAIC01OTMsNyArNTM2LDYgQEAKIH0KIAogVEVTVF9GKERFQVRIVEVTVCwgc3RyY2F0X2ZvcnRpZmllZCkgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgc3JjWzExXTsKICAgc3RyY3B5KHNyYywgIjAxMjM0NTY3ODkiKTsKICAgY2hhciBidWZbMTBdOwpAQCAtNjAyLDcgKzU0NCw2IEBACiB9CiAKIFRFU1RfRihERUFUSFRFU1QsIG1lbW1vdmVfZm9ydGlmaWVkKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMjBdOwogICBzdHJjcHkoYnVmLCAiMDEyMzQ1Njc4OSIpOwogICBzaXplX3QgbiA9IGF0b2koIjEwIik7CkBAIC02MTAsNyArNTUxLDYgQEAKIH0KIAogVEVTVF9GKERFQVRIVEVTVCwgbWVtY3B5X2ZvcnRpZmllZCkgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmYVsxMF07CiAgIGNoYXIgYnVmYlsxMF07CiAgIHN0cmNweShidWZhLCAiMDEyMzQ1Njc4Iik7CkBAIC02MTksNyArNTU5LDYgQEAKIH0KIAogVEVTVF9GKERFQVRIVEVTVCwgc3RwbmNweV9mb3J0aWZpZWQpIHsKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIGJ1ZmFbMTVdOwogICBjaGFyIGJ1ZmJbMTBdOwogICBzdHJjcHkoYnVmYSwgIjAxMjM0NTY3ODkwMTIzIik7CkBAIC02MjgsNyArNTY3LDYgQEAKIH0KIAogVEVTVF9GKERFQVRIVEVTVCwgc3RwbmNweTJfZm9ydGlmaWVkKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBkZXN0WzExXTsKICAgY2hhciBzcmNbMTBdOwogICBtZW1jcHkoc3JjLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihzcmMpKTsgLy8gc3JjIGlzIG5vdCBudWxsIHRlcm1pbmF0ZWQKQEAgLTYzNiw3ICs1NzQsNiBAQAogfQogCiBURVNUX0YoREVBVEhURVNULCBzdHJuY3B5X2ZvcnRpZmllZCkgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmYVsxNV07CiAgIGNoYXIgYnVmYlsxMF07CiAgIHN0cmNweShidWZhLCAiMDEyMzQ1Njc4OTAxMjMiKTsKQEAgLTY0Niw3ICs1ODMsNiBAQAogCiAKIFRFU1RfRihERUFUSFRFU1QsIHN0cm5jcHkyX2ZvcnRpZmllZCkgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgZGVzdFsxMV07CiAgIGNoYXIgc3JjWzEwXTsKICAgbWVtY3B5KHNyYywgIjAxMjM0NTY3ODkiLCBzaXplb2Yoc3JjKSk7IC8vIHNyYyBpcyBub3QgbnVsbCB0ZXJtaW5hdGVkCkBAIC02NTQsNyArNTkwLDYgQEAKIH0KIAogVEVTVF9GKERFQVRIVEVTVCwgc25wcmludGZfZm9ydGlmaWVkKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZhWzE1XTsKICAgY2hhciBidWZiWzEwXTsKICAgc3RyY3B5KGJ1ZmEsICIwMTIzNDU2Nzg5Iik7CkBAIC02NjMsNyArNTk4LDYgQEAKIH0KIAogVEVTVF9GKERFQVRIVEVTVCwgYnplcm9fZm9ydGlmaWVkKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMTBdOwogICBtZW1jcHkoYnVmLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihidWYpKTsKICAgc2l6ZV90IG4gPSBhdG9pKCIxMSIpOwpAQCAtNjcxLDEzICs2MDUsMTEgQEAKIH0KIAogVEVTVF9GKERFQVRIVEVTVCwgdW1hc2tfZm9ydGlmaWVkKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgbW9kZV90IG1hc2sgPSBhdG9pKCIxMDIzIik7ICAvLyAwMTc3NyBpbiBvY3RhbAogICBBU1NFUlRfRVhJVCh1bWFzayhtYXNrKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAogVEVTVF9GKERFQVRIVEVTVCwgcmVjdl9mb3J0aWZpZWQpIHsKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBzaXplX3QgZGF0YV9sZW4gPSBhdG9pKCIxMSIpOyAvLyBzdXBwcmVzcyBjb21waWxlciBvcHRpbWl6YXRpb25zCiAgIGNoYXIgYnVmWzEwXTsKICAgQVNTRVJUX0VYSVQocmVjdigwLCBidWYsIGRhdGFfbGVuLCAwKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKQEAgLTY4NSw3ICs2MTcsNiBAQAogCiBURVNUX0YoREVBVEhURVNULCBGRF9JU1NFVF9mb3J0aWZpZWQpIHsKICNpZiBkZWZpbmVkKF9fQklPTklDX18pIC8vIGdsaWJjIGNhdGNoZXMgdGhpcyBhdCBjb21waWxlLXRpbWUuCi0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZmRfc2V0IHNldDsKICAgbWVtc2V0KCZzZXQsIDAsIHNpemVvZihzZXQpKTsKICAgQVNTRVJUX0VYSVQoRkRfSVNTRVQoLTEsICZzZXQpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwpAQCAtNjkzLDcgKzYyNCw2IEBACiB9CiAKIFRFU1RfRihERUFUSFRFU1QsIEZEX0lTU0VUXzJfZm9ydGlmaWVkKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMV07CiAgIGZkX3NldCogc2V0ID0gKGZkX3NldCopIGJ1ZjsKICAgQVNTRVJUX0VYSVQoRkRfSVNTRVQoMCwgc2V0KSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKQEAgLTcwMywxNCArNjMzLDEyIEBACiBzdGF0aWMgdm9pZCBGRF9aRVJPX2Z1bmN0aW9uKGZkX3NldCogcykgeyBGRF9aRVJPKHMpOyB9CiAKIFRFU1RfRihERUFUSFRFU1QsIEZEX1pFUk9fZm9ydGlmaWVkKSB7Ci0gIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMV07CiAgIGZkX3NldCogc2V0ID0gKGZkX3NldCopIGJ1ZjsKICAgQVNTRVJUX0VYSVQoRkRfWkVST19mdW5jdGlvbihzZXQpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCiBURVNUX0YoREVBVEhURVNULCByZWFkX2ZvcnRpZmllZCkgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzFdOwogICBzaXplX3QgY3QgPSBhdG9pKCIyIik7IC8vIHByZXZlbnQgb3B0aW1pemF0aW9ucwogICBpbnQgZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JET05MWSk7CmRpZmYgLS1naXQgYS90ZXN0cy9mdHdfdGVzdC5jcHAgYi90ZXN0cy9mdHdfdGVzdC5jcHAKaW5kZXggNmQzYTMwOC4uMzhiM2Q0OSAxMDA2NDQKLS0tIGEvdGVzdHMvZnR3X3Rlc3QuY3BwCisrKyBiL3Rlc3RzL2Z0d190ZXN0LmNwcApAQCAtMTQsMjcgKzE0LDM2IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLSNpbmNsdWRlICJUZW1wb3JhcnlGaWxlLmgiCi0KICNpbmNsdWRlIDxmdHcuaD4KKwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCiB2b2lkIHNhbml0eV9jaGVja19mdHcoY29uc3QgY2hhciogZnBhdGgsIGNvbnN0IHN0cnVjdCBzdGF0KiBzYiwgaW50IHRmbGFnKSB7CiAgIEFTU0VSVF9UUlVFKGZwYXRoICE9IE5VTEwpOwogICBBU1NFUlRfVFJVRShzYiAhPSBOVUxMKTsKLSAgYm9vbCBpc19kaXIgPSBTX0lTRElSKHNiLT5zdF9tb2RlKTsKLSAgQVNTRVJUX1RSVUUoKGlzX2RpciAmJiB0ZmxhZyA9PSBGVFdfRCkgfHwgKCFpc19kaXIgJiYgdGZsYWcgPT0gRlRXX0YpKTsKKyAgaWYgKFNfSVNESVIoc2ItPnN0X21vZGUpKSB7CisgICAgQVNTRVJUX1RSVUUodGZsYWcgPT0gRlRXX0QgfHwgdGZsYWcgPT0gRlRXX0ROUiB8fCB0ZmxhZyA9PSBGVFdfRFApIDw8IGZwYXRoOworICB9IGVsc2UgaWYgKFNfSVNMTksoc2ItPnN0X21vZGUpKSB7CisgICAgQVNTRVJUX0VRKEZUV19TTCwgdGZsYWcpIDw8IGZwYXRoOworICB9IGVsc2UgeworICAgIEFTU0VSVF9FUShGVFdfRiwgdGZsYWcpIDw8IGZwYXRoOworICB9CiB9CiAKLXZvaWQgc2FuaXR5X2NoZWNrX25mdHcoCi0gICAgY29uc3QgY2hhciogZnBhdGgsIGNvbnN0IHN0cnVjdCBzdGF0KiBzYiwgaW50IHRmbGFnLCBzdHJ1Y3QgRlRXKiBmdHdidWYpIHsKK3ZvaWQgc2FuaXR5X2NoZWNrX25mdHcoY29uc3QgY2hhciogZnBhdGgsIGNvbnN0IHN0cnVjdCBzdGF0KiBzYiwgaW50IHRmbGFnLCBzdHJ1Y3QgRlRXKiBmdHdidWYpIHsKICAgc2FuaXR5X2NoZWNrX2Z0dyhmcGF0aCwgc2IsIHRmbGFnKTsKLSAgLy8gZWl0aGVyIHRoZSBwYXJlbnQgZGlyIG9yIHRoZSBmaWxlCi0gIGJvb2wgaXNfZGlyID0gU19JU0RJUihzYi0+c3RfbW9kZSk7Ci0gIEFTU0VSVF9UUlVFKAotICAgIChpc19kaXIgJiYgZnR3YnVmLT5sZXZlbCA9PSAwKSB8fCAoIWlzX2RpciAmJiBmdHdidWYtPmxldmVsID09IDEpKTsKKworICBzaXplX3Qgc2xhc2hfY291bnQgPSAwOworICBjb25zdCBjaGFyKiBwID0gZnBhdGg7CisgIHdoaWxlICgocCA9IHN0cmNocihwICsgMSwgJy8nKSkgIT0gTlVMTCkgeworICAgICsrc2xhc2hfY291bnQ7CisgIH0KKworICBBU1NFUlRfRVEoJy8nLCBmcGF0aFtmdHdidWYtPmJhc2UgLSAxXSkgPDwgZnBhdGg7CisgIEFTU0VSVF9FUShzbGFzaF9jb3VudCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihmdHdidWYtPmxldmVsKSkgPDwgZnBhdGg7CiB9CiAKIGludCBjaGVja19mdHcoY29uc3QgY2hhciogZnBhdGgsIGNvbnN0IHN0cnVjdCBzdGF0KiBzYiwgaW50IHRmbGFnKSB7CkBAIC00NywzOSArNTYsMjggQEAKICAgcmV0dXJuIDA7CiB9CiAKLWludCBjaGVja19uZnR3KAotICBjb25zdCBjaGFyKiBmcGF0aCwgY29uc3Qgc3RydWN0IHN0YXQqIHNiLCBpbnQgdGZsYWcsIHN0cnVjdCBGVFcqIGZ0d2J1ZikgeworaW50IGNoZWNrX25mdHcoY29uc3QgY2hhciogZnBhdGgsIGNvbnN0IHN0cnVjdCBzdGF0KiBzYiwgaW50IHRmbGFnLCBzdHJ1Y3QgRlRXKiBmdHdidWYpIHsKICAgc2FuaXR5X2NoZWNrX25mdHcoZnBhdGgsIHNiLCB0ZmxhZywgZnR3YnVmKTsKICAgcmV0dXJuIDA7CiB9CiAKLWludCBjaGVja19uZnR3NjQoCi0gIGNvbnN0IGNoYXIqIGZwYXRoLCBjb25zdCBzdHJ1Y3Qgc3RhdDY0KiBzYiwgaW50IHRmbGFnLCBzdHJ1Y3QgRlRXKiBmdHdidWYpIHsKLSAgc2FuaXR5X2NoZWNrX25mdHcoZnBhdGgsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc3RydWN0IHN0YXQqPihzYiksCi0gICAgdGZsYWcsIGZ0d2J1Zik7CitpbnQgY2hlY2tfbmZ0dzY0KGNvbnN0IGNoYXIqIGZwYXRoLCBjb25zdCBzdHJ1Y3Qgc3RhdDY0KiBzYiwgaW50IHRmbGFnLCBzdHJ1Y3QgRlRXKiBmdHdidWYpIHsKKyAgc2FuaXR5X2NoZWNrX25mdHcoZnBhdGgsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc3RydWN0IHN0YXQqPihzYiksIHRmbGFnLCBmdHdidWYpOwogICByZXR1cm4gMDsKIH0KIAogVEVTVChmdHcsIGZ0dykgewotICBUZW1wb3JhcnlEaXIgdGQ7Ci0gIFRlbXBvcmFyeUZpbGUgdGYodGQuZGlybmFtZSk7Ci0gIGZ0dyh0ZC5kaXJuYW1lLCBjaGVja19mdHcsIDEpOworICBBU1NFUlRfRVEoMCwgZnR3KCIvc3lzIiwgY2hlY2tfZnR3LCAxMjgpKTsKIH0KIAogVEVTVChmdHcsIGZ0dzY0KSB7Ci0gIFRlbXBvcmFyeURpciB0ZDsKLSAgR2VuZXJpY1RlbXBvcmFyeUZpbGU8bWtzdGVtcDY0PiB0Zih0ZC5kaXJuYW1lKTsKLSAgZnR3NjQodGQuZGlybmFtZSwgY2hlY2tfZnR3NjQsIDEpOworICBBU1NFUlRfRVEoMCwgZnR3NjQoIi9zeXMiLCBjaGVja19mdHc2NCwgMTI4KSk7CiB9CiAKIFRFU1QoZnR3LCBuZnR3KSB7Ci0gIFRlbXBvcmFyeURpciB0ZDsKLSAgVGVtcG9yYXJ5RmlsZSB0Zih0ZC5kaXJuYW1lKTsKLSAgbmZ0dyh0ZC5kaXJuYW1lLCBjaGVja19uZnR3LCAxLCAwKTsKKyAgQVNTRVJUX0VRKDAsIG5mdHcoIi9zeXMiLCBjaGVja19uZnR3LCAxMjgsIDApKTsKIH0KIAogVEVTVChmdHcsIG5mdHc2NCkgewotICBUZW1wb3JhcnlEaXIgdGQ7Ci0gIEdlbmVyaWNUZW1wb3JhcnlGaWxlPG1rc3RlbXA2ND4gdGYodGQuZGlybmFtZSk7Ci0gIG5mdHc2NCh0ZC5kaXJuYW1lLCBjaGVja19uZnR3NjQsIDEsIDApOworICBBU1NFUlRfRVEoMCwgbmZ0dzY0KCIvc3lzIiwgY2hlY2tfbmZ0dzY0LCAxMjgsIDApKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL2dldGF1eHZhbF90ZXN0LmNwcCBiL3Rlc3RzL2dldGF1eHZhbF90ZXN0LmNwcAppbmRleCA1MWM5ZGI4Li5iMzMxMTUwIDEwMDY0NAotLS0gYS90ZXN0cy9nZXRhdXh2YWxfdGVzdC5jcHAKKysrIGIvdGVzdHMvZ2V0YXV4dmFsX3Rlc3QuY3BwCkBAIC0xNSw3ICsxNSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPGZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogLy8gZ2V0YXV4dmFsKCkgd2FzIG9ubHkgYWRkZWQgYXMgb2YgZ2xpYmMgdmVyc2lvbiAyLjE2LgpkaWZmIC0tZ2l0IGEvdGVzdHMvZ3Rlc3RfZXguaCBiL3Rlc3RzL2d0ZXN0X2V4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUxZDg5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2d0ZXN0X2V4LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3RlbXBsYXRlPHR5cGVuYW1lIEY+Cit2b2lkIHRlc3RfaXNvbGF0ZWQoRiB0ZXN0KSB7CisgIGludCBwaWQgPSBmb3JrKCk7CisgIEFTU0VSVF9ORSgtMSwgcGlkKSA8PCBzdHJlcnJvcihlcnJubyk7CisKKyAgaWYgKHBpZCA9PSAwKSB7CisgICAgdGVzdCgpOworICAgIF9leGl0KHRlc3Rpbmc6OlRlc3Q6Okhhc0ZhaWx1cmUoKSA/IDEgOiAwKTsKKyAgfQorCisgIGludCBzdGF0dXM7CisgIEFTU0VSVF9FUShwaWQsIHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSk7CisgIEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTsKKyAgQVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHN0YXR1cykpIDw8ICJGb3JrZWQgdGVzdCBoYXMgZmFpbGVkLCBzZWUgYWJvdmUuLiI7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9pbnR0eXBlc190ZXN0LmNwcCBiL3Rlc3RzL2ludHR5cGVzX3Rlc3QuY3BwCmluZGV4IGU1ODg1MDMuLmRiYmI2ZDQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2ludHR5cGVzX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL2ludHR5cGVzX3Rlc3QuY3BwCkBAIC0xNCwxMSArMTQsMTIgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxpbnR0eXBlcy5oPgogCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKIFRFU1QoaW50dHlwZXMsIG1pc2MpIHsKICAgY2hhciBidWZbNTEyXTsKIApAQCAtNDYsMyArNDcsNTEgQEAKIFRFU1QoaW50dHlwZXMsIHdjc3RvdW1heCkgewogICBBU1NFUlRfRVEoMTIzVSwgd2NzdG91bWF4KEwiMTIzIiwgTlVMTCwgMTApKTsKIH0KKworVEVTVChpbnR0eXBlcywgc3RydG9pbWF4X0VJTlZBTCkgeworICBlcnJubyA9IDA7CisgIHN0cnRvaW1heCgiMTIzIiwgTlVMTCwgLTEpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CisgIGVycm5vID0gMDsKKyAgc3RydG9pbWF4KCIxMjMiLCBOVUxMLCAxKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHN0cnRvaW1heCgiMTIzIiwgTlVMTCwgMzcpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7Cit9CisKK1RFU1QoaW50dHlwZXMsIHN0cnRvdW1heF9FSU5WQUwpIHsKKyAgZXJybm8gPSAwOworICBzdHJ0b3VtYXgoIjEyMyIsIE5VTEwsIC0xKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHN0cnRvdW1heCgiMTIzIiwgTlVMTCwgMSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgZXJybm8gPSAwOworICBzdHJ0b3VtYXgoIjEyMyIsIE5VTEwsIDM3KTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworfQorCitURVNUKGludHR5cGVzLCB3Y3N0b2ltYXhfRUlOVkFMKSB7CisgIGVycm5vID0gMDsKKyAgd2NzdG9pbWF4KEwiMTIzIiwgTlVMTCwgLTEpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CisgIGVycm5vID0gMDsKKyAgd2NzdG9pbWF4KEwiMTIzIiwgTlVMTCwgMSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgZXJybm8gPSAwOworICB3Y3N0b2ltYXgoTCIxMjMiLCBOVUxMLCAzNyk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKK30KKworVEVTVChpbnR0eXBlcywgd2NzdG91bWF4X0VJTlZBTCkgeworICBlcnJubyA9IDA7CisgIHdjc3RvdW1heChMIjEyMyIsIE5VTEwsIC0xKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHdjc3RvdW1heChMIjEyMyIsIE5VTEwsIDEpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CisgIGVycm5vID0gMDsKKyAgd2NzdG91bWF4KEwiMTIzIiwgTlVMTCwgMzcpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9saWJjX2xvZ2dpbmdfdGVzdC5jcHAgYi90ZXN0cy9saWJjX2xvZ2dpbmdfdGVzdC5jcHAKaW5kZXggOTUwMTYxZS4uZDRjZWRlZCAxMDA2NDQKLS0tIGEvdGVzdHMvbGliY19sb2dnaW5nX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL2xpYmNfbG9nZ2luZ190ZXN0LmNwcApAQCAtMTc2LDMgKzE3NiwxNSBAQAogICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKICNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CisKK1RFU1QobGliY19sb2dnaW5nLCBidWZmZXJfb3ZlcnJ1bikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgY2hhciBidWZbQlVGU0laXTsKKyAgQVNTRVJUX0VRKDExLCBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiaGVsbG8gJXMiLCAid29ybGQiKSk7CisgIEVYUEVDVF9TVFJFUSgiaGVsbG8gd29ybGQiLCBidWYpOworICBBU1NFUlRfRVEoMTEsIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1ZiwgOCwgImhlbGxvICVzIiwgIndvcmxkIikpOworICBFWFBFQ1RfU1RSRVEoImhlbGxvIHciLCBidWYpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCit9CmRpZmYgLS1naXQgYS90ZXN0cy9saWJnZW5fdGVzdC5jcHAgYi90ZXN0cy9saWJnZW5fdGVzdC5jcHAKaW5kZXggMzk1OGY4MS4uZTlhNWQ1YyAxMDA2NDQKLS0tIGEvdGVzdHMvbGliZ2VuX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL2xpYmdlbl90ZXN0LmNwcApAQCAtMTQsMTEgKzE0LDEwIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQogI2luY2x1ZGUgPGxpYmdlbi5oPgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiBzdGF0aWMgdm9pZCBUZXN0QmFzZW5hbWUoY29uc3QgY2hhciogaW4sIGNvbnN0IGNoYXIqIGV4cGVjdGVkX291dCkgewogICBjaGFyKiB3cml0YWJsZV9pbiA9IChpbiAhPSBOVUxMKSA/IHN0cmR1cChpbikgOiBOVUxMOwpAQCAtNDAsNyArMzksNyBAQAogCiAvLyBEbyBub3QgdXNlIGJhc2VuYW1lIGFzIHRoZSB0ZXN0IG5hbWUsIGl0J3MgZGVmaW5lZCB0byBhbm90aGVyIHZhbHVlIGluIGdsaWJjCiAvLyBzbyBsZWFkcyB0byBhIGRpZmZlcmVudGx5IG5hbWVkIHRlc3Qgb24gaG9zdCB2ZXJzdXMgdGFyZ2V0IGFyY2hpdGVjdHVyZXMuCi1URVNUKGxpYmdlbiwgYmFzZW5hbWVfc21va2UpIHsKK1RFU1QobGliZ2VuLCBwb3NpeF9iYXNlbmFtZSkgewogICBUZXN0QmFzZW5hbWUoTlVMTCwgIi4iKTsKICAgVGVzdEJhc2VuYW1lKCIiLCAiLiIpOwogICBUZXN0QmFzZW5hbWUoIi91c3IvbGliIiwgImxpYiIpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlicy9BbmRyb2lkLmJ1aWxkLmRsb3Blbl9jaGVja19vcmRlcl9kbHN5bS5tayBiL3Rlc3RzL2xpYnMvQW5kcm9pZC5idWlsZC5kbG9wZW5fY2hlY2tfb3JkZXJfZGxzeW0ubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNkOGMxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpYnMvQW5kcm9pZC5idWlsZC5kbG9wZW5fY2hlY2tfb3JkZXJfZGxzeW0ubWsKQEAgLTAsMCArMSw5MCBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJyYXJpZXMgdXNlZCBieSBkbGZjbiB0ZXN0cyB0byB2ZXJpZnkgY29ycmVjdCBsb2FkIG9yZGVyOgorIyBsaWJ0ZXN0X2NoZWNrX29yZGVyXzJfcmlnaHQuc28KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW1fMl9yaWdodF9zcmNfZmlsZXMgOj0gXAorICAgIGRsb3Blbl9jaGVja19vcmRlcl9kbHN5bV9hbnN3ZXIuY3BwCisKK2xpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW1fMl9yaWdodF9jZmxhZ3MgOj0gLURfX0FOU1dFUj00MgorbW9kdWxlIDo9IGxpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW1fMl9yaWdodAoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxpYnRlc3RfY2hlY2tfb3JkZXJfYS5zbworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGlidGVzdF9jaGVja19vcmRlcl9kbHN5bV9hX3NyY19maWxlcyA6PSBcCisgICAgZGxvcGVuX2NoZWNrX29yZGVyX2Rsc3ltX2Fuc3dlci5jcHAKKworbGlidGVzdF9jaGVja19vcmRlcl9kbHN5bV9hX2NmbGFncyA6PSAtRF9fQU5TV0VSPTEKK21vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX2Rsc3ltX2EKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLnRlc3RsaWIubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBsaWJ0ZXN0X2NoZWNrX29yZGVyX2Iuc28KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW1fYl9zcmNfZmlsZXMgOj0gXAorICAgIGRsb3Blbl9jaGVja19vcmRlcl9kbHN5bV9hbnN3ZXIuY3BwCisKK2xpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW1fYl9jZmxhZ3MgOj0gLURfX0FOU1dFUj0yIC1EX19BTlNXRVIyPTQzCittb2R1bGUgOj0gbGlidGVzdF9jaGVja19vcmRlcl9kbHN5bV9iCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC50ZXN0bGliLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbGlidGVzdF9jaGVja19vcmRlcl9jLnNvCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsaWJ0ZXN0X2NoZWNrX29yZGVyX2Rsc3ltXzNfY19zcmNfZmlsZXMgOj0gXAorICAgIGRsb3Blbl9jaGVja19vcmRlcl9kbHN5bV9hbnN3ZXIuY3BwCisKK2xpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW1fM19jX2NmbGFncyA6PSAtRF9fQU5TV0VSPTMKK21vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX2Rsc3ltXzNfYworaW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxpYnRlc3RfY2hlY2tfb3JkZXJfZC5zbworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGlidGVzdF9jaGVja19vcmRlcl9kbHN5bV9kX3NyY19maWxlcyA6PSBcCisgICBkbG9wZW5fY2hlY2tfb3JkZXJfZGxzeW1fYW5zd2VyLmNwcAorCitsaWJ0ZXN0X2NoZWNrX29yZGVyX2Rsc3ltX2Rfc2hhcmVkX2xpYnJhcmllcyA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX2Rsc3ltX2IKK2xpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW1fZF9jZmxhZ3MgOj0gLURfX0FOU1dFUj00IC1EX19BTlNXRVIyPTQKK21vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX2Rsc3ltX2QKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLnRlc3RsaWIubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBsaWJ0ZXN0X2NoZWNrX29yZGVyX2xlZnQuc28KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW1fMV9sZWZ0X3NyY19maWxlcyA6PSBcCisgICAgZW1wdHkuY3BwCisKK2xpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW1fMV9sZWZ0X3NoYXJlZF9saWJyYXJpZXMgOj0gbGlidGVzdF9jaGVja19vcmRlcl9kbHN5bV9hIGxpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW1fYgorCittb2R1bGUgOj0gbGlidGVzdF9jaGVja19vcmRlcl9kbHN5bV8xX2xlZnQKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLnRlc3RsaWIubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBsaWJ0ZXN0X2NoZWNrX29yZGVyLnNvCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsaWJ0ZXN0X2NoZWNrX29yZGVyX2Rsc3ltX3NyY19maWxlcyA6PSBcCisgICAgZW1wdHkuY3BwCisKK2xpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW1fc2hhcmVkX2xpYnJhcmllcyA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX2Rsc3ltXzFfbGVmdCBcCisgIGxpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW1fMl9yaWdodCBsaWJ0ZXN0X2NoZWNrX29yZGVyX2Rsc3ltXzNfYworCittb2R1bGUgOj0gbGlidGVzdF9jaGVja19vcmRlcl9kbHN5bQoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5tawpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlicy9BbmRyb2lkLmJ1aWxkLmRsb3Blbl9jaGVja19vcmRlcl9yZWxvY19tYWluX2V4ZWN1dGFibGUubWsgYi90ZXN0cy9saWJzL0FuZHJvaWQuYnVpbGQuZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX21haW5fZXhlY3V0YWJsZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzk2OTZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGlicy9BbmRyb2lkLmJ1aWxkLmRsb3Blbl9jaGVja19vcmRlcl9yZWxvY19tYWluX2V4ZWN1dGFibGUubWsKQEAgLTAsMCArMSw1NiBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJyYXJpZXMgdXNlZCBieSBkbGZjbiB0ZXN0cyB0byB2ZXJpZnkgY29ycmVjdCByZWxvY2F0aW9uIG9yZGVyOgorIyBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3Jvb3QqLnNvCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAuLi5fMS5zbyAtIGVtcHR5CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3Jvb3RfMV9zcmNfZmlsZXMgOj0gXAorICAgIGVtcHR5LmNwcAorCisKK21vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3Jvb3RfMQoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5taworCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgLi4uXzIuc28gLSB0aGlzIG9uZSBoYXMgdGhlIGluY29ycmVjdCBhbnN3ZXIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfcm9vdF8yX3NyY19maWxlcyA6PSBcCisgICAgZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX3Jvb3RfYW5zd2VyX2ltcGwuY3BwCisKK2xpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfcm9vdF8yX2NmbGFncyA6PSAtRF9fQU5TV0VSPTIKKworbW9kdWxlIDo9IGxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfcm9vdF8yCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC50ZXN0bGliLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19yb290LnNvIDwtIGltcGxlbWVudHMgZ2V0X2Fuc3dlcjMoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19yb290X3NyY19maWxlcyA6PSBcCisgICAgZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX3Jvb3RfYW5zd2VyLmNwcAorCitsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3Jvb3Rfc2hhcmVkX2xpYnJhcmllcyA6PSBcCisgICAgbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19yb290XzEgXAorICAgIGxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfcm9vdF8yCisKK21vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3Jvb3QKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLnRlc3RsaWIubWsKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnMvQW5kcm9pZC5idWlsZC5kbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3MubWsgYi90ZXN0cy9saWJzL0FuZHJvaWQuYnVpbGQuZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMzVhNTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWJzL0FuZHJvaWQuYnVpbGQuZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzLm1rCkBAIC0wLDAgKzEsMTU4IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpYnJhcmllcyB1c2VkIGJ5IGRsZmNuIHRlc3RzIHRvIHZlcmlmeSBjb3JyZWN0IHJlbG9jYXRpb24gb3JkZXI6CisjIGxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3MqLnNvCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgLi4uXzEuc28gLSBlbXB0eQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc18xX3NyY19maWxlcyA6PSBcCisgICAgZW1wdHkuY3BwCisKK2xpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfMV9zaGFyZWRfbGlicmFyaWVzIDo9IFwKKyAgICBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2EgXAorICAgIGxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfYgorCittb2R1bGUgOj0gbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc18xCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC50ZXN0bGliLm1rCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAuLi5fMi5zbyAtIGVtcHR5CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzXzJfc3JjX2ZpbGVzIDo9IFwKKyAgICBkbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2NfZ3JhbmRjaGlsZF9hbnN3ZXIuY3BwCisKK2xpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfMl9zaGFyZWRfbGlicmFyaWVzIDo9IFwKKyAgICBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2MgXAorICAgIGxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfZAorCitsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzXzJfYWxsb3dfdW5kZWZpbmVkX3N5bWJvbHMgOj0gdHJ1ZQorbW9kdWxlIDo9IGxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfMgoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIC4uLl8zLnNvIC0gZ2V0X2Fuc3dlcjIoKTsKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfM19zcmNfZmlsZXMgOj0gXAorICAgIGRsb3Blbl9jaGVja19vcmRlcl9yZWxvY19uZXBoZXdfYW5zd2VyLmNwcAorCitsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzXzNfc2hhcmVkX2xpYnJhcmllcyA6PSBcCisgICAgbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc19lIFwKKyAgICBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2YKKworbW9kdWxlIDo9IGxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfMworaW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIC4uLl9hLnNvIDwtIGNvcnJlY3QgaW1wbAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc19hX3NyY19maWxlcyA6PSBcCisgICAgZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX2Fuc3dlcl9pbXBsLmNwcAorCitsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2FfY2ZsYWdzIDo9IC1EX19BTlNXRVI9NDIKK21vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2EKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLnRlc3RsaWIubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAuLi5fYi5zbworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc19iX3NyY19maWxlcyA6PSBcCisgICAgZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX2Fuc3dlcl9pbXBsLmNwcAorCitsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2JfY2ZsYWdzIDo9IC1EX19BTlNXRVI9MQorbW9kdWxlIDo9IGxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfYgoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIC4uLl9jLnNvCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2Nfc3JjX2ZpbGVzIDo9IFwKKyAgICBkbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2NfYW5zd2VyX2ltcGwuY3BwCisKK2xpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfY19jZmxhZ3MgOj0gLURfX0FOU1dFUj0yCitsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2Nfc2hhcmVkX2xpYnJhcmllcyA6PSBcCisgICAgbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc19jXzEgXAorICAgIGxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfY18yCisKK21vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2MKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLnRlc3RsaWIubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAuLi5fZC5zbworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc19kX3NyY19maWxlcyA6PSBcCisgICAgZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX2Fuc3dlcl9pbXBsLmNwcAorCitsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2RfY2ZsYWdzIDo9IC1EX19BTlNXRVI9MworbW9kdWxlIDo9IGxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfZAoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIC4uLl9lLnNvCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2Vfc3JjX2ZpbGVzIDo9IFwKKyAgICBkbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2NfYW5zd2VyX2ltcGwuY3BwCisKK2xpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfZV9jZmxhZ3MgOj0gLURfX0FOU1dFUj00Cittb2R1bGUgOj0gbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc19lCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC50ZXN0bGliLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgLi4uX2Yuc28gPC0gZ2V0X2Fuc3dlcigpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2Zfc3JjX2ZpbGVzIDo9IFwKKyAgICBkbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2NfYW5zd2VyLmNwcAorCittb2R1bGUgOj0gbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc19mCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC50ZXN0bGliLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgLi4uX2NfMS5zbworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc19jXzFfc3JjX2ZpbGVzIDo9IFwKKyAgICBkbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2NfZ3JhbmRjaGlsZF9hbnN3ZXJfaW1wbC5jcHAKKworbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc19jXzFfY2ZsYWdzIDo9IC1EX19BTlNXRVI9NDIKK21vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2NfMQoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIC4uLl9jXzIuc28KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfY18yX3NyY19maWxlcyA6PSBcCisgICAgZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX2dyYW5kY2hpbGRfYW5zd2VyX2ltcGwuY3BwCisKK2xpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfY18yX2NmbGFncyA6PSAtRF9fQU5TV0VSPTAKK21vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzX2NfMgoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3Muc28KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3Nfc3JjX2ZpbGVzIDo9IFwKKyAgICBlbXB0eS5jcHAKKworbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc19zaGFyZWRfbGlicmFyaWVzIDo9IFwKKyAgICBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzXzEgXAorICAgIGxpYnRlc3RfY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3NfMiBcCisgICAgbGlidGVzdF9jaGVja19vcmRlcl9yZWxvY19zaWJsaW5nc18zCisKK21vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC50ZXN0bGliLm1rCmRpZmYgLS1naXQgYS90ZXN0cy9saWJzL0FuZHJvaWQubWsgYi90ZXN0cy9saWJzL0FuZHJvaWQubWsKaW5kZXggYWYzZTA3MC4uZmFmYjllMCAxMDA2NDQKLS0tIGEvdGVzdHMvbGlicy9BbmRyb2lkLm1rCisrKyBiL3Rlc3RzL2xpYnMvQW5kcm9pZC5tawpAQCAtMjEsMjUgKzIxLDQxIEBACiBjb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMgOj0gXAogICAgICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tayBcCiAgICAgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLmRsZXh0X3Rlc3R6aXAubWsgXAorICAgICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC5kbG9wZW5fY2hlY2tfb3JkZXJfZGxzeW0ubWsgXAorICAgICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC5kbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2Nfc2libGluZ3MubWsgXAorICAgICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC5kbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2NfbWFpbl9leGVjdXRhYmxlLm1rIFwKICAgICAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5tayBcCiAgICAgJChURVNUX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBMaWJyYXJ5IHVzZWQgYnkgZGxmY24gdGVzdHMuCisjIExpYnJhcnkgdG8gdGVzdCBnbnUtc3R5bGVkIGhhc2gKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGlmbmVxICgkKFRBUkdFVF9BUkNIKSwkKGZpbHRlciAkKFRBUkdFVF9BUkNIKSxtaXBzIG1pcHM2NCkpCi1uby1lbGYtaGFzaC10YWJsZS1saWJyYXJ5X3NyY19maWxlcyA6PSBcCi0gICAgZW1wdHkuY3BwIFwKK2xpYmdudS1oYXNoLXRhYmxlLWxpYnJhcnlfc3JjX2ZpbGVzIDo9IFwKKyAgICBkbGV4dF90ZXN0X2xpYnJhcnkuY3BwIFwKIAotbm8tZWxmLWhhc2gtdGFibGUtbGlicmFyeV9sZGZsYWdzIDo9IFwKK2xpYmdudS1oYXNoLXRhYmxlLWxpYnJhcnlfbGRmbGFncyA6PSBcCiAgICAgLVdsLC0taGFzaC1zdHlsZT1nbnUgXAogCi1tb2R1bGUgOj0gbm8tZWxmLWhhc2gtdGFibGUtbGlicmFyeQorbW9kdWxlIDo9IGxpYmdudS1oYXNoLXRhYmxlLWxpYnJhcnkKIG1vZHVsZV90YWcgOj0gb3B0aW9uYWwKIGluY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLnRlc3RsaWIubWsKIGVuZGlmCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlicmFyeSB0byB0ZXN0IHN5c3Ytc3R5bGVkIGhhc2gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYnN5c3YtaGFzaC10YWJsZS1saWJyYXJ5X3NyY19maWxlcyA6PSBcCisgICAgZGxleHRfdGVzdF9saWJyYXJ5LmNwcCBcCisKK2xpYnN5c3YtaGFzaC10YWJsZS1saWJyYXJ5X2xkZmxhZ3MgOj0gXAorICAgIC1XbCwtLWhhc2gtc3R5bGU9c3lzdiBcCisKK21vZHVsZSA6PSBsaWJzeXN2LWhhc2gtdGFibGUtbGlicmFyeQorbW9kdWxlX3RhZyA6PSBvcHRpb25hbAoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIExpYnJhcnkgdXNlZCBieSBkbGV4dCB0ZXN0cyAtIHdpdGggR05VIFJFTFJPIHByb2dyYW0gaGVhZGVyCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsaWJkbGV4dF90ZXN0X3NyY19maWxlcyA6PSBcCkBAIC0xMjEsNzkgKzEzNyw0OCBAQAogaW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5tawogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIExpYnJhcmllcyB1c2VkIGJ5IGRsZmNuIHRlc3RzIHRvIHZlcmlmeSBjb3JyZWN0IGxvYWQgb3JkZXI6Ci0jIGxpYnRlc3RfY2hlY2tfb3JkZXJfMl9yaWdodC5zbworIyBMaWJyYXJ5IHVzZWQgYnkgZGxmY24gbm9kZWxldGUgdGVzdHMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxpYnRlc3RfY2hlY2tfb3JkZXJfMl9yaWdodF9zcmNfZmlsZXMgOj0gXAotICAgIGRsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAKK2xpYnRlc3Rfbm9kZWxldGVfMV9zcmNfZmlsZXMgOj0gXAorICAgIGRsb3Blbl9ub2RlbGV0ZV8xLmNwcAogCi1saWJ0ZXN0X2NoZWNrX29yZGVyXzJfcmlnaHRfY2ZsYWdzIDo9IC1EX19BTlNXRVI9NDIKLW1vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyXzJfcmlnaHQKK21vZHVsZSA6PSBsaWJ0ZXN0X25vZGVsZXRlXzEKIGluY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLnRlc3RsaWIubWsKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBsaWJ0ZXN0X2NoZWNrX29yZGVyX2Euc28KKyMgTGlicmFyeSB1c2VkIGJ5IGRsZmNuIG5vZGVsZXRlIHRlc3RzCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1saWJ0ZXN0X2NoZWNrX29yZGVyX2Ffc3JjX2ZpbGVzIDo9IFwKLSAgICBkbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwCitsaWJ0ZXN0X25vZGVsZXRlXzJfc3JjX2ZpbGVzIDo9IFwKKyAgICBkbG9wZW5fbm9kZWxldGVfMi5jcHAKIAotbGlidGVzdF9jaGVja19vcmRlcl9hX2NmbGFncyA6PSAtRF9fQU5TV0VSPTEKLW1vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX2EKK21vZHVsZSA6PSBsaWJ0ZXN0X25vZGVsZXRlXzIKIGluY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLnRlc3RsaWIubWsKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBsaWJ0ZXN0X2NoZWNrX29yZGVyX2Iuc28KKyMgTGlicmFyeSB1c2VkIGJ5IGRsZmNuIG5vZGVsZXRlIHRlc3RzCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1saWJ0ZXN0X2NoZWNrX29yZGVyX2Jfc3JjX2ZpbGVzIDo9IFwKLSAgICBkbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwCitsaWJ0ZXN0X25vZGVsZXRlX2R0X2ZsYWdzXzFfc3JjX2ZpbGVzIDo9IFwKKyAgICBkbG9wZW5fbm9kZWxldGVfZHRfZmxhZ3NfMS5jcHAKIAotbGlidGVzdF9jaGVja19vcmRlcl9iX2NmbGFncyA6PSAtRF9fQU5TV0VSPTIgLURfX0FOU1dFUjI9NDMKLW1vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyX2IKK2xpYnRlc3Rfbm9kZWxldGVfZHRfZmxhZ3NfMV9sZGZsYWdzIDo9IC1XbCwteixub2RlbGV0ZQorCittb2R1bGUgOj0gbGlidGVzdF9ub2RlbGV0ZV9kdF9mbGFnc18xCiBpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC50ZXN0bGliLm1rCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgbGlidGVzdF9jaGVja19vcmRlcl9jLnNvCisjIEJ1aWxkIGxpYnRlc3RfY2hlY2tfb3JkZXJfZGxzeW0uc28gd2l0aCBpdHMgZGVwZW5kZW5jaWVzLgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbGlidGVzdF9jaGVja19vcmRlcl8zX2Nfc3JjX2ZpbGVzIDo9IFwKLSAgICBkbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwCi0KLWxpYnRlc3RfY2hlY2tfb3JkZXJfM19jX2NmbGFncyA6PSAtRF9fQU5TV0VSPTMKLW1vZHVsZSA6PSBsaWJ0ZXN0X2NoZWNrX29yZGVyXzNfYwotaW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5taworaW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQuZGxvcGVuX2NoZWNrX29yZGVyX2Rsc3ltLm1rCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgbGlidGVzdF9jaGVja19vcmRlcl9kLnNvCisjIEJ1aWxkIGxpYnRlc3RfY2hlY2tfb3JkZXJfc2libGluZ3Muc28gd2l0aCBpdHMgZGVwZW5kZW5jaWVzLgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbGlidGVzdF9jaGVja19vcmRlcl9kX3NyY19maWxlcyA6PSBcCi0gICBkbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwCi0KLWxpYnRlc3RfY2hlY2tfb3JkZXJfZF9zaGFyZWRfbGlicmFyaWVzIDo9IGxpYnRlc3RfY2hlY2tfb3JkZXJfYgotbGlidGVzdF9jaGVja19vcmRlcl9kX2NmbGFncyA6PSAtRF9fQU5TV0VSPTQgLURfX0FOU1dFUjI9NAotbW9kdWxlIDo9IGxpYnRlc3RfY2hlY2tfb3JkZXJfZAotaW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5taworaW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQuZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX3NpYmxpbmdzLm1rCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgbGlidGVzdF9jaGVja19vcmRlcl9sZWZ0LnNvCisjIEJ1aWxkIGxpYnRlc3RfY2hlY2tfb3JkZXJfcm9vdC5zbyB3aXRoIGl0cyBkZXBlbmRlbmNpZXMuCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1saWJ0ZXN0X2NoZWNrX29yZGVyXzFfbGVmdF9zcmNfZmlsZXMgOj0gXAotICAgIGVtcHR5LmNwcAotCi1saWJ0ZXN0X2NoZWNrX29yZGVyXzFfbGVmdF9zaGFyZWRfbGlicmFyaWVzIDo9IGxpYnRlc3RfY2hlY2tfb3JkZXJfYSBsaWJ0ZXN0X2NoZWNrX29yZGVyX2IKLQotbW9kdWxlIDo9IGxpYnRlc3RfY2hlY2tfb3JkZXJfMV9sZWZ0Ci1pbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC50ZXN0bGliLm1rCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgbGlidGVzdF9jaGVja19vcmRlci5zbwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbGlidGVzdF9jaGVja19vcmRlcl9zcmNfZmlsZXMgOj0gXAotICAgIGVtcHR5LmNwcAotCi1saWJ0ZXN0X2NoZWNrX29yZGVyX3NoYXJlZF9saWJyYXJpZXMgOj0gbGlidGVzdF9jaGVja19vcmRlcl8xX2xlZnQgXAotICBsaWJ0ZXN0X2NoZWNrX29yZGVyXzJfcmlnaHQgbGlidGVzdF9jaGVja19vcmRlcl8zX2MKLQotbW9kdWxlIDo9IGxpYnRlc3RfY2hlY2tfb3JkZXIKLWluY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLnRlc3RsaWIubWsKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLmRsb3Blbl9jaGVja19vcmRlcl9yZWxvY19tYWluX2V4ZWN1dGFibGUubWsKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBMaWJyYXJ5IHdpdGggZGVwZW5kZW5jeSBsb29wIHVzZWQgYnkgZGxmY24gdGVzdHMKQEAgLTI5NSw3ICsyODAsNyBAQAogYnVpbGRfdHlwZSA6PSBob3N0CiBpbmNsdWRlICQoVEVTVF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCiAKLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLCQoZmlsdGVyICQoVEFSR0VUX0FSQ0gpLHg4NiB4ODZfNjQpKQoraWZlcSAoJChUQVJHRVRfQVJDSCksJChmaWx0ZXIgJChUQVJHRVRfQVJDSCksYXJtNjQgeDg2IHg4Nl82NCkpCiAgICAgaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtNjQpCiAgICAgICBsaWJ0ZXN0X2lmdW5jX211bHRpbGliIDo9IDY0CiAgICAgICAjIFRPRE86IFRoaXMgaXMgYSB3b3JrYXJvdW5kIC0gcmVtb3ZlIGl0IG9uY2UgZ2NjCkBAIC0zMDQsNiArMjg5LDcgQEAKICAgICBlbmRpZgogCiAgICAgYnVpbGRfdHlwZSA6PSB0YXJnZXQKKyAgICBsaWJ0ZXN0X2lmdW5jX2NsYW5nX3RhcmdldCA6PSBmYWxzZQogICAgIGluY2x1ZGUgJChURVNUX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKIGVuZGlmCiAKQEAgLTMxOCw2ICszMDQsNDcgQEAKIGluY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLnRlc3RsaWIubWsKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIGxpYnJhcnkgaXMgdXNlZCBieSBkbF9sb2FkIHRlc3QgdG8gY2hlY2sgc3ltYm9sIHByZWVtcHRpbmcKKyMgYnkgbWFpbiBleGVjdXRhYmxlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsaWJkbF9wcmVlbXB0X3Rlc3RfMV9zcmNfZmlsZXMgOj0gZGxfcHJlZW1wdF9saWJyYXJ5XzEuY3BwCisKK21vZHVsZSA6PSBsaWJkbF9wcmVlbXB0X3Rlc3RfMQoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQudGVzdGxpYi5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgbGlicmFyeSBpcyB1c2VkIGJ5IGRsX2xvYWQgdGVzdCB0byBjaGVjayBzeW1ib2wgcHJlZW1wdGluZworIyBieSBsaWJkbF9wcmVlbXB0X3Rlc3RfMS5zbworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGliZGxfcHJlZW1wdF90ZXN0XzJfc3JjX2ZpbGVzIDo9IGRsX3ByZWVtcHRfbGlicmFyeV8yLmNwcAorCittb2R1bGUgOj0gbGliZGxfcHJlZW1wdF90ZXN0XzIKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLnRlc3RsaWIubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJyYXJ5IHdpdGggREZfMV9HTE9CQUwKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYmRsX3Rlc3RfZGZfMV9nbG9iYWxfc3JjX2ZpbGVzIDo9IGRsX2RmXzFfZ2xvYmFsLmNwcAorbGliZGxfdGVzdF9kZl8xX2dsb2JhbF9sZGZsYWdzIDo9IC1mdXNlLWxkPWJmZCAtV2wsLXosZ2xvYmFsCittb2R1bGUgOj0gbGliZGxfdGVzdF9kZl8xX2dsb2JhbAorIyBUT0RPOiByZS1lbmFibGUgYXJtIG9uY2UgYi8xODEzNzUyMCBvciBiLzE4MTMwNDUyIGFyZSBmaXhlZAoraWZlcSAoJChmaWx0ZXIgJChUQVJHRVRfQVJDSCksYXJtIGFybTY0KSwpCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC50ZXN0bGliLm1rCitlbHNlCisjIGJ1aWxkIGl0IGZvciBob3N0IG9ubHkKK2J1aWxkX3RhcmdldCA6PSBTSEFSRURfTElCUkFSWQorYnVpbGRfdHlwZSA6PSBob3N0CitpbmNsdWRlICQoVEVTVF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCitlbmRpZgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpYnJhcnkgdXNpbmcgc3ltYm9sIGZyb20gbGliZGxfdGVzdF9kZl8xX2dsb2JhbAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGlidGVzdF9kbHN5bV9kZl8xX2dsb2JhbF9zcmNfZmlsZXMgOj0gZGxfZGZfMV91c2VfZ2xvYmFsLmNwcAorbW9kdWxlIDo9IGxpYnRlc3RfZGxzeW1fZGZfMV9nbG9iYWwKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLnRlc3RsaWIubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBMaWJyYXJ5IHdpdGggd2VhayBmdW5jdGlvbgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbGlidGVzdF9kbHN5bV93ZWFrX2Z1bmNfc3JjX2ZpbGVzIDo9IFwKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnMvYXRleGl0X3Rlc3RsaWIuY3BwIGIvdGVzdHMvbGlicy9hdGV4aXRfdGVzdGxpYi5jcHAKaW5kZXggZDM1ZjU3Yi4uMzE0ZThkZSAxMDA2NDQKLS0tIGEvdGVzdHMvbGlicy9hdGV4aXRfdGVzdGxpYi5jcHAKKysrIGIvdGVzdHMvbGlicy9hdGV4aXRfdGVzdGxpYi5jcHAKQEAgLTE5LDEyICsxOSwxOSBAQAogI2luY2x1ZGUgPHN0cmluZz4KIAogLy8gdXNlIGV4dGVybmFsIGNvbnRyb2wgbnVtYmVyIGZyb20gbWFpbiB0ZXN0Ci1zdGF0aWMgc3RkOjpzdHJpbmcqIGF0ZXhpdF9zZXF1ZW5jZSA9IE5VTEw7Ci1zdGF0aWMgYm9vbCogYXRleGl0X3ZhbGlkX3RoaXNfaW5fc3RhdGljX2R0b3IgPSBOVUxMOworc3RhdGljIHN0ZDo6c3RyaW5nKiBhdGV4aXRfc2VxdWVuY2UgPSBudWxscHRyOworc3RhdGljIGJvb2wqIGF0ZXhpdF92YWxpZF90aGlzX2luX3N0YXRpY19kdG9yID0gbnVsbHB0cjsKK3N0YXRpYyBib29sKiBhdGV4aXRfYXR0cl9kdG9yX2NhbGxlZCA9IG51bGxwdHI7CisKK3N0YXRpYyBpbnQgY3h4X2N0b3JfY2FsbGVkID0gMDsKK3N0YXRpYyBpbnQgYXR0cl9jdG9yX2NhbGxlZCA9IDA7CiAKIHN0YXRpYyBjbGFzcyBBdEV4aXRTdGF0aWNDbGFzcyB7CiAgcHVibGljOgotICBBdEV4aXRTdGF0aWNDbGFzcygpIHsgZXhwZWN0ZWRfdGhpcyA9IHRoaXM7IH0KKyAgQXRFeGl0U3RhdGljQ2xhc3MoKSB7CisgICAgZXhwZWN0ZWRfdGhpcyA9IHRoaXM7CisgICAgY3h4X2N0b3JfY2FsbGVkID0gMTsKKyAgfQogICB+QXRFeGl0U3RhdGljQ2xhc3MoKSB7CiAgICAgaWYgKGF0ZXhpdF92YWxpZF90aGlzX2luX3N0YXRpY19kdG9yKSB7CiAgICAgICAqYXRleGl0X3ZhbGlkX3RoaXNfaW5fc3RhdGljX2R0b3IgPSAoZXhwZWN0ZWRfdGhpcyA9PSB0aGlzKTsKQEAgLTM1LDcgKzQyLDcgQEAKIAogfSBzdGF0aWNfb2JqOwogCi1jb25zdCBBdEV4aXRTdGF0aWNDbGFzcyogQXRFeGl0U3RhdGljQ2xhc3M6OmV4cGVjdGVkX3RoaXMgPSBOVUxMOworY29uc3QgQXRFeGl0U3RhdGljQ2xhc3MqIEF0RXhpdFN0YXRpY0NsYXNzOjpleHBlY3RlZF90aGlzID0gbnVsbHB0cjsKIAogLy8gNAogc3RhdGljIHZvaWQgYXRleGl0X2hhbmRsZXJfZnJvbV9hdGV4aXRfZnJvbV9hdGV4aXQyKCkgewpAQCAtNjYsMTAgKzczLDMwIEBACiAgICphdGV4aXRfc2VxdWVuY2UgKz0gIiBhIHdhbGwiOwogfQogCi1leHRlcm4gIkMiIHZvaWQgcmVnaXN0ZXJfYXRleGl0KHN0ZDo6c3RyaW5nKiBzZXF1ZW5jZSwgYm9vbCogdmFsaWRfdGhpc19pbl9zdGF0aWNfZHRvcikgeworLy8gYXR0cmlidXRlIGMtdG9yIGFuZCBkLXRvcgorc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSBhdGV4aXRfYXR0cl9jdG9yKCkgeworICBhdHRyX2N0b3JfY2FsbGVkID0gMTsKK30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoZGVzdHJ1Y3RvcikpIGF0ZXhpdF9hdHRyX2R0b3IoKSB7CisgIGlmIChhdGV4aXRfYXR0cl9kdG9yX2NhbGxlZCkgeworICAgICphdGV4aXRfYXR0cl9kdG9yX2NhbGxlZCA9IHRydWU7CisgIH0KK30KKworZXh0ZXJuICJDIiB2b2lkIHJlZ2lzdGVyX2F0ZXhpdChzdGQ6OnN0cmluZyogc2VxdWVuY2UsIGJvb2wqIHZhbGlkX3RoaXNfaW5fc3RhdGljX2R0b3IsIGJvb2wqIGF0dHJfZHRvcl9jYWxsZWQpIHsKICAgYXRleGl0X3NlcXVlbmNlID0gc2VxdWVuY2U7CiAgIGF0ZXhpdF92YWxpZF90aGlzX2luX3N0YXRpY19kdG9yID0gdmFsaWRfdGhpc19pbl9zdGF0aWNfZHRvcjsKKyAgYXRleGl0X2F0dHJfZHRvcl9jYWxsZWQgPSBhdHRyX2R0b3JfY2FsbGVkOwogICBhdGV4aXQoYXRleGl0X2hhbmRsZXJfcmVndWxhcik7CiAgIGF0ZXhpdChhdGV4aXRfaGFuZGxlcl93aXRoX2F0ZXhpdCk7CiB9CiAKK2V4dGVybiAiQyIgaW50IGdldF9jeHhfY3Rvcl9jYWxsZWQoKSB7CisgIHJldHVybiBjeHhfY3Rvcl9jYWxsZWQ7Cit9CisKK2V4dGVybiAiQyIgaW50IGdldF9hdHRyX2N0b3JfY2FsbGVkKCkgeworICByZXR1cm4gYXR0cl9jdG9yX2NhbGxlZDsKK30KKwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwIGIvdGVzdHMvbGlicy9kbF9kZl8xX2dsb2JhbC5jcHAKc2ltaWxhcml0eSBpbmRleCA4MCUKY29weSBmcm9tIHRlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcApjb3B5IHRvIHRlc3RzL2xpYnMvZGxfZGZfMV9nbG9iYWwuY3BwCmluZGV4IGE0ZDc1MDQuLjM5ODU2ZmQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcAorKysgYi90ZXN0cy9saWJzL2RsX2RmXzFfZ2xvYmFsLmNwcApAQCAtMTQsMTIgKzE0LDYgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLWV4dGVybiAiQyIgaW50IGRsb3Blbl90ZXN0X2dldF9hbnN3ZXIoKSB7Ci0gIHJldHVybiBfX0FOU1dFUjsKK2V4dGVybiAiQyIgaW50IGRsX2RmXzFfZ2xvYmFsX2dldF9hbnN3ZXJfaW1wbCgpIHsKKyAgcmV0dXJuIDQyOwogfQotCi0jaWZkZWYgX19BTlNXRVIyCi1leHRlcm4gIkMiIGludCBkbG9wZW5fdGVzdF9nZXRfYW5zd2VyMigpIHsKLSAgcmV0dXJuIF9fQU5TV0VSMjsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwIGIvdGVzdHMvbGlicy9kbF9kZl8xX3VzZV9nbG9iYWwuY3BwCnNpbWlsYXJpdHkgaW5kZXggNzglCmNvcHkgZnJvbSB0ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAKY29weSB0byB0ZXN0cy9saWJzL2RsX2RmXzFfdXNlX2dsb2JhbC5jcHAKaW5kZXggYTRkNzUwNC4uZTE0OTEwZCAxMDA2NDQKLS0tIGEvdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwCisrKyBiL3Rlc3RzL2xpYnMvZGxfZGZfMV91c2VfZ2xvYmFsLmNwcApAQCAtMTQsMTIgKzE0LDEwIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi1leHRlcm4gIkMiIGludCBkbG9wZW5fdGVzdF9nZXRfYW5zd2VyKCkgewotICByZXR1cm4gX19BTlNXRVI7CitleHRlcm4gIkMiIGludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgZGxfZGZfMV9nbG9iYWxfZ2V0X2Fuc3dlcl9pbXBsKCkgeworICByZXR1cm4gMDsKIH0KIAotI2lmZGVmIF9fQU5TV0VSMgotZXh0ZXJuICJDIiBpbnQgZGxvcGVuX3Rlc3RfZ2V0X2Fuc3dlcjIoKSB7Ci0gIHJldHVybiBfX0FOU1dFUjI7CitleHRlcm4gIkMiIGludCBkbF9kZl8xX2dsb2JhbF9nZXRfYW5zd2VyKCkgeworICByZXR1cm4gZGxfZGZfMV9nbG9iYWxfZ2V0X2Fuc3dlcl9pbXBsKCk7CiB9Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnMvZGxfcHJlZW1wdF9saWJyYXJ5XzEuY3BwIGIvdGVzdHMvbGlicy9kbF9wcmVlbXB0X2xpYnJhcnlfMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkODFkNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpYnMvZGxfcHJlZW1wdF9saWJyYXJ5XzEuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyBUaGlzIG9uZSBzaG91bGQgYmUgcHJlZW1wdGVkIGJ5IHRoZSBmdW5jdGlvbgorLy8gZGVmaW5lZCBpbiB0aGUgbWFpbiBleGVjdXRhYmxlLgorZXh0ZXJuICJDIiBpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpIG1haW5fZ2xvYmFsX2RlZmF1bHRfc2VyaWFsKCkgeworICByZXR1cm4gMjcxNjA1NzsKK30KKworLy8gRXZlbiB0aG91Z2ggdGhpcyBvbmUgaXMgZGVmaW5lZCBieSB0aGUgbWFpbgorLy8gZXhlY3V0YWJsZSBpdCBzaG91bGQgbm90IGJlIHByZWVtcHRlZAorLy8gYmVjYXVzZSBvZiBwcm90ZWN0ZWQgdmlzaWJpbGl0eQorZXh0ZXJuICJDIiBpbnQgX19hdHRyaWJ1dGVfXygod2VhaywgdmlzaWJpbGl0eSgicHJvdGVjdGVkIikpKSBtYWluX2dsb2JhbF9wcm90ZWN0ZWRfc2VyaWFsKCkgeworICByZXR1cm4gMzM3MDMxODsKK30KKworZXh0ZXJuICJDIiBpbnQgbWFpbl9nbG9iYWxfZGVmYXVsdF9nZXRfc2VyaWFsKCkgeworICByZXR1cm4gbWFpbl9nbG9iYWxfZGVmYXVsdF9zZXJpYWwoKTsKK30KKworZXh0ZXJuICJDIiBpbnQgbWFpbl9nbG9iYWxfcHJvdGVjdGVkX2dldF9zZXJpYWwoKSB7CisgIHJldHVybiBtYWluX2dsb2JhbF9wcm90ZWN0ZWRfc2VyaWFsKCk7Cit9CisKKy8vIFRyeWluZyB0byBwcmVlbXB0IGZ1bmN0aW9ucyBmcm9tIGEgRFRfTkVFREVEIC5zbworZXh0ZXJuICJDIiBpbnQgbGliX2dsb2JhbF9kZWZhdWx0X3NlcmlhbCgpIHsKKyAgcmV0dXJuIDMzNzAzMTg7Cit9CisKK2V4dGVybiAiQyIgaW50IGxpYl9nbG9iYWxfcHJvdGVjdGVkX3NlcmlhbCgpIHsKKyAgcmV0dXJuIDI3MTYwNTc7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9saWJzL2RsX3ByZWVtcHRfbGlicmFyeV8yLmNwcCBiL3Rlc3RzL2xpYnMvZGxfcHJlZW1wdF9saWJyYXJ5XzIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZjlhMTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWJzL2RsX3ByZWVtcHRfbGlicmFyeV8yLmNwcApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8gVGhpcyBvbmUgc2hvdWxkIGJlIHByZWVtcHRlZCBieSB0aGUgZnVuY3Rpb24KKy8vIGRlZmluZWQgaW4gbGliZGxfcHJlZW1wdF90ZXN0XzEuc28KK2V4dGVybiAiQyIgaW50IF9fYXR0cmlidXRlX18oKHdlYWspKSBsaWJfZ2xvYmFsX2RlZmF1bHRfc2VyaWFsKCkgeworICByZXR1cm4gMjcxNjA1NzsKK30KKworLy8gRXZlbiB0aG91Z2ggdGhpcyBvbmUgaXMgZGVmaW5lZCBieQorLy8gbGliZGxfcHJlZW1wdF90ZXN0XzEuc28gaXQgc2hvdWxkIG5vdCBiZQorLy8gcHJlZW1wdGVkIGJlY2F1c2Ugb2YgcHJvdGVjdGVkIHZpc2liaWxpdHkKK2V4dGVybiAiQyIgaW50IF9fYXR0cmlidXRlX18oKHdlYWssdmlzaWJpbGl0eSgicHJvdGVjdGVkIikpKSBsaWJfZ2xvYmFsX3Byb3RlY3RlZF9zZXJpYWwoKSB7CisgIHJldHVybiAzMzcwMzE4OworfQorCitleHRlcm4gIkMiIGludCBsaWJfZ2xvYmFsX2RlZmF1bHRfZ2V0X3NlcmlhbCgpIHsKKyAgcmV0dXJuIGxpYl9nbG9iYWxfZGVmYXVsdF9zZXJpYWwoKTsKK30KKworZXh0ZXJuICJDIiBpbnQgbGliX2dsb2JhbF9wcm90ZWN0ZWRfZ2V0X3NlcmlhbCgpIHsKKyAgcmV0dXJuIGxpYl9nbG9iYWxfcHJvdGVjdGVkX3NlcmlhbCgpOworfQorCmRpZmYgLS1naXQgYS90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAgYi90ZXN0cy9saWJzL2Rsb3Blbl9jaGVja19vcmRlcl9kbHN5bV9hbnN3ZXIuY3BwCnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIHRlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcApyZW5hbWUgdG8gdGVzdHMvbGlicy9kbG9wZW5fY2hlY2tfb3JkZXJfZGxzeW1fYW5zd2VyLmNwcAppbmRleCBhNGQ3NTA0Li4yYWU2Y2Y3IDEwMDY0NAotLS0gYS90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAKKysrIGIvdGVzdHMvbGlicy9kbG9wZW5fY2hlY2tfb3JkZXJfZGxzeW1fYW5zd2VyLmNwcApAQCAtMTQsMTIgKzE0LDEyIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi1leHRlcm4gIkMiIGludCBkbG9wZW5fdGVzdF9nZXRfYW5zd2VyKCkgeworZXh0ZXJuICJDIiBpbnQgY2hlY2tfb3JkZXJfZGxzeW1fZ2V0X2Fuc3dlcigpIHsKICAgcmV0dXJuIF9fQU5TV0VSOwogfQogCiAjaWZkZWYgX19BTlNXRVIyCi1leHRlcm4gIkMiIGludCBkbG9wZW5fdGVzdF9nZXRfYW5zd2VyMigpIHsKK2V4dGVybiAiQyIgaW50IGNoZWNrX29yZGVyX2Rsc3ltX2dldF9hbnN3ZXIyKCkgewogICByZXR1cm4gX19BTlNXRVIyOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAgYi90ZXN0cy9saWJzL2Rsb3Blbl9jaGVja19vcmRlcl9yZWxvY19hbnN3ZXIuY3BwCnNpbWlsYXJpdHkgaW5kZXggNzclCmNvcHkgZnJvbSB0ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAKY29weSB0byB0ZXN0cy9saWJzL2Rsb3Blbl9jaGVja19vcmRlcl9yZWxvY19hbnN3ZXIuY3BwCmluZGV4IGE0ZDc1MDQuLjAzNjY3MGIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcAorKysgYi90ZXN0cy9saWJzL2Rsb3Blbl9jaGVja19vcmRlcl9yZWxvY19hbnN3ZXIuY3BwCkBAIC0xNCwxMiArMTQsMTAgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLWV4dGVybiAiQyIgaW50IGRsb3Blbl90ZXN0X2dldF9hbnN3ZXIoKSB7Ci0gIHJldHVybiBfX0FOU1dFUjsKK2V4dGVybiAiQyIgaW50IF9fYXR0cmlidXRlX18oKHdlYWspKSBjaGVja19vcmRlcl9yZWxvY19nZXRfYW5zd2VyX2ltcGwoKSB7CisgIHJldHVybiAwOwogfQogCi0jaWZkZWYgX19BTlNXRVIyCi1leHRlcm4gIkMiIGludCBkbG9wZW5fdGVzdF9nZXRfYW5zd2VyMigpIHsKLSAgcmV0dXJuIF9fQU5TV0VSMjsKK2V4dGVybiAiQyIgaW50IGNoZWNrX29yZGVyX3JlbG9jX2dldF9hbnN3ZXIoKSB7CisgIHJldHVybiBjaGVja19vcmRlcl9yZWxvY19nZXRfYW5zd2VyX2ltcGwoKTsKIH0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwIGIvdGVzdHMvbGlicy9kbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2NfYW5zd2VyX2ltcGwuY3BwCnNpbWlsYXJpdHkgaW5kZXggODIlCmNvcHkgZnJvbSB0ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAKY29weSB0byB0ZXN0cy9saWJzL2Rsb3Blbl9jaGVja19vcmRlcl9yZWxvY19hbnN3ZXJfaW1wbC5jcHAKaW5kZXggYTRkNzUwNC4uMzI0YjkwNSAxMDA2NDQKLS0tIGEvdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwCisrKyBiL3Rlc3RzL2xpYnMvZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX2Fuc3dlcl9pbXBsLmNwcApAQCAtMTQsMTIgKzE0LDYgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLWV4dGVybiAiQyIgaW50IGRsb3Blbl90ZXN0X2dldF9hbnN3ZXIoKSB7CitleHRlcm4gIkMiIGludCBjaGVja19vcmRlcl9yZWxvY19nZXRfYW5zd2VyX2ltcGwoKSB7CiAgIHJldHVybiBfX0FOU1dFUjsKIH0KLQotI2lmZGVmIF9fQU5TV0VSMgotZXh0ZXJuICJDIiBpbnQgZGxvcGVuX3Rlc3RfZ2V0X2Fuc3dlcjIoKSB7Ci0gIHJldHVybiBfX0FOU1dFUjI7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcCBiL3Rlc3RzL2xpYnMvZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX2dyYW5kY2hpbGRfYW5zd2VyLmNwcApzaW1pbGFyaXR5IGluZGV4IDc3JQpjb3B5IGZyb20gdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwCmNvcHkgdG8gdGVzdHMvbGlicy9kbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2NfZ3JhbmRjaGlsZF9hbnN3ZXIuY3BwCmluZGV4IGE0ZDc1MDQuLmFmYjVmMmMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcAorKysgYi90ZXN0cy9saWJzL2Rsb3Blbl9jaGVja19vcmRlcl9yZWxvY19ncmFuZGNoaWxkX2Fuc3dlci5jcHAKQEAgLTE0LDEyICsxNCw5IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi1leHRlcm4gIkMiIGludCBkbG9wZW5fdGVzdF9nZXRfYW5zd2VyKCkgewotICByZXR1cm4gX19BTlNXRVI7CitleHRlcm4gIkMiIGludCBjaGVja19vcmRlcl9yZWxvY19ncmFuZGNoaWxkX2dldF9hbnN3ZXJfaW1wbCgpOworCitleHRlcm4gIkMiIGludCBjaGVja19vcmRlcl9yZWxvY19ncmFuZGNoaWxkX2dldF9hbnN3ZXIoKSB7CisgIHJldHVybiBjaGVja19vcmRlcl9yZWxvY19ncmFuZGNoaWxkX2dldF9hbnN3ZXJfaW1wbCgpOwogfQogCi0jaWZkZWYgX19BTlNXRVIyCi1leHRlcm4gIkMiIGludCBkbG9wZW5fdGVzdF9nZXRfYW5zd2VyMigpIHsKLSAgcmV0dXJuIF9fQU5TV0VSMjsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwIGIvdGVzdHMvbGlicy9kbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2NfZ3JhbmRjaGlsZF9hbnN3ZXJfaW1wbC5jcHAKc2ltaWxhcml0eSBpbmRleCA4MiUKY29weSBmcm9tIHRlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcApjb3B5IHRvIHRlc3RzL2xpYnMvZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX2dyYW5kY2hpbGRfYW5zd2VyX2ltcGwuY3BwCmluZGV4IGE0ZDc1MDQuLjMyZDJiMjQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcAorKysgYi90ZXN0cy9saWJzL2Rsb3Blbl9jaGVja19vcmRlcl9yZWxvY19ncmFuZGNoaWxkX2Fuc3dlcl9pbXBsLmNwcApAQCAtMTQsMTIgKzE0LDYgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLWV4dGVybiAiQyIgaW50IGRsb3Blbl90ZXN0X2dldF9hbnN3ZXIoKSB7CitleHRlcm4gIkMiIGludCBjaGVja19vcmRlcl9yZWxvY19ncmFuZGNoaWxkX2dldF9hbnN3ZXJfaW1wbCgpIHsKICAgcmV0dXJuIF9fQU5TV0VSOwogfQotCi0jaWZkZWYgX19BTlNXRVIyCi1leHRlcm4gIkMiIGludCBkbG9wZW5fdGVzdF9nZXRfYW5zd2VyMigpIHsKLSAgcmV0dXJuIF9fQU5TV0VSMjsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlicy9kbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2NfbmVwaGV3X2Fuc3dlci5jcHAgYi90ZXN0cy9saWJzL2Rsb3Blbl9jaGVja19vcmRlcl9yZWxvY19uZXBoZXdfYW5zd2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmQxZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGlicy9kbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2NfbmVwaGV3X2Fuc3dlci5jcHAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2V4dGVybiAiQyIgaW50IGNoZWNrX29yZGVyX3JlbG9jX2dldF9hbnN3ZXJfaW1wbCgpOworCitleHRlcm4gIkMiIGludCBjaGVja19vcmRlcl9yZWxvY19uZXBoZXdfZ2V0X2Fuc3dlcigpIHsKKyAgcmV0dXJuIGNoZWNrX29yZGVyX3JlbG9jX2dldF9hbnN3ZXJfaW1wbCgpOworfQorCituYW1lc3BhY2UgeworLy8gVGhlIGQtdG9yIGZvciB0aGlzIGNsYXNzIGlzIGNhbGxlZCBvbiBkbGNsb3NlKCkgLT4gX19vbl9kbGNsb3NlKCkgLT4gX19jeGFfZmluYWxpemUoKQorLy8gV2UgdXNlIGl0IHRvIGRldGVjdCBjYWxscyB0byBwcmVtYXR1cmVseSB1bm1hcHBlZCBsaWJyYXJpZXMgZHVyaW5nIGRsY2xvc2UuCisvLyBTZWUgYWxzbyBiLzE4MzM4ODg4CitjbGFzcyBDYWxsTmVwaGV3SW5EdG9yIHsKKyBwdWJsaWM6CisgIH5DYWxsTmVwaGV3SW5EdG9yKCkgeworICAgIGNoZWNrX29yZGVyX3JlbG9jX2dldF9hbnN3ZXJfaW1wbCgpOworICB9Cit9IGluc3RhbmNlOworfTsKKworZXh0ZXJuICJDIiB2b2lkKiBnZXRfaW5zdGFuY2UoKSB7CisgIHJldHVybiAmaW5zdGFuY2U7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAgYi90ZXN0cy9saWJzL2Rsb3Blbl9jaGVja19vcmRlcl9yZWxvY19yb290X2Fuc3dlci5jcHAKc2ltaWxhcml0eSBpbmRleCA3OSUKY29weSBmcm9tIHRlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcApjb3B5IHRvIHRlc3RzL2xpYnMvZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX3Jvb3RfYW5zd2VyLmNwcAppbmRleCBhNGQ3NTA0Li5iMjFhYmQ3IDEwMDY0NAotLS0gYS90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAKKysrIGIvdGVzdHMvbGlicy9kbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2Nfcm9vdF9hbnN3ZXIuY3BwCkBAIC0xNCwxMiArMTQsOCBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotZXh0ZXJuICJDIiBpbnQgZGxvcGVuX3Rlc3RfZ2V0X2Fuc3dlcigpIHsKLSAgcmV0dXJuIF9fQU5TV0VSOwotfQorZXh0ZXJuICJDIiBpbnQgY2hlY2tfb3JkZXJfcmVsb2Nfcm9vdF9nZXRfYW5zd2VyX2ltcGwoKTsKIAotI2lmZGVmIF9fQU5TV0VSMgotZXh0ZXJuICJDIiBpbnQgZGxvcGVuX3Rlc3RfZ2V0X2Fuc3dlcjIoKSB7Ci0gIHJldHVybiBfX0FOU1dFUjI7CitleHRlcm4gIkMiIGludCBjaGVja19vcmRlcl9yZWxvY19yb290X2dldF9hbnN3ZXIoKSB7CisgIHJldHVybiBjaGVja19vcmRlcl9yZWxvY19yb290X2dldF9hbnN3ZXJfaW1wbCgpOwogfQotI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAgYi90ZXN0cy9saWJzL2Rsb3Blbl9jaGVja19vcmRlcl9yZWxvY19yb290X2Fuc3dlcl9pbXBsLmNwcApzaW1pbGFyaXR5IGluZGV4IDgyJQpjb3B5IGZyb20gdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwCmNvcHkgdG8gdGVzdHMvbGlicy9kbG9wZW5fY2hlY2tfb3JkZXJfcmVsb2Nfcm9vdF9hbnN3ZXJfaW1wbC5jcHAKaW5kZXggYTRkNzUwNC4uMjVmYjlhYyAxMDA2NDQKLS0tIGEvdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwCisrKyBiL3Rlc3RzL2xpYnMvZGxvcGVuX2NoZWNrX29yZGVyX3JlbG9jX3Jvb3RfYW5zd2VyX2ltcGwuY3BwCkBAIC0xNCwxMiArMTQsNiBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotZXh0ZXJuICJDIiBpbnQgZGxvcGVuX3Rlc3RfZ2V0X2Fuc3dlcigpIHsKK2V4dGVybiAiQyIgaW50IGNoZWNrX29yZGVyX3JlbG9jX3Jvb3RfZ2V0X2Fuc3dlcl9pbXBsKCkgewogICByZXR1cm4gX19BTlNXRVI7CiB9Ci0KLSNpZmRlZiBfX0FOU1dFUjIKLWV4dGVybiAiQyIgaW50IGRsb3Blbl90ZXN0X2dldF9hbnN3ZXIyKCkgewotICByZXR1cm4gX19BTlNXRVIyOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAgYi90ZXN0cy9saWJzL2Rsb3Blbl9ub2RlbGV0ZV8xLmNwcApzaW1pbGFyaXR5IGluZGV4IDY0JQpjb3B5IGZyb20gdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwCmNvcHkgdG8gdGVzdHMvbGlicy9kbG9wZW5fbm9kZWxldGVfMS5jcHAKaW5kZXggYTRkNzUwNC4uOTQzODk3OCAxMDA2NDQKLS0tIGEvdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwCisrKyBiL3Rlc3RzL2xpYnMvZGxvcGVuX25vZGVsZXRlXzEuY3BwCkBAIC0xNCwxMiArMTQsMTggQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLWV4dGVybiAiQyIgaW50IGRsb3Blbl90ZXN0X2dldF9hbnN3ZXIoKSB7Ci0gIHJldHVybiBfX0FOU1dFUjsKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwordWludDMyX3QgZGxvcGVuX25vZGVsZXRlXzFfdGF4aWNhYl9udW1iZXIgPSAxNzI5Oworc3RhdGljIGJvb2wqIHVubG9hZF9mbGFnX3B0ciA9IG51bGxwdHI7CisKK2V4dGVybiAiQyIgdm9pZCBkbG9wZW5fbm9kZWxldGVfMV9zZXRfdW5sb2FkX2ZsYWdfcHRyKGJvb2wqIHB0cikgeworICB1bmxvYWRfZmxhZ19wdHIgPSBwdHI7CiB9CiAKLSNpZmRlZiBfX0FOU1dFUjIKLWV4dGVybiAiQyIgaW50IGRsb3Blbl90ZXN0X2dldF9hbnN3ZXIyKCkgewotICByZXR1cm4gX19BTlNXRVIyOworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoZGVzdHJ1Y3RvcikpIHVubG9hZF9ndWFyZCgpIHsKKyAgaWYgKHVubG9hZF9mbGFnX3B0ciAhPSBudWxscHRyKSB7CisgICAgKnVubG9hZF9mbGFnX3B0ciA9IHRydWU7CisgIH0KIH0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9hbnN3ZXIuY3BwIGIvdGVzdHMvbGlicy9kbG9wZW5fbm9kZWxldGVfMi5jcHAKc2ltaWxhcml0eSBpbmRleCA2NCUKY29weSBmcm9tIHRlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcApjb3B5IHRvIHRlc3RzL2xpYnMvZGxvcGVuX25vZGVsZXRlXzIuY3BwCmluZGV4IGE0ZDc1MDQuLmI1YWI1YzEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcAorKysgYi90ZXN0cy9saWJzL2Rsb3Blbl9ub2RlbGV0ZV8yLmNwcApAQCAtMTQsMTIgKzE0LDE4IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi1leHRlcm4gIkMiIGludCBkbG9wZW5fdGVzdF9nZXRfYW5zd2VyKCkgewotICByZXR1cm4gX19BTlNXRVI7CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3VpbnQzMl90IGRsb3Blbl9ub2RlbGV0ZV8yX3RheGljYWJfbnVtYmVyID0gMTcyOTsKK3N0YXRpYyBib29sKiB1bmxvYWRfZmxhZ19wdHIgPSBudWxscHRyOworCitleHRlcm4gIkMiIHZvaWQgZGxvcGVuX25vZGVsZXRlXzJfc2V0X3VubG9hZF9mbGFnX3B0cihib29sKiBwdHIpIHsKKyAgdW5sb2FkX2ZsYWdfcHRyID0gcHRyOwogfQogCi0jaWZkZWYgX19BTlNXRVIyCi1leHRlcm4gIkMiIGludCBkbG9wZW5fdGVzdF9nZXRfYW5zd2VyMigpIHsKLSAgcmV0dXJuIF9fQU5TV0VSMjsKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKGRlc3RydWN0b3IpKSB1bmxvYWRfZ3VhcmQoKSB7CisgIGlmICh1bmxvYWRfZmxhZ19wdHIgIT0gbnVsbHB0cikgeworICAgICp1bmxvYWRfZmxhZ19wdHIgPSB0cnVlOworICB9CiB9Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcCBiL3Rlc3RzL2xpYnMvZGxvcGVuX25vZGVsZXRlX2R0X2ZsYWdzXzEuY3BwCnNpbWlsYXJpdHkgaW5kZXggNjYlCmNvcHkgZnJvbSB0ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAKY29weSB0byB0ZXN0cy9saWJzL2Rsb3Blbl9ub2RlbGV0ZV9kdF9mbGFnc18xLmNwcAppbmRleCBhNGQ3NTA0Li4zOWMwYTdlIDEwMDY0NAotLS0gYS90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAKKysrIGIvdGVzdHMvbGlicy9kbG9wZW5fbm9kZWxldGVfZHRfZmxhZ3NfMS5jcHAKQEAgLTE0LDEyICsxNCwxNyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotZXh0ZXJuICJDIiBpbnQgZGxvcGVuX3Rlc3RfZ2V0X2Fuc3dlcigpIHsKLSAgcmV0dXJuIF9fQU5TV0VSOworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitzdGF0aWMgYm9vbCogdW5sb2FkX2ZsYWdfcHRyID0gbnVsbHB0cjsKKworZXh0ZXJuICJDIiB2b2lkIGRsb3Blbl9ub2RlbGV0ZV9kdF9mbGFnc18xX3NldF91bmxvYWRfZmxhZ19wdHIoYm9vbCogcHRyKSB7CisgIHVubG9hZF9mbGFnX3B0ciA9IHB0cjsKIH0KIAotI2lmZGVmIF9fQU5TV0VSMgotZXh0ZXJuICJDIiBpbnQgZGxvcGVuX3Rlc3RfZ2V0X2Fuc3dlcjIoKSB7Ci0gIHJldHVybiBfX0FOU1dFUjI7CitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChkZXN0cnVjdG9yKSkgdW5sb2FkX2d1YXJkKCkgeworICBpZiAodW5sb2FkX2ZsYWdfcHRyICE9IG51bGxwdHIpIHsKKyAgICAqdW5sb2FkX2ZsYWdfcHRyID0gdHJ1ZTsKKyAgfQogfQotI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX3NpbXBsZS5jcHAgYi90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX3NpbXBsZS5jcHAKaW5kZXggYmY3NTBiMi4uMzIyNjk1NSAxMDA2NDQKLS0tIGEvdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9zaW1wbGUuY3BwCisrKyBiL3Rlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfc2ltcGxlLmNwcApAQCAtMTksNiArMTksNiBAQAogCiB1aW50MzJfdCBkbG9wZW5fdGVzdGxpYl90YXhpY2FiX251bWJlciA9IDE3Mjk7CiAKLWJvb2wgZGxvcGVuX3Rlc3RsaWJfc2ltcGxlX2Z1bmMoKSB7CitleHRlcm4gIkMiIGJvb2wgZGxvcGVuX3Rlc3RsaWJfc2ltcGxlX2Z1bmMoKSB7CiAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbG9jYWxlX3Rlc3QuY3BwIGIvdGVzdHMvbG9jYWxlX3Rlc3QuY3BwCmluZGV4IDdlYzYwN2EuLmYzMDhhZjUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xvY2FsZV90ZXN0LmNwcAorKysgYi90ZXN0cy9sb2NhbGVfdGVzdC5jcHAKQEAgLTcxLDIwICs3MSwzMCBAQAogICBFWFBFQ1RfRVEoRU5PRU5ULCBlcnJubyk7IC8vIFBPU0lYIHNwZWNpZmllZCwgbm90IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCEKIH0KIAotVEVTVChsb2NhbGUsIG5ld2xvY2FsZSkgeworVEVTVChsb2NhbGUsIG5ld2xvY2FsZV9pbnZhbGlkX2NhdGVnb3J5X21hc2spIHsKICAgZXJybm8gPSAwOwogICBFWFBFQ1RfRVEoMCwgbmV3bG9jYWxlKDEgPDwgMjAsICJDIiwgMCkpOwogICBFWFBFQ1RfRVEoRUlOVkFMLCBlcnJubyk7Cit9CiAKLSAgbG9jYWxlX3QgbCA9IG5ld2xvY2FsZShMQ19BTEwsICJDIiwgMCk7Ci0gIEFTU0VSVF9UUlVFKGwgIT0gTlVMTCk7Ci0gIGZyZWVsb2NhbGUobCk7CitURVNUKGxvY2FsZSwgbmV3bG9jYWxlX05VTExfbG9jYWxlX25hbWUpIHsKKyAgZXJybm8gPSAwOworICBFWFBFQ1RfRVEoMCwgbmV3bG9jYWxlKExDX0FMTCwgTlVMTCwgMCkpOworICBFWFBFQ1RfRVEoRUlOVkFMLCBlcnJubyk7Cit9CiAKK1RFU1QobG9jYWxlLCBuZXdsb2NhbGVfYmFkX2xvY2FsZV9uYW1lKSB7CiAgIGVycm5vID0gMDsKICAgRVhQRUNUX0VRKDAsIG5ld2xvY2FsZShMQ19BTEwsICJ0aGlzLWlzLW5vdC1hLWxvY2FsZSIsIDApKTsKICAgRVhQRUNUX0VRKEVOT0VOVCwgZXJybm8pOyAvLyBQT1NJWCBzcGVjaWZpZWQsIG5vdCBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwhCiB9CiAKK1RFU1QobG9jYWxlLCBuZXdsb2NhbGUpIHsKKyAgbG9jYWxlX3QgbCA9IG5ld2xvY2FsZShMQ19BTEwsICJDIiwgMCk7CisgIEFTU0VSVF9UUlVFKGwgIT0gTlVMTCk7CisgIGZyZWVsb2NhbGUobCk7Cit9CisKIFRFU1QobG9jYWxlLCBkdXBsb2NhbGUpIHsKICAgbG9jYWxlX3QgY2xvbmVkX2dsb2JhbCA9IGR1cGxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKICAgQVNTRVJUX1RSVUUoY2xvbmVkX2dsb2JhbCAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL21hbGxvY190ZXN0LmNwcCBiL3Rlc3RzL21hbGxvY190ZXN0LmNwcAppbmRleCA2YjdhMjhiLi5iNzY2MjVhIDEwMDY0NAotLS0gYS90ZXN0cy9tYWxsb2NfdGVzdC5jcHAKKysrIGIvdGVzdHMvbWFsbG9jX3Rlc3QuY3BwCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKKyNpbmNsdWRlIDx0aW55eG1sMi5oPgorCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfY29uZmlnLmgiCiAKIFRFU1QobWFsbG9jLCBtYWxsb2Nfc3RkKSB7CkBAIC0zMjIsMyArMzI0LDUxIEBACiAgIEFTU0VSVF9FUShOVUxMLCB2YWxsb2MoU0laRV9NQVgpKTsKIH0KICNlbmRpZgorCitURVNUKG1hbGxvYywgbWFsbG9jX2luZm8pIHsKKyNpZmRlZiBfX0JJT05JQ19fCisgIGNoYXIqIGJ1ZjsKKyAgc2l6ZV90IGJ1ZnNpemU7CisgIEZJTEUqIG1lbXN0cmVhbSA9IG9wZW5fbWVtc3RyZWFtKCZidWYsICZidWZzaXplKTsKKyAgQVNTRVJUX05FKG51bGxwdHIsIG1lbXN0cmVhbSk7CisgIEFTU0VSVF9FUSgwLCBtYWxsb2NfaW5mbygwLCBtZW1zdHJlYW0pKTsKKyAgQVNTRVJUX0VRKDAsIGZjbG9zZShtZW1zdHJlYW0pKTsKKworICB0aW55eG1sMjo6WE1MRG9jdW1lbnQgZG9jOworICBBU1NFUlRfRVEodGlueXhtbDI6OlhNTF9TVUNDRVNTLCBkb2MuUGFyc2UoYnVmKSk7CisKKyAgYXV0byByb290ID0gZG9jLkZpcnN0Q2hpbGRFbGVtZW50KCk7CisgIEFTU0VSVF9ORShudWxscHRyLCByb290KTsKKyAgQVNTRVJUX1NUUkVRKCJtYWxsb2MiLCByb290LT5OYW1lKCkpOworICBBU1NFUlRfU1RSRVEoImplbWFsbG9jLTEiLCByb290LT5BdHRyaWJ1dGUoInZlcnNpb24iKSk7CisKKyAgYXV0byBhcmVuYSA9IHJvb3QtPkZpcnN0Q2hpbGRFbGVtZW50KCk7CisgIGZvciAoOyBhcmVuYSAhPSBudWxscHRyOyBhcmVuYSA9IGFyZW5hLT5OZXh0U2libGluZ0VsZW1lbnQoKSkgeworICAgIGludCB2YWw7CisKKyAgICBBU1NFUlRfU1RSRVEoImhlYXAiLCBhcmVuYS0+TmFtZSgpKTsKKyAgICBBU1NFUlRfRVEodGlueXhtbDI6OlhNTF9TVUNDRVNTLCBhcmVuYS0+UXVlcnlJbnRBdHRyaWJ1dGUoIm5yIiwgJnZhbCkpOworICAgIEFTU0VSVF9FUSh0aW55eG1sMjo6WE1MX1NVQ0NFU1MsCisgICAgICAgICAgICAgIGFyZW5hLT5GaXJzdENoaWxkRWxlbWVudCgiYWxsb2NhdGVkLWxhcmdlIiktPlF1ZXJ5SW50VGV4dCgmdmFsKSk7CisgICAgQVNTRVJUX0VRKHRpbnl4bWwyOjpYTUxfU1VDQ0VTUywKKyAgICAgICAgICAgICAgYXJlbmEtPkZpcnN0Q2hpbGRFbGVtZW50KCJhbGxvY2F0ZWQtaHVnZSIpLT5RdWVyeUludFRleHQoJnZhbCkpOworICAgIEFTU0VSVF9FUSh0aW55eG1sMjo6WE1MX1NVQ0NFU1MsCisgICAgICAgICAgICAgIGFyZW5hLT5GaXJzdENoaWxkRWxlbWVudCgiYWxsb2NhdGVkLWJpbnMiKS0+UXVlcnlJbnRUZXh0KCZ2YWwpKTsKKyAgICBBU1NFUlRfRVEodGlueXhtbDI6OlhNTF9TVUNDRVNTLAorICAgICAgICAgICAgICBhcmVuYS0+Rmlyc3RDaGlsZEVsZW1lbnQoImJpbnMtdG90YWwiKS0+UXVlcnlJbnRUZXh0KCZ2YWwpKTsKKworICAgIGF1dG8gYmluID0gYXJlbmEtPkZpcnN0Q2hpbGRFbGVtZW50KCJiaW4iKTsKKyAgICBmb3IgKDsgYmluICE9IG51bGxwdHI7IGJpbiA9IGJpbiAtPk5leHRTaWJsaW5nRWxlbWVudCgpKSB7CisgICAgICBpZiAoc3RyY21wKGJpbi0+TmFtZSgpLCAiYmluIikgPT0gMCkgeworICAgICAgICBBU1NFUlRfRVEodGlueXhtbDI6OlhNTF9TVUNDRVNTLCBiaW4tPlF1ZXJ5SW50QXR0cmlidXRlKCJuciIsICZ2YWwpKTsKKyAgICAgICAgQVNTRVJUX0VRKHRpbnl4bWwyOjpYTUxfU1VDQ0VTUywKKyAgICAgICAgICAgICAgICAgIGJpbi0+Rmlyc3RDaGlsZEVsZW1lbnQoImFsbG9jYXRlZCIpLT5RdWVyeUludFRleHQoJnZhbCkpOworICAgICAgICBBU1NFUlRfRVEodGlueXhtbDI6OlhNTF9TVUNDRVNTLAorICAgICAgICAgICAgICAgICAgYmluLT5GaXJzdENoaWxkRWxlbWVudCgibm1hbGxvYyIpLT5RdWVyeUludFRleHQoJnZhbCkpOworICAgICAgICBBU1NFUlRfRVEodGlueXhtbDI6OlhNTF9TVUNDRVNTLAorICAgICAgICAgICAgICAgICAgYmluLT5GaXJzdENoaWxkRWxlbWVudCgibmRhbGxvYyIpLT5RdWVyeUludFRleHQoJnZhbCkpOworICAgICAgfQorICAgIH0KKyAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX2Nvc190ZXN0LmNwcCBiL3Rlc3RzL21hdGhfY29zX2ludGVsX2RhdGEuaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSB0ZXN0cy9tYXRoX2Nvc190ZXN0LmNwcApyZW5hbWUgdG8gdGVzdHMvbWF0aF9jb3NfaW50ZWxfZGF0YS5oCmluZGV4IGMwYTJkODIuLjIyZWMwYmMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21hdGhfY29zX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL21hdGhfY29zX2ludGVsX2RhdGEuaApAQCAtMTQsMTcgKzE0LDcgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotdHlwZWRlZiBzdHJ1Y3QgewotICBkb3VibGUgZXhwZWN0ZWQ7Ci0gIGRvdWJsZSBjYWxsX2RhdGE7Ci19IGNvc19pbnRlbF9kYXRhX3Q7Ci0KLXN0YXRpYyBjb3NfaW50ZWxfZGF0YV90IGdfY29zX2ludGVsX2RhdGFbXSA9IHsKK3N0YXRpYyBkYXRhXzFfMV90PGRvdWJsZSwgZG91YmxlPiBnX2Nvc19pbnRlbF9kYXRhW10gPSB7CiAgIHsgLy8gRW50cnkgMAogICAgIDB4MS5jMWEyN2FlODM2ZjEyODAwMDAwMDAwMDAwMDUwNGU5YnAtMSwKICAgICAweDEuZmViMWY3OTIwZTI0OHAtMgpAQCAtNTYzMCwxNCArNTYyMCwzIEBACiAgICAgLTAuMAogICB9LAogfTsKLSNlbmRpZiAvLyBfX0JJT05JQ19fCi0KLVRFU1QobWF0aF9jb3MsIGNvc19pbnRlbCkgewotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ19jb3NfaW50ZWxfZGF0YSkvc2l6ZW9mKGNvc19pbnRlbF9kYXRhX3QpOyBpKyspIHsKLSAgICBFWFBFQ1RfRE9VQkxFX0VRKGdfY29zX2ludGVsX2RhdGFbaV0uZXhwZWN0ZWQsIGNvcyhnX2Nvc19pbnRlbF9kYXRhW2ldLmNhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7Ci0gIH0KLSNlbHNlIC8vIF9fQklPTklDX18KLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOwotI2VuZGlmIC8vIF9fQklPTklDX18KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfY29zZl90ZXN0LmNwcCBiL3Rlc3RzL21hdGhfY29zZl9pbnRlbF9kYXRhLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gdGVzdHMvbWF0aF9jb3NmX3Rlc3QuY3BwCnJlbmFtZSB0byB0ZXN0cy9tYXRoX2Nvc2ZfaW50ZWxfZGF0YS5oCmluZGV4IGVhOTVmZjMuLmQ2MDYwMjEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21hdGhfY29zZl90ZXN0LmNwcAorKysgYi90ZXN0cy9tYXRoX2Nvc2ZfaW50ZWxfZGF0YS5oCkBAIC0xNCwxNyArMTQsNyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGZsb2F0IGV4cGVjdGVkOwotICBmbG9hdCBjYWxsX2RhdGE7Ci19IGNvc2ZfaW50ZWxfZGF0YV90OwotCi1zdGF0aWMgY29zZl9pbnRlbF9kYXRhX3QgZ19jb3NmX2ludGVsX2RhdGFbXSA9IHsKK3N0YXRpYyBkYXRhXzFfMV90PGZsb2F0LCBmbG9hdD4gZ19jb3NmX2ludGVsX2RhdGFbXSA9IHsKICAgeyAvLyBFbnRyeSAwCiAgICAgMHgxLmJjN2I2NmZmYjc2ODlkNjQ2ZGQxYWY4M2U5NjYxZDJkcC0xLAogICAgIC0weDEuMDllYmFjcC0xCkBAIC00MzQyLDE0ICs0MzMyLDMgQEAKICAgICAtMC4wZgogICB9LAogfTsKLSNlbmRpZiAvLyBfX0JJT05JQ19fCi0KLVRFU1QobWF0aF9jb3NmLCBjb3NmX2ludGVsKSB7Ci0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX2Nvc2ZfaW50ZWxfZGF0YSkvc2l6ZW9mKGNvc2ZfaW50ZWxfZGF0YV90KTsgaSsrKSB7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKGdfY29zZl9pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCBjb3NmKGdfY29zZl9pbnRlbF9kYXRhW2ldLmNhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7Ci0gIH0KLSNlbHNlIC8vIF9fQklPTklDX18KLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOwotI2VuZGlmIC8vIF9fQklPTklDX18KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfZGF0YV90ZXN0LmggYi90ZXN0cy9tYXRoX2RhdGFfdGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZDI1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tYXRoX2RhdGFfdGVzdC5oCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxmZW52Lmg+CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBSVCwgdHlwZW5hbWUgVDE+CitzdHJ1Y3QgZGF0YV8xXzFfdCB7CisgIFJUIGV4cGVjdGVkOworICBUMSBpbnB1dDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBSVCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorc3RydWN0IGRhdGFfMV8yX3QgeworICBSVCBleHBlY3RlZDsKKyAgVDEgaW5wdXQxOworICBUMiBpbnB1dDI7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUlQxLCB0eXBlbmFtZSBSVDIsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgZGF0YV8yXzFfdCB7CisgIFJUMSBleHBlY3RlZDE7CisgIFJUMiBleHBlY3RlZDI7CisgIFQgaW5wdXQ7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdW5pb24gZnBfdTsKKwordGVtcGxhdGUgPD4gdW5pb24gZnBfdTxmbG9hdD4geworICBmbG9hdCB2YWx1ZTsKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBmcmFjOjIzOworICAgIHVuc2lnbmVkIGV4cDo4OworICAgIHVuc2lnbmVkIHNpZ246MTsKKyAgfSBiaXRzOworICB1aW50MzJfdCBzaWduX21hZ25pdHVkZTsKK307CisKK3RlbXBsYXRlIDw+IHVuaW9uIGZwX3U8ZG91YmxlPiB7CisgIGRvdWJsZSB2YWx1ZTsKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBmcmFjbDsKKyAgICB1bnNpZ25lZCBmcmFjaDoyMDsKKyAgICB1bnNpZ25lZCBleHA6MTE7CisgICAgdW5zaWduZWQgc2lnbjoxOworICB9IGJpdHM7CisgIHVpbnQ2NF90IHNpZ25fbWFnbml0dWRlOworfTsKKworLy8gVE9ETzogbG9uZyBkb3VibGUuCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIGlubGluZSBhdXRvIFNpZ25BbmRNYWduaXR1ZGVUb0JpYXNlZChjb25zdCBUJiB2YWx1ZSkgLT4gZGVjbHR5cGUoZnBfdTxUPjo6c2lnbl9tYWduaXR1ZGUpIHsKKyAgZnBfdTxUPiB1OworICB1LnZhbHVlID0gdmFsdWU7CisgIGlmICh1LmJpdHMuc2lnbikgeworICAgIHJldHVybiB+dS5zaWduX21hZ25pdHVkZSArIDE7CisgIH0gZWxzZSB7CisgICAgdS5iaXRzLnNpZ24gPSAxOworICAgIHJldHVybiB1LnNpZ25fbWFnbml0dWRlOworICB9Cit9CisKKy8vIEJhc2VkIG9uIHRoZSBleGlzdGluZyBnb29nbGV0ZXN0IGltcGxlbWVudGF0aW9uLCB3aGljaCB1c2VzIGEgZml4ZWQgNCB1bHAgYm91bmQuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3NpemVfdCBVbHBEaXN0YW5jZShUIGxocywgVCByaHMpIHsKKyAgY29uc3QgYXV0byBiaWFzZWQxID0gU2lnbkFuZE1hZ25pdHVkZVRvQmlhc2VkKGxocyk7CisgIGNvbnN0IGF1dG8gYmlhc2VkMiA9IFNpZ25BbmRNYWduaXR1ZGVUb0JpYXNlZChyaHMpOworICByZXR1cm4gKGJpYXNlZDEgPj0gYmlhc2VkMikgPyAoYmlhc2VkMSAtIGJpYXNlZDIpIDogKGJpYXNlZDIgLSBiaWFzZWQxKTsKK30KKwordGVtcGxhdGUgPHNpemVfdCBVTFAsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgRnBVbHBFcSB7CisgIDo6dGVzdGluZzo6QXNzZXJ0aW9uUmVzdWx0IG9wZXJhdG9yKCkoY29uc3QgY2hhciogLyogZXhwZWN0ZWRfZXhwcmVzc2lvbiAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAvKiBhY3R1YWxfZXhwcmVzc2lvbiAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQgYWN0dWFsKSB7CisgICAgaWYgKCFpc25hbihleHBlY3RlZCkgJiYgIWlzbmFuKGFjdHVhbCkgJiYgVWxwRGlzdGFuY2UoZXhwZWN0ZWQsIGFjdHVhbCkgPD0gVUxQKSB7CisgICAgICByZXR1cm4gOjp0ZXN0aW5nOjpBc3NlcnRpb25TdWNjZXNzKCk7CisgICAgfQorCisgICAgLy8gT3V0cHV0IHRoZSBhY3R1YWwgYW5kIGV4cGVjdGVkIHZhbHVlcyBhcyBoZXggZmxvYXRpbmcgcG9pbnQuCisgICAgY2hhciBleHBlY3RlZF9zdHJbNjRdOworICAgIGNoYXIgYWN0dWFsX3N0cls2NF07CisgICAgc25wcmludGYoZXhwZWN0ZWRfc3RyLCBzaXplb2YoZXhwZWN0ZWRfc3RyKSwgIiVhIiwgZXhwZWN0ZWQpOworICAgIHNucHJpbnRmKGFjdHVhbF9zdHIsIHNpemVvZihhY3R1YWxfc3RyKSwgIiVhIiwgYWN0dWFsKTsKKworICAgIHJldHVybiA6OnRlc3Rpbmc6OkFzc2VydGlvbkZhaWx1cmUoKQorICAgICAgICA8PCAiZXhwZWN0ZWQgKCIgPDwgZXhwZWN0ZWRfc3RyIDw8ICIpICE9IGFjdHVhbCAoIiA8PCBhY3R1YWxfc3RyIDw8ICIpIjsKKyAgfQorfTsKKworLy8gUnVucyB0aHJvdWdoIHRoZSBhcnJheSAnZGF0YScgYXBwbHlpbmcgJ2YnIHRvIGVhY2ggb2YgdGhlIGlucHV0IHZhbHVlcworLy8gYW5kIGFzc2VydGluZyB0aGF0IHRoZSByZXN1bHQgaXMgd2l0aGluIFVMUCB1bHBzIG9mIHRoZSBleHBlY3RlZCB2YWx1ZS4KKy8vIEZvciB0ZXN0aW5nIGEgKGRvdWJsZSkgLT4gZG91YmxlIGZ1bmN0aW9uIGxpa2Ugc2luKDMpLgordGVtcGxhdGUgPHNpemVfdCBVTFAsIHR5cGVuYW1lIFJULCB0eXBlbmFtZSBULCBzaXplX3QgTj4KK3ZvaWQgRG9NYXRoRGF0YVRlc3QoZGF0YV8xXzFfdDxSVCwgVD4gKCZkYXRhKVtOXSwgUlQgZihUKSkgeworICBmZXNldGVudihGRV9ERkxfRU5WKTsKKyAgRnBVbHBFcTxVTFAsIFJUPiBwcmVkaWNhdGU7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTjsgKytpKSB7CisgICAgRVhQRUNUX1BSRURfRk9STUFUMihwcmVkaWNhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldLmV4cGVjdGVkLCBmKGRhdGFbaV0uaW5wdXQpKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOworICB9Cit9CisKKy8vIFJ1bnMgdGhyb3VnaCB0aGUgYXJyYXkgJ2RhdGEnIGFwcGx5aW5nICdmJyB0byBlYWNoIG9mIHRoZSBwYWlycyBvZiBpbnB1dCB2YWx1ZXMKKy8vIGFuZCBhc3NlcnRpbmcgdGhhdCB0aGUgcmVzdWx0IGlzIHdpdGhpbiBVTFAgdWxwcyBvZiB0aGUgZXhwZWN0ZWQgdmFsdWUuCisvLyBGb3IgdGVzdGluZyBhIChkb3VibGUsIGRvdWJsZSkgLT4gZG91YmxlIGZ1bmN0aW9uIGxpa2UgcG93KDMpLgordGVtcGxhdGUgPHNpemVfdCBVTFAsIHR5cGVuYW1lIFJULCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHNpemVfdCBOPgordm9pZCBEb01hdGhEYXRhVGVzdChkYXRhXzFfMl90PFJULCBUMSwgVDI+ICgmZGF0YSlbTl0sIFJUIGYoVDEsIFQyKSkgeworICBmZXNldGVudihGRV9ERkxfRU5WKTsKKyAgRnBVbHBFcTxVTFAsIFJUPiBwcmVkaWNhdGU7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTjsgKytpKSB7CisgICAgRVhQRUNUX1BSRURfRk9STUFUMihwcmVkaWNhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldLmV4cGVjdGVkLCBmKGRhdGFbaV0uaW5wdXQxLCBkYXRhW2ldLmlucHV0MikpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7CisgIH0KK30KKworLy8gUnVucyB0aHJvdWdoIHRoZSBhcnJheSAnZGF0YScgYXBwbHlpbmcgJ2YnIHRvIGVhY2ggb2YgdGhlIGlucHV0IHZhbHVlcworLy8gYW5kIGFzc2VydGluZyB0aGF0IHRoZSByZXN1bHRzIGFyZSB3aXRoaW4gVUxQIHVscHMgb2YgdGhlIGV4cGVjdGVkIHZhbHVlcy4KKy8vIEZvciB0ZXN0aW5nIGEgKGRvdWJsZSwgZG91YmxlKiwgZG91YmxlKikgLT4gdm9pZCBmdW5jdGlvbiBsaWtlIHNpbmNvcygzKS4KK3RlbXBsYXRlIDxzaXplX3QgVUxQLCB0eXBlbmFtZSBSVDEsIHR5cGVuYW1lIFJUMiwgdHlwZW5hbWUgVDEsIHNpemVfdCBOPgordm9pZCBEb01hdGhEYXRhVGVzdChkYXRhXzJfMV90PFJUMSwgUlQyLCBUMT4gKCZkYXRhKVtOXSwgdm9pZCBmKFQxLCBSVDEqLCBSVDIqKSkgeworICBmZXNldGVudihGRV9ERkxfRU5WKTsKKyAgRnBVbHBFcTxVTFAsIFJUMT4gcHJlZGljYXRlMTsKKyAgRnBVbHBFcTxVTFAsIFJUMj4gcHJlZGljYXRlMjsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOOyArK2kpIHsKKyAgICBSVDEgb3V0MTsKKyAgICBSVDIgb3V0MjsKKyAgICBmKGRhdGFbaV0uaW5wdXQsICZvdXQxLCAmb3V0Mik7CisgICAgRVhQRUNUX1BSRURfRk9STUFUMihwcmVkaWNhdGUxLCBkYXRhW2ldLmV4cGVjdGVkMSwgb3V0MSkgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKKyAgICBFWFBFQ1RfUFJFRF9GT1JNQVQyKHByZWRpY2F0ZTIsIGRhdGFbaV0uZXhwZWN0ZWQyLCBvdXQyKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOworICB9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX2V4cF90ZXN0LmNwcCBiL3Rlc3RzL21hdGhfZXhwX2ludGVsX2RhdGEuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0ZXN0cy9tYXRoX2V4cF90ZXN0LmNwcApyZW5hbWUgdG8gdGVzdHMvbWF0aF9leHBfaW50ZWxfZGF0YS5oCmluZGV4IGJlYjI1ODQuLjBjYTM4MTMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21hdGhfZXhwX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL21hdGhfZXhwX2ludGVsX2RhdGEuaApAQCAtMTQsMTcgKzE0LDcgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotdHlwZWRlZiBzdHJ1Y3QgewotICBkb3VibGUgZXhwZWN0ZWQ7Ci0gIGRvdWJsZSBjYWxsX2RhdGE7Ci19IGV4cF9pbnRlbF9kYXRhX3Q7Ci0KLXN0YXRpYyBleHBfaW50ZWxfZGF0YV90IGdfZXhwX2ludGVsX2RhdGFbXSA9IHsKK3N0YXRpYyBkYXRhXzFfMV90PGRvdWJsZSwgZG91YmxlPiBnX2V4cF9pbnRlbF9kYXRhW10gPSB7CiAgIHsgLy8gRW50cnkgMAogICAgIDB4MS4wMDAwMDAwMDAwMDAxZmZmZmZmZmZmZmZmZmZmZmZmZnAwLAogICAgIDB4MS5mZmZmZmZmZmZmZmZlcC01MgpAQCAtMTk2MiwxNCArMTk1MiwzIEBACiAgICAgLTB4MS42MjMyYmRkN2FiY2QzcDkKICAgfSwKIH07Ci0jZW5kaWYgLy8gX19CSU9OSUNfXwotCi1URVNUKG1hdGhfZXhwLCBleHBfaW50ZWwpIHsKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGdfZXhwX2ludGVsX2RhdGEpL3NpemVvZihleHBfaW50ZWxfZGF0YV90KTsgaSsrKSB7Ci0gICAgRVhQRUNUX0RPVUJMRV9FUShnX2V4cF9pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCBleHAoZ19leHBfaW50ZWxfZGF0YVtpXS5jYWxsX2RhdGEpKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOwotICB9Ci0jZWxzZSAvLyBfX0JJT05JQ19fCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuIjsKLSNlbmRpZiAvLyBfX0JJT05JQ19fCi19CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX2V4cGZfdGVzdC5jcHAgYi90ZXN0cy9tYXRoX2V4cGZfaW50ZWxfZGF0YS5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIHRlc3RzL21hdGhfZXhwZl90ZXN0LmNwcApyZW5hbWUgdG8gdGVzdHMvbWF0aF9leHBmX2ludGVsX2RhdGEuaAppbmRleCAyNTdhYTI2Li43MDA3NDU4IDEwMDY0NAotLS0gYS90ZXN0cy9tYXRoX2V4cGZfdGVzdC5jcHAKKysrIGIvdGVzdHMvbWF0aF9leHBmX2ludGVsX2RhdGEuaApAQCAtMTQsMTcgKzE0LDcgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotdHlwZWRlZiBzdHJ1Y3QgewotICBmbG9hdCBleHBlY3RlZDsKLSAgZmxvYXQgY2FsbF9kYXRhOwotfSBleHBmX2ludGVsX2RhdGFfdDsKLQotc3RhdGljIGV4cGZfaW50ZWxfZGF0YV90IGdfZXhwZl9pbnRlbF9kYXRhW10gPSB7CitzdGF0aWMgZGF0YV8xXzFfdDxmbG9hdCwgZmxvYXQ+IGdfZXhwZl9pbnRlbF9kYXRhW10gPSB7CiAgIHsgLy8gRW50cnkgMAogICAgIDB4MS5lMGZhYmYwODEyMjI3ODBkNzRjMDBmZGEzMGFhMzk0M3AtMSwKICAgICAtMHgxLjAwMDAwNnAtNApAQCAtMTQyNiwxNCArMTQxNiwzIEBACiAgICAgLTB4MS41ZDU4YTBwNgogICB9LAogfTsKLSNlbmRpZiAvLyBfX0JJT05JQ19fCi0KLVRFU1QobWF0aF9leHBmLCBleHBmX2ludGVsKSB7Ci0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX2V4cGZfaW50ZWxfZGF0YSkvc2l6ZW9mKGV4cGZfaW50ZWxfZGF0YV90KTsgaSsrKSB7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKGdfZXhwZl9pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCBleHBmKGdfZXhwZl9pbnRlbF9kYXRhW2ldLmNhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7Ci0gIH0KLSNlbHNlIC8vIF9fQklPTklDX18KLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOwotI2VuZGlmIC8vIF9fQklPTklDX18KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfbG9nX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF9sb2dfaW50ZWxfZGF0YS5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHRlc3RzL21hdGhfbG9nX3Rlc3QuY3BwCnJlbmFtZSB0byB0ZXN0cy9tYXRoX2xvZ19pbnRlbF9kYXRhLmgKaW5kZXggZGEyYTg0OC4uOTVhZTYwZSAxMDA2NDQKLS0tIGEvdGVzdHMvbWF0aF9sb2dfdGVzdC5jcHAKKysrIGIvdGVzdHMvbWF0aF9sb2dfaW50ZWxfZGF0YS5oCkBAIC0xNCwxNyArMTQsNyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGRvdWJsZSBleHBlY3RlZDsKLSAgZG91YmxlIGNhbGxfZGF0YTsKLX0gbG9nX2ludGVsX2RhdGFfdDsKLQotc3RhdGljIGxvZ19pbnRlbF9kYXRhX3QgZ19sb2dfaW50ZWxfZGF0YVtdID0geworc3RhdGljIGRhdGFfMV8xX3Q8ZG91YmxlLCBkb3VibGU+IGdfbG9nX2ludGVsX2RhdGFbXSA9IHsKICAgeyAvLyBFbnRyeSAwCiAgICAgMHgxLmQ3N2ZkMTNkMjdmZmVmZmZmZmZmZmZmZmI1ZWQ5ODQzcC0xMSwKICAgICAweDEuMDAzYWY2YzM3YzFkM3AwCkBAIC0xNjYyLDE0ICsxNjUyLDMgQEAKICAgICAtMC4wCiAgIH0sCiB9OwotI2VuZGlmIC8vIF9fQklPTklDX18KLQotVEVTVChtYXRoX2xvZywgbG9nX2ludGVsKSB7Ci0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX2xvZ19pbnRlbF9kYXRhKS9zaXplb2YobG9nX2ludGVsX2RhdGFfdCk7IGkrKykgewotICAgIEVYUEVDVF9ET1VCTEVfRVEoZ19sb2dfaW50ZWxfZGF0YVtpXS5leHBlY3RlZCwgbG9nKGdfbG9nX2ludGVsX2RhdGFbaV0uY2FsbF9kYXRhKSkgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKLSAgfQotI2Vsc2UgLy8gX19CSU9OSUNfXwotICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLiI7Ci0jZW5kaWYgLy8gX19CSU9OSUNfXwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF9sb2dmX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF9sb2dmX2ludGVsX2RhdGEuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSB0ZXN0cy9tYXRoX2xvZ2ZfdGVzdC5jcHAKcmVuYW1lIHRvIHRlc3RzL21hdGhfbG9nZl9pbnRlbF9kYXRhLmgKaW5kZXggZTVkMDkyMS4uYjY5Nzc2YyAxMDA2NDQKLS0tIGEvdGVzdHMvbWF0aF9sb2dmX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL21hdGhfbG9nZl9pbnRlbF9kYXRhLmgKQEAgLTE0LDE3ICsxNCw3IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKLXR5cGVkZWYgc3RydWN0IHsKLSAgZmxvYXQgZXhwZWN0ZWQ7Ci0gIGZsb2F0IGNhbGxfZGF0YTsKLX0gbG9nZl9pbnRlbF9kYXRhX3Q7Ci0KLXN0YXRpYyBsb2dmX2ludGVsX2RhdGFfdCBnX2xvZ2ZfaW50ZWxfZGF0YVtdID0geworc3RhdGljIGRhdGFfMV8xX3Q8ZmxvYXQsIGZsb2F0PiBnX2xvZ2ZfaW50ZWxfZGF0YVtdID0gewogICB7IC8vIEVudHJ5IDAKICAgICAtMHgxLmJiOWQzYWViOGM4N2IwMmQ3NzYzZWJhOGI0OGExMDJkcDEsCiAgICAgMHgxLjAwMDAwMnAtNQpAQCAtMTMxNCwxNCArMTMwNCwzIEBACiAgICAgLTAuMGYKICAgfSwKIH07Ci0jZW5kaWYgLy8gX19CSU9OSUNfXwotCi1URVNUKG1hdGhfbG9nZiwgbG9nZl9pbnRlbCkgewotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ19sb2dmX2ludGVsX2RhdGEpL3NpemVvZihsb2dmX2ludGVsX2RhdGFfdCk7IGkrKykgewotICAgIEVYUEVDVF9GTE9BVF9FUShnX2xvZ2ZfaW50ZWxfZGF0YVtpXS5leHBlY3RlZCwgbG9nZihnX2xvZ2ZfaW50ZWxfZGF0YVtpXS5jYWxsX2RhdGEpKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOwotICB9Ci0jZWxzZSAvLyBfX0JJT05JQ19fCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuIjsKLSNlbmRpZiAvLyBfX0JJT05JQ19fCi19CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX3Bvd190ZXN0LmNwcCBiL3Rlc3RzL21hdGhfcG93X2ludGVsX2RhdGEuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0ZXN0cy9tYXRoX3Bvd190ZXN0LmNwcApyZW5hbWUgdG8gdGVzdHMvbWF0aF9wb3dfaW50ZWxfZGF0YS5oCmluZGV4IGMxODU0MjQuLmFjOWY1YWYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21hdGhfcG93X3Rlc3QuY3BwCisrKyBiL3Rlc3RzL21hdGhfcG93X2ludGVsX2RhdGEuaApAQCAtMTQsMTggKzE0LDcgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotdHlwZWRlZiBzdHJ1Y3QgewotICBkb3VibGUgZXhwZWN0ZWQ7Ci0gIGRvdWJsZSB4X2NhbGxfZGF0YTsKLSAgZG91YmxlIHlfY2FsbF9kYXRhOwotfSBwb3dfaW50ZWxfZGF0YV90OwotCi1zdGF0aWMgcG93X2ludGVsX2RhdGFfdCBnX3Bvd19pbnRlbF9kYXRhW10gPSB7CitzdGF0aWMgZGF0YV8xXzJfdDxkb3VibGUsIGRvdWJsZSwgZG91YmxlPiBnX3Bvd19pbnRlbF9kYXRhW10gPSB7CiAgIHsgLy8gRW50cnkgMAogICAgIDB4MS5wMCwKICAgICAtMHgxLjBwLTEwLCAwLjAKQEAgLTMyODcsMTQgKzMyNzYsMyBAQAogICAgIDB4MS40cDMsIDB4MS40cDMKICAgfSwKIH07Ci0jZW5kaWYgLy8gX19CSU9OSUNfXwotCi1URVNUKG1hdGhfcG93LCBwb3dfaW50ZWwpIHsKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGdfcG93X2ludGVsX2RhdGEpL3NpemVvZihwb3dfaW50ZWxfZGF0YV90KTsgaSsrKSB7Ci0gICAgRVhQRUNUX0RPVUJMRV9FUShnX3Bvd19pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCBwb3coZ19wb3dfaW50ZWxfZGF0YVtpXS54X2NhbGxfZGF0YSwgZ19wb3dfaW50ZWxfZGF0YVtpXS55X2NhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7Ci0gIH0KLSNlbHNlIC8vIF9fQklPTklDX18KLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOwotI2VuZGlmIC8vIF9fQklPTklDX18KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfcG93Zl90ZXN0LmNwcCBiL3Rlc3RzL21hdGhfcG93Zl9pbnRlbF9kYXRhLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gdGVzdHMvbWF0aF9wb3dmX3Rlc3QuY3BwCnJlbmFtZSB0byB0ZXN0cy9tYXRoX3Bvd2ZfaW50ZWxfZGF0YS5oCmluZGV4IGY3N2IyM2EuLjNhMTc2NWIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21hdGhfcG93Zl90ZXN0LmNwcAorKysgYi90ZXN0cy9tYXRoX3Bvd2ZfaW50ZWxfZGF0YS5oCkBAIC0xNCwxOCArMTQsNyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGZsb2F0IGV4cGVjdGVkOwotICBmbG9hdCB4X2NhbGxfZGF0YTsKLSAgZmxvYXQgeV9jYWxsX2RhdGE7Ci19IHBvd2ZfaW50ZWxfZGF0YV90OwotCi1zdGF0aWMgcG93Zl9pbnRlbF9kYXRhX3QgZ19wb3dmX2ludGVsX2RhdGFbXSA9IHsKK3N0YXRpYyBkYXRhXzFfMl90PGZsb2F0LCBmbG9hdCwgZmxvYXQ+IGdfcG93Zl9pbnRlbF9kYXRhW10gPSB7CiAgIHsgLy8gRW50cnkgMAogICAgIEhVR0VfVkFMRiwKICAgICAtMC4wLCAtMHgxLjAwMDAwMnAtMQpAQCAtMjc3NSwxNCArMjc2NCwzIEBACiAgICAgMHgxLjQwcDMsIDB4MS40MHAzCiAgIH0sCiB9OwotI2VuZGlmIC8vIF9fQklPTklDX18KLQotVEVTVChtYXRoX3Bvd2YsIHBvd2ZfaW50ZWwpIHsKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGdfcG93Zl9pbnRlbF9kYXRhKS9zaXplb2YocG93Zl9pbnRlbF9kYXRhX3QpOyBpKyspIHsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoZ19wb3dmX2ludGVsX2RhdGFbaV0uZXhwZWN0ZWQsIHBvd2YoZ19wb3dmX2ludGVsX2RhdGFbaV0ueF9jYWxsX2RhdGEsIGdfcG93Zl9pbnRlbF9kYXRhW2ldLnlfY2FsbF9kYXRhKSkgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKLSAgfQotI2Vsc2UgLy8gX19CSU9OSUNfXwotICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLiI7Ci0jZW5kaWYgLy8gX19CSU9OSUNfXwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF9zaW5fdGVzdC5jcHAgYi90ZXN0cy9tYXRoX3Npbl9pbnRlbF9kYXRhLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gdGVzdHMvbWF0aF9zaW5fdGVzdC5jcHAKcmVuYW1lIHRvIHRlc3RzL21hdGhfc2luX2ludGVsX2RhdGEuaAppbmRleCBmZmE0MzQwLi5jMzQxY2ZlIDEwMDY0NAotLS0gYS90ZXN0cy9tYXRoX3Npbl90ZXN0LmNwcAorKysgYi90ZXN0cy9tYXRoX3Npbl9pbnRlbF9kYXRhLmgKQEAgLTE0LDE3ICsxNCw3IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKLXR5cGVkZWYgc3RydWN0IHsKLSAgZG91YmxlIGV4cGVjdGVkOwotICBkb3VibGUgY2FsbF9kYXRhOwotfSBzaW5faW50ZWxfZGF0YV90OwotCi1zdGF0aWMgc2luX2ludGVsX2RhdGFfdCBnX3Npbl9pbnRlbF9kYXRhW10gPSB7CitzdGF0aWMgZGF0YV8xXzFfdDxkb3VibGUsIGRvdWJsZT4gZ19zaW5faW50ZWxfZGF0YVtdID0gewogICB7IC8vIEVudHJ5IDAKICAgICAweDEuOTI1OWUzNzA4YmQzOWZmZmZmZmZmZmZmZmZmMWJkYmVwLTUsCiAgICAgMHgxLjkyODM1ODY1MDNmZTBwLTUKQEAgLTU3ODIsMTQgKzU3NzIsMyBAQAogICAgIC0wLjAKICAgfSwKIH07Ci0jZW5kaWYgLy8gX19CSU9OSUNfXwotCi1URVNUKG1hdGhfc2luLCBzaW5faW50ZWwpIHsKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGdfc2luX2ludGVsX2RhdGEpL3NpemVvZihzaW5faW50ZWxfZGF0YV90KTsgaSsrKSB7Ci0gICAgRVhQRUNUX0RPVUJMRV9FUShnX3Npbl9pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCBzaW4oZ19zaW5faW50ZWxfZGF0YVtpXS5jYWxsX2RhdGEpKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOwotICB9Ci0jZWxzZSAvLyBfX0JJT05JQ19fCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuIjsKLSNlbmRpZiAvLyBfX0JJT05JQ19fCi19CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX3NpbmNvc190ZXN0LmNwcCBiL3Rlc3RzL21hdGhfc2luY29zX2ludGVsX2RhdGEuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0ZXN0cy9tYXRoX3NpbmNvc190ZXN0LmNwcApyZW5hbWUgdG8gdGVzdHMvbWF0aF9zaW5jb3NfaW50ZWxfZGF0YS5oCmluZGV4IDBmYWIyYzIuLjcxYmE2YjEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21hdGhfc2luY29zX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL21hdGhfc2luY29zX2ludGVsX2RhdGEuaApAQCAtMTQsMTggKzE0LDcgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotdHlwZWRlZiBzdHJ1Y3QgewotICBkb3VibGUgc2luX2V4cGVjdGVkOwotICBkb3VibGUgY29zX2V4cGVjdGVkOwotICBkb3VibGUgY2FsbF9kYXRhOwotfSBzaW5jb3NfaW50ZWxfZGF0YV90OwotCi1zdGF0aWMgc2luY29zX2ludGVsX2RhdGFfdCBnX3NpbmNvc19pbnRlbF9kYXRhW10gPSB7CitzdGF0aWMgZGF0YV8yXzFfdDxkb3VibGUsIGRvdWJsZSwgZG91YmxlPiBnX3NpbmNvc19pbnRlbF9kYXRhW10gPSB7CiAgIHsgLy8gRW50cnkgMAogICAgIC0weDEuY2U5YTk0ZWE5YzJhZDk1NTk3YjExOTNiMjMwMGQxOWFwLTEsCiAgICAgLTB4MS5iNmQzMDU3Nzc2ZGMzODMzNWIxNjc0NWYyZDc1NmFiNnAtMiwKQEAgLTQ3NzIsMTcgKzQ3NjEsMyBAQAogICAgIC0wLjAsCiAgIH0sCiB9OwotI2VuZGlmIC8vIF9fQklPTklDX18KLQotVEVTVChtYXRoX3NpbmNvcywgc2luY29zX2ludGVsKSB7Ci0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX3NpbmNvc19pbnRlbF9kYXRhKS9zaXplb2Yoc2luY29zX2ludGVsX2RhdGFfdCk7IGkrKykgewotICAgZG91YmxlIGRzaW4sIGRjb3M7Ci0gICBzaW5jb3MoZ19zaW5jb3NfaW50ZWxfZGF0YVtpXS5jYWxsX2RhdGEsICZkc2luLCAmZGNvcyk7Ci0gICBFWFBFQ1RfRE9VQkxFX0VRKGdfc2luY29zX2ludGVsX2RhdGFbaV0uc2luX2V4cGVjdGVkLCBkc2luKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOwotICAgRVhQRUNUX0RPVUJMRV9FUShnX3NpbmNvc19pbnRlbF9kYXRhW2ldLmNvc19leHBlY3RlZCwgZGNvcykgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKLSAgfQotI2Vsc2UgLy8gX19CSU9OSUNfXwotICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLiI7Ci0jZW5kaWYgLy8gX19CSU9OSUNfXwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF9zaW5jb3NmX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF9zaW5jb3NmX2ludGVsX2RhdGEuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0ZXN0cy9tYXRoX3NpbmNvc2ZfdGVzdC5jcHAKcmVuYW1lIHRvIHRlc3RzL21hdGhfc2luY29zZl9pbnRlbF9kYXRhLmgKaW5kZXggYzFhMzJjOS4uNWIxYjUzNSAxMDA2NDQKLS0tIGEvdGVzdHMvbWF0aF9zaW5jb3NmX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL21hdGhfc2luY29zZl9pbnRlbF9kYXRhLmgKQEAgLTE0LDE4ICsxNCw3IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKLXR5cGVkZWYgc3RydWN0IHsKLSAgZmxvYXQgc2luX2V4cGVjdGVkOwotICBmbG9hdCBjb3NfZXhwZWN0ZWQ7Ci0gIGZsb2F0IGNhbGxfZGF0YTsKLX0gc2luY29zZl9pbnRlbF9kYXRhX3Q7Ci0KLXN0YXRpYyBzaW5jb3NmX2ludGVsX2RhdGFfdCBnX3NpbmNvc2ZfaW50ZWxfZGF0YVtdID0geworc3RhdGljIGRhdGFfMl8xX3Q8ZmxvYXQsIGZsb2F0LCBmbG9hdD4gZ19zaW5jb3NmX2ludGVsX2RhdGFbXSA9IHsKICAgeyAvLyBFbnRyeSAwCiAgICAgLTB4MS5iNmE3YWJmZmFmNTlhNWFjMTgxZTNlMWFiZjk2MTY5OHAtMSwKICAgICAweDEuMDgwZTc0YzExNjg2M2NmYWI4MmEwZmQ1OWM3MWIzNjNwLTEsCkBAIC00NjQyLDE3ICs0NjMxLDMgQEAKICAgICAtMC4wZiwKICAgfSwKIH07Ci0jZW5kaWYgLy8gX19CSU9OSUNfXwotCi1URVNUKG1hdGhfc2luY29zZiwgc2luY29zZl9pbnRlbCkgewotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ19zaW5jb3NmX2ludGVsX2RhdGEpL3NpemVvZihzaW5jb3NmX2ludGVsX2RhdGFfdCk7IGkrKykgewotICAgZmxvYXQgZnNpbiwgZmNvczsKLSAgIHNpbmNvc2YoZ19zaW5jb3NmX2ludGVsX2RhdGFbaV0uY2FsbF9kYXRhLCAmZnNpbiwgJmZjb3MpOwotICAgRVhQRUNUX0ZMT0FUX0VRKGdfc2luY29zZl9pbnRlbF9kYXRhW2ldLnNpbl9leHBlY3RlZCwgZnNpbikgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKLSAgIEVYUEVDVF9GTE9BVF9FUShnX3NpbmNvc2ZfaW50ZWxfZGF0YVtpXS5jb3NfZXhwZWN0ZWQsIGZjb3MpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7Ci0gIH0KLSNlbHNlIC8vIF9fQklPTklDX18KLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOwotI2VuZGlmIC8vIF9fQklPTklDX18KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfc2luZl90ZXN0LmNwcCBiL3Rlc3RzL21hdGhfc2luZl9pbnRlbF9kYXRhLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gdGVzdHMvbWF0aF9zaW5mX3Rlc3QuY3BwCnJlbmFtZSB0byB0ZXN0cy9tYXRoX3NpbmZfaW50ZWxfZGF0YS5oCmluZGV4IGJiMWUyYzkuLjljZGEwZmQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21hdGhfc2luZl90ZXN0LmNwcAorKysgYi90ZXN0cy9tYXRoX3NpbmZfaW50ZWxfZGF0YS5oCkBAIC0xNCwxNyArMTQsNyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGZsb2F0IGV4cGVjdGVkOwotICBmbG9hdCBjYWxsX2RhdGE7Ci19IHNpbmZfaW50ZWxfZGF0YV90OwotCi1zdGF0aWMgc2luZl9pbnRlbF9kYXRhX3QgZ19zaW5mX2ludGVsX2RhdGFbXSA9IHsKK3N0YXRpYyBkYXRhXzFfMV90PGZsb2F0LCBmbG9hdD4gZ19zaW5mX2ludGVsX2RhdGFbXSA9IHsKICAgeyAvLyBFbnRyeSAwCiAgICAgLTB4MS4wMDAzZmZmZmZmZjU1NGQ1NTM1NTUyY2NjZjc3OGNjZHAtMjEsCiAgICAgLTB4MS4wMDA0cC0yMQpAQCAtNDM4MiwxNCArNDM3MiwzIEBACiAgICAgLTAuMGYKICAgfSwKIH07Ci0jZW5kaWYgLy8gX19CSU9OSUNfXwotCi1URVNUKG1hdGhfc2luZiwgc2luZl9pbnRlbCkgewotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ19zaW5mX2ludGVsX2RhdGEpL3NpemVvZihzaW5mX2ludGVsX2RhdGFfdCk7IGkrKykgewotICAgIEVYUEVDVF9GTE9BVF9FUShnX3NpbmZfaW50ZWxfZGF0YVtpXS5leHBlY3RlZCwgc2luZihnX3NpbmZfaW50ZWxfZGF0YVtpXS5jYWxsX2RhdGEpKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOwotICB9Ci0jZWxzZSAvLyBfX0JJT05JQ19fCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuIjsKLSNlbmRpZiAvLyBfX0JJT05JQ19fCi19CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX3Rhbl90ZXN0LmNwcCBiL3Rlc3RzL21hdGhfdGFuX2ludGVsX2RhdGEuaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSB0ZXN0cy9tYXRoX3Rhbl90ZXN0LmNwcApyZW5hbWUgdG8gdGVzdHMvbWF0aF90YW5faW50ZWxfZGF0YS5oCmluZGV4IDY4NjIwMTkuLjMyZDczM2UgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21hdGhfdGFuX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL21hdGhfdGFuX2ludGVsX2RhdGEuaApAQCAtMTQsMTcgKzE0LDcgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotdHlwZWRlZiBzdHJ1Y3QgewotICBkb3VibGUgZXhwZWN0ZWQ7Ci0gIGRvdWJsZSBjYWxsX2RhdGE7Ci19IHRhbl9pbnRlbF9kYXRhX3Q7Ci0KLXN0YXRpYyB0YW5faW50ZWxfZGF0YV90IGdfdGFuX2ludGVsX2RhdGFbXSA9IHsKK3N0YXRpYyBkYXRhXzFfMV90PGRvdWJsZSwgZG91YmxlPiBnX3Rhbl9pbnRlbF9kYXRhW10gPSB7CiAgIHsgLy8gRW50cnkgMAogICAgIDB4MS41MDc4Y2ViZmY5YzcyODAwMDAwMDAwMDAwMDAyNGRmOHAtNSwKICAgICAweDEuNTA0ODZiMmY4NzAxNHAtNQpAQCAtNTE5MCwxNCArNTE4MCwzIEBACiAgICAgLTAuMAogICB9LAogfTsKLSNlbmRpZiAvLyBfX0JJT05JQ19fCi0KLVRFU1QobWF0aF90YW4sIHRhbl9pbnRlbCkgewotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ190YW5faW50ZWxfZGF0YSkvc2l6ZW9mKHRhbl9pbnRlbF9kYXRhX3QpOyBpKyspIHsKLSAgICBFWFBFQ1RfRE9VQkxFX0VRKGdfdGFuX2ludGVsX2RhdGFbaV0uZXhwZWN0ZWQsIHRhbihnX3Rhbl9pbnRlbF9kYXRhW2ldLmNhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7Ci0gIH0KLSNlbHNlIC8vIF9fQklPTklDX18KLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOwotI2VuZGlmIC8vIF9fQklPTklDX18KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfdGFuZl90ZXN0LmNwcCBiL3Rlc3RzL21hdGhfdGFuZl9pbnRlbF9kYXRhLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gdGVzdHMvbWF0aF90YW5mX3Rlc3QuY3BwCnJlbmFtZSB0byB0ZXN0cy9tYXRoX3RhbmZfaW50ZWxfZGF0YS5oCmluZGV4IDkzMTkwNDYuLjA2NjkxMTUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21hdGhfdGFuZl90ZXN0LmNwcAorKysgYi90ZXN0cy9tYXRoX3RhbmZfaW50ZWxfZGF0YS5oCkBAIC0xNCwxNyArMTQsNyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGZsb2F0IGV4cGVjdGVkOwotICBmbG9hdCBjYWxsX2RhdGE7Ci19IHRhbmZfaW50ZWxfZGF0YV90OwotCi1zdGF0aWMgdGFuZl9pbnRlbF9kYXRhX3QgZ190YW5mX2ludGVsX2RhdGFbXSA9IHsKK3N0YXRpYyBkYXRhXzFfMV90PGZsb2F0LCBmbG9hdD4gZ190YW5mX2ludGVsX2RhdGFbXSA9IHsKICAgeyAvLyBFbnRyeSAwCiAgICAgLTB4MS4wMDAwMDAwMDAwMTU1NTU1NTU1NTU3Nzc3Nzc3Nzc3N3AtMjEsCiAgICAgLTB4MS5wLTIxCkBAIC00NDQ2LDE0ICs0NDM2LDMgQEAKICAgICAtMC4wZgogICB9LAogfTsKLSNlbmRpZiAvLyBfX0JJT05JQ19fCi0KLVRFU1QobWF0aF90YW5mLCB0YW5mX2ludGVsKSB7Ci0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX3RhbmZfaW50ZWxfZGF0YSkvc2l6ZW9mKHRhbmZfaW50ZWxfZGF0YV90KTsgaSsrKSB7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKGdfdGFuZl9pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCB0YW5mKGdfdGFuZl9pbnRlbF9kYXRhW2ldLmNhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7Ci0gIH0KLSNlbHNlIC8vIF9fQklPTklDX18KLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOwotI2VuZGlmIC8vIF9fQklPTklDX18KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfdGVzdC5jcHAgYi90ZXN0cy9tYXRoX3Rlc3QuY3BwCmluZGV4IDIyMDNkYjkuLmUxNGQzZGQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21hdGhfdGVzdC5jcHAKKysrIGIvdGVzdHMvbWF0aF90ZXN0LmNwcApAQCAtMTQsNiArMTQsOSBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAorI2RlZmluZSBfR05VX1NPVVJDRSAxCisjaW5jbHVkZSA8bWF0aC5oPgorCiAvLyBUaGlzIGluY2x1ZGUgKGFuZCB0aGUgYXNzb2NpYXRlZCBkZWZpbml0aW9uIG9mIF9fdGVzdF9jYXB0dXJlX3NpZ25iaXQpCiAvLyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYW55IGZpbGVzIHRoYXQgaW5jbHVkZSA8Y21hdGg+IChndGVzdC5oIGluIHRoaXMgY2FzZSkuCiAvLwpAQCAtMjksNyArMzIsNiBAQAogLy8gc3VyZSB0aGF0IHdlJ3JlIHRlc3RpbmcgdGhlIGJpb25pYyB2ZXJzaW9uIG9mIHNpZ25iaXQuIFRoZSBDKysgbGlicmFyaWVzCiAvLyBhcmUgZnJlZSB0byByZWltcGxlbWVudCBzaWduYml0IG9yIGRlbGVnYXRlIHRvIGNvbXBpbGVyIGJ1aWx0aW5zIGlmIHRoZXkKIC8vIHBsZWFzZS4KLSNpbmNsdWRlIDxtYXRoLmg+CiAKIG5hbWVzcGFjZSB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgaW50IHRlc3RfY2FwdHVyZV9zaWduYml0KGNvbnN0IFQgaW4pIHsKQEAgLTQ2LDYgKzQ4LDggQEAKIH0KIH0KIAorI2luY2x1ZGUgIm1hdGhfZGF0YV90ZXN0LmgiCisKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiAjaW5jbHVkZSA8ZmVudi5oPgpAQCAtMTY3LDM5ICsxNzEsMzAgQEAKIH0KIAogVEVTVChtYXRoLCBfX2ZwY2xhc3NpZnlkKSB7Ci0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQorI2lmIGRlZmluZWQoX19HTElCQ19fKQorI2RlZmluZSBfX2ZwY2xhc3NpZnlkIF9fZnBjbGFzc2lmeQorI2VuZGlmCiAgIEFTU0VSVF9FUShGUF9JTkZJTklURSwgX19mcGNsYXNzaWZ5ZChIVUdFX1ZBTCkpOwogICBBU1NFUlRfRVEoRlBfTkFOLCBfX2ZwY2xhc3NpZnlkKG5hbigiIikpKTsKICAgQVNTRVJUX0VRKEZQX05PUk1BTCwgX19mcGNsYXNzaWZ5ZCgxLjApKTsKICAgQVNTRVJUX0VRKEZQX1NVQk5PUk1BTCwgX19mcGNsYXNzaWZ5ZChkb3VibGVfc3Vibm9ybWFsKCkpKTsKICAgQVNTRVJUX0VRKEZQX1pFUk8sIF9fZnBjbGFzc2lmeWQoMC4wKSk7Ci0jZWxzZSAvLyBfX0JJT05JQ19fCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOwotI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogVEVTVChtYXRoLCBfX2ZwY2xhc3NpZnlmKSB7Ci0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBBU1NFUlRfRVEoRlBfSU5GSU5JVEUsIF9fZnBjbGFzc2lmeWYoSFVHRV9WQUxGKSk7CiAgIEFTU0VSVF9FUShGUF9OQU4sIF9fZnBjbGFzc2lmeWYobmFuZigiIikpKTsKICAgQVNTRVJUX0VRKEZQX05PUk1BTCwgX19mcGNsYXNzaWZ5ZigxLjBmKSk7CiAgIEFTU0VSVF9FUShGUF9TVUJOT1JNQUwsIF9fZnBjbGFzc2lmeWYoZmxvYXRfc3Vibm9ybWFsKCkpKTsKICAgQVNTRVJUX0VRKEZQX1pFUk8sIF9fZnBjbGFzc2lmeWYoMC4wZikpOwotI2Vsc2UgLy8gX19CSU9OSUNfXwotICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKLSNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QobWF0aCwgX19mcGNsYXNzaWZ5bCkgewotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgRVhQRUNUX0VRKEZQX0lORklOSVRFLCBfX2ZwY2xhc3NpZnlsKEhVR0VfVkFMTCkpOwogICBFWFBFQ1RfRVEoRlBfTkFOLCBfX2ZwY2xhc3NpZnlsKG5hbmwoIiIpKSk7CiAgIEVYUEVDVF9FUShGUF9OT1JNQUwsIF9fZnBjbGFzc2lmeWwoMS4wTCkpOwogICBFWFBFQ1RfRVEoRlBfU1VCTk9STUFMLCBfX2ZwY2xhc3NpZnlsKGxkb3VibGVfc3Vibm9ybWFsKCkpKTsKICAgRVhQRUNUX0VRKEZQX1pFUk8sIF9fZnBjbGFzc2lmeWwoMC4wTCkpOwotI2Vsc2UgLy8gX19CSU9OSUNfXwotICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKLSNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QobWF0aCwgZmluaXRlZikgewpAQCAtMjA4LDMwICsyMDMsMjcgQEAKIH0KIAogVEVTVChtYXRoLCBfX2lzZmluaXRlKSB7Ci0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQorI2lmIGRlZmluZWQoX19HTElCQ19fKQorI2RlZmluZSBfX2lzZmluaXRlIF9fZmluaXRlCisjZW5kaWYKICAgQVNTRVJUX1RSVUUoX19pc2Zpbml0ZSgxMjMuMCkpOwogICBBU1NFUlRfRkFMU0UoX19pc2Zpbml0ZShIVUdFX1ZBTCkpOwotI2Vsc2UgLy8gX19CSU9OSUNfXwotICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKLSNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QobWF0aCwgX19pc2Zpbml0ZWYpIHsKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCisjaWYgZGVmaW5lZChfX0dMSUJDX18pCisjZGVmaW5lIF9faXNmaW5pdGVmIF9fZmluaXRlZgorI2VuZGlmCiAgIEFTU0VSVF9UUlVFKF9faXNmaW5pdGVmKDEyMy4wZikpOwogICBBU1NFUlRfRkFMU0UoX19pc2Zpbml0ZWYoSFVHRV9WQUxGKSk7Ci0jZWxzZSAvLyBfX0JJT05JQ19fCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOwotI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogVEVTVChtYXRoLCBfX2lzZmluaXRlbCkgewotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyNpZiBkZWZpbmVkKF9fR0xJQkNfXykKKyNkZWZpbmUgX19pc2Zpbml0ZWwgX19maW5pdGVsCisjZW5kaWYKICAgQVNTRVJUX1RSVUUoX19pc2Zpbml0ZWwoMTIzLjBMKSk7CiAgIEFTU0VSVF9GQUxTRShfX2lzZmluaXRlbChIVUdFX1ZBTEwpKTsKLSNlbHNlIC8vIF9fQklPTklDX18KLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7Ci0jZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiBURVNUKG1hdGgsIGZpbml0ZSkgewpAQCAtMjgxLDcgKzI3Myw3IEBACiAgIEFTU0VSVF9UUlVFKF9faXNub3JtYWwoMTIzLjApKTsKICAgQVNTRVJUX0ZBTFNFKF9faXNub3JtYWwoZG91YmxlX3N1Ym5vcm1hbCgpKSk7CiAjZWxzZSAvLyBfX0JJT05JQ19fCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworICBHVEVTVF9MT0dfKElORk8pIDw8ICJnbGliYyBkb2Vzbid0IGhhdmUgX19pc25vcm1hbC5cbiI7CiAjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCkBAIC0yOTAsNyArMjgyLDcgQEAKICAgQVNTRVJUX1RSVUUoX19pc25vcm1hbGYoMTIzLjBmKSk7CiAgIEFTU0VSVF9GQUxTRShfX2lzbm9ybWFsZihmbG9hdF9zdWJub3JtYWwoKSkpOwogI2Vsc2UgLy8gX19CSU9OSUNfXwotICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiZ2xpYmMgZG9lc24ndCBoYXZlIF9faXNub3JtYWxmLlxuIjsKICNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKQEAgLTI5OSw3ICsyOTEsNyBAQAogICBBU1NFUlRfVFJVRShfX2lzbm9ybWFsbCgxMjMuMEwpKTsKICAgQVNTRVJUX0ZBTFNFKF9faXNub3JtYWxsKGxkb3VibGVfc3Vibm9ybWFsKCkpKTsKICNlbHNlIC8vIF9fQklPTklDX18KLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisgIEdURVNUX0xPR18oSU5GTykgPDwgImdsaWJjIGRvZXNuJ3QgaGF2ZSBfX2lzbm9ybWFsbC5cbiI7CiAjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCkBAIC0xMDMyLDEzICsxMDI0LDEzIEBACiBURVNUKG1hdGgsIG5leHRhZnRlcikgewogICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgbmV4dGFmdGVyKDAuMCwgMC4wKSk7CiAgIEFTU0VSVF9ET1VCTEVfRVEoNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQsIG5leHRhZnRlcigwLjAsIDEuMCkpOwotICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgbmV4dGFmdGVyKDAuMCwgLTEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKC00Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNCwgbmV4dGFmdGVyKDAuMCwgLTEuMCkpOwogfQogCiBURVNUKG1hdGgsIG5leHRhZnRlcmYpIHsKICAgQVNTRVJUX0ZMT0FUX0VRKDAuMGYsIG5leHRhZnRlcmYoMC4wZiwgMC4wZikpOwogICBBU1NFUlRfRkxPQVRfRVEoMS40MDEyOTg1ZS00NWYsIG5leHRhZnRlcmYoMC4wZiwgMS4wZikpOwotICBBU1NFUlRfRkxPQVRfRVEoMC4wZiwgbmV4dGFmdGVyZigwLjBmLCAtMS4wZikpOworICBBU1NFUlRfRkxPQVRfRVEoLTEuNDAxMjk4NWUtNDVmLCBuZXh0YWZ0ZXJmKDAuMGYsIC0xLjBmKSk7CiB9CiAKIFRFU1QobWF0aCwgbmV4dGFmdGVybCkgewpAQCAtMTA0NywxOSArMTAzOSwxOSBAQAogICAvLyBzaXplb2YoZG91YmxlKSA9PSBzaXplb2YobG9uZyBkb3VibGUpCiAgIGxvbmcgZG91YmxlIHNtYWxsZXN0X3Bvc2l0aXZlID0gbGRleHBsKDEuMEwsIExEQkxfTUlOX0VYUCAtIExEQkxfTUFOVF9ESUcpOwogICBBU1NFUlRfRE9VQkxFX0VRKHNtYWxsZXN0X3Bvc2l0aXZlLCBuZXh0YWZ0ZXJsKDAuMEwsIDEuMEwpKTsKLSAgQVNTRVJUX0RPVUJMRV9FUSgwLjBMLCBuZXh0YWZ0ZXJsKDAuMEwsIC0xLjBMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoLXNtYWxsZXN0X3Bvc2l0aXZlLCBuZXh0YWZ0ZXJsKDAuMEwsIC0xLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgbmV4dHRvd2FyZCkgewogICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgbmV4dHRvd2FyZCgwLjAsIDAuMEwpKTsKICAgQVNTRVJUX0RPVUJMRV9FUSg0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNCwgbmV4dHRvd2FyZCgwLjAsIDEuMEwpKTsKLSAgQVNTRVJUX0RPVUJMRV9FUSgwLjAsIG5leHR0b3dhcmQoMC4wLCAtMS4wTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKC00Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNCwgbmV4dHRvd2FyZCgwLjAsIC0xLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgbmV4dHRvd2FyZGYpIHsKICAgQVNTRVJUX0ZMT0FUX0VRKDAuMGYsIG5leHR0b3dhcmRmKDAuMGYsIDAuMEwpKTsKICAgQVNTRVJUX0ZMT0FUX0VRKDEuNDAxMjk4NWUtNDVmLCBuZXh0dG93YXJkZigwLjBmLCAxLjBMKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCBuZXh0dG93YXJkZigwLjBmLCAtMS4wTCkpOworICBBU1NFUlRfRkxPQVRfRVEoLTEuNDAxMjk4NWUtNDVmLCBuZXh0dG93YXJkZigwLjBmLCAtMS4wTCkpOwogfQogCiBURVNUKG1hdGgsIG5leHR0b3dhcmRsKSB7CkBAIC0xMDY4LDcgKzEwNjAsNyBAQAogICAvLyBzaXplb2YoZG91YmxlKSA9PSBzaXplb2YobG9uZyBkb3VibGUpCiAgIGxvbmcgZG91YmxlIHNtYWxsZXN0X3Bvc2l0aXZlID0gbGRleHBsKDEuMEwsIExEQkxfTUlOX0VYUCAtIExEQkxfTUFOVF9ESUcpOwogICBBU1NFUlRfRE9VQkxFX0VRKHNtYWxsZXN0X3Bvc2l0aXZlLCBuZXh0dG93YXJkbCgwLjBMLCAxLjBMKSk7Ci0gIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgbmV4dHRvd2FyZGwoMC4wTCwgLTEuMEwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgtc21hbGxlc3RfcG9zaXRpdmUsIG5leHR0b3dhcmRsKDAuMEwsIC0xLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgY29weXNpZ24pIHsKQEAgLTEwOTUsMTkgKzEwODcsMTkgQEAKIFRFU1QobWF0aCwgc2lnbmlmaWNhbmQpIHsKICAgQVNTRVJUX0RPVUJMRV9FUSgwLjAsIHNpZ25pZmljYW5kKDAuMCkpOwogICBBU1NFUlRfRE9VQkxFX0VRKDEuMiwgc2lnbmlmaWNhbmQoMS4yKSk7Ci0gIEFTU0VSVF9ET1VCTEVfRVEoMS41Mzc1LCBzaWduaWZpY2FuZCgxMi4zKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS41MzEyNSwgc2lnbmlmaWNhbmQoMTIuMjUpKTsKIH0KIAogVEVTVChtYXRoLCBzaWduaWZpY2FuZGYpIHsKICAgQVNTRVJUX0ZMT0FUX0VRKDAuMGYsIHNpZ25pZmljYW5kZigwLjBmKSk7CiAgIEFTU0VSVF9GTE9BVF9FUSgxLjJmLCBzaWduaWZpY2FuZGYoMS4yZikpOwotICBBU1NFUlRfRkxPQVRfRVEoMS41Mzc1Ziwgc2lnbmlmaWNhbmRmKDEyLjNmKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjUzMTI1Ziwgc2lnbmlmaWNhbmRmKDEyLjI1ZikpOwogfQogCiBURVNUKG1hdGgsIHNpZ25pZmljYW5kbCkgewogICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIHNpZ25pZmljYW5kbCgwLjBMKSk7CiAgIEFTU0VSVF9ET1VCTEVfRVEoMS4yTCwgc2lnbmlmaWNhbmRsKDEuMkwpKTsKLSAgQVNTRVJUX0RPVUJMRV9FUSgxLjUzNzVMLCBzaWduaWZpY2FuZGwoMTIuM0wpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjUzMTI1TCwgc2lnbmlmaWNhbmRsKDEyLjI1TCkpOwogfQogCiBURVNUKG1hdGgsIHNjYWxiKSB7CkBAIC0xMTU2LDcgKzExNDgsNyBAQAogICBBU1NFUlRfRE9VQkxFX0VRKGxvZygyNC4wKSwgZ2FtbWFfcig1LjAsICZzaWduKSk7CiAgIEFTU0VSVF9FUSgxLCBzaWduKTsKICNlbHNlIC8vIF9fQklPTklDX18KLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisgIEdURVNUX0xPR18oSU5GTykgPDwgImdsaWJjIGRvZXNuJ3QgaGF2ZSBnYW1tYV9yLlxuIjsKICNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKQEAgLTExNjYsNyArMTE1OCw3IEBACiAgIEFTU0VSVF9GTE9BVF9FUShsb2dmKDI0LjBmKSwgZ2FtbWFmX3IoNS4wZiwgJnNpZ24pKTsKICAgQVNTRVJUX0VRKDEsIHNpZ24pOwogI2Vsc2UgLy8gX19CSU9OSUNfXwotICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiZ2xpYmMgZG9lc24ndCBoYXZlIGdhbW1hZl9yLlxuIjsKICNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKQEAgLTExODgsMTIgKzExODAsNTEgQEAKICAgQVNTRVJUX0VRKDEsIHNpZ24pOwogfQogCitURVNUKG1hdGgsIGxnYW1tYV9yXzE3NDcxODgzKSB7CisgIGludCBzaWduOworCisgIHNpZ24gPSAwOworICBBU1NFUlRfRE9VQkxFX0VRKEhVR0VfVkFMLCBsZ2FtbWFfcigwLjAsICZzaWduKSk7CisgIEFTU0VSVF9FUSgxLCBzaWduKTsKKyAgc2lnbiA9IDA7CisgIEFTU0VSVF9ET1VCTEVfRVEoSFVHRV9WQUwsIGxnYW1tYV9yKC0wLjAsICZzaWduKSk7CisgIEFTU0VSVF9FUSgtMSwgc2lnbik7Cit9CisKIFRFU1QobWF0aCwgbGdhbW1hZl9yKSB7CiAgIGludCBzaWduOwogICBBU1NFUlRfRkxPQVRfRVEobG9nZigyNC4wZiksIGxnYW1tYWZfcig1LjBmLCAmc2lnbikpOwogICBBU1NFUlRfRVEoMSwgc2lnbik7CiB9CiAKK1RFU1QobWF0aCwgbGdhbW1hZl9yXzE3NDcxODgzKSB7CisgIGludCBzaWduOworCisgIHNpZ24gPSAwOworICBBU1NFUlRfRkxPQVRfRVEoSFVHRV9WQUxGLCBsZ2FtbWFmX3IoMC4wZiwgJnNpZ24pKTsKKyAgQVNTRVJUX0VRKDEsIHNpZ24pOworICBzaWduID0gMDsKKyAgQVNTRVJUX0ZMT0FUX0VRKEhVR0VfVkFMRiwgbGdhbW1hZl9yKC0wLjBmLCAmc2lnbikpOworICBBU1NFUlRfRVEoLTEsIHNpZ24pOworfQorCitURVNUKG1hdGgsIGxnYW1tYWxfcikgeworICBpbnQgc2lnbjsKKyAgQVNTRVJUX0RPVUJMRV9FUShsb2coMjQuMEwpLCBsZ2FtbWFfcig1LjBMLCAmc2lnbikpOworICBBU1NFUlRfRVEoMSwgc2lnbik7Cit9CisKK1RFU1QobWF0aCwgbGdhbW1hbF9yXzE3NDcxODgzKSB7CisgIGludCBzaWduOworCisgIHNpZ24gPSAwOworICBBU1NFUlRfRE9VQkxFX0VRKEhVR0VfVkFMLCBsZ2FtbWFsX3IoMC4wTCwgJnNpZ24pKTsKKyAgQVNTRVJUX0VRKDEsIHNpZ24pOworICBzaWduID0gMDsKKyAgQVNTRVJUX0RPVUJMRV9FUShIVUdFX1ZBTCwgbGdhbW1hbF9yKC0wLjBMLCAmc2lnbikpOworICBBU1NFUlRfRVEoLTEsIHNpZ24pOworfQorCiBURVNUKG1hdGgsIHRnYW1tYSkgewogICBBU1NFUlRfRE9VQkxFX0VRKDI0LjAsIHRnYW1tYSg1LjApKTsKIH0KQEAgLTEzNDcsMyArMTM3OCw3MyBAQAogICBBU1NFUlRfVFJVRShuZXh0YWZ0ZXJmKDEuMGYsIDAuMGYpIC0gMS4wZiA8IDAuMGYpOwogICBBU1NFUlRfVFJVRShuZXh0YWZ0ZXJsKDEuMEwsIDAuMEwpIC0gMS4wTCA8IDAuMEwpOwogfQorCisjaW5jbHVkZSAibWF0aF9jb3NfaW50ZWxfZGF0YS5oIgorVEVTVChtYXRoLCBjb3NfaW50ZWwpIHsKKyAgRG9NYXRoRGF0YVRlc3Q8MT4oZ19jb3NfaW50ZWxfZGF0YSwgY29zKTsKK30KKworI2luY2x1ZGUgIm1hdGhfY29zZl9pbnRlbF9kYXRhLmgiCitURVNUKG1hdGgsIGNvc2ZfaW50ZWwpIHsKKyAgRG9NYXRoRGF0YVRlc3Q8MT4oZ19jb3NmX2ludGVsX2RhdGEsIGNvc2YpOworfQorCisjaW5jbHVkZSAibWF0aF9leHBfaW50ZWxfZGF0YS5oIgorVEVTVChtYXRoLCBleHBfaW50ZWwpIHsKKyAgRG9NYXRoRGF0YVRlc3Q8MT4oZ19leHBfaW50ZWxfZGF0YSwgZXhwKTsKK30KKworI2luY2x1ZGUgIm1hdGhfZXhwZl9pbnRlbF9kYXRhLmgiCitURVNUKG1hdGgsIGV4cGZfaW50ZWwpIHsKKyAgRG9NYXRoRGF0YVRlc3Q8MT4oZ19leHBmX2ludGVsX2RhdGEsIGV4cGYpOworfQorCisjaW5jbHVkZSAibWF0aF9sb2dfaW50ZWxfZGF0YS5oIgorVEVTVChtYXRoLCBsb2dfaW50ZWwpIHsKKyAgRG9NYXRoRGF0YVRlc3Q8MT4oZ19sb2dfaW50ZWxfZGF0YSwgbG9nKTsKK30KKworI2luY2x1ZGUgIm1hdGhfbG9nZl9pbnRlbF9kYXRhLmgiCitURVNUKG1hdGgsIGxvZ2ZfaW50ZWwpIHsKKyAgRG9NYXRoRGF0YVRlc3Q8MT4oZ19sb2dmX2ludGVsX2RhdGEsIGxvZ2YpOworfQorCisjaW5jbHVkZSAibWF0aF9wb3dfaW50ZWxfZGF0YS5oIgorVEVTVChtYXRoLCBwb3dfaW50ZWwpIHsKKyAgRG9NYXRoRGF0YVRlc3Q8MT4oZ19wb3dfaW50ZWxfZGF0YSwgcG93KTsKK30KKworI2luY2x1ZGUgIm1hdGhfcG93Zl9pbnRlbF9kYXRhLmgiCitURVNUKG1hdGgsIHBvd2ZfaW50ZWwpIHsKKyAgRG9NYXRoRGF0YVRlc3Q8MT4oZ19wb3dmX2ludGVsX2RhdGEsIHBvd2YpOworfQorCisjaW5jbHVkZSAibWF0aF9zaW5faW50ZWxfZGF0YS5oIgorVEVTVChtYXRoLCBzaW5faW50ZWwpIHsKKyAgRG9NYXRoRGF0YVRlc3Q8MT4oZ19zaW5faW50ZWxfZGF0YSwgc2luKTsKK30KKworI2luY2x1ZGUgIm1hdGhfc2luY29zX2ludGVsX2RhdGEuaCIKK1RFU1QobWF0aCwgc2luY29zX2ludGVsKSB7CisgIERvTWF0aERhdGFUZXN0PDE+KGdfc2luY29zX2ludGVsX2RhdGEsIHNpbmNvcyk7Cit9CisKKyNpbmNsdWRlICJtYXRoX3NpbmNvc2ZfaW50ZWxfZGF0YS5oIgorVEVTVChtYXRoLCBzaW5jb3NmX2ludGVsKSB7CisgIERvTWF0aERhdGFUZXN0PDE+KGdfc2luY29zZl9pbnRlbF9kYXRhLCBzaW5jb3NmKTsKK30KKworI2luY2x1ZGUgIm1hdGhfc2luZl9pbnRlbF9kYXRhLmgiCitURVNUKG1hdGgsIHNpbmZfaW50ZWwpIHsKKyAgRG9NYXRoRGF0YVRlc3Q8MT4oZ19zaW5mX2ludGVsX2RhdGEsIHNpbmYpOworfQorCisjaW5jbHVkZSAibWF0aF90YW5faW50ZWxfZGF0YS5oIgorVEVTVChtYXRoLCB0YW5faW50ZWwpIHsKKyAgRG9NYXRoRGF0YVRlc3Q8MT4oZ190YW5faW50ZWxfZGF0YSwgdGFuKTsKK30KKworI2luY2x1ZGUgIm1hdGhfdGFuZl9pbnRlbF9kYXRhLmgiCitURVNUKG1hdGgsIHRhbmZfaW50ZWwpIHsKKyAgRG9NYXRoRGF0YVRlc3Q8MT4oZ190YW5mX2ludGVsX2RhdGEsIHRhbmYpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbW50ZW50X3Rlc3QuY3BwIGIvdGVzdHMvbW50ZW50X3Rlc3QuY3BwCmluZGV4IDYzN2NiNTIuLmExMDI4NDkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21udGVudF90ZXN0LmNwcAorKysgYi90ZXN0cy9tbnRlbnRfdGVzdC5jcHAKQEAgLTE5LDE2ICsxOSwyMiBAQAogI2luY2x1ZGUgPG1udGVudC5oPgogCiBURVNUKG1udGVudCwgbW50ZW50X3Ntb2tlKSB7Ci0gIEZJTEUqIGZwID0gc2V0bW50ZW50KCIvbm8vbW50L3RhYi9vbi9hbmRyb2lkIiwgInIiKTsKLSAgQVNTRVJUX1RSVUUoZnAgPT0gTlVMTCk7CisgIEZJTEUqIGZwID0gc2V0bW50ZW50KCIvcHJvYy9tb3VudHMiLCAiciIpOworICBBU1NFUlRfVFJVRShmcCAhPSBOVUxMKTsKIAotI2lmIF9fQklPTklDX18gLy8gZ2xpYmMgZG9lc24ndCBsZXQgeW91IGNhbGwgZ2V0bW50ZW50L2dldG1udGVudF9yIHdpdGggYSBOVUxMIEZJTEUqLgotICBBU1NFUlRfVFJVRShnZXRtbnRlbnQoZnApID09IE5VTEwpOworICBBU1NFUlRfVFJVRShnZXRtbnRlbnQoZnApICE9IE5VTEwpOwogCi0gIHN0cnVjdCBtbnRlbnQgbWJ1ZjsKLSAgY2hhciBjYnVmWzMyXTsKLSAgQVNTRVJUX1RSVUUoZ2V0bW50ZW50X3IoZnAsICZtYnVmLCBjYnVmLCBzaXplb2YoY2J1ZikpID09IE5VTEwpOwotI2VuZGlmCisgIGJvb2wgc2F3X3Byb2MgPSBmYWxzZTsKKworICBzdHJ1Y3QgbW50ZW50IGVudHJ5OworICBjaGFyIGJ1ZltCVUZTSVpdOworICB3aGlsZSAoZ2V0bW50ZW50X3IoZnAsICZlbnRyeSwgYnVmLCBzaXplb2YoYnVmKSkgIT0gTlVMTCkgeworICAgIGlmIChzdHJjbXAoZW50cnkubW50X2ZzbmFtZSwgInByb2MiKSA9PSAwICYmIHN0cmNtcChlbnRyeS5tbnRfZGlyLCAiL3Byb2MiKSA9PSAwKSB7CisgICAgICBzYXdfcHJvYyA9IHRydWU7CisgICAgfQorICB9CisKKyAgQVNTRVJUX1RSVUUoc2F3X3Byb2MpOwogCiAgIEFTU0VSVF9FUSgxLCBlbmRtbnRlbnQoZnApKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL25ldGRiX3Rlc3QuY3BwIGIvdGVzdHMvbmV0ZGJfdGVzdC5jcHAKaW5kZXggMzNmNmMwMS4uMGNlYmU0ZSAxMDA2NDQKLS0tIGEvdGVzdHMvbmV0ZGJfdGVzdC5jcHAKKysrIGIvdGVzdHMvbmV0ZGJfdGVzdC5jcHAKQEAgLTIxLDkgKzIxLDY3IEBACiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAKK1RFU1QobmV0ZGIsIGdldGFkZHJpbmZvX05VTExfaG9zdCkgeworICAvLyBJdCdzIG9rYXkgZm9yIHRoZSBob3N0IGFyZ3VtZW50IHRvIGJlIE5VTEwsIGFzIGxvbmcgYXMgc2VydmljZSBpc24ndC4KKyAgYWRkcmluZm8qIGFpID0gTlVMTDsKKyAgQVNTRVJUX0VRKDAsIGdldGFkZHJpbmZvKE5VTEwsICJzbXRwIiwgTlVMTCwgJmFpKSk7CisgIC8vIChzb2NrYWRkcl9pbjo6c2luX3BvcnQgYW5kIHNvY2thZGRyX2luNjo6c2luNl9wb3J0IG92ZXJsYXAuKQorICBBU1NFUlRfRVEoMjVVLCBudG9ocyhyZWludGVycHJldF9jYXN0PHNvY2thZGRyX2luKj4oYWktPmFpX2FkZHIpLT5zaW5fcG9ydCkpOworICBmcmVlYWRkcmluZm8oYWkpOworfQorCitURVNUKG5ldGRiLCBnZXRhZGRyaW5mb19OVUxMX3NlcnZpY2UpIHsKKyAgLy8gSXQncyBva2F5IGZvciB0aGUgc2VydmljZSBhcmd1bWVudCB0byBiZSBOVUxMLCBhcyBsb25nIGFzIGhvc3QgaXNuJ3QuCisgIGFkZHJpbmZvKiBhaSA9IE5VTEw7CisgIEFTU0VSVF9FUSgwLCBnZXRhZGRyaW5mbygibG9jYWxob3N0IiwgTlVMTCwgTlVMTCwgJmFpKSk7CisgIEFTU0VSVF9UUlVFKGFpICE9IE5VTEwpOworICBmcmVlYWRkcmluZm8oYWkpOworfQorCiBURVNUKG5ldGRiLCBnZXRhZGRyaW5mb19OVUxMX2hpbnRzKSB7CiAgIGFkZHJpbmZvKiBhaSA9IE5VTEw7CiAgIEFTU0VSVF9FUSgwLCBnZXRhZGRyaW5mbygibG9jYWxob3N0IiwgIjk5OTkiLCBOVUxMLCAmYWkpKTsKKworICBib29sIHNhd190Y3AgPSBmYWxzZTsKKyAgYm9vbCBzYXdfdWRwID0gZmFsc2U7CisgIGZvciAoYWRkcmluZm8qIHAgPSBhaTsgcCAhPSBOVUxMOyBwID0gcC0+YWlfbmV4dCkgeworICAgIEFTU0VSVF9UUlVFKHAtPmFpX2ZhbWlseSA9PSBBRl9JTkVUIHx8IHAtPmFpX2ZhbWlseSA9PSBBRl9JTkVUNik7CisgICAgaWYgKHAtPmFpX3NvY2t0eXBlID09IFNPQ0tfU1RSRUFNKSB7CisgICAgICBBU1NFUlRfRVEoSVBQUk9UT19UQ1AsIHAtPmFpX3Byb3RvY29sKTsKKyAgICAgIHNhd190Y3AgPSB0cnVlOworICAgIH0gZWxzZSBpZiAocC0+YWlfc29ja3R5cGUgPT0gU09DS19ER1JBTSkgeworICAgICAgQVNTRVJUX0VRKElQUFJPVE9fVURQLCBwLT5haV9wcm90b2NvbCk7CisgICAgICBzYXdfdWRwID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgQVNTRVJUX1RSVUUoc2F3X3RjcCk7CisgIEFTU0VSVF9UUlVFKHNhd191ZHApOworCisgIGZyZWVhZGRyaW5mbyhhaSk7Cit9CisKK1RFU1QobmV0ZGIsIGdldGFkZHJpbmZvX3NlcnZpY2VfbG9va3VwKSB7CisgIGFkZHJpbmZvKiBhaSA9IE5VTEw7CisgIEFTU0VSVF9FUSgwLCBnZXRhZGRyaW5mbygibG9jYWxob3N0IiwgInNtdHAiLCBOVUxMLCAmYWkpKTsKKyAgQVNTRVJUX0VRKFNPQ0tfU1RSRUFNLCBhaS0+YWlfc29ja3R5cGUpOworICBBU1NFUlRfRVEoSVBQUk9UT19UQ1AsIGFpLT5haV9wcm90b2NvbCk7CisgIEFTU0VSVF9FUSgyNSwgbnRvaHMocmVpbnRlcnByZXRfY2FzdDxzb2NrYWRkcl9pbio+KGFpLT5haV9hZGRyKS0+c2luX3BvcnQpKTsKKyAgZnJlZWFkZHJpbmZvKGFpKTsKK30KKworVEVTVChuZXRkYiwgZ2V0YWRkcmluZm9faGludHMpIHsKKyAgYWRkcmluZm8gaGludHM7CisgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworICBoaW50cy5haV9mYW1pbHkgPSBBRl9VTlNQRUM7CisgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisgIGhpbnRzLmFpX3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CisKKyAgYWRkcmluZm8qIGFpID0gTlVMTDsKKyAgQVNTRVJUX0VRKDAsIGdldGFkZHJpbmZvKCAibG9jYWxob3N0IiwgIjk5OTkiLCAmaGludHMsICZhaSkpOworICBBU1NFUlRfRVEoQUZfSU5FVCwgYWktPmFpX2ZhbWlseSk7CisgIEFTU0VSVF9FUShTT0NLX1NUUkVBTSwgYWktPmFpX3NvY2t0eXBlKTsKKyAgQVNTRVJUX0VRKElQUFJPVE9fVENQLCBhaS0+YWlfcHJvdG9jb2wpOworICBBU1NFUlRfVFJVRShhaS0+YWlfbmV4dCA9PSBOVUxMKTsKICAgZnJlZWFkZHJpbmZvKGFpKTsKIH0KIApAQCAtNTUsMyArMTEzLDM3IEBACiAgIEFTU0VSVF9TVFJFUSgiOjoiLCB0bXApOwogICBBU1NFUlRfRVEoRUFJX0ZBTUlMWSwgZ2V0bmFtZWluZm8oc2EsIHRvb19saXR0bGUsIHRtcCwgc2l6ZW9mKHRtcCksIE5VTEwsIDAsIE5JX05VTUVSSUNIT1NUKSk7CiB9CisKK1RFU1QobmV0ZGIsIGdldGhvc3RieW5hbWUpIHsKKyAgaG9zdGVudCogaGVudCA9IGdldGhvc3RieW5hbWUoImxvY2FsaG9zdCIpOworICBBU1NFUlRfVFJVRShoZW50ICE9IE5VTEwpOworICBBU1NFUlRfRVEoaGVudC0+aF9hZGRydHlwZSwgQUZfSU5FVCk7CisgIEFTU0VSVF9FUShoZW50LT5oX2FkZHJbMF0sIDEyNyk7CisgIEFTU0VSVF9FUShoZW50LT5oX2FkZHJbMV0sIDApOworICBBU1NFUlRfRVEoaGVudC0+aF9hZGRyWzJdLCAwKTsKKyAgQVNTRVJUX0VRKGhlbnQtPmhfYWRkclszXSwgMSk7Cit9CisKK1RFU1QobmV0ZGIsIGdldHNlcnZieW5hbWUpIHsKKyAgLy8gc210cCBpcyBUQ1Atb25seSwgc28gd2Uga25vdyB3ZSdsbCBnZXQgMjUvdGNwIGJhY2suCisgIHNlcnZlbnQqIHMgPSBnZXRzZXJ2YnluYW1lKCJzbXRwIiwgTlVMTCk7CisgIEFTU0VSVF9UUlVFKHMgIT0gTlVMTCk7CisgIEFTU0VSVF9FUSgyNSwgbnRvaHMocy0+c19wb3J0KSk7CisgIEFTU0VSVF9TVFJFUSgidGNwIiwgcy0+c19wcm90byk7CisKKyAgLy8gV2UgZ2V0IHRoZSBzYW1lIHJlc3VsdCBieSBleHBsaWNpdGx5IGFza2luZyBmb3IgdGNwLgorICBzID0gZ2V0c2VydmJ5bmFtZSgic210cCIsICJ0Y3AiKTsKKyAgQVNTRVJUX1RSVUUocyAhPSBOVUxMKTsKKyAgQVNTRVJUX0VRKDI1LCBudG9ocyhzLT5zX3BvcnQpKTsKKyAgQVNTRVJUX1NUUkVRKCJ0Y3AiLCBzLT5zX3Byb3RvKTsKKworICAvLyBBbmQgd2UgZ2V0IGEgZmFpbHVyZSBpZiB3ZSBleHBsaWNpdGx5IGFzayBmb3IgdWRwLgorICBzID0gZ2V0c2VydmJ5bmFtZSgic210cCIsICJ1ZHAiKTsKKyAgQVNTRVJUX1RSVUUocyA9PSBOVUxMKTsKKworICAvLyBCdXQgdGhlcmUgYXJlIGFjdHVhbGx5IHVkcCBzZXJ2aWNlcy4KKyAgcyA9IGdldHNlcnZieW5hbWUoImVjaG8iLCAidWRwIik7CisgIEFTU0VSVF9UUlVFKHMgIT0gTlVMTCk7CisgIEFTU0VSVF9FUSg3LCBudG9ocyhzLT5zX3BvcnQpKTsKKyAgQVNTRVJUX1NUUkVRKCJ1ZHAiLCBzLT5zX3Byb3RvKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3B0aHJlYWRfdGVzdC5jcHAgYi90ZXN0cy9wdGhyZWFkX3Rlc3QuY3BwCmluZGV4IDMyYmI1NGMuLjc5NzQ2OGUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3B0aHJlYWRfdGVzdC5jcHAKKysrIGIvdGVzdHMvcHRocmVhZF90ZXN0LmNwcApAQCAtMTYsNiArMTYsMTEgQEAKIAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKKyNpbmNsdWRlICJwcml2YXRlL1Njb3BlR3VhcmQuaCIKKyNpbmNsdWRlICJCaW9uaWNEZWF0aFRlc3QuaCIKKyNpbmNsdWRlICJTY29wZWRTaWduYWxIYW5kbGVyLmgiCisjaW5jbHVkZSAiZ3Rlc3RfZXguaCIKKwogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTI3LDggKzMyLDYgQEAKICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSNpbmNsdWRlICJwcml2YXRlL1Njb3BlR3VhcmQuaCIKLSNpbmNsdWRlICJTY29wZWRTaWduYWxIYW5kbGVyLmgiCiAKIFRFU1QocHRocmVhZCwgcHRocmVhZF9rZXlfY3JlYXRlKSB7CiAgIHB0aHJlYWRfa2V5X3Qga2V5OwpAQCAtMzgsMzcgKzQxLDcxIEBACiAgIEFTU0VSVF9FUShFSU5WQUwsIHB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpKTsKIH0KIAotVEVTVChwdGhyZWFkLCBwdGhyZWFkX2tleV9jcmVhdGVfbG90cykgewotI2lmIGRlZmluZWQoX19CSU9OSUNfXykgLy8gZ2xpYmMgdXNlcyBrZXlzIGludGVybmFsbHkgdGhhdCBpdHMgc3lzY29uZiB2YWx1ZSBkb2Vzbid0IGFjY291bnQgZm9yLgorVEVTVChwdGhyZWFkLCBwdGhyZWFkX2tleXNfbWF4KSB7CiAgIC8vIFBPU0lYIHNheXMgUFRIUkVBRF9LRVlTX01BWCBzaG91bGQgYmUgYXQgbGVhc3QgMTI4LgogICBBU1NFUlRfR0UoUFRIUkVBRF9LRVlTX01BWCwgMTI4KTsKK30KIAorVEVTVChwdGhyZWFkLCBfU0NfVEhSRUFEX0tFWVNfTUFYX2JpZ19lbm91Z2hfZm9yX1BPU0lYKSB7CisgIC8vIHN5c2NvbmYgc2hvdWxkbid0IHJldHVybiBhIHNtYWxsZXIgdmFsdWUuCisgIGludCBzeXNjb25mX21heCA9IHN5c2NvbmYoX1NDX1RIUkVBRF9LRVlTX01BWCk7CisgIEFTU0VSVF9HRShzeXNjb25mX21heCwgUFRIUkVBRF9LRVlTX01BWCk7Cit9CisKK1RFU1QocHRocmVhZCwgcHRocmVhZF9rZXlfbWFueV9kaXN0aW5jdCkgeworICAvLyBXZSBzaG91bGQgYmUgYWJsZSB0byBhbGxvY2F0ZSBhdCBsZWFzdCB0aGlzIG1hbnkga2V5cy4KKyAgaW50IG5rZXlzID0gc3lzY29uZihfU0NfVEhSRUFEX0tFWVNfTUFYKSAvIDI7CisgIHN0ZDo6dmVjdG9yPHB0aHJlYWRfa2V5X3Q+IGtleXM7CisKKyAgYXV0byBzY29wZV9ndWFyZCA9IG1ha2Vfc2NvcGVfZ3VhcmQoWyZrZXlzXXsKKyAgICBmb3IgKGF1dG8ga2V5IDoga2V5cykgeworICAgICAgRVhQRUNUX0VRKDAsIHB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpKTsKKyAgICB9CisgIH0pOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgbmtleXM7ICsraSkgeworICAgIHB0aHJlYWRfa2V5X3Qga2V5OworICAgIC8vIElmIHRoaXMgZmFpbHMsIGl0J3MgbGlrZWx5IHRoYXQgR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUl9DT1VOVCBpcworICAgIC8vIHdyb25nLgorICAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2tleV9jcmVhdGUoJmtleSwgTlVMTCkpIDw8IGkgPDwgIiBvZiAiIDw8IG5rZXlzOworICAgIGtleXMucHVzaF9iYWNrKGtleSk7CisgICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfc2V0c3BlY2lmaWMoa2V5LCByZWludGVycHJldF9jYXN0PHZvaWQqPihpKSkpOworICB9CisKKyAgZm9yIChpbnQgaSA9IGtleXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICBBU1NFUlRfRVEocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaSksIHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5cy5iYWNrKCkpKTsKKyAgICBwdGhyZWFkX2tleV90IGtleSA9IGtleXMuYmFjaygpOworICAgIGtleXMucG9wX2JhY2soKTsKKyAgICBBU1NFUlRfRVEoMCwgcHRocmVhZF9rZXlfZGVsZXRlKGtleSkpOworICB9Cit9CisKK1RFU1QocHRocmVhZCwgcHRocmVhZF9rZXlfRUFHQUlOKSB7CiAgIGludCBzeXNjb25mX21heCA9IHN5c2NvbmYoX1NDX1RIUkVBRF9LRVlTX01BWCk7CiAKLSAgLy8gc3lzY29uZiBzaG91bGRuJ3QgcmV0dXJuIGEgc21hbGxlciB2YWx1ZS4KLSAgQVNTRVJUX0dFKHN5c2NvbmZfbWF4LCBQVEhSRUFEX0tFWVNfTUFYKTsKLQotICAvLyBXZSBjYW4gYWxsb2NhdGUgX1NDX1RIUkVBRF9LRVlTX01BWCBrZXlzLgotICBzeXNjb25mX21heCAtPSAyOyAvLyAoRXhjZXB0IHRoYXQgZ3Rlc3QgdGFrZXMgdHdvIGZvciBpdHNlbGYuKQogICBzdGQ6OnZlY3RvcjxwdGhyZWFkX2tleV90PiBrZXlzOwotICBmb3IgKGludCBpID0gMDsgaSA8IHN5c2NvbmZfbWF4OyArK2kpIHsKKyAgaW50IHJ2ID0gMDsKKyAgLy8gVHdvIGtleXMgYXJlIHVzZWQgYnkgZ3Rlc3QsIHNvIHN5c2NvbmZfbWF4IHNob3VsZCBiZSBtb3JlIHRoYW4gd2UgYXJlCisgIC8vIGFsbG93ZWQgdG8gYWxsb2NhdGUgbm93LgorICBmb3IgKGludCBpID0gMDsgaSA8IHN5c2NvbmZfbWF4OyBpKyspIHsKICAgICBwdGhyZWFkX2tleV90IGtleTsKLSAgICAvLyBJZiB0aGlzIGZhaWxzLCBpdCdzIGxpa2VseSB0aGF0IEdMT0JBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVJfQ09VTlQgaXMgd3JvbmcuCi0gICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfa2V5X2NyZWF0ZSgma2V5LCBOVUxMKSkgPDwgaSA8PCAiIG9mICIgPDwgc3lzY29uZl9tYXg7CisgICAgcnYgPSBwdGhyZWFkX2tleV9jcmVhdGUoJmtleSwgTlVMTCk7CisgICAgaWYgKHJ2ID09IEVBR0FJTikgeworICAgICAgYnJlYWs7CisgICAgfQorICAgIEVYUEVDVF9FUSgwLCBydik7CiAgICAga2V5cy5wdXNoX2JhY2soa2V5KTsKICAgfQogCi0gIC8vIC4uLmFuZCB0aGF0IHJlYWxseSBpcyB0aGUgbWF4aW11bS4KLSAgcHRocmVhZF9rZXlfdCBrZXk7Ci0gIEFTU0VSVF9FUShFQUdBSU4sIHB0aHJlYWRfa2V5X2NyZWF0ZSgma2V5LCBOVUxMKSk7Ci0KLSAgLy8gKERvbid0IGxlYWsgYWxsIHRob3NlIGtleXMhKQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICBBU1NFUlRfRVEoMCwgcHRocmVhZF9rZXlfZGVsZXRlKGtleXNbaV0pKTsKKyAgLy8gRG9uJ3QgbGVhayBrZXlzLgorICBmb3IgKGF1dG8ga2V5IDoga2V5cykgeworICAgIEVYUEVDVF9FUSgwLCBwdGhyZWFkX2tleV9kZWxldGUoa2V5KSk7CiAgIH0KLSNlbHNlIC8vIF9fQklPTklDX18KLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7Ci0jZW5kaWYgLy8gX19CSU9OSUNfXworICBrZXlzLmNsZWFyKCk7CisKKyAgLy8gV2Ugc2hvdWxkIGhhdmUgZXZlbnR1YWxseSByZWFjaGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBrZXlzIGFuZCByZWNlaXZlZAorICAvLyBFQUdBSU4uCisgIEFTU0VSVF9FUShFQUdBSU4sIHJ2KTsKIH0KIAogVEVTVChwdGhyZWFkLCBwdGhyZWFkX2tleV9kZWxldGUpIHsKQEAgLTEwNiw2ICsxNDMsNyBAQAogICBBU1NFUlRfRVEoOTksIFdFWElUU1RBVFVTKHN0YXR1cykpOwogCiAgIEFTU0VSVF9FUShleHBlY3RlZCwgcHRocmVhZF9nZXRzcGVjaWZpYyhrZXkpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpKTsKIH0KIAogc3RhdGljIHZvaWQqIERpcnR5S2V5Rm4odm9pZCoga2V5KSB7CkBAIC0xMzMsNiArMTcxLDcgQEAKICAgQVNTRVJUX0VRKG51bGxwdHIsIHJlc3VsdCk7IC8vIE5vdCB+MCEKIAogICBBU1NFUlRfRVEoMCwgbXVubWFwKHN0YWNrLCBzdGFja19zaXplKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2tleV9kZWxldGUoa2V5KSk7CiB9CiAKIHN0YXRpYyB2b2lkKiBJZEZuKHZvaWQqIGFyZykgewpAQCAtMTY2LDggKzIwNSw3IEBACiAKIHN0YXRpYyB2b2lkIE1ha2VEZWFkVGhyZWFkKHB0aHJlYWRfdCYgdCkgewogICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQsIE5VTEwsIElkRm4sIE5VTEwpKTsKLSAgdm9pZCogcmVzdWx0OwotICBBU1NFUlRfRVEoMCwgcHRocmVhZF9qb2luKHQsICZyZXN1bHQpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfam9pbih0LCBOVUxMKSk7CiB9CiAKIFRFU1QocHRocmVhZCwgcHRocmVhZF9jcmVhdGUpIHsKQEAgLTE5OSw4ICsyMzcsNyBAQAogICBBc3NlcnREZXRhY2hlZCh0MSwgdHJ1ZSk7CiAKICAgLy8gLi4ucHRocmVhZF9qb2luIHNob3VsZCBmYWlsLgotICB2b2lkKiByZXN1bHQ7Ci0gIEFTU0VSVF9FUShFSU5WQUwsIHB0aHJlYWRfam9pbih0MSwgJnJlc3VsdCkpOworICBBU1NFUlRfRVEoRUlOVkFMLCBwdGhyZWFkX2pvaW4odDEsIE5VTEwpKTsKIH0KIAogVEVTVChwdGhyZWFkLCBwdGhyZWFkX25vX29wX2RldGFjaF9hZnRlcl9qb2luKSB7CkBAIC0yMjgsOCArMjY1LDcgQEAKIH0KIAogVEVTVChwdGhyZWFkLCBwdGhyZWFkX2pvaW5fc2VsZikgewotICB2b2lkKiByZXN1bHQ7Ci0gIEFTU0VSVF9FUShFREVBRExLLCBwdGhyZWFkX2pvaW4ocHRocmVhZF9zZWxmKCksICZyZXN1bHQpKTsKKyAgQVNTRVJUX0VRKEVERUFETEssIHB0aHJlYWRfam9pbihwdGhyZWFkX3NlbGYoKSwgTlVMTCkpOwogfQogCiBzdHJ1Y3QgVGVzdEJ1ZzM3NDEwIHsKQEAgLTI2OSw5ICszMDUsMTEgQEAKIAogLy8gRXZlbiB0aG91Z2ggdGhpcyBpc24ndCByZWFsbHkgYSBkZWF0aCB0ZXN0LCB3ZSBoYXZlIHRvIHNheSAiRGVhdGhUZXN0IiBoZXJlIHNvIGd0ZXN0IGtub3dzIHRvCiAvLyBydW4gdGhpcyB0ZXN0ICh3aGljaCBleGl0cyBub3JtYWxseSkgaW4gaXRzIG93biBwcm9jZXNzLgotVEVTVChwdGhyZWFkX0RlYXRoVGVzdCwgcHRocmVhZF9idWdfMzc0MTApIHsKKworY2xhc3MgcHRocmVhZF9EZWF0aFRlc3QgOiBwdWJsaWMgQmlvbmljRGVhdGhUZXN0IHt9OworCitURVNUX0YocHRocmVhZF9EZWF0aFRlc3QsIHB0aHJlYWRfYnVnXzM3NDEwKSB7CiAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc0MTAKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBBU1NFUlRfRVhJVChUZXN0QnVnMzc0MTA6Om1haW4oKSwgOjp0ZXN0aW5nOjpFeGl0ZWRXaXRoQ29kZSgwKSwgIiIpOwogfQogCkBAIC0zMjMsNTIgKzM2MSwyNSBAQAogfQogCiBURVNUKHB0aHJlYWQsIHB0aHJlYWRfc2V0bmFtZV9ucF9fdG9vX2xvbmcpIHsKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pIC8vIE5vdCBhbGwgYnVpbGQgc2VydmVycyBoYXZlIGEgbmV3IGVub3VnaCBnbGliYz8gVE9ETzogcmVtb3ZlIHdoZW4gdGhleSdyZSBvbiBncHJlY2lzZS4KICAgQVNTRVJUX0VRKEVSQU5HRSwgcHRocmVhZF9zZXRuYW1lX25wKHB0aHJlYWRfc2VsZigpLCAidGhpcyBuYW1lIGlzIGZhciB0b28gbG9uZyBmb3IgbGludXgiKSk7Ci0jZWxzZSAvLyBfX0JJT05JQ19fCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOwotI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogVEVTVChwdGhyZWFkLCBwdGhyZWFkX3NldG5hbWVfbnBfX3NlbGYpIHsKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pIC8vIE5vdCBhbGwgYnVpbGQgc2VydmVycyBoYXZlIGEgbmV3IGVub3VnaCBnbGliYz8gVE9ETzogcmVtb3ZlIHdoZW4gdGhleSdyZSBvbiBncHJlY2lzZS4KICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfc2V0bmFtZV9ucChwdGhyZWFkX3NlbGYoKSwgInNob3J0IDEiKSk7Ci0jZWxzZSAvLyBfX0JJT05JQ19fCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOwotI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogVEVTVChwdGhyZWFkLCBwdGhyZWFkX3NldG5hbWVfbnBfX290aGVyKSB7Ci0jaWYgZGVmaW5lZChfX0JJT05JQ19fKSAvLyBOb3QgYWxsIGJ1aWxkIHNlcnZlcnMgaGF2ZSBhIG5ldyBlbm91Z2ggZ2xpYmM/IFRPRE86IHJlbW92ZSB3aGVuIHRoZXkncmUgb24gZ3ByZWNpc2UuCi0gIC8vIEVtdWxhdG9yIGtlcm5lbHMgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgc2V0dGluZyB0aGUgbmFtZSBvZiBvdGhlciB0aHJlYWRzLgotICBjaGFyKiBmaWxlbmFtZSA9IE5VTEw7Ci0gIGFzcHJpbnRmKCZmaWxlbmFtZSwgIi9wcm9jL3NlbGYvdGFzay8lZC9jb21tIiwgZ2V0dGlkKCkpOwotICBzdHJ1Y3Qgc3RhdCBzYjsKLSAgYm9vbCBoYXNfY29tbSA9IChzdGF0KGZpbGVuYW1lLCAmc2IpICE9IC0xKTsKLSAgZnJlZShmaWxlbmFtZSk7Ci0KLSAgaWYgKGhhc19jb21tKSB7Ci0gICAgcHRocmVhZF90IHQxOwotICAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NyZWF0ZSgmdDEsIE5VTEwsIFNsZWVwRm4sIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDUpKSk7Ci0gICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfc2V0bmFtZV9ucCh0MSwgInNob3J0IDIiKSk7Ci0gIH0gZWxzZSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJza2lwcGluZyB0ZXN0OiB0aGlzIGtlcm5lbCBkb2Vzbid0IGhhdmUgL3Byb2Mvc2VsZi90YXNrL3RpZC9jb21tIGZpbGVzIVxuIik7Ci0gIH0KLSNlbHNlIC8vIF9fQklPTklDX18KLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7Ci0jZW5kaWYgLy8gX19CSU9OSUNfXworICBwdGhyZWFkX3QgdDE7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NyZWF0ZSgmdDEsIE5VTEwsIFNsZWVwRm4sIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDUpKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3NldG5hbWVfbnAodDEsICJzaG9ydCAyIikpOwogfQogCiBURVNUKHB0aHJlYWQsIHB0aHJlYWRfc2V0bmFtZV9ucF9fbm9fc3VjaF90aHJlYWQpIHsKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pIC8vIE5vdCBhbGwgYnVpbGQgc2VydmVycyBoYXZlIGEgbmV3IGVub3VnaCBnbGliYz8gVE9ETzogcmVtb3ZlIHdoZW4gdGhleSdyZSBvbiBncHJlY2lzZS4KICAgcHRocmVhZF90IGRlYWRfdGhyZWFkOwogICBNYWtlRGVhZFRocmVhZChkZWFkX3RocmVhZCk7CiAKICAgLy8gQ2FsbCBwdGhyZWFkX3NldG5hbWVfbnAgYWZ0ZXIgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZC4KLSAgQVNTRVJUX0VRKEVTUkNILCBwdGhyZWFkX3NldG5hbWVfbnAoZGVhZF90aHJlYWQsICJzaG9ydCAzIikpOwotI2Vsc2UgLy8gX19CSU9OSUNfXwotICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKLSNlbmRpZiAvLyBfX0JJT05JQ19fCisgIEFTU0VSVF9FUShFTk9FTlQsIHB0aHJlYWRfc2V0bmFtZV9ucChkZWFkX3RocmVhZCwgInNob3J0IDMiKSk7CiB9CiAKIFRFU1QocHRocmVhZCwgcHRocmVhZF9raWxsX18wKSB7CkBAIC00NzksOCArNDkwLDcgQEAKICAgcHRocmVhZF90IGRlYWRfdGhyZWFkOwogICBNYWtlRGVhZFRocmVhZChkZWFkX3RocmVhZCk7CiAKLSAgdm9pZCogcmVzdWx0OwotICBBU1NFUlRfRVEoRVNSQ0gsIHB0aHJlYWRfam9pbihkZWFkX3RocmVhZCwgJnJlc3VsdCkpOworICBBU1NFUlRfRVEoRVNSQ0gsIHB0aHJlYWRfam9pbihkZWFkX3RocmVhZCwgTlVMTCkpOwogfQogCiBURVNUKHB0aHJlYWQsIHB0aHJlYWRfa2lsbF9fbm9fc3VjaF90aHJlYWQpIHsKQEAgLTU0MSw4ICs1NTEsNyBAQAogICBzaXplX3QgcmVzdWx0OwogICBwdGhyZWFkX3QgdDsKICAgcHRocmVhZF9jcmVhdGUoJnQsICZhdHRyaWJ1dGVzLCBHZXRBY3R1YWxHdWFyZFNpemVGbiwgJnJlc3VsdCk7Ci0gIHZvaWQqIGpvaW5fcmVzdWx0OwotICBwdGhyZWFkX2pvaW4odCwgJmpvaW5fcmVzdWx0KTsKKyAgcHRocmVhZF9qb2luKHQsIE5VTEwpOwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01NTcsOCArNTY2LDcgQEAKICAgc2l6ZV90IHJlc3VsdDsKICAgcHRocmVhZF90IHQ7CiAgIHB0aHJlYWRfY3JlYXRlKCZ0LCAmYXR0cmlidXRlcywgR2V0QWN0dWFsU3RhY2tTaXplRm4sICZyZXN1bHQpOwotICB2b2lkKiBqb2luX3Jlc3VsdDsKLSAgcHRocmVhZF9qb2luKHQsICZqb2luX3Jlc3VsdCk7CisgIHB0aHJlYWRfam9pbih0LCBOVUxMKTsKICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzE0LDIyICs3MjIsMjQgQEAKIHN0YXRpYyB2b2lkIEF0Rm9ya0NoaWxkMSgpIHsgZ19hdGZvcmtfY2hpbGRfY2FsbHMgPSAoZ19hdGZvcmtfY2hpbGRfY2FsbHMgPDwgNCkgfCAxOyB9CiBzdGF0aWMgdm9pZCBBdEZvcmtDaGlsZDIoKSB7IGdfYXRmb3JrX2NoaWxkX2NhbGxzID0gKGdfYXRmb3JrX2NoaWxkX2NhbGxzIDw8IDQpIHwgMjsgfQogCi1URVNUKHB0aHJlYWQsIHB0aHJlYWRfYXRmb3JrKSB7Ci0gIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0Zm9yayhBdEZvcmtQcmVwYXJlMSwgQXRGb3JrUGFyZW50MSwgQXRGb3JrQ2hpbGQxKSk7Ci0gIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0Zm9yayhBdEZvcmtQcmVwYXJlMiwgQXRGb3JrUGFyZW50MiwgQXRGb3JrQ2hpbGQyKSk7CitURVNUKHB0aHJlYWQsIHB0aHJlYWRfYXRmb3JrX3Ntb2tlKSB7CisgIHRlc3RfaXNvbGF0ZWQoW10geworICAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0Zm9yayhBdEZvcmtQcmVwYXJlMSwgQXRGb3JrUGFyZW50MSwgQXRGb3JrQ2hpbGQxKSk7CisgICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXRmb3JrKEF0Rm9ya1ByZXBhcmUyLCBBdEZvcmtQYXJlbnQyLCBBdEZvcmtDaGlsZDIpKTsKIAotICBpbnQgcGlkID0gZm9yaygpOwotICBBU1NFUlRfTkUoLTEsIHBpZCkgPDwgc3RyZXJyb3IoZXJybm8pOworICAgIGludCBwaWQgPSBmb3JrKCk7CisgICAgQVNTRVJUX05FKC0xLCBwaWQpIDw8IHN0cmVycm9yKGVycm5vKTsKIAotICAvLyBDaGlsZCBhbmQgcGFyZW50IGNhbGxzIGFyZSBtYWRlIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgcmVnaXN0ZXJlZC4KLSAgaWYgKHBpZCA9PSAwKSB7Ci0gICAgQVNTRVJUX0VRKDB4MTIsIGdfYXRmb3JrX2NoaWxkX2NhbGxzKTsKLSAgICBfZXhpdCgwKTsKLSAgfQotICBBU1NFUlRfRVEoMHgxMiwgZ19hdGZvcmtfcGFyZW50X2NhbGxzKTsKKyAgICAvLyBDaGlsZCBhbmQgcGFyZW50IGNhbGxzIGFyZSBtYWRlIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgcmVnaXN0ZXJlZC4KKyAgICBpZiAocGlkID09IDApIHsKKyAgICAgIEFTU0VSVF9FUSgweDEyLCBnX2F0Zm9ya19jaGlsZF9jYWxscyk7CisgICAgICBfZXhpdCgwKTsKKyAgICB9CisgICAgQVNTRVJUX0VRKDB4MTIsIGdfYXRmb3JrX3BhcmVudF9jYWxscyk7CiAKLSAgLy8gUHJlcGFyZSBjYWxscyBhcmUgbWFkZSBpbiB0aGUgcmV2ZXJzZSBvcmRlci4KLSAgQVNTRVJUX0VRKDB4MjEsIGdfYXRmb3JrX3ByZXBhcmVfY2FsbHMpOworICAgIC8vIFByZXBhcmUgY2FsbHMgYXJlIG1hZGUgaW4gdGhlIHJldmVyc2Ugb3JkZXIuCisgICAgQVNTRVJUX0VRKDB4MjEsIGdfYXRmb3JrX3ByZXBhcmVfY2FsbHMpOworICB9KTsKIH0KIAogVEVTVChwdGhyZWFkLCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUpIHsKQEAgLTkwNywzICs5MTcsMTM3IEBACiAgIEVYUEVDVF9FUShzdGFja19zaXplLCBzdGFja19zaXplMik7CiAgIEFTU0VSVF9FUSg2NjY2VSwgc3RhY2tfc2l6ZSk7CiB9CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCitzdGF0aWMgdm9pZCogcHRocmVhZF9nZXR0aWRfbnBfaGVscGVyKHZvaWQqIGFyZykgeworICAqcmVpbnRlcnByZXRfY2FzdDxwaWRfdCo+KGFyZykgPSBnZXR0aWQoKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX2dldHRpZF9ucCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgQVNTRVJUX0VRKGdldHRpZCgpLCBwdGhyZWFkX2dldHRpZF9ucChwdGhyZWFkX3NlbGYoKSkpOworCisgIHBpZF90IHRfZ2V0dGlkX3Jlc3VsdDsKKyAgcHRocmVhZF90IHQ7CisgIHB0aHJlYWRfY3JlYXRlKCZ0LCBOVUxMLCBwdGhyZWFkX2dldHRpZF9ucF9oZWxwZXIsICZ0X2dldHRpZF9yZXN1bHQpOworCisgIHBpZF90IHRfcHRocmVhZF9nZXR0aWRfbnBfcmVzdWx0ID0gcHRocmVhZF9nZXR0aWRfbnAodCk7CisKKyAgcHRocmVhZF9qb2luKHQsIE5VTEwpOworCisgIEFTU0VSVF9FUSh0X2dldHRpZF9yZXN1bHQsIHRfcHRocmVhZF9nZXR0aWRfbnBfcmVzdWx0KTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmCit9CisKK3N0YXRpYyBzaXplX3QgY2xlYW51cF9jb3VudGVyID0gMDsKKworc3RhdGljIHZvaWQgQWJvcnRDbGVhbnVwUm91dGluZSh2b2lkKikgeworICBhYm9ydCgpOworfQorCitzdGF0aWMgdm9pZCBDb3VudENsZWFudXBSb3V0aW5lKHZvaWQqKSB7CisgICsrY2xlYW51cF9jb3VudGVyOworfQorCitzdGF0aWMgdm9pZCBQdGhyZWFkQ2xlYW51cFRlc3RlcigpIHsKKyAgcHRocmVhZF9jbGVhbnVwX3B1c2goQ291bnRDbGVhbnVwUm91dGluZSwgTlVMTCk7CisgIHB0aHJlYWRfY2xlYW51cF9wdXNoKENvdW50Q2xlYW51cFJvdXRpbmUsIE5VTEwpOworICBwdGhyZWFkX2NsZWFudXBfcHVzaChBYm9ydENsZWFudXBSb3V0aW5lLCBOVUxMKTsKKworICBwdGhyZWFkX2NsZWFudXBfcG9wKDApOyAvLyBQb3AgdGhlIGFib3J0IHdpdGhvdXQgZXhlY3V0aW5nIGl0LgorICBwdGhyZWFkX2NsZWFudXBfcG9wKDEpOyAvLyBQb3Agb25lIGNvdW50IHdoaWxlIGV4ZWN1dGluZyBpdC4KKyAgQVNTRVJUX0VRKDFVLCBjbGVhbnVwX2NvdW50ZXIpOworICAvLyBFeGl0IHdoaWxlIHRoZSBvdGhlciBjb3VudCBpcyBzdGlsbCBvbiB0aGUgY2xlYW51cCBzdGFjay4KKyAgcHRocmVhZF9leGl0KE5VTEwpOworCisgIC8vIENhbGxzIHRvIHB0aHJlYWRfY2xlYW51cF9wb3AvcHRocmVhZF9jbGVhbnVwX3B1c2ggbXVzdCBhbHdheXMgYmUgYmFsYW5jZWQuCisgIHB0aHJlYWRfY2xlYW51cF9wb3AoMCk7Cit9CisKK3N0YXRpYyB2b2lkKiBQdGhyZWFkQ2xlYW51cFN0YXJ0Um91dGluZSh2b2lkKikgeworICBQdGhyZWFkQ2xlYW51cFRlc3RlcigpOworICByZXR1cm4gTlVMTDsKK30KKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX2NsZWFudXBfcHVzaF9fcHRocmVhZF9jbGVhbnVwX3BvcCkgeworICBwdGhyZWFkX3QgdDsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY3JlYXRlKCZ0LCBOVUxMLCBQdGhyZWFkQ2xlYW51cFN0YXJ0Um91dGluZSwgTlVMTCkpOworICBwdGhyZWFkX2pvaW4odCwgTlVMTCk7CisgIEFTU0VSVF9FUSgyVSwgY2xlYW51cF9jb3VudGVyKTsKK30KKworVEVTVChwdGhyZWFkLCBQVEhSRUFEX01VVEVYX0RFRkFVTFRfaXNfUFRIUkVBRF9NVVRFWF9OT1JNQUwpIHsKKyAgQVNTRVJUX0VRKFBUSFJFQURfTVVURVhfTk9STUFMLCBQVEhSRUFEX01VVEVYX0RFRkFVTFQpOworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUpIHsKKyAgcHRocmVhZF9tdXRleGF0dHJfdCBhdHRyOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmYXR0cikpOworCisgIGludCBhdHRyX3R5cGU7CisKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURfTVVURVhfTk9STUFMKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX211dGV4YXR0cl9nZXR0eXBlKCZhdHRyLCAmYXR0cl90eXBlKSk7CisgIEFTU0VSVF9FUShQVEhSRUFEX01VVEVYX05PUk1BTCwgYXR0cl90eXBlKTsKKworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmYXR0ciwgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX211dGV4YXR0cl9nZXR0eXBlKCZhdHRyLCAmYXR0cl90eXBlKSk7CisgIEFTU0VSVF9FUShQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0ssIGF0dHJfdHlwZSk7CisKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX211dGV4YXR0cl9nZXR0eXBlKCZhdHRyLCAmYXR0cl90eXBlKSk7CisgIEFTU0VSVF9FUShQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSwgYXR0cl90eXBlKTsKK30KKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX211dGV4X2xvY2tfTk9STUFMKSB7CisgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgYXR0cjsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmF0dHIpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURfTVVURVhfTk9STUFMKSk7CisKKyAgcHRocmVhZF9tdXRleF90IGxvY2s7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX211dGV4X2luaXQoJmxvY2ssICZhdHRyKSk7CisKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhfbG9jaygmbG9jaykpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9tdXRleF91bmxvY2soJmxvY2spKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbG9jaykpOworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfbXV0ZXhfbG9ja19FUlJPUkNIRUNLKSB7CisgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgYXR0cjsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmF0dHIpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSykpOworCisgIHB0aHJlYWRfbXV0ZXhfdCBsb2NrOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9tdXRleF9pbml0KCZsb2NrLCAmYXR0cikpOworCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX211dGV4X2xvY2soJmxvY2spKTsKKyAgQVNTRVJUX0VRKEVERUFETEssIHB0aHJlYWRfbXV0ZXhfbG9jaygmbG9jaykpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9tdXRleF91bmxvY2soJmxvY2spKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmbG9jaykpOworICBBU1NFUlRfRVEoRUJVU1ksIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmbG9jaykpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9tdXRleF91bmxvY2soJmxvY2spKTsKKyAgQVNTRVJUX0VRKEVQRVJNLCBwdGhyZWFkX211dGV4X3VubG9jaygmbG9jaykpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9tdXRleF9kZXN0cm95KCZsb2NrKSk7Cit9CisKK1RFU1QocHRocmVhZCwgcHRocmVhZF9tdXRleF9sb2NrX1JFQ1VSU0lWRSkgeworICBwdGhyZWFkX211dGV4YXR0cl90IGF0dHI7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX211dGV4YXR0cl9pbml0KCZhdHRyKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZhdHRyLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSkpOworCisgIHB0aHJlYWRfbXV0ZXhfdCBsb2NrOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9tdXRleF9pbml0KCZsb2NrLCAmYXR0cikpOworCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX211dGV4X2xvY2soJmxvY2spKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhfbG9jaygmbG9jaykpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9tdXRleF91bmxvY2soJmxvY2spKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZsb2NrKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX211dGV4X3RyeWxvY2soJmxvY2spKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZsb2NrKSk7CisgIEFTU0VSVF9FUShFUEVSTSwgcHRocmVhZF9tdXRleF91bmxvY2soJmxvY2spKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbG9jaykpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2VtYXBob3JlX3Rlc3QuY3BwIGIvdGVzdHMvc2VtYXBob3JlX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MTdmODEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zZW1hcGhvcmVfdGVzdC5jcHAKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2NvbnN0YW50cy5oIgorCitURVNUKHNlbWFwaG9yZSwgc2VtX2luaXQpIHsKKyAgc2VtX3QgczsKKworICAvLyBQZXJmZWN0bHkgZmluZSBpbml0aWFsIHZhbHVlcy4KKyAgQVNTRVJUX0VRKDAsIHNlbV9pbml0KCZzLCAwLCAwKSk7CisgIEFTU0VSVF9FUSgwLCBzZW1faW5pdCgmcywgMCwgMSkpOworICBBU1NFUlRfRVEoMCwgc2VtX2luaXQoJnMsIDAsIDEyMykpOworCisgIC8vIFRvbyBzbWFsbCBhbiBpbml0aWFsIHZhbHVlLgorICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUSgtMSwgc2VtX2luaXQoJnMsIDAsIC0xKSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKworICBBU1NFUlRfRVEoU0VNX1ZBTFVFX01BWCwgc3lzY29uZihfU0NfU0VNX1ZBTFVFX01BWCkpOworCisgIC8vIFRoZSBsYXJnZXN0IGluaXRpYWwgdmFsdWUuCisgIEFTU0VSVF9FUSgwLCBzZW1faW5pdCgmcywgMCwgU0VNX1ZBTFVFX01BWCkpOworCisgIC8vIFRvbyBsYXJnZSBhbiBpbml0aWFsIHZhbHVlLgorICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUSgtMSwgc2VtX2luaXQoJnMsIDAsIFNFTV9WQUxVRV9NQVggKyAxKSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKworICBBU1NFUlRfRVEoMCwgc2VtX2Rlc3Ryb3koJnMpKTsKK30KKworVEVTVChzZW1hcGhvcmUsIHNlbV90cnl3YWl0KSB7CisgIHNlbV90IHM7CisgIEFTU0VSVF9FUSgwLCBzZW1faW5pdCgmcywgMCwgMykpOworICBBU1NFUlRfRVEoMCwgc2VtX3RyeXdhaXQoJnMpKTsKKyAgQVNTRVJUX0VRKDAsIHNlbV90cnl3YWl0KCZzKSk7CisgIEFTU0VSVF9FUSgwLCBzZW1fdHJ5d2FpdCgmcykpOworICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUSgtMSwgc2VtX3RyeXdhaXQoJnMpKTsKKyAgQVNTRVJUX0VRKEVBR0FJTiwgZXJybm8pOworICBBU1NFUlRfRVEoMCwgc2VtX2Rlc3Ryb3koJnMpKTsKK30KKworc3RhdGljIHZvaWQgU2VtV2FpdFRocmVhZFRlc3RGbihzZW1fdCYgc2VtKSB7CisgIEFTU0VSVF9FUSgwLCBzZW1fd2FpdCgmc2VtKSk7Cit9CisKK3N0YXRpYyB2b2lkKiBTZW1XYWl0VGhyZWFkRm4odm9pZCogYXJnKSB7CisgIFNlbVdhaXRUaHJlYWRUZXN0Rm4oKnJlaW50ZXJwcmV0X2Nhc3Q8c2VtX3QqPihhcmcpKTsKKyAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1RFU1Qoc2VtYXBob3JlLCBzZW1fd2FpdF9fc2VtX3Bvc3QpIHsKKyAgc2VtX3QgczsKKyAgQVNTRVJUX0VRKDAsIHNlbV9pbml0KCZzLCAwLCAwKSk7CisKKyAgcHRocmVhZF90IHQxLCB0MiwgdDM7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NyZWF0ZSgmdDEsIE5VTEwsIFNlbVdhaXRUaHJlYWRGbiwgJnMpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY3JlYXRlKCZ0MiwgTlVMTCwgU2VtV2FpdFRocmVhZEZuLCAmcykpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQzLCBOVUxMLCBTZW1XYWl0VGhyZWFkRm4sICZzKSk7CisKKyAgQVNTRVJUX0VRKDAsIHNlbV9wb3N0KCZzKSk7CisgIEFTU0VSVF9FUSgwLCBzZW1fcG9zdCgmcykpOworICBBU1NFUlRfRVEoMCwgc2VtX3Bvc3QoJnMpKTsKKworICB2b2lkKiByZXN1bHQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2pvaW4odDEsICZyZXN1bHQpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfam9pbih0MiwgJnJlc3VsdCkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9qb2luKHQzLCAmcmVzdWx0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lc3BlY19hZGRfbXModGltZXNwZWMmIHRzLCBzaXplX3QgbXMpIHsKKyAgdHMudHZfc2VjICArPSBtcyAvIDEwMDA7CisgIHRzLnR2X25zZWMgKz0gKG1zICUgMTAwMCkgKiAxMDAwMDAwOworICBpZiAodHMudHZfbnNlYyA+PSBOU19QRVJfUykgeworICAgIHRzLnR2X3NlYysrOworICAgIHRzLnR2X25zZWMgLT0gTlNfUEVSX1M7CisgIH0KK30KKworVEVTVChzZW1hcGhvcmUsIHNlbV90aW1lZHdhaXQpIHsKKyAgc2VtX3QgczsKKyAgQVNTRVJUX0VRKDAsIHNlbV9pbml0KCZzLCAwLCAwKSk7CisKKyAgdGltZXNwZWMgdHM7CisgIEFTU0VSVF9FUSgwLCBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpKTsKKyAgdGltZXNwZWNfYWRkX21zKHRzLCAxMDApOworCisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKC0xLCBzZW1fdGltZWR3YWl0KCZzLCAmdHMpKTsKKyAgQVNTRVJUX0VRKEVUSU1FRE9VVCwgZXJybm8pOworCisgIC8vIEEgbmVnYXRpdmUgdGltZW91dCBpcyBhbiBlcnJvci4KKyAgZXJybm8gPSAwOworICB0cy50dl9uc2VjID0gLTE7CisgIEFTU0VSVF9FUSgtMSwgc2VtX3RpbWVkd2FpdCgmcywgJnRzKSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKworICBBU1NFUlRfRVEoMCwgc2VtX2Rlc3Ryb3koJnMpKTsKK30KKworVEVTVChzZW1hcGhvcmUsIHNlbV9nZXR2YWx1ZSkgeworICBzZW1fdCBzOworICBBU1NFUlRfRVEoMCwgc2VtX2luaXQoJnMsIDAsIDApKTsKKworICBpbnQgaTsKKyAgQVNTRVJUX0VRKDAsIHNlbV9nZXR2YWx1ZSgmcywgJmkpKTsKKyAgQVNTRVJUX0VRKDAsIGkpOworCisgIEFTU0VSVF9FUSgwLCBzZW1fcG9zdCgmcykpOworICBBU1NFUlRfRVEoMCwgc2VtX2dldHZhbHVlKCZzLCAmaSkpOworICBBU1NFUlRfRVEoMSwgaSk7CisKKyAgQVNTRVJUX0VRKDAsIHNlbV9wb3N0KCZzKSk7CisgIEFTU0VSVF9FUSgwLCBzZW1fZ2V0dmFsdWUoJnMsICZpKSk7CisgIEFTU0VSVF9FUSgyLCBpKTsKKworICBBU1NFUlRfRVEoMCwgc2VtX3dhaXQoJnMpKTsKKyAgQVNTRVJUX0VRKDAsIHNlbV9nZXR2YWx1ZSgmcywgJmkpKTsKKyAgQVNTRVJUX0VRKDEsIGkpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2V0am1wX3Rlc3QuY3BwIGIvdGVzdHMvc2V0am1wX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NWM3ODMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zZXRqbXBfdGVzdC5jcHAKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitURVNUKHNldGptcCwgc2V0am1wX3Ntb2tlKSB7CisgIGludCB2YWx1ZTsKKyAgam1wX2J1ZiBqYjsKKyAgaWYgKCh2YWx1ZSA9IHNldGptcChqYikpID09IDApIHsKKyAgICBsb25nam1wKGpiLCAxMjMpOworICAgIEZBSUwoKTsgLy8gVW5yZWFjaGFibGUuCisgIH0gZWxzZSB7CisgICAgQVNTRVJUX0VRKDEyMywgdmFsdWUpOworICB9Cit9CisKK1RFU1Qoc2V0am1wLCBfc2V0am1wX3Ntb2tlKSB7CisgIGludCB2YWx1ZTsKKyAgam1wX2J1ZiBqYjsKKyAgaWYgKCh2YWx1ZSA9IF9zZXRqbXAoamIpKSA9PSAwKSB7CisgICAgX2xvbmdqbXAoamIsIDQ1Nik7CisgICAgRkFJTCgpOyAvLyBVbnJlYWNoYWJsZS4KKyAgfSBlbHNlIHsKKyAgICBBU1NFUlRfRVEoNDU2LCB2YWx1ZSk7CisgIH0KK30KKworVEVTVChzZXRqbXAsIHNpZ3NldGptcF8wX3Ntb2tlKSB7CisgIGludCB2YWx1ZTsKKyAgc2lnam1wX2J1ZiBqYjsKKyAgaWYgKCh2YWx1ZSA9IHNpZ3NldGptcChqYiwgMCkpID09IDApIHsKKyAgICBzaWdsb25nam1wKGpiLCA3ODkpOworICAgIEZBSUwoKTsgLy8gVW5yZWFjaGFibGUuCisgIH0gZWxzZSB7CisgICAgQVNTRVJUX0VRKDc4OSwgdmFsdWUpOworICB9Cit9CisKK1RFU1Qoc2V0am1wLCBzaWdzZXRqbXBfMV9zbW9rZSkgeworICBpbnQgdmFsdWU7CisgIHNpZ2ptcF9idWYgamI7CisgIGlmICgodmFsdWUgPSBzaWdzZXRqbXAoamIsIDApKSA9PSAwKSB7CisgICAgc2lnbG9uZ2ptcChqYiwgMHhhYmMpOworICAgIEZBSUwoKTsgLy8gVW5yZWFjaGFibGUuCisgIH0gZWxzZSB7CisgICAgQVNTRVJUX0VRKDB4YWJjLCB2YWx1ZSk7CisgIH0KK30KKworc3RhdGljIHNpZ3NldF90IFNpZ1NldE9mKGludCBzaWduYWwpIHsKKyAgc2lnc2V0X3Qgc3M7CisgIHNpZ2VtcHR5c2V0KCZzcyk7CisgIHNpZ2FkZHNldCgmc3MsIHNpZ25hbCk7CisgIHJldHVybiBzczsKK30KKworVEVTVChzZXRqbXAsIF9zZXRqbXBfc2lnbmFsX21hc2spIHsKKyAgLy8gX3NldGptcC9fbG9uZ2ptcCBkbyBub3Qgc2F2ZS9yZXN0b3JlIHRoZSBzaWduYWwgbWFzay4KKyAgc2lnc2V0X3Qgc3MxKFNpZ1NldE9mKFNJR1VTUjEpKTsKKyAgc2lnc2V0X3Qgc3MyKFNpZ1NldE9mKFNJR1VTUjIpKTsKKyAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZzczEsIE5VTEwpOworICBqbXBfYnVmIGpiOworICBpZiAoX3NldGptcChqYikgPT0gMCkgeworICAgIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmc3MyLCBOVUxMKTsKKyAgICBfbG9uZ2ptcChqYiwgMSk7CisgICAgRkFJTCgpOyAvLyBVbnJlYWNoYWJsZS4KKyAgfSBlbHNlIHsKKyAgICBzaWdzZXRfdCBzczsKKyAgICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgTlVMTCwgJnNzKTsKKyAgICBFWFBFQ1RfVFJVRShzaWdpc21lbWJlcigmc3MsIFNJR1VTUjIpKTsKKyAgfQorfQorCitURVNUKHNldGptcCwgc2V0am1wX3NpZ25hbF9tYXNrKSB7CisgIC8vIHNldGptcC9sb25nam1wIGRvIHNhdmUvcmVzdG9yZSB0aGUgc2lnbmFsIG1hc2sgb24gYmlvbmljLCBidXQgbm90IG9uIGdsaWJjLgorICAvLyBUaGlzIGlzIGEgQlNEIHZlcnN1cyBTeXN0ZW0gViBoaXN0b3JpY2FsIGFjY2lkZW50LiBQT1NJWCBsZWF2ZXMgdGhlCisgIC8vIGJlaGF2aW9yIHVuc3BlY2lmaWVkLCBzbyBhbnkgY29kZSB0aGF0IGNhcmVzIG5lZWRzIHRvIHVzZSBzaWdzZXRqbXAuCisgIHNpZ3NldF90IHNzMShTaWdTZXRPZihTSUdVU1IxKSk7CisgIHNpZ3NldF90IHNzMihTaWdTZXRPZihTSUdVU1IyKSk7CisgIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmc3MxLCBOVUxMKTsKKyAgam1wX2J1ZiBqYjsKKyAgaWYgKHNldGptcChqYikgPT0gMCkgeworICAgIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmc3MyLCBOVUxMKTsKKyAgICBsb25nam1wKGpiLCAxKTsKKyAgICBGQUlMKCk7IC8vIFVucmVhY2hhYmxlLgorICB9IGVsc2UgeworICAgIHNpZ3NldF90IHNzOworICAgIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCBOVUxMLCAmc3MpOworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgICAvLyBiaW9uaWMgYmVoYXZlcyBsaWtlIEJTRCBhbmQgZG9lcyBzYXZlL3Jlc3RvcmUgdGhlIHNpZ25hbCBtYXNrLgorICAgIEVYUEVDVF9UUlVFKHNpZ2lzbWVtYmVyKCZzcywgU0lHVVNSMSkpOworI2Vsc2UKKyAgICAvLyBnbGliYyBiZWhhdmVzIGxpa2UgU3lzdGVtIFYgYW5kIGRvZXNuJ3Qgc2F2ZS9yZXN0b3JlIHRoZSBzaWduYWwgbWFzay4KKyAgICBFWFBFQ1RfVFJVRShzaWdpc21lbWJlcigmc3MsIFNJR1VTUjIpKTsKKyNlbmRpZgorICB9Cit9CisKK1RFU1Qoc2V0am1wLCBzaWdzZXRqbXBfMF9zaWduYWxfbWFzaykgeworICAvLyBzaWdzZXRqbXAoMCkvc2lnbG9uZ2ptcCBkbyBub3Qgc2F2ZS9yZXN0b3JlIHRoZSBzaWduYWwgbWFzay4KKyAgc2lnc2V0X3Qgc3MxKFNpZ1NldE9mKFNJR1VTUjEpKTsKKyAgc2lnc2V0X3Qgc3MyKFNpZ1NldE9mKFNJR1VTUjIpKTsKKyAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZzczEsIE5VTEwpOworICBzaWdqbXBfYnVmIHNqYjsKKyAgaWYgKHNpZ3NldGptcChzamIsIDApID09IDApIHsKKyAgICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJnNzMiwgTlVMTCk7CisgICAgc2lnbG9uZ2ptcChzamIsIDEpOworICAgIEZBSUwoKTsgLy8gVW5yZWFjaGFibGUuCisgIH0gZWxzZSB7CisgICAgc2lnc2V0X3Qgc3M7CisgICAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssIE5VTEwsICZzcyk7CisgICAgRVhQRUNUX1RSVUUoc2lnaXNtZW1iZXIoJnNzLCBTSUdVU1IyKSk7CisgIH0KK30KKworVEVTVChzZXRqbXAsIHNpZ3NldGptcF8xX3NpZ25hbF9tYXNrKSB7CisgIC8vIHNpZ3NldGptcCgxKS9zaWdsb25nam1wIGRvZXMgc2F2ZS9yZXN0b3JlIHRoZSBzaWduYWwgbWFzay4KKyAgc2lnc2V0X3Qgc3MxKFNpZ1NldE9mKFNJR1VTUjEpKTsKKyAgc2lnc2V0X3Qgc3MyKFNpZ1NldE9mKFNJR1VTUjIpKTsKKyAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZzczEsIE5VTEwpOworICBzaWdqbXBfYnVmIHNqYjsKKyAgaWYgKHNpZ3NldGptcChzamIsIDEpID09IDApIHsKKyAgICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJnNzMiwgTlVMTCk7CisgICAgc2lnbG9uZ2ptcChzamIsIDEpOworICAgIEZBSUwoKTsgLy8gVW5yZWFjaGFibGUuCisgIH0gZWxzZSB7CisgICAgc2lnc2V0X3Qgc3M7CisgICAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssIE5VTEwsICZzcyk7CisgICAgRVhQRUNUX1RSVUUoc2lnaXNtZW1iZXIoJnNzLCBTSUdVU1IxKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0YWNrX3Byb3RlY3Rvcl90ZXN0LmNwcCBiL3Rlc3RzL3N0YWNrX3Byb3RlY3Rvcl90ZXN0LmNwcAppbmRleCBmZWEyNGQ4Li5hYWQ1MWVjIDEwMDY0NAotLS0gYS90ZXN0cy9zdGFja19wcm90ZWN0b3JfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3RhY2tfcHJvdGVjdG9yX3Rlc3QuY3BwCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSAiQmlvbmljRGVhdGhUZXN0LmgiCiAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CkBAIC0xMjAsOSArMTIxLDEwIEBACiAjZW5kaWYgLy8gVEVTVF9TVEFDS19DSEtfR1VBUkQKIH0KIAotVEVTVChzdGFja19wcm90ZWN0b3JfRGVhdGhUZXN0LCBtb2RpZnlfc3RhY2tfcHJvdGVjdG9yKSB7CitjbGFzcyBzdGFja19wcm90ZWN0b3JfRGVhdGhUZXN0IDogcHVibGljIEJpb25pY0RlYXRoVGVzdCB7fTsKKworVEVTVF9GKHN0YWNrX3Byb3RlY3Rvcl9EZWF0aFRlc3QsIG1vZGlmeV9zdGFja19wcm90ZWN0b3IpIHsKICNpZiBkZWZpbmVkKFRFU1RfU1RBQ0tfQ0hLX0dVQVJEKQotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIEFTU0VSVF9FWElUKGRvX21vZGlmeV9zdGFja19jaGtfZ3VhcmQoKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKICNlbHNlIC8vIFRFU1RfU1RBQ0tfQ0hLX0dVQVJECiAgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RkYXRvbWljX3Rlc3QuY3BwIGIvdGVzdHMvc3RkYXRvbWljX3Rlc3QuY3BwCmluZGV4IGI3ZmIxOWIuLmViMDMwYmYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N0ZGF0b21pY190ZXN0LmNwcAorKysgYi90ZXN0cy9zdGRhdG9taWNfdGVzdC5jcHAKQEAgLTE0LDggKzE0LDEwIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0jaW5jbHVkZSA8c3RkYXRvbWljLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKy8vIEZvb2wgc3RkYXRvbWljLmggaW50byBub3QgdXNpbmcgPGF0b21pYz4uCisjdW5kZWYgX1VTSU5HX0xJQkNYWAorI2luY2x1ZGUgPHN0ZGF0b21pYy5oPgogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KIApkaWZmIC0tZ2l0IGEvdGVzdHMvc3RkaW9fZXh0X3Rlc3QuY3BwIGIvdGVzdHMvc3RkaW9fZXh0X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYmM0ODUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zdGRpb19leHRfdGVzdC5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworI2luY2x1ZGUgIlRlbXBvcmFyeUZpbGUuaCIKKworVEVTVChzdGRpb19leHQsIF9fZmJ1ZnNpemUpIHsKKyAgRklMRSogZnAgPSBmb3BlbigiL3Byb2MvdmVyc2lvbiIsICJyIik7CisKKyAgY2hhciBidWZbMTI4XTsKKworICBBU1NFUlRfRVEoMCwgc2V0dmJ1ZihmcCwgYnVmLCBfSU9GQkYsIDEpKTsKKyAgQVNTRVJUX0VRKDFVLCBfX2ZidWZzaXplKGZwKSk7CisKKyAgQVNTRVJUX0VRKDAsIHNldHZidWYoZnAsIGJ1ZiwgX0lPRkJGLCA4KSk7CisgIEFTU0VSVF9FUSg4VSwgX19mYnVmc2l6ZShmcCkpOworCisgIGZjbG9zZShmcCk7Cit9CisKK1RFU1Qoc3RkaW9fZXh0LCBfX2ZsYmYpIHsKKyAgRklMRSogZnAgPSBmb3BlbigiL3Byb2MvdmVyc2lvbiIsICJyIik7CisKKyAgQVNTRVJUX0ZBTFNFKF9fZmxiZihmcCkpOworCisgIGNoYXIgYnVmWzEyOF07CisgIEFTU0VSVF9FUSgwLCBzZXR2YnVmKGZwLCBidWYsIF9JT0xCRiwgc2l6ZW9mKGJ1ZikpKTsKKworICBBU1NFUlRfVFJVRShfX2ZsYmYoZnApKTsKKworICBmY2xvc2UoZnApOworfQorCitURVNUKHN0ZGlvX2V4dCwgX19mcGVuZGluZykgeworICBGSUxFKiBmcCA9IGZvcGVuKCIvZGV2L251bGwiLCAidyIpOworICBBU1NFUlRfRVEoMFUsIF9fZnBlbmRpbmcoZnApKTsKKyAgQVNTRVJUX0VRKCd4JywgZnB1dGMoJ3gnLCBmcCkpOworICBBU1NFUlRfRVEoMVUsIF9fZnBlbmRpbmcoZnApKTsKKyAgQVNTRVJUX0VRKCd5JywgZnB1dGMoJ3knLCBmcCkpOworICBBU1NFUlRfRVEoMlUsIF9fZnBlbmRpbmcoZnApKTsKKyAgZmZsdXNoKGZwKTsKKyAgQVNTRVJUX0VRKDBVLCBfX2ZwZW5kaW5nKGZwKSk7CisgIGZjbG9zZShmcCk7Cit9CisKK1RFU1Qoc3RkaW9fZXh0LCBfX2ZwdXJnZSkgeworICBGSUxFKiBmcCA9IHRtcGZpbGUoKTsKKworICBBU1NFUlRfRVEoJ2EnLCBmcHV0YygnYScsIGZwKSk7CisgIEFTU0VSVF9FUSgxVSwgX19mcGVuZGluZyhmcCkpOworICBfX2ZwdXJnZShmcCk7CisgIEFTU0VSVF9FUSgwVSwgX19mcGVuZGluZyhmcCkpOworCisgIEFTU0VSVF9FUSgnYicsIGZwdXRjKCdiJywgZnApKTsKKyAgQVNTRVJUX0VRKCdcbicsIGZwdXRjKCdcbicsIGZwKSk7CisgIEFTU0VSVF9FUSgyVSwgX19mcGVuZGluZyhmcCkpOworCisgIHJld2luZChmcCk7CisKKyAgY2hhciBidWZbMTZdOworICBjaGFyKiBzID0gZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApOworICBBU1NFUlRfVFJVRShzICE9IE5VTEwpOworICBBU1NFUlRfU1RSRVEoImJcbiIsIHMpOworCisgIGZjbG9zZShmcCk7Cit9CisKK1RFU1Qoc3RkaW9fZXh0LCBfZmx1c2hsYmYpIHsKKyAgRklMRSogZnAgPSBmb3BlbigiL2Rldi9udWxsIiwgInciKTsKKworICBjaGFyIGJ1ZlsxMjhdOworICBBU1NFUlRfRVEoMCwgc2V0dmJ1ZihmcCwgYnVmLCBfSU9MQkYsIHNpemVvZihidWYpKSk7CisKKyAgQVNTRVJUX0VRKCdhJywgZnB1dGMoJ2EnLCBmcCkpOworICBBU1NFUlRfRVEoMVUsIF9fZnBlbmRpbmcoZnApKTsKKworICBfZmx1c2hsYmYoKTsKKworICBBU1NFUlRfRVEoMFUsIF9fZnBlbmRpbmcoZnApKTsKKworICBmY2xvc2UoZnApOworfQorCitURVNUKHN0ZGlvX2V4dCwgX19mcmVhZGFibGVfX2Z3cml0YWJsZSkgeworICBGSUxFKiBmcCA9IGZvcGVuKCIvZGV2L251bGwiLCAiciIpOworICBBU1NFUlRfVFJVRShfX2ZyZWFkYWJsZShmcCkpOworICBBU1NFUlRfRkFMU0UoX19md3JpdGFibGUoZnApKTsKKyAgZmNsb3NlKGZwKTsKKworICBmcCA9IGZvcGVuKCIvZGV2L251bGwiLCAidyIpOworICBBU1NFUlRfRkFMU0UoX19mcmVhZGFibGUoZnApKTsKKyAgQVNTRVJUX1RSVUUoX19md3JpdGFibGUoZnApKTsKKyAgZmNsb3NlKGZwKTsKKworICBmcCA9IGZvcGVuKCIvZGV2L251bGwiLCAidysiKTsKKyAgQVNTRVJUX1RSVUUoX19mcmVhZGFibGUoZnApKTsKKyAgQVNTRVJUX1RSVUUoX19md3JpdGFibGUoZnApKTsKKyAgZmNsb3NlKGZwKTsKK30KKworVEVTVChzdGRpb19leHQsIF9fZnNldGxvY2tpbmcpIHsKKyAgRklMRSogZnAgPSBmb3BlbigiL3Byb2MvdmVyc2lvbiIsICJyIik7CisgIC8vIEFuZHJvaWQgZG9lc24ndCBhY3R1YWxseSBzdXBwb3J0IHRoZSBvdGhlciBtb2Rlcy4KKyAgQVNTRVJUX0VRKEZTRVRMT0NLSU5HX0lOVEVSTkFMLCBfX2ZzZXRsb2NraW5nKGZwLCBGU0VUTE9DS0lOR19RVUVSWSkpOworICBmY2xvc2UoZnApOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RkaW9fdGVzdC5jcHAgYi90ZXN0cy9zdGRpb190ZXN0LmNwcAppbmRleCA2YTI5OTFmLi42YmUzNzJjIDEwMDY0NAotLS0gYS90ZXN0cy9zdGRpb190ZXN0LmNwcAorKysgYi90ZXN0cy9zdGRpb190ZXN0LmNwcApAQCAtNzcsNyArNzcsNyBAQAogICBpbnQgcmMgPSBkcHJpbnRmKHRmLmZkLCAiaGVsbG9cbiIpOwogICBBU1NFUlRfRVEocmMsIDYpOwogCi0gIGxzZWVrKHRmLmZkLCBTRUVLX1NFVCwgMCk7CisgIGxzZWVrKHRmLmZkLCAwLCBTRUVLX1NFVCk7CiAgIEZJTEUqIHRmaWxlID0gZmRvcGVuKHRmLmZkLCAiciIpOwogICBBU1NFUlRfVFJVRSh0ZmlsZSAhPSBOVUxMKTsKIApAQCAtNjk0LDMgKzY5NCwxMjIgQEAKIAogICBmY2xvc2UoZnApOwogfQorCitURVNUKHN0ZGlvLCBmbWVtb3BlbikgeworICBjaGFyIGJ1ZlsxNl07CisgIG1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKyAgRklMRSogZnAgPSBmbWVtb3BlbihidWYsIHNpemVvZihidWYpLCAicisiKTsKKyAgQVNTRVJUX0VRKCc8JywgZnB1dGMoJzwnLCBmcCkpOworICBBU1NFUlRfTkUoRU9GLCBmcHV0cygiYWJjPlxuIiwgZnApKTsKKyAgZmZsdXNoKGZwKTsKKworICBBU1NFUlRfU1RSRVEoIjxhYmM+XG4iLCBidWYpOworCisgIHJld2luZChmcCk7CisKKyAgY2hhciBsaW5lWzE2XTsKKyAgY2hhciogcyA9IGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApOworICBBU1NFUlRfVFJVRShzICE9IE5VTEwpOworICBBU1NFUlRfU1RSRVEoIjxhYmM+XG4iLCBzKTsKKworICBmY2xvc2UoZnApOworfQorCitURVNUKHN0ZGlvLCBmbWVtb3Blbl9OVUxMKSB7CisgIEZJTEUqIGZwID0gZm1lbW9wZW4obnVsbHB0ciwgMTI4LCAicisiKTsKKyAgQVNTRVJUX05FKEVPRiwgZnB1dHMoInh5elxuIiwgZnApKTsKKworICByZXdpbmQoZnApOworCisgIGNoYXIgbGluZVsxNl07CisgIGNoYXIqIHMgPSBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKTsKKyAgQVNTRVJUX1RSVUUocyAhPSBOVUxMKTsKKyAgQVNTRVJUX1NUUkVRKCJ4eXpcbiIsIHMpOworCisgIGZjbG9zZShmcCk7Cit9CisKK1RFU1Qoc3RkaW8sIGZtZW1vcGVuX0VJTlZBTCkgeworICBjaGFyIGJ1ZlsxNl07CisKKyAgLy8gSW52YWxpZCBzaXplLgorICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUShudWxscHRyLCBmbWVtb3BlbihidWYsIDAsICJyKyIpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworCisgIC8vIE5vICcrJyB3aXRoIE5VTEwgYnVmZmVyLgorICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUShudWxscHRyLCBmbWVtb3BlbihudWxscHRyLCAwLCAiciIpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworfQorCitURVNUKHN0ZGlvLCBvcGVuX21lbXN0cmVhbSkgeworICBjaGFyKiBwID0gbnVsbHB0cjsKKyAgc2l6ZV90IHNpemUgPSAwOworICBGSUxFKiBmcCA9IG9wZW5fbWVtc3RyZWFtKCZwLCAmc2l6ZSk7CisgIEFTU0VSVF9ORShFT0YsIGZwdXRzKCJoZWxsbywgd29ybGQhIiwgZnApKTsKKyAgZmNsb3NlKGZwKTsKKworICBBU1NFUlRfU1RSRVEoImhlbGxvLCB3b3JsZCEiLCBwKTsKKyAgQVNTRVJUX0VRKHN0cmxlbigiaGVsbG8sIHdvcmxkISIpLCBzaXplKTsKKyAgZnJlZShwKTsKK30KKworVEVTVChzdGRpbywgb3Blbl9tZW1zdHJlYW1fRUlOVkFMKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBjaGFyKiBwOworICBzaXplX3Qgc2l6ZTsKKworICAvLyBJbnZhbGlkIGJ1ZmZlci4KKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEobnVsbHB0ciwgb3Blbl9tZW1zdHJlYW0obnVsbHB0ciwgJnNpemUpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworCisgIC8vIEludmFsaWQgc2l6ZS4KKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEobnVsbHB0ciwgb3Blbl9tZW1zdHJlYW0oJnAsIG51bGxwdHIpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYKK30KKworVEVTVChzdGRpbywgZmRvcGVuX0NMT0VYRUMpIHsKKyAgaW50IGZkID0gb3BlbigiL3Byb2MvdmVyc2lvbiIsIE9fUkRPTkxZKTsKKyAgQVNTRVJUX1RSVUUoZmQgIT0gLTEpOworCisgIC8vIFRoaXMgZmQgZG9lc24ndCBoYXZlIE9fQ0xPRVhFQy4uLgorICBpbnQgZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGRCk7CisgIEFTU0VSVF9UUlVFKGZsYWdzICE9IC0xKTsKKyAgQVNTRVJUX0VRKDAsIGZsYWdzICYgRkRfQ0xPRVhFQyk7CisKKyAgRklMRSogZnAgPSBmZG9wZW4oZmQsICJyZSIpOworICBBU1NFUlRfVFJVRShmcCAhPSBOVUxMKTsKKworICAvLyAuLi5idXQgdGhlIG5ldyBvbmUgZG9lcy4KKyAgZmxhZ3MgPSBmY250bChmaWxlbm8oZnApLCBGX0dFVEZEKTsKKyAgQVNTRVJUX1RSVUUoZmxhZ3MgIT0gLTEpOworICBBU1NFUlRfRVEoRkRfQ0xPRVhFQywgZmxhZ3MgJiBGRF9DTE9FWEVDKTsKKworICBmY2xvc2UoZnApOworICBjbG9zZShmZCk7Cit9CisKK1RFU1Qoc3RkaW8sIGZyZW9wZW5fQ0xPRVhFQykgeworICBGSUxFKiBmcCA9IGZvcGVuKCIvcHJvYy92ZXJzaW9uIiwgInIiKTsKKyAgQVNTRVJUX1RSVUUoZnAgIT0gTlVMTCk7CisKKyAgLy8gVGhpcyBGSUxFKiBkb2Vzbid0IGhhdmUgT19DTE9FWEVDLi4uCisgIGludCBmbGFncyA9IGZjbnRsKGZpbGVubyhmcCksIEZfR0VURkQpOworICBBU1NFUlRfVFJVRShmbGFncyAhPSAtMSk7CisgIEFTU0VSVF9FUSgwLCBmbGFncyAmIEZEX0NMT0VYRUMpOworCisgIGZwID0gZnJlb3BlbigiL3Byb2MvdmVyc2lvbiIsICJyZSIsIGZwKTsKKworICAvLyAuLi5idXQgdGhlIG5ldyBvbmUgZG9lcy4KKyAgZmxhZ3MgPSBmY250bChmaWxlbm8oZnApLCBGX0dFVEZEKTsKKyAgQVNTRVJUX1RSVUUoZmxhZ3MgIT0gLTEpOworICBBU1NFUlRfRVEoRkRfQ0xPRVhFQywgZmxhZ3MgJiBGRF9DTE9FWEVDKTsKKworICBmY2xvc2UoZnApOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RkbGliX3Rlc3QuY3BwIGIvdGVzdHMvc3RkbGliX3Rlc3QuY3BwCmluZGV4IDU1M2YwMTguLjA1MGY1YTcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N0ZGxpYl90ZXN0LmNwcAorKysgYi90ZXN0cy9zdGRsaWJfdGVzdC5jcHAKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlICJCaW9uaWNEZWF0aFRlc3QuaCIKICNpbmNsdWRlICJUZW1wb3JhcnlGaWxlLmgiCiAKICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtMjcsMTIgKzI4LDU0IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KIAorLy8gVGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHRlc3RzIGFsbCBzZXQgdGhlIHNlZWQsIGdldCBmb3VyIHZhbHVlcywgcmVzZXQgdGhlIHNlZWQgYW5kIGNoZWNrCisvLyB0aGF0IHRoZXkgZ2V0IHRoZSBmaXJzdCB0d28gdmFsdWVzIHJlcGVhdGVkLCBhbmQgdGhlbiByZXNldCB0aGUgc2VlZCBhbmQgY2hlY2sgdHdvIG1vcmUgdmFsdWVzCisvLyB0byBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgdGhhdCB3ZSdyZSBqdXN0IGdvaW5nIHJvdW5kIGEgY3ljbGUgb2YgZm91ciB2YWx1ZXMuCisvLyBUT0RPOiBmYWN0b3IgdGhpcyBvdXQuCisKIFRFU1Qoc3RkbGliLCBkcmFuZDQ4KSB7CiAgIHNyYW5kNDgoMHgwMTAyMDMwNCk7CiAgIEVYUEVDVF9ET1VCTEVfRVEoMC42NTYxOTI5OTE5NTYyMzUyNiwgZHJhbmQ0OCgpKTsKICAgRVhQRUNUX0RPVUJMRV9FUSgwLjE4NTIyNTk3MjI5NzcyOTQxLCBkcmFuZDQ4KCkpOwogICBFWFBFQ1RfRE9VQkxFX0VRKDAuNDIwMTUwODcwNzI4NDQ1MzcsIGRyYW5kNDgoKSk7CiAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wNjE2Mzc3ODMwNDczOTUwODksIGRyYW5kNDgoKSk7CisgIHNyYW5kNDgoMHgwMTAyMDMwNCk7CisgIEVYUEVDVF9ET1VCTEVfRVEoMC42NTYxOTI5OTE5NTYyMzUyNiwgZHJhbmQ0OCgpKTsKKyAgRVhQRUNUX0RPVUJMRV9FUSgwLjE4NTIyNTk3MjI5NzcyOTQxLCBkcmFuZDQ4KCkpOworICBzcmFuZDQ4KDB4MDEwMjAzMDQpOworICBFWFBFQ1RfRE9VQkxFX0VRKDAuNjU2MTkyOTkxOTU2MjM1MjYsIGRyYW5kNDgoKSk7CisgIEVYUEVDVF9ET1VCTEVfRVEoMC4xODUyMjU5NzIyOTc3Mjk0MSwgZHJhbmQ0OCgpKTsKK30KKworVEVTVChzdGRsaWIsIGVyYW5kNDgpIHsKKyAgY29uc3QgdW5zaWduZWQgc2hvcnQgc2VlZFszXSA9IHsgMHgzMzBlLCAweGFiY2QsIDB4MTIzNCB9OworICB1bnNpZ25lZCBzaG9ydCB4c3ViaVszXTsKKyAgbWVtY3B5KHhzdWJpLCBzZWVkLCBzaXplb2Yoc2VlZCkpOworICBFWFBFQ1RfRE9VQkxFX0VRKDAuMzk2NDY0NzczNzYwMjc1MzQsIGVyYW5kNDgoeHN1YmkpKTsKKyAgRVhQRUNUX0RPVUJMRV9FUSgwLjg0MDQ4NTM2OTQxMTQyNTE1LCBlcmFuZDQ4KHhzdWJpKSk7CisgIEVYUEVDVF9ET1VCTEVfRVEoMC4zNTMzMzYwOTcyNDUyNDM1MSwgZXJhbmQ0OCh4c3ViaSkpOworICBFWFBFQ1RfRE9VQkxFX0VRKDAuNDQ2NTgzNDM0Nzk2NTQ0MDUsIGVyYW5kNDgoeHN1YmkpKTsKKyAgbWVtY3B5KHhzdWJpLCBzZWVkLCBzaXplb2Yoc2VlZCkpOworICBFWFBFQ1RfRE9VQkxFX0VRKDAuMzk2NDY0NzczNzYwMjc1MzQsIGVyYW5kNDgoeHN1YmkpKTsKKyAgRVhQRUNUX0RPVUJMRV9FUSgwLjg0MDQ4NTM2OTQxMTQyNTE1LCBlcmFuZDQ4KHhzdWJpKSk7CisgIG1lbWNweSh4c3ViaSwgc2VlZCwgc2l6ZW9mKHNlZWQpKTsKKyAgRVhQRUNUX0RPVUJMRV9FUSgwLjM5NjQ2NDc3Mzc2MDI3NTM0LCBlcmFuZDQ4KHhzdWJpKSk7CisgIEVYUEVDVF9ET1VCTEVfRVEoMC44NDA0ODUzNjk0MTE0MjUxNSwgZXJhbmQ0OCh4c3ViaSkpOworfQorCitURVNUKHN0ZGxpYiwgbGNvbmc0OCkgeworICB1bnNpZ25lZCBzaG9ydCBwWzddID0geyAweDAxMDIsIDB4MDMwNCwgMHgwNTA2LCAweDA3MDgsIDB4MDkwYSwgMHgwYjBjLCAweDBkMGUgfTsKKyAgbGNvbmc0OChwKTsKKyAgRVhQRUNUX0VRKDE1MzEzODk5ODEsIGxyYW5kNDgoKSk7CisgIEVYUEVDVF9FUSgxNTk4ODAxNTMzLCBscmFuZDQ4KCkpOworICBFWFBFQ1RfRVEoMjA4MDUzNDg1MywgbHJhbmQ0OCgpKTsKKyAgRVhQRUNUX0VRKDExMDI0ODg4OTcsIGxyYW5kNDgoKSk7CisgIGxjb25nNDgocCk7CisgIEVYUEVDVF9FUSgxNTMxMzg5OTgxLCBscmFuZDQ4KCkpOworICBFWFBFQ1RfRVEoMTU5ODgwMTUzMywgbHJhbmQ0OCgpKTsKKyAgbGNvbmc0OChwKTsKKyAgRVhQRUNUX0VRKDE1MzEzODk5ODEsIGxyYW5kNDgoKSk7CisgIEVYUEVDVF9FUSgxNTk4ODAxNTMzLCBscmFuZDQ4KCkpOwogfQogCiBURVNUKHN0ZGxpYiwgbHJhbmQ0OCkgewpAQCAtNDEsNiArODQsMTIgQEAKICAgRVhQRUNUX0VRKDM5Nzc2OTc0NiwgbHJhbmQ0OCgpKTsKICAgRVhQRUNUX0VRKDkwMjI2NzEyNCwgbHJhbmQ0OCgpKTsKICAgRVhQRUNUX0VRKDEzMjM2NjEzMSwgbHJhbmQ0OCgpKTsKKyAgc3JhbmQ0OCgweDAxMDIwMzA0KTsKKyAgRVhQRUNUX0VRKDE0MDkxNjM3MjAsIGxyYW5kNDgoKSk7CisgIEVYUEVDVF9FUSgzOTc3Njk3NDYsIGxyYW5kNDgoKSk7CisgIHNyYW5kNDgoMHgwMTAyMDMwNCk7CisgIEVYUEVDVF9FUSgxNDA5MTYzNzIwLCBscmFuZDQ4KCkpOworICBFWFBFQ1RfRVEoMzk3NzY5NzQ2LCBscmFuZDQ4KCkpOwogfQogCiBURVNUKHN0ZGxpYiwgcmFuZG9tKSB7CkBAIC00OSw2ICs5OCwxMiBAQAogICBFWFBFQ1RfRVEoMTM5OTg2NTExNywgcmFuZG9tKCkpOwogICBFWFBFQ1RfRVEoMjAzMjY0MzI4MywgcmFuZG9tKCkpOwogICBFWFBFQ1RfRVEoNTcxMzI5MjE2LCByYW5kb20oKSk7CisgIHNyYW5kb20oMHgwMTAyMDMwNCk7CisgIEVYUEVDVF9FUSg1NTQzNjczNSwgcmFuZG9tKCkpOworICBFWFBFQ1RfRVEoMTM5OTg2NTExNywgcmFuZG9tKCkpOworICBzcmFuZG9tKDB4MDEwMjAzMDQpOworICBFWFBFQ1RfRVEoNTU0MzY3MzUsIHJhbmRvbSgpKTsKKyAgRVhQRUNUX0VRKDEzOTk4NjUxMTcsIHJhbmRvbSgpKTsKIH0KIAogVEVTVChzdGRsaWIsIHJhbmQpIHsKQEAgLTU3LDYgKzExMiwxMiBAQAogICBFWFBFQ1RfRVEoMTM5OTg2NTExNywgcmFuZCgpKTsKICAgRVhQRUNUX0VRKDIwMzI2NDMyODMsIHJhbmQoKSk7CiAgIEVYUEVDVF9FUSg1NzEzMjkyMTYsIHJhbmQoKSk7CisgIHNyYW5kKDB4MDEwMjAzMDQpOworICBFWFBFQ1RfRVEoNTU0MzY3MzUsIHJhbmQoKSk7CisgIEVYUEVDVF9FUSgxMzk5ODY1MTE3LCByYW5kKCkpOworICBzcmFuZCgweDAxMDIwMzA0KTsKKyAgRVhQRUNUX0VRKDU1NDM2NzM1LCByYW5kKCkpOworICBFWFBFQ1RfRVEoMTM5OTg2NTExNywgcmFuZCgpKTsKIH0KIAogVEVTVChzdGRsaWIsIG1yYW5kNDgpIHsKQEAgLTY1LDYgKzEyNiwxMiBAQAogICBFWFBFQ1RfRVEoNzk1NTM5NDkzLCBtcmFuZDQ4KCkpOwogICBFWFBFQ1RfRVEoMTgwNDUzNDI0OSwgbXJhbmQ0OCgpKTsKICAgRVhQRUNUX0VRKDI2NDczMjI2MiwgbXJhbmQ0OCgpKTsKKyAgc3JhbmQ0OCgweDAxMDIwMzA0KTsKKyAgRVhQRUNUX0VRKC0xNDc2NjM5ODU2LCBtcmFuZDQ4KCkpOworICBFWFBFQ1RfRVEoNzk1NTM5NDkzLCBtcmFuZDQ4KCkpOworICBzcmFuZDQ4KDB4MDEwMjAzMDQpOworICBFWFBFQ1RfRVEoLTE0NzY2Mzk4NTYsIG1yYW5kNDgoKSk7CisgIEVYUEVDVF9FUSg3OTU1Mzk0OTMsIG1yYW5kNDgoKSk7CiB9CiAKIFRFU1Qoc3RkbGliLCBwb3NpeF9tZW1hbGlnbikgewpAQCAtOTksNiArMTY2LDE4IEBACiAgIEFTU0VSVF9FUShFTk9FTlQsIGVycm5vKTsKIH0KIAorVEVTVChzdGRsaWIsIHJlYWxwYXRoX19jb21wb25lbnRfYWZ0ZXJfbm9uX2RpcmVjdG9yeSkgeworICBlcnJubyA9IDA7CisgIGNoYXIqIHAgPSByZWFscGF0aCgiL2Rldi9udWxsLy4iLCBOVUxMKTsKKyAgQVNTRVJUX1RSVUUocCA9PSBOVUxMKTsKKyAgQVNTRVJUX0VRKEVOT1RESVIsIGVycm5vKTsKKworICBlcnJubyA9IDA7CisgIHAgPSByZWFscGF0aCgiL2Rldi9udWxsLy4uIiwgTlVMTCk7CisgIEFTU0VSVF9UUlVFKHAgPT0gTlVMTCk7CisgIEFTU0VSVF9FUShFTk9URElSLCBlcnJubyk7Cit9CisKIFRFU1Qoc3RkbGliLCByZWFscGF0aCkgewogICAvLyBHZXQgdGhlIG5hbWUgb2YgdGhpcyBleGVjdXRhYmxlLgogICBjaGFyIGV4ZWN1dGFibGVfcGF0aFtQQVRIX01BWF07CkBAIC0xNTYsMjUgKzIzNSw0MSBAQAogCiAvLyBFdmVuIHRob3VnaCB0aGlzIGlzbid0IHJlYWxseSBhIGRlYXRoIHRlc3QsIHdlIGhhdmUgdG8gc2F5ICJEZWF0aFRlc3QiIGhlcmUgc28gZ3Rlc3Qga25vd3MgdG8KIC8vIHJ1biB0aGlzIHRlc3QgKHdoaWNoIGV4aXRzIG5vcm1hbGx5KSBpbiBpdHMgb3duIHByb2Nlc3MuCi1URVNUKHN0ZGxpYl9EZWF0aFRlc3QsIGdldGVudl9hZnRlcl9tYWluX3RocmVhZF9leGl0cykgeworCitjbGFzcyBzdGRsaWJfRGVhdGhUZXN0IDogcHVibGljIEJpb25pY0RlYXRoVGVzdCB7fTsKKworVEVTVF9GKHN0ZGxpYl9EZWF0aFRlc3QsIGdldGVudl9hZnRlcl9tYWluX3RocmVhZF9leGl0cykgewogICAvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD01NzQyMQotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIEFTU0VSVF9FWElUKFRlc3RCdWc1NzQyMV9tYWluKCksIDo6dGVzdGluZzo6RXhpdGVkV2l0aENvZGUoMCksICIiKTsKIH0KIAorVEVTVChzdGRsaWIsIG1rb3N0ZW1wNjQpIHsKKyAgVGVtcG9yYXJ5RmlsZSB0ZihbXShjaGFyKiBwYXRoKSB7IHJldHVybiBta29zdGVtcDY0KHBhdGgsIE9fQ0xPRVhFQyk7IH0pOworICBpbnQgZmxhZ3MgPSBmY250bCh0Zi5mZCwgRl9HRVRGRCk7CisgIEFTU0VSVF9UUlVFKGZsYWdzICE9IC0xKTsKKyAgQVNTRVJUX0VRKEZEX0NMT0VYRUMsIGZsYWdzICYgRkRfQ0xPRVhFQyk7Cit9CisKK1RFU1Qoc3RkbGliLCBta29zdGVtcCkgeworICBUZW1wb3JhcnlGaWxlIHRmKFtdKGNoYXIqIHBhdGgpIHsgcmV0dXJuIG1rb3N0ZW1wKHBhdGgsIE9fQ0xPRVhFQyk7IH0pOworICBpbnQgZmxhZ3MgPSBmY250bCh0Zi5mZCwgRl9HRVRGRCk7CisgIEFTU0VSVF9UUlVFKGZsYWdzICE9IC0xKTsKKyAgQVNTRVJUX0VRKEZEX0NMT0VYRUMsIGZsYWdzICYgRkRfQ0xPRVhFQyk7Cit9CisKK1RFU1Qoc3RkbGliLCBta3N0ZW1wNjQpIHsKKyAgVGVtcG9yYXJ5RmlsZSB0Zihta3N0ZW1wNjQpOworICBzdHJ1Y3Qgc3RhdDY0IHNiOworICBBU1NFUlRfRVEoMCwgZnN0YXQ2NCh0Zi5mZCwgJnNiKSk7CisgIEFTU0VSVF9FUShPX0xBUkdFRklMRSwgZmNudGwodGYuZmQsIEZfR0VURkwpICYgT19MQVJHRUZJTEUpOworfQorCiBURVNUKHN0ZGxpYiwgbWtzdGVtcCkgewogICBUZW1wb3JhcnlGaWxlIHRmOwogICBzdHJ1Y3Qgc3RhdCBzYjsKICAgQVNTRVJUX0VRKDAsIGZzdGF0KHRmLmZkLCAmc2IpKTsKIH0KIAotVEVTVChzdGRsaWIsIG1rc3RlbXA2NCkgewotICBHZW5lcmljVGVtcG9yYXJ5RmlsZTxta3N0ZW1wNjQ+IHRmOwotICBzdHJ1Y3Qgc3RhdDY0IHNiOwotICBBU1NFUlRfRVEoMCwgZnN0YXQ2NCh0Zi5mZCwgJnNiKSk7Ci0gIEFTU0VSVF9FUShPX0xBUkdFRklMRSwgZmNudGwodGYuZmQsIEZfR0VURkwpICYgT19MQVJHRUZJTEUpOwotfQotCiBURVNUKHN0ZGxpYiwgc3lzdGVtKSB7CiAgIGludCBzdGF0dXM7CiAKQEAgLTIwMyw2ICsyOTgsMjMgQEAKICAgQVNTRVJUX0RPVUJMRV9FUSgxLjIzLCBzdHJ0b2xkKCIxLjIzIiwgTlVMTCkpOwogfQogCitURVNUKHN0ZGxpYiwgc3RydG9mXzIyMDY3MDEpIHsKKyAgQVNTRVJUX0VRKDAuMGYsIHN0cnRvZigiNy4wMDY0OTIzMjE2MjQwODUzNTQ2MTg2NDc5MTY0NDk1ZS00NiIsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDEuNGUtNDVmLCBzdHJ0b2YoIjcuMDA2NDkyMzIxNjI0MDg1MzU0NjE4NjQ3OTE2NDQ5NmUtNDYiLCBOVUxMKSk7Cit9CisKK1RFU1Qoc3RkbGliLCBzdHJ0b2RfbGFyZ2VzdF9zdWJub3JtYWwpIHsKKyAgLy8gVGhpcyB2YWx1ZSBoYXMgYmVlbiBrbm93biB0byBjYXVzZSBqYXZhYyBhbmQgamF2YSB0byBpbmZpbml0ZSBsb29wLgorICAvLyBodHRwOi8vd3d3LmV4cGxvcmluZ2JpbmFyeS5jb20vamF2YS1oYW5ncy13aGVuLWNvbnZlcnRpbmctMi0yMjUwNzM4NTg1MDcyMDEyZS0zMDgvCisgIEFTU0VSVF9FUSgyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCwgc3RydG9kKCIyLjIyNTA3Mzg1ODUwNzIwMTJlLTMwOCIsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDIuMjI1MDczODU4NTA3MjAxNGUtMzA4LCBzdHJ0b2QoIjAuMDAwMjIyNTA3Mzg1ODUwNzIwMTJlLTMwNCIsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDIuMjI1MDczODU4NTA3MjAxNGUtMzA4LCBzdHJ0b2QoIjAwMDAwMDAyLjIyNTA3Mzg1ODUwNzIwMTJlLTMwOCIsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDIuMjI1MDczODU4NTA3MjAxNGUtMzA4LCBzdHJ0b2QoIjIuMjI1MDczODU4NTA3MjAxMjAwMDAwZS0zMDgiLCBOVUxMKSk7CisgIEFTU0VSVF9FUSgyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCwgc3RydG9kKCIyLjIyNTA3Mzg1ODUwNzIwMTJlLTAwMzA4IiwgTlVMTCkpOworICBBU1NFUlRfRVEoMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDgsIHN0cnRvZCgiMi4yMjUwNzM4NTg1MDcyMDEyOTk3ODAwMWUtMzA4IiwgTlVMTCkpOworICBBU1NFUlRfRVEoLTIuMjI1MDczODU4NTA3MjAxNGUtMzA4LCBzdHJ0b2QoIi0yLjIyNTA3Mzg1ODUwNzIwMTJlLTMwOCIsIE5VTEwpKTsKK30KKwogVEVTVChzdGRsaWIsIHF1aWNrX2V4aXQpIHsKICAgcGlkX3QgcGlkID0gZm9yaygpOwogICBBU1NFUlRfTkUoLTEsIHBpZCkgPDwgc3RyZXJyb3IoZXJybm8pOwpAQCAtMzYxLDMgKzQ3Myw1MSBAQAogICBBU1NFUlRfRVEoRU5PVFRZLCBlcnJubyk7CiAgIGNsb3NlKGZkKTsKIH0KKworVEVTVChzdGRsaWIsIHN0cnRvbF9FSU5WQUwpIHsKKyAgZXJybm8gPSAwOworICBzdHJ0b2woIjEyMyIsIE5VTEwsIC0xKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHN0cnRvbCgiMTIzIiwgTlVMTCwgMSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgZXJybm8gPSAwOworICBzdHJ0b2woIjEyMyIsIE5VTEwsIDM3KTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworfQorCitURVNUKHN0ZGxpYiwgc3RydG9sbF9FSU5WQUwpIHsKKyAgZXJybm8gPSAwOworICBzdHJ0b2xsKCIxMjMiLCBOVUxMLCAtMSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgZXJybm8gPSAwOworICBzdHJ0b2xsKCIxMjMiLCBOVUxMLCAxKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHN0cnRvbGwoIjEyMyIsIE5VTEwsIDM3KTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworfQorCitURVNUKHN0ZGxpYiwgc3RydG91bF9FSU5WQUwpIHsKKyAgZXJybm8gPSAwOworICBzdHJ0b3VsKCIxMjMiLCBOVUxMLCAtMSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgZXJybm8gPSAwOworICBzdHJ0b3VsKCIxMjMiLCBOVUxMLCAxKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHN0cnRvdWwoIjEyMyIsIE5VTEwsIDM3KTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworfQorCitURVNUKHN0ZGxpYiwgc3RydG91bGxfRUlOVkFMKSB7CisgIGVycm5vID0gMDsKKyAgc3RydG91bGwoIjEyMyIsIE5VTEwsIC0xKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHN0cnRvdWxsKCIxMjMiLCBOVUxMLCAxKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHN0cnRvdWxsKCIxMjMiLCBOVUxMLCAzNyk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0cmluZ19wb3NpeF9zdHJlcnJvcl9yX3Rlc3QuY3BwIGIvdGVzdHMvc3RyaW5nX3Bvc2l4X3N0cmVycm9yX3JfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzYjQxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3N0cmluZ19wb3NpeF9zdHJlcnJvcl9yX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjdW5kZWYgX0dOVV9TT1VSQ0UKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPiAvLyBHZXQgX19CSU9OSUNfXyBvciBfX0dMSUJDX18gc28gd2UgY2FuIHRlbGwgd2hhdCB3ZSdyZSB1c2luZy4KKworI2lmIGRlZmluZWQoX19HTElCQ19fKQorCisvLyBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCBsaWJjeHggLS0gd2hpY2ggaXMgZHJhZ2dlZCBpbiBieSBndGVzdCAtLSBhc3N1bWVzCisvLyBkZWNsYXJhdGlvbnMgZnJvbSBnbGliYyBvZiB0aGluZ3MgdGhhdCBhcmVuJ3QgYXZhaWxhYmxlIHdpdGhvdXQgX19VU0VfR05VLgorLy8gVGhpcyBtZWFucyB3ZSBjYW4ndCBldmVuIGJ1aWxkIHRoaXMgdGVzdCAod2hpY2ggaXMgYSBwcm9ibGVtIGJlY2F1c2UgdGhhdAorLy8gbWVhbnMgaXQgZG9lc24ndCBnZXQgaW5jbHVkZWQgaW4gQ1RTKS4KKy8vIEZvciBnbGliYyAyLjE1LCB0aGUgc3ltYm9scyBpbiBxdWVzdGlvbiBhcmU6CisvLyAgIGF0X3F1aWNrX2V4aXQsIHF1aWNrX2V4aXQsIHZhc3ByaW50Ziwgc3RydG9sbF9sLCBzdHJ0b3VsbF9sLCBhbmQgc3RydG9sZF9sLgorCisjIGlmIF9fR0xJQkNfUFJFUkVRKDIsIDE5KQorIyAgZXJyb3IgY2hlY2sgd2hldGhlciB3ZSBjYW4gYnVpbGQgdGhpcyBub3cuLi4KKyMgZW5kaWYKKworI2Vsc2UKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCitURVNUKHN0cmluZywgcG9zaXhfc3RyZXJyb3JfcikgeworICBjaGFyIGJ1ZlsyNTZdOworCisgIC8vIFZhbGlkLgorICBBU1NFUlRfRVEoMCwgc3RyZXJyb3JfcigwLCBidWYsIHNpemVvZihidWYpKSk7CisgIEFTU0VSVF9TVFJFUSgiU3VjY2VzcyIsIGJ1Zik7CisgIEFTU0VSVF9FUSgwLCBzdHJlcnJvcl9yKDEsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgQVNTRVJUX1NUUkVRKCJPcGVyYXRpb24gbm90IHBlcm1pdHRlZCIsIGJ1Zik7CisKKyAgLy8gSW52YWxpZC4KKyAgQVNTRVJUX0VRKDAsIHN0cmVycm9yX3IoLTEsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgQVNTRVJUX1NUUkVRKCJVbmtub3duIGVycm9yIC0xIiwgYnVmKTsKKyAgQVNTRVJUX0VRKDAsIHN0cmVycm9yX3IoMTIzNCwgYnVmLCBzaXplb2YoYnVmKSkpOworICBBU1NFUlRfU1RSRVEoIlVua25vd24gZXJyb3IgMTIzNCIsIGJ1Zik7CisKKyAgLy8gQnVmZmVyIHRvbyBzbWFsbC4KKyAgZXJybm8gPSAwOworICBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisgIEFTU0VSVF9FUSgtMSwgc3RyZXJyb3Jfcig0NTY3LCBidWYsIDIpKTsKKyAgQVNTRVJUX1NUUkVRKCJVIiwgYnVmKTsKKyAgLy8gVGhlIFBPU0lYIHN0cmVycm9yX3Igc2V0cyBlcnJubyB0byBFUkFOR0UgKHRoZSBHTlUgb25lIGRvZXNuJ3QpLgorICBBU1NFUlRfRVEoRVJBTkdFLCBlcnJubyk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RyaW5nX3Rlc3QuY3BwIGIvdGVzdHMvc3RyaW5nX3Rlc3QuY3BwCmluZGV4IGYxYWM5ZGQuLjEzNzU2NWUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N0cmluZ190ZXN0LmNwcAorKysgYi90ZXN0cy9zdHJpbmdfdGVzdC5jcHAKQEAgLTE0LDE1ICsxNCwyMiBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjZGVmaW5lIF9HTlVfU09VUkNFIDEKIAotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKwogI2luY2x1ZGUgImJ1ZmZlcl90ZXN0cy5oIgogCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorI2RlZmluZSBTVFJMQ1BZX1NVUFBPUlRFRAorI2RlZmluZSBTVFJMQ0FUX1NVUFBPUlRFRAorI2VuZGlmCisKICNkZWZpbmUgS0IgMTAyNAogI2RlZmluZSBTTUFMTCAxKktCCiAjZGVmaW5lIE1FRElVTSA0KktCCkBAIC02OCwzMiArNzUsMzggQEAKIAogICBBU1NFUlRfU1RSRVEoIlVua25vd24gZXJyb3IgMTAwMSIsIHN0cmVycm9yMTAwMSk7CiAjZWxzZSAvLyBfX0JJT05JQ19fCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworICBHVEVTVF9MT0dfKElORk8pIDw8ICJTa2lwcGluZyB0ZXN0LCByZXF1aXJlcyBhIHRocmVhZCBzYWZlIHN0cmVycm9yLiI7CiAjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCi1URVNUKHN0cmluZywgc3RyZXJyb3JfcikgewotI2lmIGRlZmluZWQoX19CSU9OSUNfXykgLy8gZ2xpYmMncyBzdHJlcnJvcl9yIGRvZXNuJ3QgZXZlbiBoYXZlIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyB0aGUgUE9TSVggb25lLgorVEVTVChzdHJpbmcsIGdudV9zdHJlcnJvcl9yKSB7CiAgIGNoYXIgYnVmWzI1Nl07CiAKKyAgLy8gTm90ZSB0aGF0IGdsaWJjIGRvZXNuJ3QgbmVjZXNzYXJpbHkgd3JpdGUgaW50byB0aGUgYnVmZmVyLgorCiAgIC8vIFZhbGlkLgotICBBU1NFUlRfRVEoMCwgc3RyZXJyb3JfcigwLCBidWYsIHNpemVvZihidWYpKSk7CisgIEFTU0VSVF9TVFJFUSgiU3VjY2VzcyIsIHN0cmVycm9yX3IoMCwgYnVmLCBzaXplb2YoYnVmKSkpOworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgQVNTRVJUX1NUUkVRKCJTdWNjZXNzIiwgYnVmKTsKLSAgQVNTRVJUX0VRKDAsIHN0cmVycm9yX3IoMSwgYnVmLCBzaXplb2YoYnVmKSkpOworI2VuZGlmCisgIEFTU0VSVF9TVFJFUSgiT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQiLCBzdHJlcnJvcl9yKDEsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIEFTU0VSVF9TVFJFUSgiT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQiLCBidWYpOworI2VuZGlmCiAKICAgLy8gSW52YWxpZC4KLSAgQVNTRVJUX0VRKDAsIHN0cmVycm9yX3IoLTEsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgQVNTRVJUX1NUUkVRKCJVbmtub3duIGVycm9yIC0xIiwgc3RyZXJyb3JfcigtMSwgYnVmLCBzaXplb2YoYnVmKSkpOwogICBBU1NFUlRfU1RSRVEoIlVua25vd24gZXJyb3IgLTEiLCBidWYpOwotICBBU1NFUlRfRVEoMCwgc3RyZXJyb3JfcigxMjM0LCBidWYsIHNpemVvZihidWYpKSk7CisgIEFTU0VSVF9TVFJFUSgiVW5rbm93biBlcnJvciAxMjM0Iiwgc3RyZXJyb3JfcigxMjM0LCBidWYsIHNpemVvZihidWYpKSk7CiAgIEFTU0VSVF9TVFJFUSgiVW5rbm93biBlcnJvciAxMjM0IiwgYnVmKTsKIAogICAvLyBCdWZmZXIgdG9vIHNtYWxsLgotICBBU1NFUlRfRVEoLTEsIHN0cmVycm9yX3IoMCwgYnVmLCAyKSk7Ci0gIEFTU0VSVF9FUShFUkFOR0UsIGVycm5vKTsKLSNlbHNlIC8vIF9fQklPTklDX18KLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7Ci0jZW5kaWYgLy8gX19CSU9OSUNfXworICBlcnJubyA9IDA7CisgIG1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKyAgQVNTRVJUX0VRKGJ1Ziwgc3RyZXJyb3Jfcig0NTY3LCBidWYsIDIpKTsKKyAgQVNTRVJUX1NUUkVRKCJVIiwgYnVmKTsKKyAgLy8gVGhlIEdOVSBzdHJlcnJvcl9yIGRvZXNuJ3Qgc2V0IGVycm5vICh0aGUgUE9TSVggb25lIHNldHMgaXQgdG8gRVJBTkdFKS4KKyAgQVNTRVJUX0VRKDAsIGVycm5vKTsKIH0KIAogVEVTVChzdHJpbmcsIHN0cnNpZ25hbCkgewpAQCAtMTI5LDggKzE0Miw3IEBACiAgIEFTU0VSVF9TVFJFUSgiVW5rbm93biBzaWduYWwgMTAwMSIsIHN0cnNpZ25hbDEwMDEpOwogfQogCi0vLyBUT0RPOiB3aGVyZSBkaWQgdGhlc2UgbnVtYmVycyBjb21lIGZyb20/Ci0jZGVmaW5lIFBPU19JVEVSICAgIDEwCisvLyBUT0RPOiB3aGVyZSBkaWQgdGhpcyBudW1iZXIgY29tZSBmcm9tPwogI2RlZmluZSBJVEVSICAgICAgICA1MDAKIAogLy8gRm9yIGV2ZXJ5IGxlbmd0aCB3ZSB3YW50IHRvIHRlc3QsIHZhcnkgYW5kIGNoYW5nZSBhbGlnbm1lbnQKQEAgLTEzOSw4ICsxNTEsOSBAQAogLy8gVGhlc2UgdGVzdHMgY29udHJpYnV0ZWQgYnkgSW50ZWwgQ29ycG9yYXRpb24uCiAvLyBUT0RPOiBtYWtlIHRoZXNlIHRlc3RzIG1vcmUgaW50ZW50aW9uLXJldmVhbGluZyBhbmQgbGVzcyByYW5kb20uCiB0ZW1wbGF0ZTxjbGFzcyBDaGFyYWN0ZXI+Ci1zdHJ1Y3QgU3RyaW5nVGVzdFN0YXRlIHsKLSAgU3RyaW5nVGVzdFN0YXRlKHNpemVfdCBNQVhfTEVOKSA6IE1BWF9MRU4oTUFYX0xFTikgeworY2xhc3MgU3RyaW5nVGVzdFN0YXRlIHsKKyBwdWJsaWM6CisgIFN0cmluZ1Rlc3RTdGF0ZShzaXplX3QgTUFYX0xFTikgOiBNQVhfTEVOKE1BWF9MRU4pLCBhbGlnbjFfaW5kZXhfKDApLCBhbGlnbjJfaW5kZXhfKDApIHsKICAgICBpbnQgbWF4X2FsaWdubWVudCA9IDY0OwogCiAgICAgLy8gVE9ETzogZml4IHRoZSB0ZXN0cyB0byBub3Qgc29tZXRpbWVzIHVzZSB0d2ljZSB0aGVpciBzcGVjaWZpZWQgIk1BWF9MRU4iLgpAQCAtMTU5LDE1ICsxNzIsMzAgQEAKICAgICBmcmVlKGdsb2JfcHRyMik7CiAgIH0KIAotICB2b2lkIE5ld0l0ZXJhdGlvbigpIHsKLSAgICBpbnQgYWxpZ25tZW50c1tdID0geyAyNCwgMzIsIDE2LCA0OCwgMSwgMiwgMywgMCwgNSwgMTEgfTsKLSAgICBpbnQgdXNhYmxlX2FsaWdubWVudHMgPSAxMDsKLSAgICBpbnQgYWxpZ24xID0gYWxpZ25tZW50c1tyYW5kb20oKSAlICh1c2FibGVfYWxpZ25tZW50cyAtIDEpXTsKLSAgICBpbnQgYWxpZ24yID0gYWxpZ25tZW50c1tyYW5kb20oKSAlICh1c2FibGVfYWxpZ25tZW50cyAtIDEpXTsKKyAgdm9pZCBCZWdpbkl0ZXJhdGlvbnMoKSB7CisgICAgYWxpZ24xX2luZGV4XyA9IDA7CisgICAgYWxpZ24yX2luZGV4XyA9IDA7CiAKLSAgICBwdHIgPSBnbG9iX3B0ciArIGFsaWduMTsKLSAgICBwdHIxID0gZ2xvYl9wdHIxICsgYWxpZ24xOwotICAgIHB0cjIgPSBnbG9iX3B0cjIgKyBhbGlnbjI7CisgICAgUmVzZXRQb2ludGVycygpOworICB9CisKKyAgYm9vbCBIYXNOZXh0SXRlcmF0aW9uKCkgeworICAgIHJldHVybiAoYWxpZ24xX2luZGV4XyAhPSAoYWxpZ25tZW50c19zaXplIC0gMSkgfHwgYWxpZ24yX2luZGV4XyAhPSAoYWxpZ25tZW50c19zaXplIC0gMSkpOworICB9CisKKyAgdm9pZCBOZXh0SXRlcmF0aW9uKCkgeworICAgIGlmIChhbGlnbjFfaW5kZXhfID09IChhbGlnbm1lbnRzX3NpemUgLSAxKSAmJiBhbGlnbjJfaW5kZXhfID09IChhbGlnbm1lbnRzX3NpemUgLSAxKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhbGlnbjFfaW5kZXhfID09IChhbGlnbm1lbnRzX3NpemUgLSAxKSkgeworICAgICAgYWxpZ24xX2luZGV4XyA9IDA7CisgICAgICBhbGlnbjJfaW5kZXhfKys7CisgICAgfSBlbHNlIHsKKyAgICAgIGFsaWduMV9pbmRleF8rKzsKKyAgICB9CisKKyAgICBSZXNldFBvaW50ZXJzKCk7CiAgIH0KIAogICBjb25zdCBzaXplX3QgTUFYX0xFTjsKQEAgLTE3Niw3ICsyMDQsMTAgQEAKICAgc2l6ZV90IGxlbltJVEVSICsgMV07CiAKICBwcml2YXRlOgorICBzdGF0aWMgc2l6ZV90IGFsaWdubWVudHNbXTsKKyAgc3RhdGljIHNpemVfdCBhbGlnbm1lbnRzX3NpemU7CiAgIENoYXJhY3RlciAqZ2xvYl9wdHIsICpnbG9iX3B0cjEsICpnbG9iX3B0cjI7CisgIHNpemVfdCBhbGlnbjFfaW5kZXhfLCBhbGlnbjJfaW5kZXhfOwogCiAgIC8vIENhbGN1bGF0ZSBpbnB1dCBsZW5ndGhzIGFuZCBmaWxsIHN0YXRlLmxlbiB3aXRoIHRoZW0uCiAgIC8vIFRlc3Qgc21hbGwgbGVuZ3RocyB3aXRoIG1vcmUgZGVuc2l0eSB0aGFuIGJpZyBvbmVzLiBNYW51YWxseSBwdXNoCkBAIC0xOTMsMTkgKzIyNCwzMyBAQAogICAgIH0KICAgICBsZW5bbisrXSA9IE1BWF9MRU47CiAgIH0KKworICB2b2lkIFJlc2V0UG9pbnRlcnMoKSB7CisgICAgaWYgKGFsaWduMV9pbmRleF8gPT0gYWxpZ25tZW50c19zaXplIHx8IGFsaWduMl9pbmRleF8gPT0gYWxpZ25tZW50c19zaXplKSB7CisgICAgICBwdHIgPSBwdHIxID0gcHRyMiA9IG51bGxwdHI7CisgICAgfSBlbHNlIHsKKyAgICAgIHB0ciA9IGdsb2JfcHRyICsgYWxpZ25tZW50c1thbGlnbjFfaW5kZXhfXTsKKyAgICAgIHB0cjEgPSBnbG9iX3B0cjEgKyBhbGlnbm1lbnRzW2FsaWduMV9pbmRleF9dOworICAgICAgcHRyMiA9IGdsb2JfcHRyMiArIGFsaWdubWVudHNbYWxpZ24yX2luZGV4X107CisgICAgfQorICB9CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBDaGFyYWN0ZXI+CitzaXplX3QgU3RyaW5nVGVzdFN0YXRlPENoYXJhY3Rlcj46OmFsaWdubWVudHNbXSA9IHsgMjQsIDMyLCAxNiwgNDgsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDExIH07CisKK3RlbXBsYXRlPGNsYXNzIENoYXJhY3Rlcj4KK3NpemVfdCBTdHJpbmdUZXN0U3RhdGU8Q2hhcmFjdGVyPjo6YWxpZ25tZW50c19zaXplID0gc2l6ZW9mKGFsaWdubWVudHMpL3NpemVvZihzaXplX3QpOworCiBURVNUKHN0cmluZywgc3RyY2F0KSB7CiAgIFN0cmluZ1Rlc3RTdGF0ZTxjaGFyPiBzdGF0ZShTTUFMTCk7CiAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc3RhdGUubjsgaSsrKSB7Ci0gICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7Ci0gICAgICBzdGF0ZS5OZXdJdGVyYXRpb24oKTsKLQorICAgIGZvciAoc3RhdGUuQmVnaW5JdGVyYXRpb25zKCk7IHN0YXRlLkhhc05leHRJdGVyYXRpb24oKTsgc3RhdGUuTmV4dEl0ZXJhdGlvbigpKSB7CiAgICAgICBtZW1zZXQoc3RhdGUucHRyMiwgJ1wyJywgc3RhdGUuTUFYX0xFTik7CiAgICAgICBzdGF0ZS5wdHIyW3N0YXRlLk1BWF9MRU4gLSAxXSA9ICdcMCc7CiAgICAgICBtZW1jcHkoc3RhdGUucHRyLCBzdGF0ZS5wdHIyLCAyICogc3RhdGUuTUFYX0xFTik7CiAKLSAgICAgIG1lbXNldChzdGF0ZS5wdHIxLCByYW5kb20oKSAmIDI1NSwgc3RhdGUubGVuW2ldKTsKKyAgICAgIG1lbXNldChzdGF0ZS5wdHIxLCAnTCcsIHN0YXRlLmxlbltpXSk7CiAgICAgICBzdGF0ZS5wdHIxW3JhbmRvbSgpICUgc3RhdGUubGVuW2ldXSA9ICdcMCc7CiAgICAgICBzdGF0ZS5wdHIxW3N0YXRlLmxlbltpXSAtIDFdID0gJ1wwJzsKIApAQCAtMzc4LDEzICs0MjMsMTEgQEAKIH0KIAogVEVTVChzdHJpbmcsIHN0cmNocikgewotICBpbnQgc2Vla19jaGFyID0gcmFuZG9tKCkgJiAyNTU7CisgIGludCBzZWVrX2NoYXIgPSAnUic7CiAKICAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzdGF0ZS5uOyBpKyspIHsKLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKLSAgICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOwotCisgICAgZm9yIChzdGF0ZS5CZWdpbkl0ZXJhdGlvbnMoKTsgc3RhdGUuSGFzTmV4dEl0ZXJhdGlvbigpOyBzdGF0ZS5OZXh0SXRlcmF0aW9uKCkpIHsKICAgICAgIGlmICh+c2Vla19jaGFyID4gMCkgewogICAgICAgICBtZW1zZXQoc3RhdGUucHRyMSwgfnNlZWtfY2hhciwgc3RhdGUubGVuW2ldKTsKICAgICAgIH0gZWxzZSB7CkBAIC00MTMsOSArNDU2LDcgQEAKIFRFU1Qoc3RyaW5nLCBzdHJjbXApIHsKICAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzdGF0ZS5uOyBpKyspIHsKLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKLSAgICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOwotCisgICAgZm9yIChzdGF0ZS5CZWdpbkl0ZXJhdGlvbnMoKTsgc3RhdGUuSGFzTmV4dEl0ZXJhdGlvbigpOyBzdGF0ZS5OZXh0SXRlcmF0aW9uKCkpIHsKICAgICAgIG1lbXNldChzdGF0ZS5wdHIxLCAndicsIHN0YXRlLk1BWF9MRU4pOwogICAgICAgbWVtc2V0KHN0YXRlLnB0cjIsICduJywgc3RhdGUuTUFYX0xFTik7CiAgICAgICBzdGF0ZS5wdHIxW3N0YXRlLmxlbltpXSAtIDFdID0gJ1wwJzsKQEAgLTQ0OSw5ICs0OTAsNyBAQAogCiBURVNUKHN0cmluZywgc3RwY3B5KSB7CiAgIFN0cmluZ1Rlc3RTdGF0ZTxjaGFyPiBzdGF0ZShTTUFMTCk7Ci0gIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgewotICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOwotCisgIGZvciAoc3RhdGUuQmVnaW5JdGVyYXRpb25zKCk7IHN0YXRlLkhhc05leHRJdGVyYXRpb24oKTsgc3RhdGUuTmV4dEl0ZXJhdGlvbigpKSB7CiAgICAgc2l6ZV90IHBvcyA9IHJhbmRvbSgpICUgc3RhdGUuTUFYX0xFTjsKIAogICAgIG1lbXNldChzdGF0ZS5wdHIxLCAnXDInLCBwb3MpOwpAQCAtNDc1LDkgKzUxNCw3IEBACiAKIFRFU1Qoc3RyaW5nLCBzdHJjcHkpIHsKICAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKLSAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7Ci0gICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7Ci0KKyAgZm9yIChzdGF0ZS5CZWdpbkl0ZXJhdGlvbnMoKTsgc3RhdGUuSGFzTmV4dEl0ZXJhdGlvbigpOyBzdGF0ZS5OZXh0SXRlcmF0aW9uKCkpIHsKICAgICBzaXplX3QgcG9zID0gcmFuZG9tKCkgJSBzdGF0ZS5NQVhfTEVOOwogCiAgICAgbWVtc2V0KHN0YXRlLnB0cjEsICdcMicsIHBvcyk7CkBAIC01MDAsMTIgKzUzNywxMCBAQAogfQogCiBURVNUKHN0cmluZywgc3RybGNhdCkgewotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyNpZiBkZWZpbmVkKFNUUkxDQVRfU1VQUE9SVEVEKQogICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLm47IGkrKykgewotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgewotICAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7Ci0KKyAgICBmb3IgKHN0YXRlLkJlZ2luSXRlcmF0aW9ucygpOyBzdGF0ZS5IYXNOZXh0SXRlcmF0aW9uKCk7IHN0YXRlLk5leHRJdGVyYXRpb24oKSkgewogICAgICAgbWVtc2V0KHN0YXRlLnB0cjIsICdcMicsIHN0YXRlLk1BWF9MRU4gKyBzdGF0ZS5sZW5baV0pOwogICAgICAgc3RhdGUucHRyMltzdGF0ZS5NQVhfTEVOIC0gMV0gPSAnXDAnOwogICAgICAgbWVtY3B5KHN0YXRlLnB0ciwgc3RhdGUucHRyMiwgc3RhdGUuTUFYX0xFTiArIHN0YXRlLmxlbltpXSk7CkBAIC01MjUsMjEgKzU2MCwxNiBAQAogICAgICAgQVNTRVJUX1RSVUUobWVtY21wKHN0YXRlLnB0ciwgc3RhdGUucHRyMiwgc3RhdGUuTUFYX0xFTiArIHN0YXRlLmxlbltpXSkgPT0gMCk7CiAgICAgfQogICB9Ci0jZWxzZSAvLyBfX0JJT05JQ19fCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOwotI2VuZGlmIC8vIF9fQklPTklDX18KKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlNraXBwaW5nIHRlc3QsIHN0cmxjYXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiI7CisjZW5kaWYKIH0KIAogVEVTVChzdHJpbmcsIHN0cmxjcHkpIHsKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCisjaWYgZGVmaW5lZChTVFJMQ1BZX1NVUFBPUlRFRCkKICAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKLSAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7Ci0gICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7Ci0KLSAgICBpbnQgcmFuZCA9IHJhbmRvbSgpICYgMjU1OwotICAgIGlmIChyYW5kIDwgMSkgewotICAgICAgcmFuZCA9IDE7Ci0gICAgfQorICBmb3IgKHN0YXRlLkJlZ2luSXRlcmF0aW9ucygpOyBzdGF0ZS5IYXNOZXh0SXRlcmF0aW9uKCk7IHN0YXRlLk5leHRJdGVyYXRpb24oKSkgeworICAgIGludCByYW5kID0gJ08nOwogICAgIG1lbXNldChzdGF0ZS5wdHIxLCByYW5kLCBzdGF0ZS5NQVhfTEVOKTsKIAogICAgIHNpemVfdCBwb3MgPSByYW5kb20oKSAlIHN0YXRlLk1BWF9MRU47CkBAIC01NDgsNyArNTc4LDcgQEAKICAgICB9CiAgICAgbWVtY3B5KHN0YXRlLnB0ciwgc3RhdGUucHRyMSwgc3RhdGUuTUFYX0xFTik7CiAKLSAgICBtZW1zZXQoc3RhdGUucHRyMiwgcmFuZG9tKCkgJiAyNTUsIHN0YXRlLk1BWF9MRU4pOworICAgIG1lbXNldChzdGF0ZS5wdHIyLCAnSScsIHN0YXRlLk1BWF9MRU4pOwogICAgIG1lbWNweShzdGF0ZS5wdHIgKyBzdGF0ZS5NQVhfTEVOLCBzdGF0ZS5wdHIyLCBzdGF0ZS5NQVhfTEVOKTsKIAogICAgIGlmIChwb3MgPiBzdGF0ZS5NQVhfTEVOIC0gMSkgewpAQCAtNTYyLDIyICs1OTIsMjAgQEAKICAgICBBU1NFUlRfRkFMU0UoKG1lbWNtcChzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIsIHN0YXRlLk1BWF9MRU4pICE9IDApIHx8CiAgICAgICAgICAgICAgICAgIChtZW1jbXAoc3RhdGUucHRyMiwgc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgc3RhdGUuTUFYX0xFTikgIT0gMCkpOwogICB9Ci0jZWxzZSAvLyBfX0JJT05JQ19fCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOwotI2VuZGlmIC8vIF9fQklPTklDX18KKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlNraXBwaW5nIHRlc3QsIHN0cmxjcHkgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiI7CisjZW5kaWYKIH0KIAogVEVTVChzdHJpbmcsIHN0cm5jYXQpIHsKICAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzdGF0ZS5uOyBpKyspIHsKLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKLSAgICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOwotCisgICAgZm9yIChzdGF0ZS5CZWdpbkl0ZXJhdGlvbnMoKTsgc3RhdGUuSGFzTmV4dEl0ZXJhdGlvbigpOyBzdGF0ZS5OZXh0SXRlcmF0aW9uKCkpIHsKICAgICAgIG1lbXNldChzdGF0ZS5wdHIyLCAnXDInLCBzdGF0ZS5NQVhfTEVOKTsKICAgICAgIHN0YXRlLnB0cjJbc3RhdGUuTUFYX0xFTiAtIDFdID0gJ1wwJzsKICAgICAgIG1lbWNweShzdGF0ZS5wdHIsIHN0YXRlLnB0cjIsIDIgKiBzdGF0ZS5NQVhfTEVOKTsKIAotICAgICAgbWVtc2V0KHN0YXRlLnB0cjEsIHJhbmRvbSgpICYgMjU1LCBzdGF0ZS5sZW5baV0pOworICAgICAgbWVtc2V0KHN0YXRlLnB0cjEsICdJJywgc3RhdGUubGVuW2ldKTsKICAgICAgIHN0YXRlLnB0cjFbcmFuZG9tKCkgJSBzdGF0ZS5sZW5baV1dID0gJ1wwJzsKICAgICAgIHN0YXRlLnB0cjFbc3RhdGUubGVuW2ldIC0gMV0gPSAnXDAnOwogCkBAIC01OTYsOSArNjI0LDcgQEAKIFRFU1Qoc3RyaW5nLCBzdHJuY21wKSB7CiAgIFN0cmluZ1Rlc3RTdGF0ZTxjaGFyPiBzdGF0ZShTTUFMTCk7CiAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc3RhdGUubjsgaSsrKSB7Ci0gICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7Ci0gICAgICBzdGF0ZS5OZXdJdGVyYXRpb24oKTsKLQorICAgIGZvciAoc3RhdGUuQmVnaW5JdGVyYXRpb25zKCk7IHN0YXRlLkhhc05leHRJdGVyYXRpb24oKTsgc3RhdGUuTmV4dEl0ZXJhdGlvbigpKSB7CiAgICAgICBtZW1zZXQoc3RhdGUucHRyMSwgJ3YnLCBzdGF0ZS5NQVhfTEVOKTsKICAgICAgIG1lbXNldChzdGF0ZS5wdHIyLCAnbicsIHN0YXRlLk1BWF9MRU4pOwogICAgICAgc3RhdGUucHRyMVtzdGF0ZS5sZW5baV0gLSAxXSA9ICdcMCc7CkBAIC02MzIsMTIgKzY1OCw4IEBACiAKIFRFU1Qoc3RyaW5nLCBzdHBuY3B5KSB7CiAgIFN0cmluZ1Rlc3RTdGF0ZTxjaGFyPiBzdGF0ZShTTUFMTCk7Ci0gIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgSVRFUjsgaisrKSB7Ci0gICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7Ci0KLSAgICAvLyBDaG9vc2UgYSByYW5kb20gdmFsdWUgdG8gZmlsbCB0aGUgc3RyaW5nLCBleGNlcHQgXDAgKHN0cmluZyB0ZXJtaW5hdG9yKSwKLSAgICAvLyBvciBcMSAoZ3VhcmFudGVlcyBpdCdzIGRpZmZlcmVudCBmcm9tIGFueXRoaW5nIGluIHB0cjIpLgotICAgIG1lbXNldChzdGF0ZS5wdHIxLCAocmFuZG9tKCkgJSAyNTQpICsgMiwgc3RhdGUuTUFYX0xFTik7CisgIGZvciAoc3RhdGUuQmVnaW5JdGVyYXRpb25zKCk7IHN0YXRlLkhhc05leHRJdGVyYXRpb24oKTsgc3RhdGUuTmV4dEl0ZXJhdGlvbigpKSB7CisgICAgbWVtc2V0KHN0YXRlLnB0cjEsICdKJywgc3RhdGUuTUFYX0xFTik7CiAgICAgLy8gQ2hvb3NlIGEgcmFuZG9tIHNpemUgZm9yIG91ciBzcmMgYnVmZmVyLgogICAgIHNpemVfdCBwdHIxX2xlbiA9IHJhbmRvbSgpICUgc3RhdGUuTUFYX0xFTjsKICAgICBzdGF0ZS5wdHIxW3B0cjFfbGVuXSA9ICdcMCc7CkBAIC02NzEsMTIgKzY5MywxMCBAQAogCiBURVNUKHN0cmluZywgc3RybmNweSkgewogICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOwotICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IElURVI7IGorKykgewotICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOwotCisgIGZvciAoc3RhdGUuQmVnaW5JdGVyYXRpb25zKCk7IHN0YXRlLkhhc05leHRJdGVyYXRpb24oKTsgc3RhdGUuTmV4dEl0ZXJhdGlvbigpKSB7CiAgICAgLy8gQ2hvb3NlIGEgcmFuZG9tIHZhbHVlIHRvIGZpbGwgdGhlIHN0cmluZywgZXhjZXB0IFwwIChzdHJpbmcgdGVybWluYXRvciksCiAgICAgLy8gb3IgXDEgKGd1YXJhbnRlZXMgaXQncyBkaWZmZXJlbnQgZnJvbSBhbnl0aGluZyBpbiBwdHIyKS4KLSAgICBtZW1zZXQoc3RhdGUucHRyMSwgKHJhbmRvbSgpICUgMjU0KSArIDIsIHN0YXRlLk1BWF9MRU4pOworICAgIG1lbXNldChzdGF0ZS5wdHIxLCAnSycsIHN0YXRlLk1BWF9MRU4pOwogICAgIC8vIENob29zZSBhIHJhbmRvbSBzaXplIGZvciBvdXIgc3JjIGJ1ZmZlci4KICAgICBzaXplX3QgcHRyMV9sZW4gPSByYW5kb20oKSAlIHN0YXRlLk1BWF9MRU47CiAgICAgc3RhdGUucHRyMVtwdHIxX2xlbl0gPSAnXDAnOwpAQCAtNzA5LDEyICs3MjksMTAgQEAKIH0KIAogVEVTVChzdHJpbmcsIHN0cnJjaHIpIHsKLSAgaW50IHNlZWtfY2hhciA9IHJhbmRvbSgpICYgMjU1OworICBpbnQgc2Vla19jaGFyID0gJ00nOwogICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOwogICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHN0YXRlLm47IGkrKykgewotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgewotICAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7Ci0KKyAgICBmb3IgKHN0YXRlLkJlZ2luSXRlcmF0aW9ucygpOyBzdGF0ZS5IYXNOZXh0SXRlcmF0aW9uKCk7IHN0YXRlLk5leHRJdGVyYXRpb24oKSkgewogICAgICAgaWYgKH5zZWVrX2NoYXIgPiAwKSB7CiAgICAgICAgIG1lbXNldChzdGF0ZS5wdHIxLCB+c2Vla19jaGFyLCBzdGF0ZS5sZW5baV0pOwogICAgICAgfSBlbHNlIHsKQEAgLTc0MSwxMiArNzU5LDEwIEBACiB9CiAKIFRFU1Qoc3RyaW5nLCBtZW1jaHIpIHsKLSAgaW50IHNlZWtfY2hhciA9IHJhbmRvbSgpICYgMjU1OworICBpbnQgc2Vla19jaGFyID0gJ04nOwogICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLm47IGkrKykgewotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgewotICAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7Ci0KKyAgICBmb3IgKHN0YXRlLkJlZ2luSXRlcmF0aW9ucygpOyBzdGF0ZS5IYXNOZXh0SXRlcmF0aW9uKCk7IHN0YXRlLk5leHRJdGVyYXRpb24oKSkgewogICAgICAgbWVtc2V0KHN0YXRlLnB0cjEsIH5zZWVrX2NoYXIsIHN0YXRlLmxlbltpXSk7CiAKICAgICAgIHNpemVfdCBwb3MgPSByYW5kb20oKSAlIHN0YXRlLk1BWF9MRU47CkBAIC03NzIsMTIgKzc4OCwxMCBAQAogfQogCiBURVNUKHN0cmluZywgbWVtcmNocikgewotICBpbnQgc2Vla19jaGFyID0gcmFuZG9tKCkgJiAyNTU7CisgIGludCBzZWVrX2NoYXIgPSAnUCc7CiAgIFN0cmluZ1Rlc3RTdGF0ZTxjaGFyPiBzdGF0ZShTTUFMTCk7CiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUubjsgaSsrKSB7Ci0gICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7Ci0gICAgICBzdGF0ZS5OZXdJdGVyYXRpb24oKTsKLQorICAgIGZvciAoc3RhdGUuQmVnaW5JdGVyYXRpb25zKCk7IHN0YXRlLkhhc05leHRJdGVyYXRpb24oKTsgc3RhdGUuTmV4dEl0ZXJhdGlvbigpKSB7CiAgICAgICBtZW1zZXQoc3RhdGUucHRyMSwgfnNlZWtfY2hhciwgc3RhdGUubGVuW2ldKTsKIAogICAgICAgc2l6ZV90IHBvcyA9IHJhbmRvbSgpICUgc3RhdGUuTUFYX0xFTjsKQEAgLTc5NywxMSArODExLDkgQEAKIFRFU1Qoc3RyaW5nLCBtZW1jbXApIHsKICAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5uOyBpKyspIHsKLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKLSAgICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOwotCi0gICAgICBpbnQgYzEgPSByYW5kb20oKSAmIDB4ZmY7Ci0gICAgICBpbnQgYzIgPSByYW5kb20oKSAmIDB4ZmY7CisgICAgZm9yIChzdGF0ZS5CZWdpbkl0ZXJhdGlvbnMoKTsgc3RhdGUuSGFzTmV4dEl0ZXJhdGlvbigpOyBzdGF0ZS5OZXh0SXRlcmF0aW9uKCkpIHsKKyAgICAgIGludCBjMSA9ICdBJzsKKyAgICAgIGludCBjMiA9ICdOJzsKICAgICAgIG1lbXNldChzdGF0ZS5wdHIxLCBjMSwgc3RhdGUuTUFYX0xFTik7CiAgICAgICBtZW1zZXQoc3RhdGUucHRyMiwgYzEsIHN0YXRlLk1BWF9MRU4pOwogCkBAIC04MjAsOSArODMyLDcgQEAKICAgU3RyaW5nVGVzdFN0YXRlPHdjaGFyX3Q+IHN0YXRlKFNNQUxMKTsKIAogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLm47IGkrKykgewotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgewotICAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7Ci0KKyAgICBmb3IgKHN0YXRlLkJlZ2luSXRlcmF0aW9ucygpOyBzdGF0ZS5IYXNOZXh0SXRlcmF0aW9uKCk7IHN0YXRlLk5leHRJdGVyYXRpb24oKSkgewogICAgICAgbG9uZyBsb25nIG1hc2sgPSAoKGxvbmcgbG9uZykgMSA8PCA4ICogc2l6ZW9mKHdjaGFyX3QpKSAtIDE7CiAgICAgICBpbnQgYzEgPSByYW5kKCkgJiBtYXNrOwogICAgICAgaW50IGMyID0gcmFuZCgpICYgbWFzazsKQEAgLTg0MiwxMSArODUyLDkgQEAKIAogVEVTVChzdHJpbmcsIG1lbWNweSkgewogICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoTEFSR0UpOwotICBpbnQgcmFuZCA9IHJhbmRvbSgpICYgMjU1OworICBpbnQgcmFuZCA9IDQ7CiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUubiAtIDE7IGkrKykgewotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgewotICAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7Ci0KKyAgICBmb3IgKHN0YXRlLkJlZ2luSXRlcmF0aW9ucygpOyBzdGF0ZS5IYXNOZXh0SXRlcmF0aW9uKCk7IHN0YXRlLk5leHRJdGVyYXRpb24oKSkgewogICAgICAgc2l6ZV90IHBvcyA9IHJhbmRvbSgpICUgKHN0YXRlLk1BWF9MRU4gLSBzdGF0ZS5sZW5baV0pOwogCiAgICAgICBtZW1zZXQoc3RhdGUucHRyMSwgcmFuZCwgc3RhdGUubGVuW2ldKTsKQEAgLTg2NCwxMSArODcyLDkgQEAKIAogVEVTVChzdHJpbmcsIG1lbXNldCkgewogICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoTEFSR0UpOwotICBjaGFyIGNoID0gcmFuZG9tICgpICYgMjU1OworICBjaGFyIGNoID0gJ1AnOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLm4gLSAxOyBpKyspIHsKLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKLSAgICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOwotCisgICAgZm9yIChzdGF0ZS5CZWdpbkl0ZXJhdGlvbnMoKTsgc3RhdGUuSGFzTmV4dEl0ZXJhdGlvbigpOyBzdGF0ZS5OZXh0SXRlcmF0aW9uKCkpIHsKICAgICAgIG1lbXNldChzdGF0ZS5wdHIxLCB+Y2gsIHN0YXRlLk1BWF9MRU4pOwogICAgICAgbWVtY3B5KHN0YXRlLnB0cjIsIHN0YXRlLnB0cjEsIHN0YXRlLk1BWF9MRU4pOwogCkBAIC04ODcsMTQgKzg5MywxMiBAQAogVEVTVChzdHJpbmcsIG1lbW1vdmUpIHsKICAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKExBUkdFKTsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5uIC0gMTsgaSsrKSB7Ci0gICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7Ci0gICAgICBzdGF0ZS5OZXdJdGVyYXRpb24oKTsKLQotICAgICAgbWVtc2V0KHN0YXRlLnB0cjEsIHJhbmRvbSgpICYgMjU1LCAyICogc3RhdGUuTUFYX0xFTik7CisgICAgZm9yIChzdGF0ZS5CZWdpbkl0ZXJhdGlvbnMoKTsgc3RhdGUuSGFzTmV4dEl0ZXJhdGlvbigpOyBzdGF0ZS5OZXh0SXRlcmF0aW9uKCkpIHsKKyAgICAgIG1lbXNldChzdGF0ZS5wdHIxLCAnUScsIDIgKiBzdGF0ZS5NQVhfTEVOKTsKIAogICAgICAgc2l6ZV90IHBvcyA9IHJhbmRvbSgpICUgKHN0YXRlLk1BWF9MRU4gLSBzdGF0ZS5sZW5baV0pOwogCi0gICAgICBtZW1zZXQoc3RhdGUucHRyMSwgcmFuZG9tKCkgJiAyNTUsIHN0YXRlLmxlbltpXSk7CisgICAgICBtZW1zZXQoc3RhdGUucHRyMSwgJ1InLCBzdGF0ZS5sZW5baV0pOwogICAgICAgbWVtY3B5KHN0YXRlLnB0cjIsIHN0YXRlLnB0cjEsIDIgKiBzdGF0ZS5NQVhfTEVOKTsKICAgICAgIG1lbWNweShzdGF0ZS5wdHIsIHN0YXRlLnB0cjEsIHN0YXRlLmxlbltpXSk7CiAgICAgICBtZW1jcHkoc3RhdGUucHRyMSArIHBvcywgc3RhdGUucHRyLCBzdGF0ZS5sZW5baV0pOwpAQCAtOTIwLDggKzkyNCw4IEBACiAKICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKICAgICBjaGFyKiBwdHIyID0gZ2xvYl9wdHIyICsgYWxpZ25tZW50c1tpXTsKLSAgICBtZW1zZXQocHRyMSwgcmFuZG9tKCkgJiAyNTUsIDIgKiBsZW4pOwotICAgIG1lbXNldChwdHIxLCByYW5kb20oKSAmIDI1NSwgbGVuKTsKKyAgICBtZW1zZXQocHRyMSwgJ1MnLCAyICogbGVuKTsKKyAgICBtZW1zZXQocHRyMSwgJ1QnLCBsZW4pOwogICAgIG1lbWNweShwdHIyLCBwdHIxLCAyICogbGVuKTsKICAgICBtZW1jcHkocHRyLCBwdHIxLCBsZW4pOwogICAgIG1lbWNweShwdHIxICsgcG9zLCBwdHIsIGxlbik7CkBAIC05ODcsMTEgKzk5MSw5IEBACiBURVNUKHN0cmluZywgYmNvcHkpIHsKICAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKExBUkdFKTsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5uOyBpKyspIHsKLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKLSAgICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOwotCi0gICAgICBtZW1zZXQoc3RhdGUucHRyMSwgcmFuZG9tKCkgJiAyNTUsIHN0YXRlLk1BWF9MRU4pOwotICAgICAgbWVtc2V0KHN0YXRlLnB0cjEgKyBzdGF0ZS5NQVhfTEVOLCByYW5kb20oKSAmIDI1NSwgc3RhdGUuTUFYX0xFTik7CisgICAgZm9yIChzdGF0ZS5CZWdpbkl0ZXJhdGlvbnMoKTsgc3RhdGUuSGFzTmV4dEl0ZXJhdGlvbigpOyBzdGF0ZS5OZXh0SXRlcmF0aW9uKCkpIHsKKyAgICAgIG1lbXNldChzdGF0ZS5wdHIxLCAnNCcsIHN0YXRlLk1BWF9MRU4pOworICAgICAgbWVtc2V0KHN0YXRlLnB0cjEgKyBzdGF0ZS5NQVhfTEVOLCAnYScsIHN0YXRlLk1BWF9MRU4pOwogICAgICAgbWVtY3B5KHN0YXRlLnB0cjIsIHN0YXRlLnB0cjEsIDIgKiBzdGF0ZS5NQVhfTEVOKTsKIAogICAgICAgc2l6ZV90IHN0YXJ0ID0gcmFuZG9tKCkgJSAoMiAqIHN0YXRlLk1BWF9MRU4gLSBzdGF0ZS5sZW5baV0pOwpAQCAtMTAwNSwxMCArMTAwNyw4IEBACiAKIFRFU1Qoc3RyaW5nLCBiemVybykgewogICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoTEFSR0UpOwotICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IElURVI7IGorKykgewotICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOwotCi0gICAgbWVtc2V0KHN0YXRlLnB0cjEsIHJhbmRvbSgpICYgMjU1LCBzdGF0ZS5NQVhfTEVOKTsKKyAgZm9yIChzdGF0ZS5CZWdpbkl0ZXJhdGlvbnMoKTsgc3RhdGUuSGFzTmV4dEl0ZXJhdGlvbigpOyBzdGF0ZS5OZXh0SXRlcmF0aW9uKCkpIHsKKyAgICBtZW1zZXQoc3RhdGUucHRyMSwgJ1InLCBzdGF0ZS5NQVhfTEVOKTsKIAogICAgIHNpemVfdCBzdGFydCA9IHJhbmRvbSgpICUgc3RhdGUuTUFYX0xFTjsKICAgICBzaXplX3QgZW5kID0gc3RhcnQgKyByYW5kb20oKSAlIChzdGF0ZS5NQVhfTEVOIC0gc3RhcnQpOwpAQCAtMTEwNSw2ICsxMTA1LDM2IEBACiAgIFJ1blNyY0RzdEJ1ZmZlck92ZXJyZWFkVGVzdChEb1N0cmNweVRlc3QpOwogfQogCisjaWYgZGVmaW5lZChTVFJMQ1BZX1NVUFBPUlRFRCkKK3N0YXRpYyB2b2lkIERvU3RybGNweVRlc3QodWludDhfdCogc3JjLCB1aW50OF90KiBkc3QsIHNpemVfdCBsZW4pIHsKKyAgaWYgKGxlbiA+PSAxKSB7CisgICAgbWVtc2V0KHNyYywgKDMyICsgKGxlbiAlIDk2KSksIGxlbiAtIDEpOworICAgIHNyY1tsZW4tMV0gPSAnXDAnOworICAgIG1lbXNldChkc3QsIDAsIGxlbik7CisgICAgQVNTRVJUX0VRKGxlbi0xLCBzdHJsY3B5KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNyYyksIGxlbikpOworICAgIEFTU0VSVF9UUlVFKG1lbWNtcChzcmMsIGRzdCwgbGVuKSA9PSAwKTsKKyAgfQorfQorI2VuZGlmCisKK1RFU1Qoc3RyaW5nLCBzdHJsY3B5X2FsaWduKSB7CisjaWYgZGVmaW5lZChTVFJMQ1BZX1NVUFBPUlRFRCkKKyAgUnVuU3JjRHN0QnVmZmVyQWxpZ25UZXN0KExBUkdFLCBEb1N0cmxjcHlUZXN0KTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlNraXBwaW5nIHRlc3QsIHN0cmxjcHkgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiI7CisjZW5kaWYKK30KKworVEVTVChzdHJpbmcsIHN0cmxjcHlfb3ZlcnJlYWQpIHsKKyNpZiBkZWZpbmVkKFNUUkxDUFlfU1VQUE9SVEVEKQorICBSdW5TcmNEc3RCdWZmZXJPdmVycmVhZFRlc3QoRG9TdHJsY3B5VGVzdCk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJTa2lwcGluZyB0ZXN0LCBzdHJsY3B5IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iOworI2VuZGlmCit9CisKKwogc3RhdGljIHZvaWQgRG9TdHBjcHlUZXN0KHVpbnQ4X3QqIHNyYywgdWludDhfdCogZHN0LCBzaXplX3QgbGVuKSB7CiAgIGlmIChsZW4gPj0gMSkgewogICAgIG1lbXNldChzcmMsICgzMiArIChsZW4gJSA5NikpLCBsZW4gLSAxKTsKQEAgLTExNzcsNiArMTIwNyw1NSBAQAogICBSdW5TcmNEc3RCdWZmZXJPdmVycmVhZFRlc3QoRG9TdHJjYXRUZXN0KTsKIH0KIAorI2lmIGRlZmluZWQoU1RSTENBVF9TVVBQT1JURUQpCitzdGF0aWMgdm9pZCBEb1N0cmxjYXRUZXN0KHVpbnQ4X3QqIHNyYywgdWludDhfdCogZHN0LCBzaXplX3QgbGVuKSB7CisgIGlmIChsZW4gPj0gMSkgeworICAgIGludCB2YWx1ZSA9IDMyICsgKGxlbiAlIDk2KTsKKyAgICBtZW1zZXQoc3JjLCB2YWx1ZSwgbGVuIC0gMSk7CisgICAgc3JjW2xlbi0xXSA9ICdcMCc7CisKKyAgICBpZiAobGVuID49IFNUUkNBVF9EU1RfTEVOKSB7CisgICAgICAvLyBDcmVhdGUgYSBzbWFsbCBidWZmZXIgZm9yIGRvaW5nIHF1aWNrIGNvbXBhcmVzIGluIGVhY2ggbG9vcC4KKyAgICAgIHVpbnQ4X3QgY21wX2J1ZltTVFJDQVRfRFNUX0xFTl07CisgICAgICAvLyBNYWtlIHN1cmUgZHN0IHN0cmluZyBjb250YWlucyBhIGRpZmZlcmVudCB2YWx1ZSB0aGVuIHRoZSBzcmMgc3RyaW5nLgorICAgICAgaW50IHZhbHVlMiA9IDMyICsgKHZhbHVlICsgMikgJSA5NjsKKyAgICAgIG1lbXNldChjbXBfYnVmLCB2YWx1ZTIsIHNpemVvZihjbXBfYnVmKSk7CisKKyAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDw9IFNUUkNBVF9EU1RfTEVOOyBpKyspIHsKKyAgICAgICAgbWVtc2V0KGRzdCwgdmFsdWUyLCBpLTEpOworICAgICAgICBtZW1zZXQoZHN0K2ktMSwgMCwgbGVuLWkpOworICAgICAgICBzcmNbbGVuLWldID0gJ1wwJzsKKyAgICAgICAgQVNTRVJUX0VRKGxlbi0xLCBzdHJsY2F0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPihzcmMpLCBsZW4pKTsKKyAgICAgICAgQVNTRVJUX1RSVUUobWVtY21wKGRzdCwgY21wX2J1ZiwgaS0xKSA9PSAwKTsKKyAgICAgICAgQVNTRVJUX1RSVUUobWVtY21wKHNyYywgZHN0K2ktMSwgbGVuLWkrMSkgPT0gMCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGRzdFswXSA9ICdcMCc7CisgICAgICBBU1NFUlRfRVEobGVuLTEsIHN0cmxjYXQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZHN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPihzcmMpLCBsZW4pKTsKKyAgICAgIEFTU0VSVF9UUlVFKG1lbWNtcChzcmMsIGRzdCwgbGVuKSA9PSAwKTsKKyAgICB9CisgIH0KK30KKyNlbmRpZgorCitURVNUKHN0cmluZywgc3RybGNhdF9hbGlnbikgeworI2lmIGRlZmluZWQoU1RSTENBVF9TVVBQT1JURUQpCisgIFJ1blNyY0RzdEJ1ZmZlckFsaWduVGVzdChNRURJVU0sIERvU3RybGNhdFRlc3QsIExhcmdlU2V0SW5jcmVtZW50KTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlNraXBwaW5nIHRlc3QsIHN0cmxjYXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiI7CisjZW5kaWYKK30KKworVEVTVChzdHJpbmcsIHN0cmxjYXRfb3ZlcnJlYWQpIHsKKyNpZiBkZWZpbmVkKFNUUkxDQVRfU1VQUE9SVEVEKQorICBSdW5TcmNEc3RCdWZmZXJPdmVycmVhZFRlc3QoRG9TdHJsY2F0VGVzdCk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJTa2lwcGluZyB0ZXN0LCBzdHJsY2F0IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iOworI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIERvU3RyY21wVGVzdCh1aW50OF90KiBidWYxLCB1aW50OF90KiBidWYyLCBzaXplX3QgbGVuKSB7CiAgIGlmIChsZW4gPj0gMSkgewogICAgIG1lbXNldChidWYxLCAoMzIgKyAobGVuICUgOTYpKSwgbGVuIC0gMSk7CkBAIC0xMjg3LDMgKzEzNjYsMjIgQEAKIFRFU1Qoc3RyaW5nLCBzdHJjaHJfb3ZlcnJlYWQpIHsKICAgUnVuU2luZ2xlQnVmZmVyT3ZlcnJlYWRUZXN0KERvU3RyY2hyVGVzdCk7CiB9CisKK3N0YXRpYyB2b2lkIFRlc3RCYXNlbmFtZShjb25zdCBjaGFyKiBpbiwgY29uc3QgY2hhciogZXhwZWN0ZWRfb3V0KSB7CisgIGVycm5vID0gMDsKKyAgY29uc3QgY2hhciogb3V0ID0gYmFzZW5hbWUoaW4pOworICBBU1NFUlRfU1RSRVEoZXhwZWN0ZWRfb3V0LCBvdXQpIDw8IGluOworICBBU1NFUlRfRVEoMCwgZXJybm8pIDw8IGluOworfQorCitURVNUKHN0cmluZywgX19nbnVfYmFzZW5hbWUpIHsKKyAgVGVzdEJhc2VuYW1lKCIiLCAiIik7CisgIFRlc3RCYXNlbmFtZSgiL3Vzci9saWIiLCAibGliIik7CisgIFRlc3RCYXNlbmFtZSgiL3Vzci8iLCAiIik7CisgIFRlc3RCYXNlbmFtZSgidXNyIiwgInVzciIpOworICBUZXN0QmFzZW5hbWUoIi8iLCAiIik7CisgIFRlc3RCYXNlbmFtZSgiLiIsICIuIik7CisgIFRlc3RCYXNlbmFtZSgiLi4iLCAiLi4iKTsKKyAgVGVzdEJhc2VuYW1lKCIvLy8iLCAiIik7CisgIFRlc3RCYXNlbmFtZSgiLy91c3IvL2xpYi8vIiwgIiIpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RyaW5nc190ZXN0LmNwcCBiL3Rlc3RzL3N0cmluZ3NfdGVzdC5jcHAKaW5kZXggNTIwMDg1OS4uODIzYWE0ZiAxMDA2NDQKLS0tIGEvdGVzdHMvc3RyaW5nc190ZXN0LmNwcAorKysgYi90ZXN0cy9zdHJpbmdzX3Rlc3QuY3BwCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogCiBURVNUKHN0cmluZ3MsIGZmcykgewpAQCAtMzAsMyArMzEsMzMgQEAKICAgQVNTRVJUX0VRKDI3LCBmZnMoMHgwNDAwMDAwMCkpOwogICBBU1NFUlRfRVEoMzIsIGZmcygweDgwMDAwMDAwKSk7CiB9CisKK1RFU1Qoc3RyaW5ncywgc3RyY2FzZWNtcCkgeworICBBU1NFUlRfRVEoMCwgc3RyY2FzZWNtcCgiaGVsbG8iLCAiSEVMTE8iKSk7CisgIEFTU0VSVF9MVChzdHJjYXNlY21wKCJoZWxsbzEiLCAiaGVsbG8yIiksIDApOworICBBU1NFUlRfR1Qoc3RyY2FzZWNtcCgiaGVsbG8yIiwgImhlbGxvMSIpLCAwKTsKK30KKworVEVTVChzdHJpbmdzLCBzdHJjYXNlY21wX2wpIHsKKyAgbG9jYWxlX3QgbCA9IG5ld2xvY2FsZShMQ19BTEwsICJDIiwgMCk7CisgIEFTU0VSVF9FUSgwLCBzdHJjYXNlY21wX2woImhlbGxvIiwgIkhFTExPIiwgbCkpOworICBBU1NFUlRfTFQoc3RyY2FzZWNtcF9sKCJoZWxsbzEiLCAiaGVsbG8yIiwgbCksIDApOworICBBU1NFUlRfR1Qoc3RyY2FzZWNtcF9sKCJoZWxsbzIiLCAiaGVsbG8xIiwgbCksIDApOworICBmcmVlbG9jYWxlKGwpOworfQorCitURVNUKHN0cmluZ3MsIHN0cm5jYXNlY21wKSB7CisgIEFTU0VSVF9FUSgwLCBzdHJuY2FzZWNtcCgiaGVsbG8iLCAiSEVMTE8iLCAzKSk7CisgIEFTU0VSVF9FUSgwLCBzdHJuY2FzZWNtcCgiYWJjWFgiLCAiQUJDWVkiLCAzKSk7CisgIEFTU0VSVF9MVChzdHJuY2FzZWNtcCgiaGVsbG8xIiwgImhlbGxvMiIsIDYpLCAwKTsKKyAgQVNTRVJUX0dUKHN0cm5jYXNlY21wKCJoZWxsbzIiLCAiaGVsbG8xIiwgNiksIDApOworfQorCitURVNUKHN0cmluZ3MsIHN0cm5jYXNlY21wX2wpIHsKKyAgbG9jYWxlX3QgbCA9IG5ld2xvY2FsZShMQ19BTEwsICJDIiwgMCk7CisgIEFTU0VSVF9FUSgwLCBzdHJuY2FzZWNtcF9sKCJoZWxsbyIsICJIRUxMTyIsIDMsIGwpKTsKKyAgQVNTRVJUX0VRKDAsIHN0cm5jYXNlY21wX2woImFiY1hYIiwgIkFCQ1lZIiwgMywgbCkpOworICBBU1NFUlRfTFQoc3RybmNhc2VjbXBfbCgiaGVsbG8xIiwgImhlbGxvMiIsIDYsIGwpLCAwKTsKKyAgQVNTRVJUX0dUKHN0cm5jYXNlY21wX2woImhlbGxvMiIsICJoZWxsbzEiLCA2LCBsKSwgMCk7CisgIGZyZWVsb2NhbGUobCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zdHVic190ZXN0LmNwcCBiL3Rlc3RzL3N0dWJzX3Rlc3QuY3BwCmluZGV4IDliMGMyMzEuLjg5ZDY3Y2IgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N0dWJzX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3N0dWJzX3Rlc3QuY3BwCkBAIC0xNiw5OCArMTYsMjQ2IEBACiAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisvLyBCZWxvdyBhcmUgdGhlIGhlYWRlciBmaWxlcyB3ZSB3YW50IHRvIHRlc3QuCisjaW5jbHVkZSA8Z3JwLmg+CiAjaW5jbHVkZSA8cHdkLmg+CisKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotI2RlZmluZSBDSEVDS19HRVRQV05BTV9GT1IodXNlcm5hbWUsIHVpZCwgdWlkX3R5cGUpIFwKLSAgICBTQ09QRURfVFJBQ0UodXNlcm5hbWUpOyBcCi0gICAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoY2hlY2tfZ2V0cHduYW0odXNlcm5hbWUsIHVpZCwgdWlkX3R5cGUpKTsKLQotdHlwZWRlZiBlbnVtIHsKK2VudW0gdWlkX3R5cGVfdCB7CiAgIFRZUEVfU1lTVEVNLAogICBUWVBFX0FQUAotfSB1aWRfdHlwZV90OworfTsKIAotc3RhdGljIHZvaWQgY2hlY2tfZ2V0cHduYW0oY29uc3QgY2hhciogdXNlcm5hbWUsIHVpZF90IHVpZCwgdWlkX3R5cGVfdCB1aWRfdHlwZSkgewotICBlcnJubyA9IDA7Ci0gIHBhc3N3ZCogcHdkID0gZ2V0cHd1aWQodWlkKTsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisKK3N0YXRpYyB2b2lkIGNoZWNrX3Bhc3N3ZChjb25zdCBwYXNzd2QqIHB3ZCwgY29uc3QgY2hhciogdXNlcm5hbWUsIHVpZF90IHVpZCwgdWlkX3R5cGVfdCB1aWRfdHlwZSkgewogICBBU1NFUlRfVFJVRShwd2QgIT0gTlVMTCk7Ci0gIEFTU0VSVF9FUSgwLCBlcnJubyk7Ci0gIEVYUEVDVF9TVFJFUSh1c2VybmFtZSwgcHdkLT5wd19uYW1lKTsKLSAgRVhQRUNUX0VRKHVpZCwgcHdkLT5wd191aWQpOwotICBFWFBFQ1RfRVEodWlkLCBwd2QtPnB3X2dpZCk7CisgIEFTU0VSVF9TVFJFUSh1c2VybmFtZSwgcHdkLT5wd19uYW1lKTsKKyAgQVNTRVJUX0VRKHVpZCwgcHdkLT5wd191aWQpOworICBBU1NFUlRfRVEodWlkLCBwd2QtPnB3X2dpZCk7CiAgIEFTU0VSVF9FUShOVUxMLCBwd2QtPnB3X3Bhc3N3ZCk7CiAjaWZkZWYgX19MUDY0X18KICAgQVNTRVJUX0VRKE5VTEwsIHB3ZC0+cHdfZ2Vjb3MpOwogI2VuZGlmCiAKICAgaWYgKHVpZF90eXBlID09IFRZUEVfU1lTVEVNKSB7Ci0gICAgRVhQRUNUX1NUUkVRKCIvIiwgcHdkLT5wd19kaXIpOwotICB9IGVsc2UgaWYgKHVpZF90eXBlID09IFRZUEVfQVBQKSB7Ci0gICAgRVhQRUNUX1NUUkVRKCIvZGF0YSIsIHB3ZC0+cHdfZGlyKTsKKyAgICBBU1NFUlRfU1RSRVEoIi8iLCBwd2QtPnB3X2Rpcik7CisgIH0gZWxzZSB7CisgICAgQVNTRVJUX1NUUkVRKCIvZGF0YSIsIHB3ZC0+cHdfZGlyKTsKICAgfQotCi0gIEVYUEVDVF9TVFJFUSgiL3N5c3RlbS9iaW4vc2giLCBwd2QtPnB3X3NoZWxsKTsKKyAgQVNTRVJUX1NUUkVRKCIvc3lzdGVtL2Jpbi9zaCIsIHB3ZC0+cHdfc2hlbGwpOwogfQotI2Vsc2UKLSNkZWZpbmUgQ0hFQ0tfR0VUUFdOQU1fRk9SKHVzZXJuYW1lLCB1aWQsIHVpZF90eXBlKSBcCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworCitzdGF0aWMgdm9pZCBjaGVja19nZXRwd3VpZChjb25zdCBjaGFyKiB1c2VybmFtZSwgdWlkX3QgdWlkLCB1aWRfdHlwZV90IHVpZF90eXBlKSB7CisgIGVycm5vID0gMDsKKyAgcGFzc3dkKiBwd2QgPSBnZXRwd3VpZCh1aWQpOworICBBU1NFUlRfRVEoMCwgZXJybm8pOworICBTQ09QRURfVFJBQ0UoImdldHB3dWlkIik7CisgIGNoZWNrX3Bhc3N3ZChwd2QsIHVzZXJuYW1lLCB1aWQsIHVpZF90eXBlKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfZ2V0cHduYW0oY29uc3QgY2hhciogdXNlcm5hbWUsIHVpZF90IHVpZCwgdWlkX3R5cGVfdCB1aWRfdHlwZSkgeworICBlcnJubyA9IDA7CisgIHBhc3N3ZCogcHdkID0gZ2V0cHduYW0odXNlcm5hbWUpOworICBBU1NFUlRfRVEoMCwgZXJybm8pOworICBTQ09QRURfVFJBQ0UoImdldHB3bmFtIik7CisgIGNoZWNrX3Bhc3N3ZChwd2QsIHVzZXJuYW1lLCB1aWQsIHVpZF90eXBlKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfZ2V0cHd1aWRfcihjb25zdCBjaGFyKiB1c2VybmFtZSwgdWlkX3QgdWlkLCB1aWRfdHlwZV90IHVpZF90eXBlKSB7CisgIHBhc3N3ZCBwd2Rfc3RvcmFnZTsKKyAgY2hhciBidWZbNTEyXTsKKyAgaW50IHJlc3VsdDsKKworICBlcnJubyA9IDA7CisgIHBhc3N3ZCogcHdkID0gTlVMTDsKKyAgcmVzdWx0ID0gZ2V0cHd1aWRfcih1aWQsICZwd2Rfc3RvcmFnZSwgYnVmLCBzaXplb2YoYnVmKSwgJnB3ZCk7CisgIEFTU0VSVF9FUSgwLCByZXN1bHQpOworICBBU1NFUlRfRVEoMCwgZXJybm8pOworICBTQ09QRURfVFJBQ0UoImdldHB3dWlkX3IiKTsKKyAgY2hlY2tfcGFzc3dkKHB3ZCwgdXNlcm5hbWUsIHVpZCwgdWlkX3R5cGUpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19nZXRwd25hbV9yKGNvbnN0IGNoYXIqIHVzZXJuYW1lLCB1aWRfdCB1aWQsIHVpZF90eXBlX3QgdWlkX3R5cGUpIHsKKyAgcGFzc3dkIHB3ZF9zdG9yYWdlOworICBjaGFyIGJ1Zls1MTJdOworICBpbnQgcmVzdWx0OworCisgIGVycm5vID0gMDsKKyAgcGFzc3dkKiBwd2QgPSBOVUxMOworICByZXN1bHQgPSBnZXRwd25hbV9yKHVzZXJuYW1lLCAmcHdkX3N0b3JhZ2UsIGJ1Ziwgc2l6ZW9mKGJ1ZiksICZwd2QpOworICBBU1NFUlRfRVEoMCwgcmVzdWx0KTsKKyAgQVNTRVJUX0VRKDAsIGVycm5vKTsKKyAgU0NPUEVEX1RSQUNFKCJnZXRwd25hbV9yIik7CisgIGNoZWNrX3Bhc3N3ZChwd2QsIHVzZXJuYW1lLCB1aWQsIHVpZF90eXBlKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfZ2V0X3Bhc3N3ZChjb25zdCBjaGFyKiB1c2VybmFtZSwgdWlkX3QgdWlkLCB1aWRfdHlwZV90IHVpZF90eXBlKSB7CisgIGNoZWNrX2dldHB3dWlkKHVzZXJuYW1lLCB1aWQsIHVpZF90eXBlKTsKKyAgY2hlY2tfZ2V0cHduYW0odXNlcm5hbWUsIHVpZCwgdWlkX3R5cGUpOworICBjaGVja19nZXRwd3VpZF9yKHVzZXJuYW1lLCB1aWQsIHVpZF90eXBlKTsKKyAgY2hlY2tfZ2V0cHduYW1fcih1c2VybmFtZSwgdWlkLCB1aWRfdHlwZSk7Cit9CisKKyNlbHNlIC8vICFkZWZpbmVkKF9fQklPTklDX18pCisKK3N0YXRpYyB2b2lkIGNoZWNrX2dldF9wYXNzd2QoY29uc3QgY2hhciogLyogdXNlcm5hbWUgKi8sIHVpZF90IC8qIHVpZCAqLywgdWlkX3R5cGVfdCAvKiB1aWRfdHlwZSAqLykgeworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgaXMgYWJvdXQgdWlkL3VzZXJuYW1lIHRyYW5zbGF0aW9uIGZvciBBbmRyb2lkLCB3aGljaCBkb2VzIG5vdGhpbmcgb24gbGliYyBvdGhlciB0aGFuIGJpb25pYy5cbiI7Cit9CisKICNlbmRpZgogCiBURVNUKGdldHB3bmFtLCBzeXN0ZW1faWRfcm9vdCkgewotICBDSEVDS19HRVRQV05BTV9GT1IoInJvb3QiLCAwLCBUWVBFX1NZU1RFTSk7CisgIGNoZWNrX2dldF9wYXNzd2QoInJvb3QiLCAwLCBUWVBFX1NZU1RFTSk7CiB9CiAKIFRFU1QoZ2V0cHduYW0sIHN5c3RlbV9pZF9zeXN0ZW0pIHsKLSAgQ0hFQ0tfR0VUUFdOQU1fRk9SKCJzeXN0ZW0iLCAxMDAwLCBUWVBFX1NZU1RFTSk7CisgIGNoZWNrX2dldF9wYXNzd2QoInN5c3RlbSIsIDEwMDAsIFRZUEVfU1lTVEVNKTsKIH0KIAogVEVTVChnZXRwd25hbSwgYXBwX2lkX3JhZGlvKSB7Ci0gIENIRUNLX0dFVFBXTkFNX0ZPUigicmFkaW8iLCAxMDAxLCBUWVBFX1NZU1RFTSk7CisgIGNoZWNrX2dldF9wYXNzd2QoInJhZGlvIiwgMTAwMSwgVFlQRV9TWVNURU0pOwogfQogCiBURVNUKGdldHB3bmFtLCBhcHBfaWRfbm9ib2R5KSB7Ci0gIENIRUNLX0dFVFBXTkFNX0ZPUigibm9ib2R5IiwgOTk5OSwgVFlQRV9TWVNURU0pOwotfQotCi1URVNUKGdldHB3bmFtLCBhcHBfaWRfYWxsX2EwKSB7Ci0gIENIRUNLX0dFVFBXTkFNX0ZPUigiYWxsX2EwIiwgNTAwMDAsIFRZUEVfQVBQKTsKLX0KLQotVEVTVChnZXRwd25hbSwgYXBwX2lkX3UxX2E0MDAwMCkgewotICBDSEVDS19HRVRQV05BTV9GT1IoInUxX2E0MDAwMCIsIDE1MDAwMCwgVFlQRV9BUFApOworICBjaGVja19nZXRfcGFzc3dkKCJub2JvZHkiLCA5OTk5LCBUWVBFX1NZU1RFTSk7CiB9CiAKIFRFU1QoZ2V0cHduYW0sIGFwcF9pZF91MF9hMCkgewotICBDSEVDS19HRVRQV05BTV9GT1IoInUwX2EwIiwgMTAwMDAsIFRZUEVfQVBQKTsKKyAgY2hlY2tfZ2V0X3Bhc3N3ZCgidTBfYTAiLCAxMDAwMCwgVFlQRV9BUFApOwogfQogCiBURVNUKGdldHB3bmFtLCBhcHBfaWRfdTBfYTEyMzQpIHsKLSAgQ0hFQ0tfR0VUUFdOQU1fRk9SKCJ1MF9hMTIzNCIsIDExMjM0LCBUWVBFX0FQUCk7CisgIGNoZWNrX2dldF9wYXNzd2QoInUwX2ExMjM0IiwgMTEyMzQsIFRZUEVfQVBQKTsKIH0KIAotVEVTVChnZXRwd25hbSwgYXBwX2lkX3UwX2E5OTk5KSB7Ci0gIENIRUNLX0dFVFBXTkFNX0ZPUigidTBfYTk5OTkiLCAxOTk5OSwgVFlQRV9BUFApOworLy8gVGVzdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHVpZCBhbmQgc2hhcmVkIGdpZC4KK1RFU1QoZ2V0cHduYW0sIGFwcF9pZF91MF9hNDk5OTkpIHsKKyAgY2hlY2tfZ2V0X3Bhc3N3ZCgidTBfYTQ5OTk5IiwgNTk5OTksIFRZUEVfQVBQKTsKIH0KIAotLy8gbm9uc2Vuc2ljYWwsIGJ1dCBleHBlY3RlZAorVEVTVChnZXRwd25hbSwgYXBwX2lkX3UwX2kxKSB7CisgIGNoZWNrX2dldF9wYXNzd2QoInUwX2kxIiwgOTkwMDEsIFRZUEVfQVBQKTsKK30KKwogVEVTVChnZXRwd25hbSwgYXBwX2lkX3UxX3Jvb3QpIHsKLSAgQ0hFQ0tfR0VUUFdOQU1fRk9SKCJ1MV9yb290IiwgMTAwMDAwLCBUWVBFX1NZU1RFTSk7CisgIGNoZWNrX2dldF9wYXNzd2QoInUxX3Jvb3QiLCAxMDAwMDAsIFRZUEVfU1lTVEVNKTsKIH0KIAogVEVTVChnZXRwd25hbSwgYXBwX2lkX3UxX3JhZGlvKSB7Ci0gIENIRUNLX0dFVFBXTkFNX0ZPUigidTFfcmFkaW8iLCAxMDEwMDEsIFRZUEVfU1lTVEVNKTsKKyAgY2hlY2tfZ2V0X3Bhc3N3ZCgidTFfcmFkaW8iLCAxMDEwMDEsIFRZUEVfU1lTVEVNKTsKIH0KIAogVEVTVChnZXRwd25hbSwgYXBwX2lkX3UxX2EwKSB7Ci0gIENIRUNLX0dFVFBXTkFNX0ZPUigidTFfYTAiLCAxMTAwMDAsIFRZUEVfQVBQKTsKKyAgY2hlY2tfZ2V0X3Bhc3N3ZCgidTFfYTAiLCAxMTAwMDAsIFRZUEVfQVBQKTsKK30KKworVEVTVChnZXRwd25hbSwgYXBwX2lkX3UxX2E0MDAwMCkgeworICBjaGVja19nZXRfcGFzc3dkKCJ1MV9hNDAwMDAiLCAxNTAwMDAsIFRZUEVfQVBQKTsKIH0KIAogVEVTVChnZXRwd25hbSwgYXBwX2lkX3UxX2kwKSB7Ci0gIENIRUNLX0dFVFBXTkFNX0ZPUigidTFfaTAiLCAxOTkwMDAsIFRZUEVfQVBQKTsKKyAgY2hlY2tfZ2V0X3Bhc3N3ZCgidTFfaTAiLCAxOTkwMDAsIFRZUEVfQVBQKTsKK30KKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKworc3RhdGljIHZvaWQgY2hlY2tfZ3JvdXAoY29uc3QgZ3JvdXAqIGdycCwgY29uc3QgY2hhciogZ3JvdXBfbmFtZSwgZ2lkX3QgZ2lkKSB7CisgIEFTU0VSVF9UUlVFKGdycCAhPSBOVUxMKTsKKyAgQVNTRVJUX1NUUkVRKGdyb3VwX25hbWUsIGdycC0+Z3JfbmFtZSk7CisgIEFTU0VSVF9FUShnaWQsIGdycC0+Z3JfZ2lkKTsKKyAgQVNTRVJUX1RSVUUoZ3JwLT5ncl9tZW0gIT0gTlVMTCk7CisgIEFTU0VSVF9TVFJFUShncm91cF9uYW1lLCBncnAtPmdyX21lbVswXSk7CisgIEFTU0VSVF9UUlVFKGdycC0+Z3JfbWVtWzFdID09IE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19nZXRncmdpZChjb25zdCBjaGFyKiBncm91cF9uYW1lLCBnaWRfdCBnaWQpIHsKKyAgZXJybm8gPSAwOworICBncm91cCogZ3JwID0gZ2V0Z3JnaWQoZ2lkKTsKKyAgQVNTRVJUX0VRKDAsIGVycm5vKTsKKyAgU0NPUEVEX1RSQUNFKCJnZXRncmdpZCIpOworICBjaGVja19ncm91cChncnAsIGdyb3VwX25hbWUsIGdpZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2dldGdybmFtKGNvbnN0IGNoYXIqIGdyb3VwX25hbWUsIGdpZF90IGdpZCkgeworICBlcnJubyA9IDA7CisgIGdyb3VwKiBncnAgPSBnZXRncm5hbShncm91cF9uYW1lKTsKKyAgQVNTRVJUX0VRKDAsIGVycm5vKTsKKyAgU0NPUEVEX1RSQUNFKCJnZXRncm5hbSIpOworICBjaGVja19ncm91cChncnAsIGdyb3VwX25hbWUsIGdpZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2dldF9ncm91cChjb25zdCBjaGFyKiBncm91cF9uYW1lLCBnaWRfdCBnaWQpIHsKKyAgY2hlY2tfZ2V0Z3JnaWQoZ3JvdXBfbmFtZSwgZ2lkKTsKKyAgY2hlY2tfZ2V0Z3JuYW0oZ3JvdXBfbmFtZSwgZ2lkKTsKK30KKworI2Vsc2UgLy8gIWRlZmluZWQoX19CSU9OSUNfXykKKworc3RhdGljIHZvaWQgY2hlY2tfZ2V0X2dyb3VwKGNvbnN0IGNoYXIqIC8qIGdyb3VwX25hbWUgKi8sIGdpZF90IC8qIGdpZCAqLykgeworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgaXMgYWJvdXQgZ2lkL2dyb3VwX25hbWUgdHJhbnNsYXRpb24gZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90aGluZyBvbiBsaWJjIG90aGVyIHRoYW4gYmlvbmljLlxuIjsKK30KKworI2VuZGlmCisKK1RFU1QoZ2V0Z3JuYW0sIHN5c3RlbV9pZF9yb290KSB7CisgIGNoZWNrX2dldF9ncm91cCgicm9vdCIsIDApOworfQorCitURVNUKGdldGdybmFtLCBzeXN0ZW1faWRfc3lzdGVtKSB7CisgIGNoZWNrX2dldF9ncm91cCgic3lzdGVtIiwgMTAwMCk7Cit9CisKK1RFU1QoZ2V0Z3JuYW0sIGFwcF9pZF9yYWRpbykgeworICBjaGVja19nZXRfZ3JvdXAoInJhZGlvIiwgMTAwMSk7Cit9CisKK1RFU1QoZ2V0Z3JuYW0sIGFwcF9pZF9ub2JvZHkpIHsKKyAgY2hlY2tfZ2V0X2dyb3VwKCJub2JvZHkiLCA5OTk5KTsKK30KKworVEVTVChnZXRncm5hbSwgYXBwX2lkX3UwX2EwKSB7CisgIGNoZWNrX2dldF9ncm91cCgidTBfYTAiLCAxMDAwMCk7Cit9CisKK1RFU1QoZ2V0Z3JuYW0sIGFwcF9pZF91MF9hMTIzNCkgeworICBjaGVja19nZXRfZ3JvdXAoInUwX2ExMjM0IiwgMTEyMzQpOworfQorCitURVNUKGdldGdybmFtLCBhcHBfaWRfdTBfYTk5OTkpIHsKKyAgY2hlY2tfZ2V0X2dyb3VwKCJ1MF9hOTk5OSIsIDE5OTk5KTsKK30KKworLy8gVGVzdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHVpZCBhbmQgc2hhcmVkIGdpZC4KK1RFU1QoZ2V0Z3JuYW0sIGFwcF9pZF9hbGxfYTk5OTkpIHsKKyAgY2hlY2tfZ2V0X2dyb3VwKCJhbGxfYTk5OTkiLCA1OTk5OSk7Cit9CisKK1RFU1QoZ2V0Z3JuYW0sIGFwcF9pZF91MF9pMSkgeworICBjaGVja19nZXRfZ3JvdXAoInUwX2kxIiwgOTkwMDEpOworfQorCitURVNUKGdldGdybmFtLCBhcHBfaWRfdTFfcm9vdCkgeworICBjaGVja19nZXRfZ3JvdXAoInUxX3Jvb3QiLCAxMDAwMDApOworfQorCitURVNUKGdldGdybmFtLCBhcHBfaWRfdTFfcmFkaW8pIHsKKyAgY2hlY2tfZ2V0X2dyb3VwKCJ1MV9yYWRpbyIsIDEwMTAwMSk7Cit9CisKK1RFU1QoZ2V0Z3JuYW0sIGFwcF9pZF91MV9hMCkgeworICBjaGVja19nZXRfZ3JvdXAoInUxX2EwIiwgMTEwMDAwKTsKK30KKworVEVTVChnZXRncm5hbSwgYXBwX2lkX3UxX2E0MDAwMCkgeworICBjaGVja19nZXRfZ3JvdXAoInUxX2E0MDAwMCIsIDE1MDAwMCk7Cit9CisKK1RFU1QoZ2V0Z3JuYW0sIGFwcF9pZF91MV9pMCkgeworICBjaGVja19nZXRfZ3JvdXAoInUxX2kwIiwgMTk5MDAwKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c19yZXNvdXJjZV90ZXN0LmNwcCBiL3Rlc3RzL3N5c19yZXNvdXJjZV90ZXN0LmNwcAppbmRleCBkNmQ5OWEwLi45MWQwN2FiIDEwMDY0NAotLS0gYS90ZXN0cy9zeXNfcmVzb3VyY2VfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3lzX3Jlc291cmNlX3Rlc3QuY3BwCkBAIC0xOCwxNyArMTgsNiBAQAogCiAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CiAKLSNpZiBkZWZpbmVkKF9fR0xJQkNfXykKLS8qIFRoZSBob3N0IGdsaWJjIHdlJ3JlIGN1cnJlbnRseSBidWlsZGluZyB3aXRoIGRvZXNuJ3QgaGF2ZSBwcmxpbWl0NjQgeWV0LiAqLwotc3RhdGljIGludCBwcmxpbWl0NjQocGlkX3QsIGludCByZXNvdXJjZSwgY29uc3Qgc3RydWN0IHJsaW1pdDY0KiBuZXdfbGltaXQsIHN0cnVjdCBybGltaXQ2NCogb2xkX2xpbWl0KSB7Ci0gIGlmIChuZXdfbGltaXQgIT0gTlVMTCkgewotICAgIHJldHVybiBzZXRybGltaXQ2NChyZXNvdXJjZSwgbmV3X2xpbWl0KTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZ2V0cmxpbWl0NjQocmVzb3VyY2UsIG9sZF9saW1pdCk7Ci0gIH0KLX0KLSNlbmRpZgotCiBURVNUKHN5c19yZXNvdXJjZSwgc21va2UpIHsKICNpZiBkZWZpbmVkKF9fTFA2NF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKICAgQVNTRVJUX0VRKHNpemVvZihybGltaXQpLCBzaXplb2YocmxpbWl0NjQpKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c19zb2NrZXRfdGVzdC5jcHAgYi90ZXN0cy9zeXNfc29ja2V0X3Rlc3QuY3BwCmluZGV4IDBiZGUwMjQuLmViOGMzM2UgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N5c19zb2NrZXRfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3lzX3NvY2tldF90ZXN0LmNwcApAQCAtMjIsMjQgKzIyLDYgQEAKICNpbmNsdWRlIDxzeXMvdW4uaD4KICNpbmNsdWRlIDxmY250bC5oPgogCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICAjZGVmaW5lIEFDQ0VQVDRfU1VQUE9SVEVEIDEKLSAgI2RlZmluZSBSRUNWTU1TR19TVVBQT1JURUQgMQotICAjZGVmaW5lIFNFTkRNTVNHX1NVUFBPUlRFRCAxCi0jZWxpZiBkZWZpbmVkKF9fR0xJQkNfUFJFUkVRKQotICAjaWYgX19HTElCQ19QUkVSRVEoMiwgOSkKLSAgICAjZGVmaW5lIEFDQ0VQVDRfU1VQUE9SVEVEIDEKLSAgI2VuZGlmCi0gICNpZiBfX0dMSUJDX1BSRVJFUSgyLCAxMikKLSAgICAjZGVmaW5lIFJFQ1ZNTVNHX1NVUFBPUlRFRCAxCi0gICNlbmRpZgotICAjaWYgX19HTElCQ19QUkVSRVEoMiwgMTQpCi0gICAgI2RlZmluZSBTRU5ETU1TR19TVVBQT1JURUQgMQotICAjZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChBQ0NFUFQ0X1NVUFBPUlRFRCkgfHwgZGVmaW5lZChSRUNWTU1TR19TVVBQT1JURUQpIHx8IGRlZmluZWQoU0VORE1NU0dfU1VQUE9SVEVEKQotCiAjZGVmaW5lIFNPQ0tfUEFUSCAidGVzdCIKIAogc3RhdGljIHZvaWQqIENvbm5lY3RGbih2b2lkKiBkYXRhKSB7CkBAIC0xMDUsMTggKzg3LDEyIEBACiAKICAgY2xvc2UoZmQpOwogfQotI2VuZGlmCiAKIFRFU1Qoc3lzX3NvY2tldCwgYWNjZXB0NF9lcnJvcikgewotI2lmIGRlZmluZWQoQUNDRVBUNF9TVVBQT1JURUQpCiAgIEFTU0VSVF9FUSgtMSwgYWNjZXB0NCgtMSwgTlVMTCwgTlVMTCwgMCkpOwogICBBU1NFUlRfRVEoRUJBREYsIGVycm5vKTsKLSNlbHNlCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOwotI2VuZGlmCiB9CiAKLSNpZiBkZWZpbmVkKEFDQ0VQVDRfU1VQUE9SVEVEKQogc3RhdGljIHZvaWQgVGVzdEFjY2VwdDQoc3RydWN0IHNvY2thZGRyX3VuKiBhZGRyLCBpbnQgZmQpIHsKICAgc29ja2xlbl90IGxlbiA9IHNpemVvZigqYWRkcik7CiAgIGludCBmZF9hY2MgPSBhY2NlcHQ0KGZkLCByZWludGVycHJldF9jYXN0PHN0cnVjdCBzb2NrYWRkcio+KGFkZHIpLCAmbGVuLCBTT0NLX0NMT0VYRUMpOwpAQCAtMTI3LDE3ICsxMDMsMTEgQEAKIAogICBjbG9zZShmZF9hY2MpOwogfQotI2VuZGlmCiAKIFRFU1Qoc3lzX3NvY2tldCwgYWNjZXB0NF9zbW9rZSkgewotI2lmIGRlZmluZWQoQUNDRVBUNF9TVVBQT1JURUQpCiAgIFJ1blRlc3QoVGVzdEFjY2VwdDQsIE5VTEwpOwotI2Vsc2UKLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7Ci0jZW5kaWYKIH0KIAotI2lmIGRlZmluZWQoUkVDVk1NU0dfU1VQUE9SVEVEKQogY29uc3QgY2hhciogZ19SZWN2TXNnc1tdID0gewogICAiUkVDVk1NU0dfT05FIiwKICAgIlJFQ1ZNTVNHX1RXTyIsCkBAIC0xODgsMjYgKzE1OCwxNiBAQAogCiAgIGNsb3NlKGZkX2FjYyk7CiB9Ci0jZW5kaWYKIAogVEVTVChzeXNfc29ja2V0LCByZWN2bW1zZ19zbW9rZSkgewotI2lmIGRlZmluZWQoUkVDVk1NU0dfU1VQUE9SVEVEKQogICBSdW5UZXN0KFRlc3RSZWN2TU1zZywgU2VuZE11bHRpcGxlKTsKLSNlbHNlCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOwotI2VuZGlmCiB9CiAKIFRFU1Qoc3lzX3NvY2tldCwgcmVjdm1tc2dfZXJyb3IpIHsKLSNpZiBkZWZpbmVkKFJFQ1ZNTVNHX1NVUFBPUlRFRCkKICAgQVNTRVJUX0VRKC0xLCByZWN2bW1zZygtMSwgTlVMTCwgMCwgMCwgTlVMTCkpOwogICBBU1NFUlRfRVEoRUJBREYsIGVycm5vKTsKLSNlbHNlCi0gIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOwotI2VuZGlmCiB9CiAKLSNpZiBkZWZpbmVkKFNFTkRNTVNHX1NVUFBPUlRFRCkKIGNvbnN0IGNoYXIqIGdfU2VuZE1zZ3NbXSA9IHsKICAgIk1TR19PTkUiLAogICAiTVNHX1RXTyIsCkBAIC0yNTYsMjEgKzIxNiwxMiBAQAogCiAgIGNsb3NlKGZkX2FjYyk7CiB9Ci0jZW5kaWYKIAogVEVTVChzeXNfc29ja2V0LCBzZW5kbW1zZ19zbW9rZSkgewotI2lmIGRlZmluZWQoU0VORE1NU0dfU1VQUE9SVEVEKQogICBSdW5UZXN0KFRlc3RTZW5kTU1zZywgU2VuZE1Nc2cpOwotI2Vsc2UKLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7Ci0jZW5kaWYKIH0KIAogVEVTVChzeXNfc29ja2V0LCBzZW5kbW1zZ19lcnJvcikgewotI2lmIGRlZmluZWQoU0VORE1NU0dfU1VQUE9SVEVEKQogICBBU1NFUlRfRVEoLTEsIHNlbmRtbXNnKC0xLCBOVUxMLCAwLCAwKSk7CiAgIEFTU0VSVF9FUShFQkFERiwgZXJybm8pOwotI2Vsc2UKLSAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7Ci0jZW5kaWYKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c19zdGF0X3Rlc3QuY3BwIGIvdGVzdHMvc3lzX3N0YXRfdGVzdC5jcHAKaW5kZXggNjQwNDlhYi4uZTQ2NTc3NCAxMDA2NDQKLS0tIGEvdGVzdHMvc3lzX3N0YXRfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3lzX3N0YXRfdGVzdC5jcHAKQEAgLTU1LDYgKzU1LDE4IEBACiAgIEFTU0VSVF9FUShFQkFERiwgZXJybm8pOwogfQogCitURVNUKHN5c19zdGF0LCBta2ZpZm9fZmFpbHVyZSkgeworICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUSgtMSwgbWtmaWZvKCIvIiwgMDY2NikpOworICBBU1NFUlRfRVEoRUVYSVNULCBlcnJubyk7Cit9CisKK1RFU1Qoc3lzX3N0YXQsIG1rZmlmb2F0X2ZhaWx1cmUpIHsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoLTEsIG1rZmlmb2F0KC0yLCAieCIsIDA2NjYpKTsKKyAgQVNTRVJUX0VRKEVCQURGLCBlcnJubyk7Cit9CisKIFRFU1Qoc3lzX3N0YXQsIG1rZmlmbykgewogICBpZiAoZ2V0dWlkKCkgPT0gMCkgewogICAgIC8vIFJhY3kgYnV0IHByb2JhYmx5IHN1ZmZpY2llbnQgd2F5IHRvIGdldCBhIHN1aXRhYmxlIGZpbGVuYW1lLgpAQCAtNzAsNiArODIsNyBAQAogICAgIEFTU0VSVF9UUlVFKFNfSVNGSUZPKHNiLnN0X21vZGUpKTsKICAgICB1bmxpbmsocGF0aC5jX3N0cigpKTsKICAgfSBlbHNlIHsKKyAgICAvLyBTRUxpbnV4IHBvbGljeSBmb3JiaWRzIHVzIGZyb20gY3JlYXRpbmcgRklGT3MuIGh0dHA6Ly9iLzE3NjQ2NzAyLgogICAgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBvbmx5IHBlcmZvcm1zIGEgdGVzdCB3aGVuIHJ1biBhcyByb290LiI7CiAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfYW5zd2VyLmNwcCBiL3Rlc3RzL3N5c19zeXNpbmZvX3Rlc3QuY3BwCnNpbWlsYXJpdHkgaW5kZXggNjElCmNvcHkgZnJvbSB0ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAKY29weSB0byB0ZXN0cy9zeXNfc3lzaW5mb190ZXN0LmNwcAppbmRleCBhNGQ3NTA0Li5iMDBlMTNmIDEwMDY0NAotLS0gYS90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX2Fuc3dlci5jcHAKKysrIGIvdGVzdHMvc3lzX3N5c2luZm9fdGVzdC5jcHAKQEAgLTE0LDEyICsxNCwyMCBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotZXh0ZXJuICJDIiBpbnQgZGxvcGVuX3Rlc3RfZ2V0X2Fuc3dlcigpIHsKLSAgcmV0dXJuIF9fQU5TV0VSOwotfQorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKLSNpZmRlZiBfX0FOU1dFUjIKLWV4dGVybiAiQyIgaW50IGRsb3Blbl90ZXN0X2dldF9hbnN3ZXIyKCkgewotICByZXR1cm4gX19BTlNXRVIyOworI2luY2x1ZGUgPHN5cy9zeXNpbmZvLmg+CisKK1RFU1Qoc3lzX3N5c2luZm8sIHNtb2tlKSB7CisgIGludCBucHJvY2Vzc29yID0gZ2V0X25wcm9jcygpOworICBBU1NFUlRfR1QobnByb2Nlc3NvciwgMCk7CisKKyAgaW50IG5wcm9jZXNzb3JfY29uZiA9IGdldF9ucHJvY3NfY29uZigpOworICBBU1NFUlRfR0UobnByb2Nlc3Nvcl9jb25mLCBucHJvY2Vzc29yKTsKKworICBsb25nIGF2YWlsX3BoeXNfcGFnZXMgPSBnZXRfYXZwaHlzX3BhZ2VzKCk7CisgIEFTU0VSVF9HVChhdmFpbF9waHlzX3BhZ2VzLCAwKTsKKworICBsb25nIHBoeXNfcGFnZXMgPSBnZXRfcGh5c19wYWdlcygpOworICBBU1NFUlRfR0UocGh5c19wYWdlcywgYXZhaWxfcGh5c19wYWdlcyk7CiB9Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c3RlbV9wcm9wZXJ0aWVzX3Rlc3QuY3BwIGIvdGVzdHMvc3lzdGVtX3Byb3BlcnRpZXNfdGVzdC5jcHAKaW5kZXggYmZkNTg1NC4uYzdiZmVlNiAxMDA2NDQKLS0tIGEvdGVzdHMvc3lzdGVtX3Byb3BlcnRpZXNfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3lzdGVtX3Byb3BlcnRpZXNfdGVzdC5jcHAKQEAgLTE1LDggKzE1LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0jaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlICJCaW9uaWNEZWF0aFRlc3QuaCIKKwogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzdHJpbmc+CiAKQEAgLTM5OCw5ICs0MDAsMTAgQEAKICAgICAgICAgIFdURVJNU0lHKGV4aXRfc3RhdHVzKSA9PSBTSUdBQlJUKTsKIH0KIAotVEVTVChwcm9wZXJ0aWVzX0RlYXRoVGVzdCwgcmVhZF9vbmx5KSB7CitjbGFzcyBwcm9wZXJ0aWVzX0RlYXRoVGVzdCA6IHB1YmxpYyBCaW9uaWNEZWF0aFRlc3Qge307CisKK1RFU1RfRihwcm9wZXJ0aWVzX0RlYXRoVGVzdCwgcmVhZF9vbmx5KSB7CiAjaWYgZGVmaW5lZChfX0JJT05JQ19fKQotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAKICAgLy8gVGhpcyB0ZXN0IG9ubHkgbWFrZXMgc2Vuc2UgaWYgd2UncmUgdGFsa2luZyB0byB0aGUgcmVhbCBzeXN0ZW0gcHJvcGVydHkgc2VydmljZS4KICAgc3RydWN0IHN0YXQgc2I7CmRpZmYgLS1naXQgYS90ZXN0cy90aW1lX3Rlc3QuY3BwIGIvdGVzdHMvdGltZV90ZXN0LmNwcAppbmRleCBkNjM3ZGYyLi42OTFkOGZmIDEwMDY0NAotLS0gYS90ZXN0cy90aW1lX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3RpbWVfdGVzdC5jcHAKQEAgLTE3LDE2ICsxNywxOCBAQAogI2luY2x1ZGUgPHRpbWUuaD4KIAogI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlICJTY29wZWRTaWduYWxIYW5kbGVyLmgiCiAKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19jb25zdGFudHMuaCIKKwogVEVTVCh0aW1lLCBnbXRpbWUpIHsKICAgdGltZV90IHQgPSAwOwogICB0bSogYnJva2VuX2Rvd24gPSBnbXRpbWUoJnQpOwpAQCAtNzAsNiArNzIsMzAgQEAKICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfam9pbih0LCAmcmVzdWx0KSk7CiB9CiAKK1RFU1QodGltZSwgbWt0aW1lX2VtcHR5X1RaKSB7CisgIC8vIHR6Y29kZSB1c2VkIHRvIGhhdmUgYSBidWcgd2hlcmUgaXQgZGlkbid0IHJlaW5pdGlhbGl6ZSBzb21lIGludGVybmFsIHN0YXRlLgorCisgIC8vIENob29zZSBhIHRpbWUgd2hlcmUgRFNUIGlzIHNldC4KKyAgc3RydWN0IHRtIHQ7CisgIG1lbXNldCgmdCwgMCwgc2l6ZW9mKHRtKSk7CisgIHQudG1feWVhciA9IDE5ODAgLSAxOTAwOworICB0LnRtX21vbiA9IDY7CisgIHQudG1fbWRheSA9IDI7CisKKyAgc2V0ZW52KCJUWiIsICJBbWVyaWNhL0xvc19BbmdlbGVzIiwgMSk7CisgIHR6c2V0KCk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDx0aW1lX3Q+KDMzMTM3MjgwMFUpLCBta3RpbWUoJnQpKTsKKworICBtZW1zZXQoJnQsIDAsIHNpemVvZih0bSkpOworICB0LnRtX3llYXIgPSAxOTgwIC0gMTkwMDsKKyAgdC50bV9tb24gPSA2OworICB0LnRtX21kYXkgPSAyOworCisgIHNldGVudigiVFoiLCAiIiwgMSk7IC8vIEltcGxpZXMgVVRDLgorICB0enNldCgpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8dGltZV90PigzMzEzNDQwMDBVKSwgbWt0aW1lKCZ0KSk7Cit9CisKIFRFU1QodGltZSwgbWt0aW1lXzEwMzEwOTI5KSB7CiAgIHN0cnVjdCB0bSB0OwogICBtZW1zZXQoJnQsIDAsIHNpemVvZih0bSkpOwpAQCAtNDE3LDcgKzQ0Myw3IEBACiAgIHRzMi50dl9uc2VjIC09IHRzMS50dl9uc2VjOwogICBpZiAodHMyLnR2X25zZWMgPCAwKSB7CiAgICAgLS10czIudHZfc2VjOwotICAgIHRzMi50dl9uc2VjICs9IDEwMDAwMDAwMDA7CisgICAgdHMyLnR2X25zZWMgKz0gTlNfUEVSX1M7CiAgIH0KIAogICAvLyBTaG91bGQgYmUgbGVzcyB0aGFuIChhIHZlcnkgZ2VuZXJvdXMsIHRvIHRyeSB0byBhdm9pZCBmbGFraW5lc3MpIDEwMDAwMDBucy4KQEAgLTQyNSw2ICs0NTEsNTUgQEAKICAgQVNTRVJUX0xUKHRzMi50dl9uc2VjLCAxMDAwMDAwKTsKIH0KIAorVEVTVCh0aW1lLCBjbG9jaykgeworICAvLyBjbG9jaygzKSBpcyBoYXJkIHRvIHRlc3QsIGJ1dCBhIDFzIHNsZWVwIHNob3VsZCBjb3N0IGxlc3MgdGhhbiAxbXMuCisgIGNsb2NrX3QgdDAgPSBjbG9jaygpOworICBzbGVlcCgxKTsKKyAgY2xvY2tfdCB0MSA9IGNsb2NrKCk7CisgIEFTU0VSVF9MVCh0MSAtIHQwLCBDTE9DS1NfUEVSX1NFQyAvIDEwMDApOworfQorCitwaWRfdCBHZXRJbnZhbGlkUGlkKCkgeworICBGSUxFKiBmcCA9IGZvcGVuKCIvcHJvYy9zeXMva2VybmVsL3BpZF9tYXgiLCAiciIpOworICBsb25nIHBpZF9tYXg7CisgIGZzY2FuZihmcCwgIiVsZCIsICZwaWRfbWF4KTsKKyAgcGlkX3QgaW52YWxpZF9waWQgPSBzdGF0aWNfY2FzdDxwaWRfdD4ocGlkX21heCArIDEpOworICBmY2xvc2UoZnApOworICByZXR1cm4gaW52YWxpZF9waWQ7Cit9CisKK1RFU1QodGltZSwgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCkgeworICAvLyBGb3IgY3VycmVudCBwcm9jZXNzLgorICBjbG9ja2lkX3QgY2xvY2tpZDsKKyAgQVNTRVJUX0VRKDAsIGNsb2NrX2dldGNwdWNsb2NraWQoZ2V0cGlkKCksICZjbG9ja2lkKSk7CisKKyAgdGltZXNwZWMgdHM7CisgIEFTU0VSVF9FUSgwLCBjbG9ja19nZXR0aW1lKGNsb2NraWQsICZ0cykpOworCisgIC8vIEZvciBwYXJlbnQgcHJvY2Vzcy4KKyAgQVNTRVJUX0VRKDAsIGNsb2NrX2dldGNwdWNsb2NraWQoZ2V0cHBpZCgpLCAmY2xvY2tpZCkpOworICBBU1NFUlRfRVEoMCwgY2xvY2tfZ2V0dGltZShjbG9ja2lkLCAmdHMpKTsKKworICAvLyBGb3IgaW52YWxpZCBwcm9jZXNzLgorICAvLyBXZSBjYW4ndCB1c2UgLTEgZm9yIGludmFsaWQgcGlkIGhlcmUsIGJlY2F1c2UgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCgpIGNhbid0IGRldGVjdCBpdC4KKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoRVNSQ0gsIGNsb2NrX2dldGNwdWNsb2NraWQoR2V0SW52YWxpZFBpZCgpLCAmY2xvY2tpZCkpOworICBBU1NFUlRfRVEoMCwgZXJybm8pOworfQorCitURVNUKHRpbWUsIGNsb2NrX3NldHRpbWUpIHsKKyAgZXJybm8gPSAwOworICB0aW1lc3BlYyB0czsKKyAgQVNTRVJUX0VRKC0xLCBjbG9ja19zZXR0aW1lKC0xLCAmdHMpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworfQorCitURVNUKHRpbWUsIGNsb2NrX25hbm9zbGVlcCkgeworICB0aW1lc3BlYyBpbjsKKyAgdGltZXNwZWMgb3V0OworICBBU1NFUlRfRVEoRUlOVkFMLCBjbG9ja19uYW5vc2xlZXAoLTEsIDAsICZpbiwgJm91dCkpOworfQorCiAvLyBUZXN0IHRvIHZlcmlmeSB0aGF0IGRpc2FybWluZyBhIHJlcGVhdGFibGUgdGltZXIgZGlzYWJsZXMgdGhlCiAvLyBjYWxsYmFja3MuCiBURVNUKHRpbWUsIHRpbWVyX2Rpc2FybV90ZXJtaW5hdGVzKSB7CmRpZmYgLS1naXQgYS90ZXN0cy91Y2hhcl90ZXN0LmNwcCBiL3Rlc3RzL3VjaGFyX3Rlc3QuY3BwCmluZGV4IGVjYTNjNWUuLmM4ODdmOGEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3VjaGFyX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3VjaGFyX3Rlc3QuY3BwCkBAIC0xOSw3ICsxOSw2IEBACiAjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogI2RlZmluZSBIQVZFX1VDSEFSIDEKICNlbGlmIGRlZmluZWQoX19HTElCQ19fKQotI2luY2x1ZGUgPGZlYXR1cmVzLmg+CiAjZGVmaW5lIEhBVkVfVUNIQVIgX19HTElCQ19QUkVSRVEoMiwgMTYpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pc3RkX3Rlc3QuY3BwIGIvdGVzdHMvdW5pc3RkX3Rlc3QuY3BwCmluZGV4IDgxOTVlYTguLjM0YjdiZjMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3VuaXN0ZF90ZXN0LmNwcAorKysgYi90ZXN0cy91bmlzdGRfdGVzdC5jcHAKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlICJCaW9uaWNEZWF0aFRlc3QuaCIKICNpbmNsdWRlICJTY29wZWRTaWduYWxIYW5kbGVyLmgiCiAjaW5jbHVkZSAiVGVtcG9yYXJ5RmlsZS5oIgogCkBAIC0yMiwxNCArMjMsMTIgQEAKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KICNpbmNsdWRlIDxzeXMvd2FpdC5oPgotCi1URVNUKHVuaXN0ZCwgc3lzY29uZl9TQ19NT05PVE9OSUNfQ0xPQ0spIHsKLSAgQVNTRVJUX0dUKHN5c2NvbmYoX1NDX01PTk9UT05JQ19DTE9DSyksIDApOwotfQorI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiBzdGF0aWMgdm9pZCogZ2V0X2JyaygpIHsKICAgcmV0dXJuIHNicmsoMCk7CkBAIC0yNDcsOCArMjQ2LDYgQEAKIH0KIAogVEVTVCh1bmlzdGQsIHVuc2V0ZW52X0VJTlZBTCkgewotICBFWFBFQ1RfRVEoLTEsIHVuc2V0ZW52KE5VTEwpKTsKLSAgRVhQRUNUX0VRKEVJTlZBTCwgZXJybm8pOwogICBFWFBFQ1RfRVEoLTEsIHVuc2V0ZW52KCIiKSk7CiAgIEVYUEVDVF9FUShFSU5WQUwsIGVycm5vKTsKICAgRVhQRUNUX0VRKC0xLCB1bnNldGVudigiYT1iIikpOwpAQCAtNDYyLDMgKzQ1OSwzNDUgQEAKICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfam9pbih0LCAmcmVzdWx0KSk7CiAgIEFTU0VSVF9FUShOVUxMLCByZXN1bHQpOwogfQorCitjbGFzcyB1bmlzdGRfRGVhdGhUZXN0IDogcHVibGljIEJpb25pY0RlYXRoVGVzdCB7fTsKKworVEVTVF9GKHVuaXN0ZF9EZWF0aFRlc3QsIGFib3J0KSB7CisgIEFTU0VSVF9FWElUKGFib3J0KCksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKK1RFU1QodW5pc3RkLCBzZXRob3N0bmFtZSkgeworICAvLyBUaGUgcGVybWlzc2lvbnMgY2hlY2sgaGFwcGVucyBiZWZvcmUgdGhlIGFyZ3VtZW50IGNoZWNrLCBzbyB0aGlzIHdpbGwKKyAgLy8gZmFpbCBmb3IgYSBkaWZmZXJlbnQgcmVhc29uIGlmIHlvdSdyZSBydW5uaW5nIGFzIHJvb3QgdGhhbiBpZiB5b3UncmUKKyAgLy8gbm90LCBidXQgaXQnbGwgZmFpbCBlaXRoZXIgd2F5LiBDaGVja2luZyB0aGF0IHdlIGhhdmUgdGhlIHN5bWJvbCBpcyBhYm91dAorICAvLyBhbGwgd2UgY2FuIGRvIGZvciBzZXRob3N0bmFtZSgyKS4KKyAgQVNTRVJUX0VRKC0xLCBzZXRob3N0bmFtZSgiIiwgLTEpKTsKK30KKworVEVTVCh1bmlzdGQsIGdldGhvc3RuYW1lKSB7CisgIGNoYXIgaG9zdG5hbWVbSE9TVF9OQU1FX01BWCArIDFdOworICBtZW1zZXQoaG9zdG5hbWUsIDAsIHNpemVvZihob3N0bmFtZSkpOworCisgIC8vIENhbiB3ZSBnZXQgdGhlIGhvc3RuYW1lIHdpdGggYSBiaWcgYnVmZmVyPworICBBU1NFUlRfRVEoMCwgZ2V0aG9zdG5hbWUoaG9zdG5hbWUsIEhPU1RfTkFNRV9NQVgpKTsKKworICAvLyBDYW4gd2UgZ2V0IHRoZSBob3N0bmFtZSB3aXRoIGEgcmlnaHQtc2l6ZWQgYnVmZmVyPworICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUSgwLCBnZXRob3N0bmFtZShob3N0bmFtZSwgc3RybGVuKGhvc3RuYW1lKSArIDEpKTsKKworICAvLyBEb2VzIHVuYW1lKDIpIGFncmVlPworICB1dHNuYW1lIGJ1ZjsKKyAgQVNTRVJUX0VRKDAsIHVuYW1lKCZidWYpKTsKKyAgQVNTRVJUX0VRKDAsIHN0cm5jbXAoaG9zdG5hbWUsIGJ1Zi5ub2RlbmFtZSwgU1lTX05NTE4pKTsKKyAgQVNTRVJUX0dUKHN0cmxlbihob3N0bmFtZSksIDBVKTsKKworICAvLyBEbyB3ZSBjb3JyZWN0bHkgZGV0ZWN0IHRydW5jYXRpb24/CisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKC0xLCBnZXRob3N0bmFtZShob3N0bmFtZSwgc3RybGVuKGhvc3RuYW1lKSkpOworICBBU1NFUlRfRVEoRU5BTUVUT09MT05HLCBlcnJubyk7Cit9CisKK1RFU1QodW5pc3RkLCBwYXRoY29uZl9mcGF0aGNvbmYpIHsKKyAgVGVtcG9yYXJ5RmlsZSB0ZjsKKyAgbG9uZyByYyA9IDBMOworICAvLyBBcyBhIGZpbGUgc3lzdGVtJ3MgYmxvY2sgc2l6ZSBpcyBhbHdheXMgcG93ZXIgb2YgMiwgdGhlIGNvbmZpZ3VyZSB2YWx1ZXMKKyAgLy8gZm9yIEFMTE9DIGFuZCBYRkVSIHNob3VsZCBiZSBwb3dlciBvZiAyIGFzIHdlbGwuCisgIHJjID0gcGF0aGNvbmYodGYuZmlsZW5hbWUsIF9QQ19BTExPQ19TSVpFX01JTik7CisgIEFTU0VSVF9UUlVFKHJjID4gMCAmJiBwb3dlcm9mMihyYykpOworICByYyA9IHBhdGhjb25mKHRmLmZpbGVuYW1lLCBfUENfUkVDX01JTl9YRkVSX1NJWkUpOworICBBU1NFUlRfVFJVRShyYyA+IDAgJiYgcG93ZXJvZjIocmMpKTsKKyAgcmMgPSBwYXRoY29uZih0Zi5maWxlbmFtZSwgX1BDX1JFQ19YRkVSX0FMSUdOKTsKKyAgQVNTRVJUX1RSVUUocmMgPiAwICYmIHBvd2Vyb2YyKHJjKSk7CisKKyAgcmMgPSBmcGF0aGNvbmYodGYuZmQsIF9QQ19BTExPQ19TSVpFX01JTik7CisgIEFTU0VSVF9UUlVFKHJjID4gMCAmJiBwb3dlcm9mMihyYykpOworICByYyA9IGZwYXRoY29uZih0Zi5mZCwgX1BDX1JFQ19NSU5fWEZFUl9TSVpFKTsKKyAgQVNTRVJUX1RSVUUocmMgPiAwICYmIHBvd2Vyb2YyKHJjKSk7CisgIHJjID0gZnBhdGhjb25mKHRmLmZkLCBfUENfUkVDX1hGRVJfQUxJR04pOworICBBU1NFUlRfVFJVRShyYyA+IDAgJiYgcG93ZXJvZjIocmMpKTsKK30KKworCitURVNUKHVuaXN0ZCwgX1BPU0lYX21hY3Jvc19zbW9rZSkgeworICAvLyBNYWtlIGEgdGlnaHQgdmVyaWZpY2F0aW9uIG9mIF9QT1NJWF8qIC8gX1BPU0lYMl8qIC8gX1hPUEVOXyogbWFjcm9zLCB0byBwcmV2ZW50IGNoYW5nZSBieSBtaXN0YWtlLgorICAvLyBWZXJpZnkgYWNjb3JkaW5nIHRvIFBPU0lYLjEtMjAwOC4KKyAgRVhQRUNUX0VRKDIwMDgwOUwsIF9QT1NJWF9WRVJTSU9OKTsKKworICBFWFBFQ1RfR1QoX1BPU0lYX0FJT19MSVNUSU9fTUFYLCAwKTsKKyAgRVhQRUNUX0dUKF9QT1NJWF9BSU9fTUFYLCAwKTsKKyAgRVhQRUNUX0dUKF9QT1NJWF9BUkdfTUFYLCAwKTsKKyAgRVhQRUNUX0dUKF9QT1NJWF9DSElMRF9NQVgsIDApOworICBFWFBFQ1RfTkUoX1BPU0lYX0NIT1dOX1JFU1RSSUNURUQsIC0xKTsKKyAgRVhQRUNUX0VRKF9QT1NJWF9WRVJTSU9OLCBfUE9TSVhfQ0xPQ0tfU0VMRUNUSU9OKTsKKyAgRVhQRUNUX0VRKF9QT1NJWF9WRVJTSU9OLCBfUE9TSVhfQ1BVVElNRSk7CisgIEVYUEVDVF9HVChfUE9TSVhfREVMQVlUSU1FUl9NQVgsIDApOworICBFWFBFQ1RfRVEoX1BPU0lYX1ZFUlNJT04sIF9QT1NJWF9GU1lOQyk7CisgIEVYUEVDVF9HVChfUE9TSVhfSE9TVF9OQU1FX01BWCwgMCk7CisgIEVYUEVDVF9FUShfUE9TSVhfVkVSU0lPTiwgX1BPU0lYX0lQVjYpOworICBFWFBFQ1RfR1QoX1BPU0lYX0pPQl9DT05UUk9MLCAwKTsKKyAgRVhQRUNUX0dUKF9QT1NJWF9MSU5LX01BWCwgMCk7CisgIEVYUEVDVF9HVChfUE9TSVhfTE9HSU5fTkFNRV9NQVgsIDApOworICBFWFBFQ1RfRVEoX1BPU0lYX1ZFUlNJT04sIF9QT1NJWF9NQVBQRURfRklMRVMpOworICBFWFBFQ1RfR1QoX1BPU0lYX01BWF9DQU5PTiwgMCk7CisgIEVYUEVDVF9HVChfUE9TSVhfTUFYX0lOUFVULCAwKTsKKyAgRVhQRUNUX0VRKF9QT1NJWF9WRVJTSU9OLCBfUE9TSVhfTUVNTE9DSyk7CisgIEVYUEVDVF9FUShfUE9TSVhfVkVSU0lPTiwgX1BPU0lYX01FTUxPQ0tfUkFOR0UpOworICBFWFBFQ1RfRVEoX1BPU0lYX1ZFUlNJT04sIF9QT1NJWF9NRU1PUllfUFJPVEVDVElPTik7CisgIEVYUEVDVF9FUSgwLCBfUE9TSVhfTU9OT1RPTklDX0NMT0NLKTsKKyAgRVhQRUNUX0dUKF9QT1NJWF9NUV9PUEVOX01BWCwgMCk7CisgIEVYUEVDVF9HVChfUE9TSVhfTVFfUFJJT19NQVgsIDApOworICBFWFBFQ1RfR1QoX1BPU0lYX05BTUVfTUFYLCAwKTsKKyAgRVhQRUNUX0dUKF9QT1NJWF9OR1JPVVBTX01BWCwgMCk7CisgIEVYUEVDVF9HVChfUE9TSVhfTk9fVFJVTkMsIDApOworICBFWFBFQ1RfR1QoX1BPU0lYX09QRU5fTUFYLCAwKTsKKyAgRVhQRUNUX0dUKF9QT1NJWF9QQVRIX01BWCwgMCk7CisgIEVYUEVDVF9HVChfUE9TSVhfUElQRV9CVUYsIDApOworICBFWFBFQ1RfRVEoX1BPU0lYX1ZFUlNJT04sIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HKTsKKyAgRVhQRUNUX0VRKF9QT1NJWF9WRVJTSU9OLCBfUE9TSVhfUkFXX1NPQ0tFVFMpOworICBFWFBFQ1RfRVEoX1BPU0lYX1ZFUlNJT04sIF9QT1NJWF9SRUFERVJfV1JJVEVSX0xPQ0tTKTsKKyAgRVhQRUNUX0dUKF9QT1NJWF9SRUdFWFAsIDApOworICBFWFBFQ1RfR1QoX1BPU0lYX1JFX0RVUF9NQVgsIDApOworICBFWFBFQ1RfR1QoX1BPU0lYX1NBVkVEX0lEUywgMCk7CisgIEVYUEVDVF9FUShfUE9TSVhfVkVSU0lPTiwgX1BPU0lYX1NFTUFQSE9SRVMpOworICBFWFBFQ1RfR1QoX1BPU0lYX1NFTV9OU0VNU19NQVgsIDApOworICBFWFBFQ1RfR1QoX1BPU0lYX1NFTV9WQUxVRV9NQVgsIDApOworICBFWFBFQ1RfR1QoX1BPU0lYX1NIRUxMLCAwKTsKKyAgRVhQRUNUX0dUKF9QT1NJWF9TSUdRVUVVRV9NQVgsIDApOworICBFWFBFQ1RfRVEoLTEsIF9QT1NJWF9TUE9SQURJQ19TRVJWRVIpOworICBFWFBFQ1RfR1QoX1BPU0lYX1NTSVpFX01BWCwgMCk7CisgIEVYUEVDVF9HVChfUE9TSVhfU1RSRUFNX01BWCwgMCk7CisgIEVYUEVDVF9HVChfUE9TSVhfU1lNTElOS19NQVgsIDApOworICBFWFBFQ1RfR1QoX1BPU0lYX1NZTUxPT1BfTUFYLCAwKTsKKyAgRVhQRUNUX0VRKF9QT1NJWF9WRVJTSU9OLCBfUE9TSVhfU1lOQ0hST05JWkVEX0lPKTsKKyAgRVhQRUNUX0VRKF9QT1NJWF9WRVJTSU9OLCBfUE9TSVhfVEhSRUFEUyk7CisgIEVYUEVDVF9FUShfUE9TSVhfVkVSU0lPTiwgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLQUREUik7CisgIEVYUEVDVF9FUShfUE9TSVhfVkVSU0lPTiwgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRSk7CisgIEVYUEVDVF9UUlVFKF9QT1NJWF9WRVJTSU9OID09ICBfUE9TSVhfVEhSRUFEX0NQVVRJTUUgfHwgMCA9PSBfUE9TSVhfVEhSRUFEX0NQVVRJTUUpOworICBFWFBFQ1RfR1QoX1BPU0lYX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMsIDApOworICBFWFBFQ1RfR1QoX1BPU0lYX1RIUkVBRF9LRVlTX01BWCwgMCk7CisgIEVYUEVDVF9FUShfUE9TSVhfVkVSU0lPTiwgX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HKTsKKyAgRVhQRUNUX0VRKF9QT1NJWF9WRVJTSU9OLCBfUE9TSVhfVEhSRUFEX1BSSU9fSU5IRVJJVCk7CisgIEVYUEVDVF9FUShfUE9TSVhfVkVSU0lPTiwgX1BPU0lYX1RIUkVBRF9QUklPX1BST1RFQ1QpOworICBFWFBFQ1RfRVEoLTEsIF9QT1NJWF9USFJFQURfUk9CVVNUX1BSSU9fUFJPVEVDVCk7CisgIEVYUEVDVF9FUShfUE9TSVhfVkVSU0lPTiwgX1BPU0lYX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUyk7CisgIEVYUEVDVF9FUSgtMSwgX1BPU0lYX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIpOworICBFWFBFQ1RfR1QoX1BPU0lYX1RIUkVBRF9USFJFQURTX01BWCwgMCk7CisgIEVYUEVDVF9FUShfUE9TSVhfVkVSU0lPTiwgX1BPU0lYX1RJTUVPVVRTKTsKKyAgRVhQRUNUX0VRKF9QT1NJWF9WRVJTSU9OLCBfUE9TSVhfVElNRVJTKTsKKyAgRVhQRUNUX0dUKF9QT1NJWF9USU1FUl9NQVgsIDApOworICBFWFBFQ1RfRVEoLTEsIF9QT1NJWF9UUkFDRSk7CisgIEVYUEVDVF9FUSgtMSwgX1BPU0lYX1RSQUNFX0VWRU5UX0ZJTFRFUik7CisgIEVYUEVDVF9FUSgtMSwgX1BPU0lYX1RSQUNFX0lOSEVSSVQpOworICBFWFBFQ1RfRVEoLTEsIF9QT1NJWF9UUkFDRV9MT0cpOworICBFWFBFQ1RfR1QoX1BPU0lYX1RUWV9OQU1FX01BWCwgMCk7CisgIEVYUEVDVF9FUSgtMSwgX1BPU0lYX1RZUEVEX01FTU9SWV9PQkpFQ1RTKTsKKyAgRVhQRUNUX0dUKF9QT1NJWF9UWk5BTUVfTUFYLCAwKTsKKyAgRVhQRUNUX05FKC0xLCBfUE9TSVhfVkRJU0FCTEUpOworCisgIEVYUEVDVF9HVChfUE9TSVgyX0JDX0JBU0VfTUFYLCAwKTsKKyAgRVhQRUNUX0dUKF9QT1NJWDJfQkNfRElNX01BWCwgMCk7CisgIEVYUEVDVF9HVChfUE9TSVgyX0JDX1NDQUxFX01BWCwgMCk7CisgIEVYUEVDVF9HVChfUE9TSVgyX0JDX1NUUklOR19NQVgsIDApOworICBFWFBFQ1RfR1QoX1BPU0lYMl9DSEFSQ0xBU1NfTkFNRV9NQVgsIDApOworICBFWFBFQ1RfR1QoX1BPU0lYMl9DT0xMX1dFSUdIVFNfTUFYLCAwKTsKKyAgRVhQRUNUX0VRKF9QT1NJWF9WRVJTSU9OLCBfUE9TSVgyX0NfQklORCk7CisgIEVYUEVDVF9HVChfUE9TSVgyX0VYUFJfTkVTVF9NQVgsIDApOworICBFWFBFQ1RfR1QoX1BPU0lYMl9MSU5FX01BWCwgMCk7CisgIEVYUEVDVF9HVChfUE9TSVgyX1JFX0RVUF9NQVgsIDApOworCisgIEVYUEVDVF9FUSg3MDAsIF9YT1BFTl9WRVJTSU9OKTsKKyAgRVhQRUNUX0dUKF9YT1BFTl9JT1ZfTUFYLCAwKTsKKyAgRVhQRUNUX0dUKF9YT1BFTl9VTklYLCAwKTsKKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgLy8gVGhlc2UgdGVzdHMgb25seSBwYXNzIG9uIGJpb25pYywgYXMgYmlvbmljIGFuZCBnbGliYyBoYXMgZGlmZmVyZW50IHN1cHBvcnQgb24gdGhlc2UgbWFjcm9zLgorICAvLyBNYWNyb3MgbGlrZSBfUE9TSVhfQURWSVNPUllfSU5GTyBhcmUgbm90IHN1cHBvcnRlZCBvbiBiaW9uaWMgeWV0LgorICBFWFBFQ1RfRVEoLTEsIF9QT1NJWF9BRFZJU09SWV9JTkZPKTsKKyAgRVhQRUNUX0VRKC0xLCBfUE9TSVhfQVNZTkNIUk9OT1VTX0lPKTsKKyAgRVhQRUNUX0VRKC0xLCBfUE9TSVhfQkFSUklFUlMpOworICBFWFBFQ1RfRVEoLTEsIF9QT1NJWF9NRVNTQUdFX1BBU1NJTkcpOworICBFWFBFQ1RfRVEoLTEsIF9QT1NJWF9QUklPUklUSVpFRF9JTyk7CisgIEVYUEVDVF9FUSgtMSwgX1BPU0lYX1JFQUxUSU1FX1NJR05BTFMpOworICBFWFBFQ1RfRVEoLTEsIF9QT1NJWF9TSEFSRURfTUVNT1JZX09CSkVDVFMpOworICBFWFBFQ1RfRVEoLTEsIF9QT1NJWF9TUEFXTik7CisgIEVYUEVDVF9FUSgtMSwgX1BPU0lYX1NQSU5fTE9DS1MpOworICBFWFBFQ1RfRVEoLTEsIF9QT1NJWF9USFJFQURfUFJPQ0VTU19TSEFSRUQpOworICBFWFBFQ1RfRVEoLTEsIF9QT1NJWF9USFJFQURfUk9CVVNUX1BSSU9fSU5IRVJJVCk7CisKKyAgRVhQRUNUX0VRKC0xLCBfUE9TSVgyX1ZFUlNJT04pOworICBFWFBFQ1RfRVEoLTEsIF9QT1NJWDJfQ0hBUl9URVJNKTsKKyAgRVhQRUNUX0VRKC0xLCBfUE9TSVgyX0NfREVWKTsKKyAgRVhQRUNUX0VRKC0xLCBfUE9TSVgyX0xPQ0FMRURFRik7CisgIEVYUEVDVF9FUSgtMSwgX1BPU0lYMl9TV19ERVYpOworICBFWFBFQ1RfRVEoLTEsIF9QT1NJWDJfVVBFKTsKKworICBFWFBFQ1RfRVEoLTEsIF9YT1BFTl9FTkhfSTE4Tik7CisgIEVYUEVDVF9FUSgtMSwgX1hPUEVOX0NSWVBUKTsKKyAgRVhQRUNUX0VRKC0xLCBfWE9QRU5fTEVHQUNZKTsKKyAgRVhQRUNUX0VRKC0xLCBfWE9QRU5fUkVBTFRJTUUpOworICBFWFBFQ1RfRVEoLTEsIF9YT1BFTl9SRUFMVElNRV9USFJFQURTKTsKKyAgRVhQRUNUX0VRKC0xLCBfWE9QRU5fU0hNKTsKKworI2VuZGlmIC8vIGRlZmluZWQoX19CSU9OSUNfXykKK30KKworI2RlZmluZSBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChuYW1lKSBWZXJpZnlTeXNjb25mKG5hbWUsICNuYW1lLCBbXShsb25nIHYpe3JldHVybiB2ID09IC0xO30pCisKKy8vIHN5c2NvbmYoKSBtZWFucyB1bmxpbWl0ZWQgd2hlbiBpdCByZXR1cm5zIC0xIHdpdGggZXJybm8gdW5jaGFuZ2VkLgorI2RlZmluZSBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShuYW1lKSBcCisgIFZlcmlmeVN5c2NvbmYobmFtZSwgI25hbWUsIFtdKGxvbmcgdil7cmV0dXJuICh2ID4gMCB8fCB2ID09IC0xKTt9KQorCisjZGVmaW5lIFZFUklGWV9TWVNDT05GX1BPU0lYX1ZFUlNJT04obmFtZSkgXAorICBWZXJpZnlTeXNjb25mKG5hbWUsICNuYW1lLCBbXShsb25nIHYpe3JldHVybiB2ID09IF9QT1NJWF9WRVJTSU9OO30pCisKK3N0YXRpYyB2b2lkIFZlcmlmeVN5c2NvbmYoaW50IG9wdGlvbiwgY29uc3QgY2hhciAqb3B0aW9uX25hbWUsIGJvb2wgKCp2ZXJpZnkpKGxvbmcpKSB7CisgIGVycm5vID0gMDsKKyAgbG9uZyByZXQgPSBzeXNjb25mKG9wdGlvbik7CisgIEVYUEVDVF9UUlVFKDAgPT0gZXJybm8gJiYgdmVyaWZ5KHJldCkpIDw8ICJuYW1lID0gIiA8PCBvcHRpb25fbmFtZSA8PCAiLCByZXQgPSAiCisgICAgICA8PCByZXQgPDwiLCBFcnJvciBNZXNzYWdlOiAiIDw8IHN0cmVycm9yKGVycm5vKTsKK30KKworVEVTVCh1bmlzdGQsIHN5c2NvbmYpIHsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX0FSR19NQVgpOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfQkNfQkFTRV9NQVgpOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfQkNfRElNX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19CQ19TQ0FMRV9NQVgpOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfQ0hJTERfTUFYKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX0NMS19UQ0spOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfQ09MTF9XRUlHSFRTX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lYX1ZFUlNJT04oX1NDX0NQVVRJTUUpOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfRVhQUl9ORVNUX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19MSU5FX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19OR1JPVVBTX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19PUEVOX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19QQVNTX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lYX1ZFUlNJT04oX1NDXzJfQ19CSU5EKTsKKyAgVkVSSUZZX1NZU0NPTkZfTk9UX1NVUFBPUlQoX1NDXzJfRk9SVF9ERVYpOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfMl9GT1JUX1JVTik7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ18yX1VQRSk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19KT0JfQ09OVFJPTCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19TQVZFRF9JRFMpOworICBWRVJJRllfU1lTQ09ORl9QT1NJWF9WRVJTSU9OKF9TQ19WRVJTSU9OKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX1JFX0RVUF9NQVgpOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfU1RSRUFNX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19UWk5BTUVfTUFYKTsKKyAgVmVyaWZ5U3lzY29uZihfU0NfWE9QRU5fVkVSU0lPTiwgIl9TQ19YT1BFTl9WRVJTSU9OIiwgW10obG9uZyB2KXtyZXR1cm4gdiA9PSBfWE9QRU5fVkVSU0lPTjt9KTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX0FURVhJVF9NQVgpOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfSU9WX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19QQUdFU0laRSk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19QQUdFX1NJWkUpOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfWE9QRU5fVU5JWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19BSU9fTElTVElPX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19BSU9fTUFYKTsKKyAgVmVyaWZ5U3lzY29uZihfU0NfQUlPX1BSSU9fREVMVEFfTUFYLCAiX1NDX0FJT19QUklPX0RFTFRBX01BWCIsIFtdKGxvbmcgdil7cmV0dXJuIHYgPj0gMDt9KTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX0RFTEFZVElNRVJfTUFYKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX01RX09QRU5fTUFYKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX01RX1BSSU9fTUFYKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX1JUU0lHX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19TRU1fTlNFTVNfTUFYKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX1NFTV9WQUxVRV9NQVgpOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfVElNRVJfTUFYKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVhfVkVSU0lPTihfU0NfRlNZTkMpOworICBWRVJJRllfU1lTQ09ORl9QT1NJWF9WRVJTSU9OKF9TQ19NQVBQRURfRklMRVMpOworICBWRVJJRllfU1lTQ09ORl9QT1NJWF9WRVJTSU9OKF9TQ19NRU1MT0NLKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVhfVkVSU0lPTihfU0NfTUVNTE9DS19SQU5HRSk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lYX1ZFUlNJT04oX1NDX01FTU9SWV9QUk9URUNUSU9OKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVhfVkVSU0lPTihfU0NfUFJJT1JJVFlfU0NIRURVTElORyk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lYX1ZFUlNJT04oX1NDX1NFTUFQSE9SRVMpOworICBWRVJJRllfU1lTQ09ORl9QT1NJWF9WRVJTSU9OKF9TQ19TWU5DSFJPTklaRURfSU8pOworICBWRVJJRllfU1lTQ09ORl9QT1NJWF9WRVJTSU9OKF9TQ19USU1FUlMpOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfR0VUR1JfUl9TSVpFX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19HRVRQV19SX1NJWkVfTUFYKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX0xPR0lOX05BTUVfTUFYKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMpOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfVEhSRUFEX0tFWVNfTUFYKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX1RIUkVBRF9TVEFDS19NSU4pOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfVEhSRUFEX1RIUkVBRFNfTUFYKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX1RUWV9OQU1FX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lYX1ZFUlNJT04oX1NDX1RIUkVBRFMpOworICBWRVJJRllfU1lTQ09ORl9QT1NJWF9WRVJTSU9OKF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIpOworICBWRVJJRllfU1lTQ09ORl9QT1NJWF9WRVJTSU9OKF9TQ19USFJFQURfQVRUUl9TVEFDS1NJWkUpOworICBWRVJJRllfU1lTQ09ORl9QT1NJWF9WRVJTSU9OKF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORyk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lYX1ZFUlNJT04oX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQpOworICBWRVJJRllfU1lTQ09ORl9QT1NJWF9WRVJTSU9OKF9TQ19USFJFQURfUFJJT19QUk9URUNUKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVhfVkVSU0lPTihfU0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX05QUk9DRVNTT1JTX0NPTkYpOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfTlBST0NFU1NPUlNfT05MTik7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19QSFlTX1BBR0VTKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX0FWUEhZU19QQUdFUyk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lYX1ZFUlNJT04oX1NDX01PTk9UT05JQ19DTE9DSyk7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ18yX1BCUyk7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ18yX1BCU19BQ0NPVU5USU5HKTsKKyAgVkVSSUZZX1NZU0NPTkZfTk9UX1NVUFBPUlQoX1NDXzJfUEJTX0NIRUNLUE9JTlQpOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfMl9QQlNfTE9DQVRFKTsKKyAgVkVSSUZZX1NZU0NPTkZfTk9UX1NVUFBPUlQoX1NDXzJfUEJTX01FU1NBR0UpOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfMl9QQlNfVFJBQ0spOworICBWRVJJRllfU1lTQ09ORl9QT1NJWF9WRVJTSU9OKF9TQ19DTE9DS19TRUxFQ1RJT04pOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfSE9TVF9OQU1FX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lYX1ZFUlNJT04oX1NDX0lQVjYpOworICBWRVJJRllfU1lTQ09ORl9QT1NJWF9WRVJTSU9OKF9TQ19SQVdfU09DS0VUUyk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lYX1ZFUlNJT04oX1NDX1JFQURFUl9XUklURVJfTE9DS1MpOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfUkVHRVhQKTsKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX1NIRUxMKTsKKyAgVkVSSUZZX1NZU0NPTkZfTk9UX1NVUFBPUlQoX1NDX1NQT1JBRElDX1NFUlZFUik7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19TWU1MT09QX01BWCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lYX1ZFUlNJT04oX1NDX1RIUkVBRF9DUFVUSU1FKTsKKyAgVkVSSUZZX1NZU0NPTkZfTk9UX1NVUFBPUlQoX1NDX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIpOworICBWRVJJRllfU1lTQ09ORl9QT1NJWF9WRVJTSU9OKF9TQ19USU1FT1VUUyk7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19UUkFDRSk7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19UUkFDRV9FVkVOVF9GSUxURVIpOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfVFJBQ0VfRVZFTlRfTkFNRV9NQVgpOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfVFJBQ0VfSU5IRVJJVCk7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19UUkFDRV9MT0cpOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfVFJBQ0VfTkFNRV9NQVgpOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfVFJBQ0VfU1lTX01BWCk7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19UUkFDRV9VU0VSX0VWRU5UX01BWCk7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19UWVBFRF9NRU1PUllfT0JKRUNUUyk7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19YT1BFTl9TVFJFQU1TKTsKKworI2lmIGRlZmluZWQoX19MUDY0X18pCisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19WN19JTFAzMl9PRkYzMik7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19WN19JTFAzMl9PRkZCSUcpOworICBWRVJJRllfU1lTQ09ORl9QT1NJVElWRShfU0NfVjdfTFA2NF9PRkY2NCk7CisgIFZFUklGWV9TWVNDT05GX1BPU0lUSVZFKF9TQ19WN19MUEJJR19PRkZCSUcpOworI2Vsc2UKKyAgVkVSSUZZX1NZU0NPTkZfUE9TSVRJVkUoX1NDX1Y3X0lMUDMyX09GRjMyKTsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIC8vIGJpb25pYyBkb2VzIG5vdCBzdXBwb3J0IDY0IGJpdHMgb2ZmX3QgdHlwZSBvbiAzMmJpdCBtYWNoaW5lLgorICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfVjdfSUxQMzJfT0ZGQklHKTsKKyNlbmRpZgorICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfVjdfTFA2NF9PRkY2NCk7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19WN19MUEJJR19PRkZCSUcpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIC8vIFRlc3RzIGNhbiBvbmx5IHJ1biBvbiBiaW9uaWMsIGFzIGJpb25pYyBhbmQgZ2xpYmMgaGF2ZSBkaWZmZXJlbnQgc3VwcG9ydCBmb3IgdGhlc2Ugb3B0aW9ucy4KKyAgLy8gQmVsb3cgb3B0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBvbiBiaW9uaWMgeWV0LgorICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfQURWSVNPUllfSU5GTyk7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19BU1lOQ0hST05PVVNfSU8pOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfQkFSUklFUlMpOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfTUVTU0FHRV9QQVNTSU5HKTsKKyAgVkVSSUZZX1NZU0NPTkZfTk9UX1NVUFBPUlQoX1NDX1BSSU9SSVRJWkVEX0lPKTsKKyAgVkVSSUZZX1NZU0NPTkZfTk9UX1NVUFBPUlQoX1NDX1JFQUxUSU1FX1NJR05BTFMpOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTKTsKKyAgVkVSSUZZX1NZU0NPTkZfTk9UX1NVUFBPUlQoX1NDX1NQQVdOKTsKKyAgVkVSSUZZX1NZU0NPTkZfTk9UX1NVUFBPUlQoX1NDX1NQSU5fTE9DS1MpOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfVEhSRUFEX1BST0NFU1NfU0hBUkVEKTsKKyAgVkVSSUZZX1NZU0NPTkZfTk9UX1NVUFBPUlQoX1NDX1RIUkVBRF9ST0JVU1RfUFJJT19JTkhFUklUKTsKKyAgVkVSSUZZX1NZU0NPTkZfTk9UX1NVUFBPUlQoX1NDX1RIUkVBRF9ST0JVU1RfUFJJT19QUk9URUNUKTsKKworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfMl9DX0RFVik7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ18yX0NIQVJfVEVSTSk7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ18yX0xPQ0FMRURFRik7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ18yX1NXX0RFVik7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ18yX1ZFUlNJT04pOworCisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19YT1BFTl9DUllQVCk7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19YT1BFTl9FTkhfSTE4Tik7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19YT1BFTl9MRUdBQ1kpOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfWE9QRU5fUkVBTFRJTUUpOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUyk7CisgIFZFUklGWV9TWVNDT05GX05PVF9TVVBQT1JUKF9TQ19YT1BFTl9TSE0pOworICBWRVJJRllfU1lTQ09ORl9OT1RfU1VQUE9SVChfU0NfWE9QRU5fVVVDUCk7CisjZW5kaWYgLy8gZGVmaW5lZChfX0JJT05JQ19fKQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvd2NoYXJfdGVzdC5jcHAgYi90ZXN0cy93Y2hhcl90ZXN0LmNwcAppbmRleCBkMDJjNGJmLi42M2YzNzYwIDEwMDY0NAotLS0gYS90ZXN0cy93Y2hhcl90ZXN0LmNwcAorKysgYi90ZXN0cy93Y2hhcl90ZXN0LmNwcApAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHdjaGFyLmg+CiAKKyNkZWZpbmUgTlVNX1dDSEFSUyhudW1fYnl0ZXMpIChudW1fYnl0ZXMvc2l6ZW9mKHdjaGFyX3QpKQorCiBURVNUKHdjaGFyLCBzaXplb2Zfd2NoYXJfdCkgewogICBFWFBFQ1RfRVEoNFUsIHNpemVvZih3Y2hhcl90KSk7CiAgIEVYUEVDVF9FUSg0VSwgc2l6ZW9mKHdpbnRfdCkpOwpAQCAtMzQzLDcgKzM0NSw3IEBACiAgIC8vIENoZWNrIHRoYXQgdmFsaWQgaGFzIGFkdmFuY2VkIHRvIHRoZSBuZXh0IHVucmVhZCBjaGFyYWN0ZXIuCiAgIEFTU0VSVF9FUSgnZScsICp2YWxpZCk7CiAKLSAgd21lbXNldChvdXQsIEwneCcsIHNpemVvZihvdXQpIC8gc2l6ZW9mKHdjaGFyX3QpKTsKKyAgd21lbXNldChvdXQsIEwneCcsIE5VTV9XQ0hBUlMoc2l6ZW9mKG91dCkpKTsKICAgQVNTRVJUX0VRKDJVLCBtYnNydG93Y3Mob3V0LCAmdmFsaWQsIDQsIHBzKSk7CiAgIEFTU0VSVF9FUShMJ2UnLCBvdXRbMF0pOwogICBBU1NFUlRfRVEoTCdmJywgb3V0WzFdKTsKQEAgLTQ1MCwxNyArNDUyLDg1IEBACiAgIEVYUEVDVF9TVFJFUShMIlN1biBNYXIgMTAgMDA6MDA6MDAgMjEwMCIsIGJ1Zik7CiB9CiAKLVRFU1Qod2NoYXIsIHdtZW1tb3ZlKSB7CitURVNUKHdjaGFyLCB3bWVtbW92ZV9zbW9rZSkgewogICBjb25zdCB3Y2hhcl90IGNvbnN0X3dzdHJbXSA9IEwiVGhpcyBpcyBhIHRlc3Qgb2Ygc29tZXRoaW5nIG9yIG90aGVyLi4uLi4iOwotICB3Y2hhcl90KiB3c3RyID0gbmV3IHdjaGFyX3Rbc2l6ZW9mKGNvbnN0X3dzdHIpXTsKKyAgd2NoYXJfdCB3c3RyW05VTV9XQ0hBUlMoc2l6ZW9mKGNvbnN0X3dzdHIpKV07CiAKLSAgd21lbW1vdmUod3N0ciwgY29uc3Rfd3N0ciwgc2l6ZW9mKGNvbnN0X3dzdHIpL3NpemVvZih3Y2hhcl90KSk7CisgIEVYUEVDVF9FUSh3c3RyLCB3bWVtbW92ZSh3c3RyLCBjb25zdF93c3RyLCBOVU1fV0NIQVJTKHNpemVvZihjb25zdF93c3RyKSkpKTsKICAgRVhQRUNUX1NUUkVRKGNvbnN0X3dzdHIsIHdzdHIpOwogCi0gIHdtZW1tb3ZlKHdzdHIrNSwgd3N0ciwgc2l6ZW9mKGNvbnN0X3dzdHIpL3NpemVvZih3Y2hhcl90KSAtIDYpOworICBFWFBFQ1RfRVEod3N0cis1LCB3bWVtbW92ZSh3c3RyKzUsIHdzdHIsIE5VTV9XQ0hBUlMoc2l6ZW9mKGNvbnN0X3dzdHIpKSAtIDYpKTsKICAgRVhQRUNUX1NUUkVRKEwiVGhpcyBUaGlzIGlzIGEgdGVzdCBvZiBzb21ldGhpbmcgb3Igb3RoZXIiLCB3c3RyKTsKIH0KIAorVEVTVCh3Y2hhciwgd21lbWNweV9zbW9rZSkgeworICBjb25zdCB3Y2hhcl90IHNyY1tdID0gTCJTb3VyY2Ugc3RyaW5nIjsKKyAgd2NoYXJfdCBkc3RbTlVNX1dDSEFSUyhzaXplb2Yoc3JjKSldOworCisgIEVYUEVDVF9FUShkc3QsIHdtZW1jcHkoZHN0LCBzcmMsIE5VTV9XQ0hBUlMoc2l6ZW9mKHNyYykpKSk7CisgIEVYUEVDVF9TVFJFUShkc3QsIHNyYyk7Cit9CisKK1RFU1Qod2NoYXIsIHdjcGNweV9zbW9rZSkgeworICBjb25zdCB3Y2hhcl90IHNyY1tdID0gTCJTb3VyY2Ugc3RyaW5nIjsKKyAgd2NoYXJfdCBkc3RbTlVNX1dDSEFSUyhzaXplb2Yoc3JjKSldOworCisgIEVYUEVDVF9FUShkc3QgKyBOVU1fV0NIQVJTKHNpemVvZihzcmMpKSAtIDEsIHdjcGNweShkc3QsIHNyYykpOworICBFWFBFQ1RfU1RSRVEoZHN0LCBzcmMpOworfQorCitURVNUKHdjaGFyLCB3Y3BuY3B5X3Ntb2tlKSB7CisgIGNvbnN0IHdjaGFyX3Qgc3JjW10gPSBMIlNvdXJjZSBzdHJpbmciOworICB3Y2hhcl90IGRzdFtOVU1fV0NIQVJTKHNpemVvZihzcmMpKSArIDVdOworCisgIHNpemVfdCBzcmNfbGVuID0gTlVNX1dDSEFSUyhzaXplb2Yoc3JjKSkgLSAxOworICBFWFBFQ1RfRVEoZHN0ICsgc3JjX2xlbiwgd2NwbmNweShkc3QsIHNyYywgc3JjX2xlbiArIDEpKTsKKyAgRVhQRUNUX1NUUkVRKGRzdCwgc3JjKTsKKworICBFWFBFQ1RfRVEoZHN0ICsgNiwgd2NwbmNweShkc3QsIHNyYywgNikpOworICBkc3RbNl0gPSBMJ1wwJzsKKyAgRVhQRUNUX1NUUkVRKGRzdCwgTCJTb3VyY2UiKTsKKworICB3bWVtc2V0KGRzdCwgTCd4JywgTlVNX1dDSEFSUyhzaXplb2YoZHN0KSkpOworICBFWFBFQ1RfRVEoZHN0ICsgc3JjX2xlbiwgd2NwbmNweShkc3QsIHNyYywgc3JjX2xlbiArIDQpKTsKKyAgRVhQRUNUX1NUUkVRKGRzdCwgc3JjKTsKKyAgRVhQRUNUX0VRKGRzdFtzcmNfbGVuXSwgTCdcMCcpOworICBFWFBFQ1RfRVEoZHN0W3NyY19sZW4rMV0sIEwnXDAnKTsKKyAgRVhQRUNUX0VRKGRzdFtzcmNfbGVuKzJdLCBMJ1wwJyk7CisgIEVYUEVDVF9FUShkc3Rbc3JjX2xlbiszXSwgTCdcMCcpOworICBFWFBFQ1RfRVEoZHN0W3NyY19sZW4rNF0sIEwneCcpOworfQorCitURVNUKHdjaGFyLCB3Y3NjcHlfc21va2UpIHsKKyAgY29uc3Qgd2NoYXJfdCBzcmNbXSA9IEwiU291cmNlIHN0cmluZyI7CisgIHdjaGFyX3QgZHN0W05VTV9XQ0hBUlMoc2l6ZW9mKHNyYykpXTsKKworICBFWFBFQ1RfRVEoZHN0LCB3Y3NjcHkoZHN0LCBzcmMpKTsKKyAgRVhQRUNUX1NUUkVRKHNyYywgZHN0KTsKK30KKworVEVTVCh3Y2hhciwgd2NzbmNweV9zbW9rZSkgeworICBjb25zdCB3Y2hhcl90IHNyY1tdID0gTCJTb3VyY2Ugc3RyaW5nIjsKKyAgd2NoYXJfdCBkc3RbTlVNX1dDSEFSUyhzaXplb2Yoc3JjKSkgKyA1XTsKKworICBzaXplX3Qgc3JjX2xlbiA9IE5VTV9XQ0hBUlMoc2l6ZW9mKHNyYykpIC0gMTsKKyAgRVhQRUNUX0VRKGRzdCwgd2NzbmNweShkc3QsIHNyYywgc3JjX2xlbiArIDEpKTsKKyAgRVhQRUNUX1NUUkVRKGRzdCwgc3JjKTsKKworICBFWFBFQ1RfRVEoZHN0LCB3Y3NuY3B5KGRzdCwgc3JjLCA2KSk7CisgIGRzdFs2XSA9IEwnXDAnOworICBFWFBFQ1RfU1RSRVEoZHN0LCBMIlNvdXJjZSIpOworCisgIHdtZW1zZXQoZHN0LCBMJ3gnLCBOVU1fV0NIQVJTKHNpemVvZihkc3QpKSk7CisgIEVYUEVDVF9FUShkc3QsIHdjc25jcHkoZHN0LCBzcmMsIHNyY19sZW4gKyA0KSk7CisgIEVYUEVDVF9TVFJFUShkc3QsIHNyYyk7CisgIEVYUEVDVF9FUShkc3Rbc3JjX2xlbl0sIEwnXDAnKTsKKyAgRVhQRUNUX0VRKGRzdFtzcmNfbGVuKzFdLCBMJ1wwJyk7CisgIEVYUEVDVF9FUShkc3Rbc3JjX2xlbisyXSwgTCdcMCcpOworICBFWFBFQ1RfRVEoZHN0W3NyY19sZW4rM10sIEwnXDAnKTsKKyAgRVhQRUNUX0VRKGRzdFtzcmNfbGVuKzRdLCBMJ3gnKTsKK30KKwogVEVTVCh3Y2hhciwgbWJydG93Y18xNTQzOTU1NCkgewogICAvLyBodHRwOi8vYi8xNTQzOTU1NAogICBBU1NFUlRfU1RSRVEoIkMuVVRGLTgiLCBzZXRsb2NhbGUoTENfQ1RZUEUsICJDLlVURi04IikpOwpAQCAtNDg5LDMgKzU1OSwxMDYgQEAKICAgRVhQRUNUX0VRKDRVLCBuKTsKICAgRVhQRUNUX0VRKEwn8KStoicsIHdjKTsKIH0KKworVEVTVCh3Y2hhciwgb3Blbl93bWVtc3RyZWFtKSB7CisgIHdjaGFyX3QqIHAgPSBudWxscHRyOworICBzaXplX3Qgc2l6ZSA9IDA7CisgIEZJTEUqIGZwID0gb3Blbl93bWVtc3RyZWFtKCZwLCAmc2l6ZSk7CisgIEFTU0VSVF9ORShFT0YsIGZwdXR3cyhMImhlbGxvLCB3b3JsZCEiLCBmcCkpOworICBmY2xvc2UoZnApOworCisgIEFTU0VSVF9TVFJFUShMImhlbGxvLCB3b3JsZCEiLCBwKTsKKyAgQVNTRVJUX0VRKHdjc2xlbihMImhlbGxvLCB3b3JsZCEiKSwgc2l6ZSk7CisgIGZyZWUocCk7Cit9CisKK1RFU1Qoc3RkaW8sIG9wZW5fd21lbXN0cmVhbV9FSU5WQUwpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIHdjaGFyX3QqIHA7CisgIHNpemVfdCBzaXplOworCisgIC8vIEludmFsaWQgYnVmZmVyLgorICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUShudWxscHRyLCBvcGVuX3dtZW1zdHJlYW0obnVsbHB0ciwgJnNpemUpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworCisgIC8vIEludmFsaWQgc2l6ZS4KKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEobnVsbHB0ciwgb3Blbl93bWVtc3RyZWFtKCZwLCBudWxscHRyKSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmCit9CisKK1RFU1Qod2NoYXIsIHdjc3RvbF9FSU5WQUwpIHsKKyAgZXJybm8gPSAwOworICB3Y3N0b2woTCIxMjMiLCBOVUxMLCAtMSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgZXJybm8gPSAwOworICB3Y3N0b2woTCIxMjMiLCBOVUxMLCAxKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHdjc3RvbChMIjEyMyIsIE5VTEwsIDM3KTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworfQorCitURVNUKHdjaGFyLCB3Y3N0b2xsX0VJTlZBTCkgeworICBlcnJubyA9IDA7CisgIHdjc3RvbGwoTCIxMjMiLCBOVUxMLCAtMSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgZXJybm8gPSAwOworICB3Y3N0b2xsKEwiMTIzIiwgTlVMTCwgMSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgZXJybm8gPSAwOworICB3Y3N0b2xsKEwiMTIzIiwgTlVMTCwgMzcpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7Cit9CisKK1RFU1Qod2NoYXIsIHdjc3RvdWxfRUlOVkFMKSB7CisgIGVycm5vID0gMDsKKyAgd2NzdG91bChMIjEyMyIsIE5VTEwsIC0xKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHdjc3RvdWwoTCIxMjMiLCBOVUxMLCAxKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHdjc3RvdWwoTCIxMjMiLCBOVUxMLCAzNyk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKK30KKworVEVTVCh3Y2hhciwgd2NzdG91bGxfRUlOVkFMKSB7CisgIGVycm5vID0gMDsKKyAgd2NzdG91bGwoTCIxMjMiLCBOVUxMLCAtMSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgZXJybm8gPSAwOworICB3Y3N0b3VsbChMIjEyMyIsIE5VTEwsIDEpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CisgIGVycm5vID0gMDsKKyAgd2NzdG91bGwoTCIxMjMiLCBOVUxMLCAzNyk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKK30KKworVEVTVCh3Y2hhciwgd2NzdG9sbF9sX0VJTlZBTCkgeworICBlcnJubyA9IDA7CisgIHdjc3RvbGxfbChMIjEyMyIsIE5VTEwsIC0xLCBMQ19HTE9CQUxfTE9DQUxFKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHdjc3RvbGxfbChMIjEyMyIsIE5VTEwsIDEsIExDX0dMT0JBTF9MT0NBTEUpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CisgIGVycm5vID0gMDsKKyAgd2NzdG9sbF9sKEwiMTIzIiwgTlVMTCwgMzcsIExDX0dMT0JBTF9MT0NBTEUpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7Cit9CisKK1RFU1Qod2NoYXIsIHdjc3RvdWxsX2xfRUlOVkFMKSB7CisgIGVycm5vID0gMDsKKyAgd2NzdG91bGxfbChMIjEyMyIsIE5VTEwsIC0xLCBMQ19HTE9CQUxfTE9DQUxFKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHdjc3RvdWxsX2woTCIxMjMiLCBOVUxMLCAxLCBMQ19HTE9CQUxfTE9DQUxFKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHdjc3RvdWxsX2woTCIxMjMiLCBOVUxMLCAzNywgTENfR0xPQkFMX0xPQ0FMRSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKK30K