IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgTWFyY2gsIE1heSwgSnVuZSAyMDEwCiMKIyBUaGUgbW9kdWxlIGltcGxlbWVudHMgIjQtYml0IiBHQ00gR0hBU0ggZnVuY3Rpb24gYW5kIHVuZGVybHlpbmcKIyBzaW5nbGUgbXVsdGlwbGljYXRpb24gb3BlcmF0aW9uIGluIEdGKDJeMTI4KS4gIjQtYml0IiBtZWFucyB0aGF0IGl0CiMgdXNlcyAyNTYgYnl0ZXMgcGVyLWtleSB0YWJsZSBbKzY0LzEyOCBieXRlcyBmaXhlZCB0YWJsZV0uIEl0IGhhcyB0d28KIyBjb2RlIHBhdGhzOiB2YW5pbGxhIHg4NiBhbmQgdmFuaWxsYSBTU0UuIEZvcm1lciB3aWxsIGJlIGV4ZWN1dGVkIG9uCiMgNDg2IGFuZCBQZW50aXVtLCBsYXR0ZXIgb24gYWxsIG90aGVycy4gU1NFIEdIQVNIIGZlYXR1cmVzIHNvIGNhbGxlZAojICI1MjhCIiB2YXJpYW50IG9mICI0LWJpdCIgbWV0aG9kIHV0aWxpemluZyBhZGRpdGlvbmFsIDI1NisxNiBieXRlcwojIG9mIHBlci1rZXkgc3RvcmFnZSBbKzUxMiBieXRlcyBzaGFyZWQgdGFibGVdLiBQZXJmb3JtYW5jZSByZXN1bHRzCiMgYXJlIGZvciBzdHJlYW1lZCBHSEFTSCBzdWJyb3V0aW5lIGFuZCBhcmUgZXhwcmVzc2VkIGluIGN5Y2xlcyBwZXIKIyBwcm9jZXNzZWQgYnl0ZSwgbGVzcyBpcyBiZXR0ZXI6CiMKIwkJZ2NjIDIuOTUuMygqKQlTU0UgYXNzZW1ibGVyCXg4NiBhc3NlbWJsZXIKIwojIFBlbnRpdW0JMTA1LzExMSgqKikJLQkJNTAKIyBQSUlJCQk2OCAvNzUJCTEyLjIJCTI0CiMgUDQJCTEyNS8xMjUJCTE3LjgJCTg0KCoqKikKIyBPcHRlcm9uCTY2IC83MAkJMTAuMQkJMzAKIyBDb3JlMgkJNTQgLzY3CQk4LjQJCTE4CiMgQXRvbQkJMTA1LzEwNQkJMTYuOAkJNTMKIyBWSUEgTmFubwk2OSAvNzEJCTEzLjAJCTI3CiMKIyAoKikJZ2NjIDMuNC54IHdhcyBvYnNlcnZlZCB0byBnZW5lcmF0ZSBmZXcgcGVyY2VudCBzbG93ZXIgY29kZSwKIwl3aGljaCBpcyBvbmUgb2YgcmVhc29ucyB3aHkgMi45NS4zIHJlc3VsdHMgd2VyZSBjaG9zZW4sCiMJYW5vdGhlciByZWFzb24gaXMgbGFjayBvZiAzLjQueCByZXN1bHRzIGZvciBvbGRlciBDUFVzOwojCWNvbXBhcmlzb24gd2l0aCBTU0UgcmVzdWx0cyBpcyBub3QgY29tcGxldGVseSBmYWlyLCBiZWNhdXNlIEMKIwlyZXN1bHRzIGFyZSBmb3IgdmFuaWxsYSAiMjU2QiIgaW1wbGVtZW50YXRpb24sIHdoaWxlCiMJYXNzZW1ibGVyIHJlc3VsdHMgYXJlIGZvciAiNTI4QiI7LSkKIyAoKiopCXNlY29uZCBudW1iZXIgaXMgcmVzdWx0IGZvciBjb2RlIGNvbXBpbGVkIHdpdGggLWZQSUMgZmxhZywKIwl3aGljaCBpcyBhY3R1YWxseSBtb3JlIHJlbGV2YW50LCBiZWNhdXNlIGFzc2VtYmxlciBjb2RlIGlzCiMJcG9zaXRpb24taW5kZXBlbmRlbnQ7CiMgKCoqKikJc2VlIGNvbW1lbnQgaW4gbm9uLU1NWCByb3V0aW5lIGZvciBmdXJ0aGVyIGRldGFpbHM7CiMKIyBUbyBzdW1tYXJpemUsIGl0J3MgPjItNSB0aW1lcyBmYXN0ZXIgdGhhbiBnY2MtZ2VuZXJhdGVkIGNvZGUuIFRvCiMgYW5jaG9yIGl0IHRvIHNvbWV0aGluZyBlbHNlIFNIQTEgYXNzZW1ibGVyIHByb2Nlc3NlcyBvbmUgYnl0ZSBpbgojIH43IGN5Y2xlcyBvbiBjb250ZW1wb3JhcnkgeDg2IGNvcmVzLiBBcyBmb3IgY2hvaWNlIG9mIE1NWC9TU0UKIyBpbiBwYXJ0aWN1bGFyLCBzZWUgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLi4uCgojIE1heSAyMDEwCiMKIyBBZGQgUENMTVVMUURRIHZlcnNpb24gcGVyZm9ybWluZyBhdCAyLjEwIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUuCiMgVGhlIHF1ZXN0aW9uIGlzIGhvdyBjbG9zZSBpcyBpdCB0byB0aGVvcmV0aWNhbCBsaW1pdD8gVGhlIHBjbG11bHFkcQojIGluc3RydWN0aW9uIGxhdGVuY3kgYXBwZWFycyB0byBiZSAxNCBjeWNsZXMgYW5kIHRoZXJlIGNhbid0IGJlIG1vcmUKIyB0aGFuIDIgb2YgdGhlbSBleGVjdXRpbmcgYXQgYW55IGdpdmVuIHRpbWUuIFRoaXMgbWVhbnMgdGhhdCBzaW5nbGUKIyBLYXJhdHN1YmEgbXVsdGlwbGljYXRpb24gd291bGQgdGFrZSAyOCBjeWNsZXMgKnBsdXMqIGZldyBjeWNsZXMgZm9yCiMgcHJlLSBhbmQgcG9zdC1wcm9jZXNzaW5nLiBUaGVuIG11bHRpcGxpY2F0aW9uIGhhcyB0byBiZSBmb2xsb3dlZCBieQojIG1vZHVsby1yZWR1Y3Rpb24uIEdpdmVuIHRoYXQgYWdncmVnYXRlZCByZWR1Y3Rpb24gbWV0aG9kIFtzZWUKIyAiQ2FycnktbGVzcyBNdWx0aXBsaWNhdGlvbiBhbmQgSXRzIFVzYWdlIGZvciBDb21wdXRpbmcgdGhlIEdDTSBNb2RlIgojIHdoaXRlIHBhcGVyIGJ5IEludGVsXSBhbGxvd3MgeW91IHRvIHBlcmZvcm0gcmVkdWN0aW9uIG9ubHkgb25jZSBpbgojIGEgd2hpbGUgd2UgY2FuIGFzc3VtZSB0aGF0IGFzeW1wdG90aWMgcGVyZm9ybWFuY2UgY2FuIGJlIGVzdGltYXRlZAojIGFzICgyOCtUbW9kL05hZ2dyKS8xNiwgd2hlcmUgVG1vZCBpcyB0aW1lIHRvIHBlcmZvcm0gcmVkdWN0aW9uCiMgYW5kIE5hZ2dyIGlzIHRoZSBhZ2dyZWdhdGlvbiBmYWN0b3IuCiMKIyBCZWZvcmUgd2UgcHJvY2VlZCB0byB0aGlzIGltcGxlbWVudGF0aW9uIGxldCdzIGhhdmUgY2xvc2VyIGxvb2sgYXQKIyB0aGUgYmVzdC1wZXJmb3JtaW5nIGNvZGUgc3VnZ2VzdGVkIGJ5IEludGVsIGluIHRoZWlyIHdoaXRlIHBhcGVyLgojIEJ5IHRyYWNpbmcgaW50ZXItcmVnaXN0ZXIgZGVwZW5kZW5jaWVzIFRtb2QgaXMgZXN0aW1hdGVkIGFzIH4xOQojIGN5Y2xlcyBhbmQgTmFnZ3IgY2hvc2VuIGJ5IEludGVsIGlzIDQsIHJlc3VsdGluZyBpbiAyLjA1IGN5Y2xlcyBwZXIKIyBwcm9jZXNzZWQgYnl0ZS4gQXMgaW1wbGllZCwgdGhpcyBpcyBxdWl0ZSBvcHRpbWlzdGljIGVzdGltYXRlLAojIGJlY2F1c2UgaXQgZG9lcyBub3QgYWNjb3VudCBmb3IgS2FyYXRzdWJhIHByZS0gYW5kIHBvc3QtcHJvY2Vzc2luZywKIyB3aGljaCBmb3IgYSBzaW5nbGUgbXVsdGlwbGljYXRpb24gaXMgfjUgY3ljbGVzLiBVbmZvcnR1bmF0ZWx5IEludGVsCiMgZG9lcyBub3QgcHJvdmlkZSBwZXJmb3JtYW5jZSBkYXRhIGZvciBHSEFTSCBhbG9uZS4gQnV0IGJlbmNobWFya2luZwojIEFFU19HQ01fZW5jcnlwdCByaXBwZWQgb3V0IG9mIEZpZy4gMTUgb2YgdGhlIHdoaXRlIHBhcGVyIHdpdGggYWFkdAojIGFsb25lIHJlc3VsdGVkIGluIDIuNDYgY3ljbGVzIHBlciBieXRlIG9mIG91dCAxNktCIGJ1ZmZlci4gTm90ZSB0aGF0CiMgdGhlIHJlc3VsdCBhY2NvdW50cyBldmVuIGZvciBwcmUtY29tcHV0aW5nIG9mIGRlZ3JlZXMgb2YgdGhlIGhhc2gKIyBrZXkgSCwgYnV0IGl0cyBwb3J0aW9uIGlzIG5lZ2xpZ2libGUgYXQgMTZLQiBidWZmZXIgc2l6ZS4KIwojIE1vdmluZyBvbiB0byB0aGUgaW1wbGVtZW50YXRpb24gaW4gcXVlc3Rpb24uIFRtb2QgaXMgZXN0aW1hdGVkIGFzCiMgfjEzIGN5Y2xlcyBhbmQgTmFnZ3IgaXMgMiwgZ2l2aW5nIGFzeW1wdG90aWMgcGVyZm9ybWFuY2Ugb2YgLi4uCiMgMi4xNi4gSG93IGlzIGl0IHBvc3NpYmxlIHRoYXQgbWVhc3VyZWQgcGVyZm9ybWFuY2UgaXMgYmV0dGVyIHRoYW4KIyBvcHRpbWlzdGljIHRoZW9yZXRpY2FsIGVzdGltYXRlPyBUaGVyZSBpcyBvbmUgdGhpbmcgSW50ZWwgZmFpbGVkCiMgdG8gcmVjb2duaXplLiBCeSBzZXJpYWxpemluZyBHSEFTSCB3aXRoIENUUiBpbiBzYW1lIHN1YnJvdXRpbmUKIyBmb3JtZXIncyBwZXJmb3JtYW5jZSBpcyByZWFsbHkgbGltaXRlZCB0byBhYm92ZSAoVG11bCArIFRtb2QvTmFnZ3IpCiMgZXF1YXRpb24uIEJ1dCBpZiBHSEFTSCBwcm9jZWR1cmUgaXMgZGV0YWNoZWQsIHRoZSBtb2R1bG8tcmVkdWN0aW9uCiMgY2FuIGJlIGludGVybGVhdmVkIHdpdGggTmFnZ3ItMSBtdWx0aXBsaWNhdGlvbnMgYXQgaW5zdHJ1Y3Rpb24gbGV2ZWwKIyBhbmQgdW5kZXIgaWRlYWwgY29uZGl0aW9ucyBldmVuIGRpc2FwcGVhciBmcm9tIHRoZSBlcXVhdGlvbi4gU28gdGhhdAojIG9wdGltaXN0aWMgdGhlb3JldGljYWwgZXN0aW1hdGUgZm9yIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgLi4uCiMgMjgvMTY9MS43NSwgYW5kIG5vdCAyLjE2LiBXZWxsLCBpdCdzIHByb2JhYmx5IHdheSB0b28gb3B0aW1pc3RpYywKIyBhdCBsZWFzdCBmb3Igc3VjaCBzbWFsbCBOYWdnci4gSSdkIGFyZ3VlIHRoYXQgKDI4K1Rwcm9jL05hZ2dyKSwKIyB3aGVyZSBUcHJvYyBpcyB0aW1lIHJlcXVpcmVkIGZvciBLYXJhdHN1YmEgcHJlLSBhbmQgcG9zdC1wcm9jZXNzaW5nLAojIGlzIG1vcmUgcmVhbGlzdGljIGVzdGltYXRlLiBJbiB0aGlzIGNhc2UgaXQgZ2l2ZXMgLi4uIDEuOTEgY3ljbGVzLgojIE9yIGluIG90aGVyIHdvcmRzLCBkZXBlbmRpbmcgb24gaG93IHdlbGwgd2UgY2FuIGludGVybGVhdmUgcmVkdWN0aW9uCiMgYW5kIG9uZSBvZiB0aGUgdHdvIG11bHRpcGxpY2F0aW9ucyB0aGUgcGVyZm9ybWFuY2Ugc2hvdWxkIGJlIGJldHdlbgojIDEuOTEgYW5kIDIuMTYuIEFzIGFscmVhZHkgbWVudGlvbmVkLCB0aGlzIGltcGxlbWVudGF0aW9uIHByb2Nlc3NlcwojIG9uZSBieXRlIG91dCBvZiA4S0IgYnVmZmVyIGluIDIuMTAgY3ljbGVzLCB3aGlsZSB4ODZfNjQgY291bnRlcnBhcnQKIyAtIGluIDIuMDIuIHg4Nl82NCBwZXJmb3JtYW5jZSBpcyBiZXR0ZXIsIGJlY2F1c2UgbGFyZ2VyIHJlZ2lzdGVyCiMgYmFuayBhbGxvd3MgdG8gaW50ZXJsZWF2ZSByZWR1Y3Rpb24gYW5kIG11bHRpcGxpY2F0aW9uIGJldHRlci4KIwojIERvZXMgaXQgbWFrZSBzZW5zZSB0byBpbmNyZWFzZSBOYWdncj8gVG8gc3RhcnQgd2l0aCBpdCdzIHZpcnR1YWxseQojIGltcG9zc2libGUgaW4gMzItYml0IG1vZGUsIGJlY2F1c2Ugb2YgbGltaXRlZCByZWdpc3RlciBiYW5rCiMgY2FwYWNpdHkuIE90aGVyd2lzZSBpbXByb3ZlbWVudCBoYXMgdG8gYmUgd2VpZ2hlZCBhZ2lhaW5zdCBzbG93ZXIKIyBzZXR1cCwgYXMgd2VsbCBhcyBjb2RlIHNpemUgYW5kIGNvbXBsZXhpdHkgaW5jcmVhc2UuIEFzIGV2ZW4KIyBvcHRpbWlzdGljIGVzdGltYXRlIGRvZXNuJ3QgcHJvbWlzZSAzMCUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQsCiMgdGhlcmUgYXJlIGN1cnJlbnRseSBubyBwbGFucyB0byBpbmNyZWFzZSBOYWdnci4KIwojIFNwZWNpYWwgdGhhbmtzIHRvIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4gZm9yCiMgcHJvdmlkaW5nIGFjY2VzcyB0byBhIFdlc3RtZXJlLWJhc2VkIHN5c3RlbSBvbiBiZWhhbGYgb2YgSW50ZWwKIyBPcGVuIFNvdXJjZSBUZWNobm9sb2d5IENlbnRyZS4KCiMgSmFudWFyeSAyMDEwCiMKIyBUd2Vha2VkIHRvIG9wdGltaXplIHRyYW5zaXRpb25zIGJldHdlZW4gaW50ZWdlciBhbmQgRlAgb3BlcmF0aW9ucwojIG9uIHNhbWUgWE1NIHJlZ2lzdGVyLCBQQ0xNVUxRRFEgc3Vicm91dGluZSB3YXMgbWVhc3VyZWQgdG8gcHJvY2VzcwojIG9uZSBieXRlIGluIDIuMDcgY3ljbGVzIG9uIFNhbmR5IEJyaWRnZSwgYW5kIGluIDIuMTIgLSBvbiBXZXN0bWVyZS4KIyBUaGUgbWlub3IgcmVncmVzc2lvbiBvbiBXZXN0bWVyZSBpcyBvdXR3ZWlnaGVkIGJ5IH4xNSUgaW1wcm92ZW1lbnQKIyBvbiBTYW5keSBCcmlkZ2UuIFN0cmFuZ2VseSBlbm91Z2ggYXR0ZW1wdCB0byBtb2RpZnkgNjQtYml0IGNvZGUgaW4KIyBzaW1pbGFyIG1hbm5lciByZXN1bHRlZCBpbiBhbG1vc3QgMjAlIGRlZ3JhZGF0aW9uIG9uIFNhbmR5IEJyaWRnZSwKIyB3aGVyZSBvcmlnaW5hbCA2NC1iaXQgY29kZSBwcm9jZXNzZXMgb25lIGJ5dGUgaW4gMS45NSBjeWNsZXMuCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBGb3IgcmVmZXJlbmNlLCBBTUQgQnVsbGRvemVyIHByb2Nlc3NlcyBvbmUgYnl0ZSBpbiAxLjk4IGN5Y2xlcyBpbgojIDMyLWJpdCBtb2RlIGFuZCAxLjg5IGluIDY0LWJpdC4KCiMgRmVicnVhcnkgMjAxMwojCiMgT3ZlcmhhdWw6IGFnZ3JlZ2F0ZSBLYXJhdHN1YmEgcG9zdC1wcm9jZXNzaW5nLCBpbXByb3ZlIElMUCBpbgojIHJlZHVjdGlvbl9hbGc5LiBSZXN1bHRpbmcgcGVyZm9ybWFuY2UgaXMgMS45NiBjeWNsZXMgcGVyIGJ5dGUgb24KIyBXZXN0bWVyZSwgMS45NSAtIG9uIFNhbmR5L0l2eSBCcmlkZ2UsIDEuNzYgLSBvbiBCdWxsZG96ZXIuCgokMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOwpwdXNoKEBJTkMsIiR7ZGlyfSIsIiR7ZGlyfS4uLy4uL3Blcmxhc20iKTsKcmVxdWlyZSAieDg2YXNtLnBsIjsKCiZhc21faW5pdCgkQVJHVlswXSwiZ2hhc2gteDg2LnBsIiwkeDg2b25seSA9ICRBUkdWWyQjQVJHVl0gZXEgIjM4NiIpOwoKJHNzZTI9MTsKI2ZvciAoQEFSR1YpIHsgJHNzZTI9MSBpZiAoLy1ET1BFTlNTTF9JQTMyX1NTRTIvKTsgfQoKKCRaaGgsJFpobCwkWmxoLCRabGwpID0gKCJlYnAiLCJlZHgiLCJlY3giLCJlYngiKTsKJGlucCAgPSAiZWRpIjsKJEh0YmwgPSAiZXNpIjsKDAokdW5yb2xsID0gMDsJIyBBZmZlY3RzIHg4NiBsb29wLiBGb2xkZWQgbG9vcCBwZXJmb3JtcyB+NyUgd29yc2UKCQkjIHRoYW4gdW5yb2xsZWQsIHdoaWNoIGhhcyB0byBiZSB3ZWlnaHRlZCBhZ2FpbnN0CgkJIyAyLjV4IHg4Ni1zcGVjaWZpYyBjb2RlIHNpemUgcmVkdWN0aW9uLgoKc3ViIHg4Nl9sb29wIHsKICAgIG15ICRvZmYgPSBzaGlmdDsKICAgIG15ICRyZW0gPSAiZWF4IjsKCgkmbW92CSgkWmhoLCZEV1AoNCwkSHRibCwkWmxsKSk7CgkmbW92CSgkWmhsLCZEV1AoMCwkSHRibCwkWmxsKSk7CgkmbW92CSgkWmxoLCZEV1AoMTIsJEh0YmwsJFpsbCkpOwoJJm1vdgkoJFpsbCwmRFdQKDgsJEh0YmwsJFpsbCkpOwoJJnhvcgkoJHJlbSwkcmVtKTsJIyBhdm9pZCBwYXJ0aWFsIHJlZ2lzdGVyIHN0YWxscyBvbiBQSUlJCgoJIyBzaHJkIHByYWN0aWNhbGx5IGtpbGxzIFA0LCAyLjV4IGRldGVyaW9yYXRpb24sIGJ1dCBQNCBoYXMKCSMgTU1YIGNvZGUtcGF0aCB0byBleGVjdXRlLiBzaHJkIHJ1bnMgdGFkIGZhc3RlciBbdGhhbiB0d2ljZQoJIyB0aGUgc2hpZnRzLCBtb3ZlJ3MgYW5kIG9yJ3NdIG9uIHByZS1NTVggUGVudGl1bSAoYXMgd2VsbCBhcwoJIyBQSUlJIGFuZCBDb3JlMiksICpidXQqIG1pbmltaXplcyBjb2RlIHNpemUsIHNwYXJlcyByZWdpc3RlcgoJIyBhbmQgdGh1cyBhbGxvd3MgdG8gZm9sZCB0aGUgbG9vcC4uLgoJaWYgKCEkdW5yb2xsKSB7CglteSAkY250ID0gJGlucDsKCSZtb3YJKCRjbnQsMTUpOwoJJmptcAkoJmxhYmVsKCJ4ODZfbG9vcCIpKTsKCSZzZXRfbGFiZWwoIng4Nl9sb29wIiwxNik7CgkgICAgZm9yKCRpPTE7JGk8PTI7JGkrKykgewoJCSZtb3YJKCZMQigkcmVtKSwmTEIoJFpsbCkpOwoJCSZzaHJkCSgkWmxsLCRabGgsNCk7CgkJJmFuZAkoJkxCKCRyZW0pLDB4Zik7CgkJJnNocmQJKCRabGgsJFpobCw0KTsKCQkmc2hyZAkoJFpobCwkWmhoLDQpOwoJCSZzaHIJKCRaaGgsNCk7CgkJJnhvcgkoJFpoaCwmRFdQKCRvZmYrMTYsImVzcCIsJHJlbSw0KSk7CgoJCSZtb3YJKCZMQigkcmVtKSwmQlAoJG9mZiwiZXNwIiwkY250KSk7CgkJaWYgKCRpJjEpIHsKCQkJJmFuZAkoJkxCKCRyZW0pLDB4ZjApOwoJCX0gZWxzZSB7CgkJCSZzaGwJKCZMQigkcmVtKSw0KTsKCQl9CgoJCSZ4b3IJKCRabGwsJkRXUCg4LCRIdGJsLCRyZW0pKTsKCQkmeG9yCSgkWmxoLCZEV1AoMTIsJEh0YmwsJHJlbSkpOwoJCSZ4b3IJKCRaaGwsJkRXUCgwLCRIdGJsLCRyZW0pKTsKCQkmeG9yCSgkWmhoLCZEV1AoNCwkSHRibCwkcmVtKSk7CgoJCWlmICgkaSYxKSB7CgkJCSZkZWMJKCRjbnQpOwoJCQkmanMJKCZsYWJlbCgieDg2X2JyZWFrIikpOwoJCX0gZWxzZSB7CgkJCSZqbXAJKCZsYWJlbCgieDg2X2xvb3AiKSk7CgkJfQoJICAgIH0KCSZzZXRfbGFiZWwoIng4Nl9icmVhayIsMTYpOwoJfSBlbHNlIHsKCSAgICBmb3IoJGk9MTskaTwzMjskaSsrKSB7CgkJJmNvbW1lbnQoJGkpOwoJCSZtb3YJKCZMQigkcmVtKSwmTEIoJFpsbCkpOwoJCSZzaHJkCSgkWmxsLCRabGgsNCk7CgkJJmFuZAkoJkxCKCRyZW0pLDB4Zik7CgkJJnNocmQJKCRabGgsJFpobCw0KTsKCQkmc2hyZAkoJFpobCwkWmhoLDQpOwoJCSZzaHIJKCRaaGgsNCk7CgkJJnhvcgkoJFpoaCwmRFdQKCRvZmYrMTYsImVzcCIsJHJlbSw0KSk7CgoJCWlmICgkaSYxKSB7CgkJCSZtb3YJKCZMQigkcmVtKSwmQlAoJG9mZisxNS0oJGk+PjEpLCJlc3AiKSk7CgkJCSZhbmQJKCZMQigkcmVtKSwweGYwKTsKCQl9IGVsc2UgewoJCQkmbW92CSgmTEIoJHJlbSksJkJQKCRvZmYrMTUtKCRpPj4xKSwiZXNwIikpOwoJCQkmc2hsCSgmTEIoJHJlbSksNCk7CgkJfQoKCQkmeG9yCSgkWmxsLCZEV1AoOCwkSHRibCwkcmVtKSk7CgkJJnhvcgkoJFpsaCwmRFdQKDEyLCRIdGJsLCRyZW0pKTsKCQkmeG9yCSgkWmhsLCZEV1AoMCwkSHRibCwkcmVtKSk7CgkJJnhvcgkoJFpoaCwmRFdQKDQsJEh0YmwsJHJlbSkpOwoJICAgIH0KCX0KCSZic3dhcAkoJFpsbCk7CgkmYnN3YXAJKCRabGgpOwoJJmJzd2FwCSgkWmhsKTsKCWlmICghJHg4Nm9ubHkpIHsKCQkmYnN3YXAJKCRaaGgpOwoJfSBlbHNlIHsKCQkmbW92CSgiZWF4IiwkWmhoKTsKCQkmYnN3YXAJKCJlYXgiKTsKCQkmbW92CSgkWmhoLCJlYXgiKTsKCX0KfQoKaWYgKCR1bnJvbGwpIHsKICAgICZmdW5jdGlvbl9iZWdpbl9CKCJfeDg2X2dtdWx0XzRiaXRfaW5uZXIiKTsKCSZ4ODZfbG9vcCg0KTsKCSZyZXQJKCk7CiAgICAmZnVuY3Rpb25fZW5kX0IoIl94ODZfZ211bHRfNGJpdF9pbm5lciIpOwp9CgpzdWIgZGVwb3NpdF9yZW1fNGJpdCB7CiAgICBteSAkYmlhcyA9IHNoaWZ0OwoKCSZtb3YJKCZEV1AoJGJpYXMrMCwgImVzcCIpLDB4MDAwMDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcys0LCAiZXNwIiksMHgxQzIwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzgsICJlc3AiKSwweDM4NDA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrMTIsImVzcCIpLDB4MjQ2MDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcysxNiwiZXNwIiksMHg3MDgwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzIwLCJlc3AiKSwweDZDQTA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrMjQsImVzcCIpLDB4NDhDMDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcysyOCwiZXNwIiksMHg1NEUwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzMyLCJlc3AiKSwweEUxMDA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrMzYsImVzcCIpLDB4RkQyMDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcys0MCwiZXNwIiksMHhEOTQwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzQ0LCJlc3AiKSwweEM1NjA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrNDgsImVzcCIpLDB4OTE4MDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcys1MiwiZXNwIiksMHg4REEwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzU2LCJlc3AiKSwweEE5QzA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrNjAsImVzcCIpLDB4QjVFMDw8MTYpOwp9CgwKJHN1ZmZpeCA9ICR4ODZvbmx5ID8gIiIgOiAiX3g4NiI7CgomZnVuY3Rpb25fYmVnaW4oImdjbV9nbXVsdF80Yml0Ii4kc3VmZml4KTsKCSZzdGFja19wdXNoKDE2KzQrMSk7CQkJIyArMSBmb3Igc3RhY2sgYWxpZ25tZW50CgkmbW92CSgkaW5wLCZ3cGFyYW0oMCkpOwkJIyBsb2FkIFhpCgkmbW92CSgkSHRibCwmd3BhcmFtKDEpKTsJCSMgbG9hZCBIdGFibGUKCgkmbW92CSgkWmhoLCZEV1AoMCwkaW5wKSk7CQkjIGxvYWQgWGlbMTZdCgkmbW92CSgkWmhsLCZEV1AoNCwkaW5wKSk7CgkmbW92CSgkWmxoLCZEV1AoOCwkaW5wKSk7CgkmbW92CSgkWmxsLCZEV1AoMTIsJGlucCkpOwoKCSZkZXBvc2l0X3JlbV80Yml0KDE2KTsKCgkmbW92CSgmRFdQKDAsImVzcCIpLCRaaGgpOwkJIyBjb3B5IFhpWzE2XSBvbiBzdGFjawoJJm1vdgkoJkRXUCg0LCJlc3AiKSwkWmhsKTsKCSZtb3YJKCZEV1AoOCwiZXNwIiksJFpsaCk7CgkmbW92CSgmRFdQKDEyLCJlc3AiKSwkWmxsKTsKCSZzaHIJKCRabGwsMjApOwoJJmFuZAkoJFpsbCwweGYwKTsKCglpZiAoJHVucm9sbCkgewoJCSZjYWxsCSgiX3g4Nl9nbXVsdF80Yml0X2lubmVyIik7Cgl9IGVsc2UgewoJCSZ4ODZfbG9vcCgwKTsKCQkmbW92CSgkaW5wLCZ3cGFyYW0oMCkpOwoJfQoKCSZtb3YJKCZEV1AoMTIsJGlucCksJFpsbCk7CgkmbW92CSgmRFdQKDgsJGlucCksJFpsaCk7CgkmbW92CSgmRFdQKDQsJGlucCksJFpobCk7CgkmbW92CSgmRFdQKDAsJGlucCksJFpoaCk7Cgkmc3RhY2tfcG9wKDE2KzQrMSk7CiZmdW5jdGlvbl9lbmQoImdjbV9nbXVsdF80Yml0Ii4kc3VmZml4KTsKCiZmdW5jdGlvbl9iZWdpbigiZ2NtX2doYXNoXzRiaXQiLiRzdWZmaXgpOwoJJnN0YWNrX3B1c2goMTYrNCsxKTsJCQkjICsxIGZvciA2NC1iaXQgYWxpZ25tZW50CgkmbW92CSgkWmxsLCZ3cGFyYW0oMCkpOwkJIyBsb2FkIFhpCgkmbW92CSgkSHRibCwmd3BhcmFtKDEpKTsJCSMgbG9hZCBIdGFibGUKCSZtb3YJKCRpbnAsJndwYXJhbSgyKSk7CQkjIGxvYWQgaW4KCSZtb3YJKCJlY3giLCZ3cGFyYW0oMykpOwkJIyBsb2FkIGxlbgoJJmFkZAkoImVjeCIsJGlucCk7CgkmbW92CSgmd3BhcmFtKDMpLCJlY3giKTsKCgkmbW92CSgkWmhoLCZEV1AoMCwkWmxsKSk7CQkjIGxvYWQgWGlbMTZdCgkmbW92CSgkWmhsLCZEV1AoNCwkWmxsKSk7CgkmbW92CSgkWmxoLCZEV1AoOCwkWmxsKSk7CgkmbW92CSgkWmxsLCZEV1AoMTIsJFpsbCkpOwoKCSZkZXBvc2l0X3JlbV80Yml0KDE2KTsKCiAgICAmc2V0X2xhYmVsKCJ4ODZfb3V0ZXJfbG9vcCIsMTYpOwoJJnhvcgkoJFpsbCwmRFdQKDEyLCRpbnApKTsJCSMgeG9yIHdpdGggaW5wdXQKCSZ4b3IJKCRabGgsJkRXUCg4LCRpbnApKTsKCSZ4b3IJKCRaaGwsJkRXUCg0LCRpbnApKTsKCSZ4b3IJKCRaaGgsJkRXUCgwLCRpbnApKTsKCSZtb3YJKCZEV1AoMTIsImVzcCIpLCRabGwpOwkJIyBkdW1wIGl0IG9uIHN0YWNrCgkmbW92CSgmRFdQKDgsImVzcCIpLCRabGgpOwoJJm1vdgkoJkRXUCg0LCJlc3AiKSwkWmhsKTsKCSZtb3YJKCZEV1AoMCwiZXNwIiksJFpoaCk7CgoJJnNocgkoJFpsbCwyMCk7CgkmYW5kCSgkWmxsLDB4ZjApOwoKCWlmICgkdW5yb2xsKSB7CgkJJmNhbGwJKCJfeDg2X2dtdWx0XzRiaXRfaW5uZXIiKTsKCX0gZWxzZSB7CgkJJng4Nl9sb29wKDApOwoJCSZtb3YJKCRpbnAsJndwYXJhbSgyKSk7Cgl9CgkmbGVhCSgkaW5wLCZEV1AoMTYsJGlucCkpOwoJJmNtcAkoJGlucCwmd3BhcmFtKDMpKTsKCSZtb3YJKCZ3cGFyYW0oMiksJGlucCkJaWYgKCEkdW5yb2xsKTsKCSZqYgkoJmxhYmVsKCJ4ODZfb3V0ZXJfbG9vcCIpKTsKCgkmbW92CSgkaW5wLCZ3cGFyYW0oMCkpOwkjIGxvYWQgWGkKCSZtb3YJKCZEV1AoMTIsJGlucCksJFpsbCk7CgkmbW92CSgmRFdQKDgsJGlucCksJFpsaCk7CgkmbW92CSgmRFdQKDQsJGlucCksJFpobCk7CgkmbW92CSgmRFdQKDAsJGlucCksJFpoaCk7Cgkmc3RhY2tfcG9wKDE2KzQrMSk7CiZmdW5jdGlvbl9lbmQoImdjbV9naGFzaF80Yml0Ii4kc3VmZml4KTsKDAppZiAoISR4ODZvbmx5KSB7e3sKCiZzdGF0aWNfbGFiZWwoInJlbV80Yml0Iik7CgppZiAoISRzc2UyKSB7ewkjIHB1cmUtTU1YICJNYXkiIHZlcnNpb24uLi4KCiRTPTEyOwkJIyBzaGlmdCBmYWN0b3IgZm9yIHJlbV80Yml0CgomZnVuY3Rpb25fYmVnaW5fQigiX21teF9nbXVsdF80Yml0X2lubmVyIik7CiMgTU1YIHZlcnNpb24gcGVyZm9ybXMgMy41IHRpbWVzIGJldHRlciBvbiBQNCAoc2VlIGNvbW1lbnQgaW4gbm9uLU1NWAojIHJvdXRpbmUgZm9yIGZ1cnRoZXIgZGV0YWlscyksIDEwMCUgYmV0dGVyIG9uIE9wdGVyb24sIH43MCUgYmV0dGVyCiMgb24gQ29yZTIgYW5kIFBJSUkuLi4gSW4gb3RoZXIgd29yZHMgZWZmb3J0IGlzIGNvbnNpZGVyZWQgdG8gYmUgd2VsbAojIHNwZW50Li4uIFNpbmNlIGluaXRpYWwgcmVsZWFzZSB0aGUgbG9vcCB3YXMgdW5yb2xsZWQgaW4gb3JkZXIgdG8KIyAibGliZXJhdGUiIHJlZ2lzdGVyIHByZXZpb3VzbHkgdXNlZCBhcyBsb29wIGNvdW50ZXIuIEluc3RlYWQgaXQncwojIHVzZWQgdG8gb3B0aW1pemUgY3JpdGljYWwgcGF0aCBpbiAnWi5oaSBePSByZW1fNGJpdFtaLmxvJjB4Zl0nLgojIFRoZSBwYXRoIGludm9sdmVzIG1vdmUgb2YgWi5sbyBmcm9tIE1NWCB0byBpbnRlZ2VyIHJlZ2lzdGVyLAojIGVmZmVjdGl2ZSBhZGRyZXNzIGNhbGN1bGF0aW9uIGFuZCBmaW5hbGx5IG1lcmdlIG9mIHZhbHVlIHRvIFouaGkuCiMgUmVmZXJlbmNlIHRvIHJlbV80Yml0IGlzIHNjaGVkdWxlZCBzbyBsYXRlIHRoYXQgSSBoYWQgdG8gPj40CiMgcmVtXzRiaXQgZWxlbWVudHMuIFRoaXMgcmVzdWx0ZWQgaW4gMjAtNDUlIHByb2NlbnQgaW1wcm92ZW1lbnQKIyBvbiBjb250ZW1wb3JhcnkgtS1hcmNocy4KewogICAgbXkgJGNudDsKICAgIG15ICRyZW1fNGJpdCA9ICJlYXgiOwogICAgbXkgQHJlbSA9ICgkWmhoLCRabGwpOwogICAgbXkgJG5oaSA9ICRaaGw7CiAgICBteSAkbmxvID0gJFpsaDsKCiAgICBteSAoJFpsbywkWmhpKSA9ICgibW0wIiwibW0xIik7CiAgICBteSAkdG1wID0gIm1tMiI7CgoJJnhvcgkoJG5sbywkbmxvKTsJIyBhdm9pZCBwYXJ0aWFsIHJlZ2lzdGVyIHN0YWxscyBvbiBQSUlJCgkmbW92CSgkbmhpLCRabGwpOwoJJm1vdgkoJkxCKCRubG8pLCZMQigkbmhpKSk7Cgkmc2hsCSgmTEIoJG5sbyksNCk7CgkmYW5kCSgkbmhpLDB4ZjApOwoJJm1vdnEJKCRabG8sJlFXUCg4LCRIdGJsLCRubG8pKTsKCSZtb3ZxCSgkWmhpLCZRV1AoMCwkSHRibCwkbmxvKSk7CgkmbW92ZAkoJHJlbVswXSwkWmxvKTsKCglmb3IgKCRjbnQ9Mjg7JGNudD49LTI7JGNudC0tKSB7CgkgICAgbXkgJG9kZCA9ICRjbnQmMTsKCSAgICBteSAkbml4ID0gJG9kZCA/ICRubG8gOiAkbmhpOwoKCQkmc2hsCSgmTEIoJG5sbyksNCkJCQlpZiAoJG9kZCk7CgkJJnBzcmxxCSgkWmxvLDQpOwoJCSZtb3ZxCSgkdG1wLCRaaGkpOwoJCSZwc3JscQkoJFpoaSw0KTsKCQkmcHhvcgkoJFpsbywmUVdQKDgsJEh0YmwsJG5peCkpOwoJCSZtb3YJKCZMQigkbmxvKSwmQlAoJGNudC8yLCRpbnApKQlpZiAoISRvZGQgJiYgJGNudD49MCk7CgkJJnBzbGxxCSgkdG1wLDYwKTsKCQkmYW5kCSgkbmhpLDB4ZjApCQkJaWYgKCRvZGQpOwoJCSZweG9yCSgkWmhpLCZRV1AoMCwkcmVtXzRiaXQsJHJlbVsxXSw4KSkgaWYgKCRjbnQ8MjgpOwoJCSZhbmQJKCRyZW1bMF0sMHhmKTsKCQkmcHhvcgkoJFpoaSwmUVdQKDAsJEh0YmwsJG5peCkpOwoJCSZtb3YJKCRuaGksJG5sbykJCQlpZiAoISRvZGQgJiYgJGNudD49MCk7CgkJJm1vdmQJKCRyZW1bMV0sJFpsbyk7CgkJJnB4b3IJKCRabG8sJHRtcCk7CgoJCXB1c2gJKEByZW0sc2hpZnQoQHJlbSkpOwkJIyAicm90YXRlIiByZWdpc3RlcnMKCX0KCgkmbW92CSgkaW5wLCZEV1AoNCwkcmVtXzRiaXQsJHJlbVsxXSw4KSk7CSMgbGFzdCByZW1fNGJpdFtyZW1dCgoJJnBzcmxxCSgkWmxvLDMyKTsJIyBsb3dlciBwYXJ0IG9mIFpsbyBpcyBhbHJlYWR5IHRoZXJlCgkmbW92ZAkoJFpobCwkWmhpKTsKCSZwc3JscQkoJFpoaSwzMik7CgkmbW92ZAkoJFpsaCwkWmxvKTsKCSZtb3ZkCSgkWmhoLCRaaGkpOwoJJnNobAkoJGlucCw0KTsJIyBjb21wZW5zYXRlIGZvciByZW1fNGJpdFtpXSBiZWluZyA+PjQKCgkmYnN3YXAJKCRabGwpOwoJJmJzd2FwCSgkWmhsKTsKCSZic3dhcAkoJFpsaCk7CgkmeG9yCSgkWmhoLCRpbnApOwoJJmJzd2FwCSgkWmhoKTsKCgkmcmV0CSgpOwp9CiZmdW5jdGlvbl9lbmRfQigiX21teF9nbXVsdF80Yml0X2lubmVyIik7CgomZnVuY3Rpb25fYmVnaW4oImdjbV9nbXVsdF80Yml0X21teCIpOwoJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsJIyBsb2FkIFhpCgkmbW92CSgkSHRibCwmd3BhcmFtKDEpKTsJIyBsb2FkIEh0YWJsZQoKCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsKCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOwoJJmJsaW5kcG9wKCJlYXgiKTsKCSZsZWEJKCJlYXgiLCZEV1AoJmxhYmVsKCJyZW1fNGJpdCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCJlYXgiKSk7CgoJJm1vdnoJKCRabGwsJkJQKDE1LCRpbnApKTsKCgkmY2FsbAkoIl9tbXhfZ211bHRfNGJpdF9pbm5lciIpOwoKCSZtb3YJKCRpbnAsJndwYXJhbSgwKSk7CSMgbG9hZCBYaQoJJmVtbXMJKCk7CgkmbW92CSgmRFdQKDEyLCRpbnApLCRabGwpOwoJJm1vdgkoJkRXUCg0LCRpbnApLCRaaGwpOwoJJm1vdgkoJkRXUCg4LCRpbnApLCRabGgpOwoJJm1vdgkoJkRXUCgwLCRpbnApLCRaaGgpOwomZnVuY3Rpb25fZW5kKCJnY21fZ211bHRfNGJpdF9tbXgiKTsKDAojIFN0cmVhbWVkIHZlcnNpb24gcGVyZm9ybXMgMjAlIGJldHRlciBvbiBQNCwgNyUgb24gT3B0ZXJvbiwKIyAxMCUgb24gQ29yZTIgYW5kIFBJSUkuLi4KJmZ1bmN0aW9uX2JlZ2luKCJnY21fZ2hhc2hfNGJpdF9tbXgiKTsKCSZtb3YJKCRaaGgsJndwYXJhbSgwKSk7CSMgbG9hZCBYaQoJJm1vdgkoJEh0YmwsJndwYXJhbSgxKSk7CSMgbG9hZCBIdGFibGUKCSZtb3YJKCRpbnAsJndwYXJhbSgyKSk7CSMgbG9hZCBpbgoJJm1vdgkoJFpsaCwmd3BhcmFtKDMpKTsJIyBsb2FkIGxlbgoKCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsKCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOwoJJmJsaW5kcG9wKCJlYXgiKTsKCSZsZWEJKCJlYXgiLCZEV1AoJmxhYmVsKCJyZW1fNGJpdCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCJlYXgiKSk7CgoJJmFkZAkoJFpsaCwkaW5wKTsKCSZtb3YJKCZ3cGFyYW0oMyksJFpsaCk7CSMgbGVuIHRvIHBvaW50IGF0IHRoZSBlbmQgb2YgaW5wdXQKCSZzdGFja19wdXNoKDQrMSk7CQkjICsxIGZvciBzdGFjayBhbGlnbm1lbnQKCgkmbW92CSgkWmxsLCZEV1AoMTIsJFpoaCkpOwkjIGxvYWQgWGlbMTZdCgkmbW92CSgkWmhsLCZEV1AoNCwkWmhoKSk7CgkmbW92CSgkWmxoLCZEV1AoOCwkWmhoKSk7CgkmbW92CSgkWmhoLCZEV1AoMCwkWmhoKSk7Cgkmam1wCSgmbGFiZWwoIm1teF9vdXRlcl9sb29wIikpOwoKICAgICZzZXRfbGFiZWwoIm1teF9vdXRlcl9sb29wIiwxNik7CgkmeG9yCSgkWmxsLCZEV1AoMTIsJGlucCkpOwoJJnhvcgkoJFpobCwmRFdQKDQsJGlucCkpOwoJJnhvcgkoJFpsaCwmRFdQKDgsJGlucCkpOwoJJnhvcgkoJFpoaCwmRFdQKDAsJGlucCkpOwoJJm1vdgkoJndwYXJhbSgyKSwkaW5wKTsKCSZtb3YJKCZEV1AoMTIsImVzcCIpLCRabGwpOwoJJm1vdgkoJkRXUCg0LCJlc3AiKSwkWmhsKTsKCSZtb3YJKCZEV1AoOCwiZXNwIiksJFpsaCk7CgkmbW92CSgmRFdQKDAsImVzcCIpLCRaaGgpOwoKCSZtb3YJKCRpbnAsImVzcCIpOwoJJnNocgkoJFpsbCwyNCk7CgoJJmNhbGwJKCJfbW14X2dtdWx0XzRiaXRfaW5uZXIiKTsKCgkmbW92CSgkaW5wLCZ3cGFyYW0oMikpOwoJJmxlYQkoJGlucCwmRFdQKDE2LCRpbnApKTsKCSZjbXAJKCRpbnAsJndwYXJhbSgzKSk7CgkmamIJKCZsYWJlbCgibW14X291dGVyX2xvb3AiKSk7CgoJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsJIyBsb2FkIFhpCgkmZW1tcwkoKTsKCSZtb3YJKCZEV1AoMTIsJGlucCksJFpsbCk7CgkmbW92CSgmRFdQKDQsJGlucCksJFpobCk7CgkmbW92CSgmRFdQKDgsJGlucCksJFpsaCk7CgkmbW92CSgmRFdQKDAsJGlucCksJFpoaCk7CgoJJnN0YWNrX3BvcCg0KzEpOwomZnVuY3Rpb25fZW5kKCJnY21fZ2hhc2hfNGJpdF9tbXgiKTsKDAp9fSBlbHNlIHt7CSMgIkp1bmUiIE1NWCB2ZXJzaW9uLi4uCgkJIyAuLi4gaGFzIHNsb3dlciAiQXByaWwiIGdjbV9nbXVsdF80Yml0X21teCB3aXRoIGZvbGRlZAoJCSMgbG9vcC4gVGhpcyBpcyBkb25lIHRvIGNvbnNlcnZlIGNvZGUgc2l6ZS4uLgokUz0xNjsJCSMgc2hpZnQgZmFjdG9yIGZvciByZW1fNGJpdAoKc3ViIG1teF9sb29wKCkgewojIE1NWCB2ZXJzaW9uIHBlcmZvcm1zIDIuOCB0aW1lcyBiZXR0ZXIgb24gUDQgKHNlZSBjb21tZW50IGluIG5vbi1NTVgKIyByb3V0aW5lIGZvciBmdXJ0aGVyIGRldGFpbHMpLCA0MCUgYmV0dGVyIG9uIE9wdGVyb24gYW5kIENvcmUyLCA1MCUKIyBiZXR0ZXIgb24gUElJSS4uLiBJbiBvdGhlciB3b3JkcyBlZmZvcnQgaXMgY29uc2lkZXJlZCB0byBiZSB3ZWxsCiMgc3BlbnQuLi4KICAgIG15ICRpbnAgPSBzaGlmdDsKICAgIG15ICRyZW1fNGJpdCA9IHNoaWZ0OwogICAgbXkgJGNudCA9ICRaaGg7CiAgICBteSAkbmhpID0gJFpobDsKICAgIG15ICRubG8gPSAkWmxoOwogICAgbXkgJHJlbSA9ICRabGw7CgogICAgbXkgKCRabG8sJFpoaSkgPSAoIm1tMCIsIm1tMSIpOwogICAgbXkgJHRtcCA9ICJtbTIiOwoKCSZ4b3IJKCRubG8sJG5sbyk7CSMgYXZvaWQgcGFydGlhbCByZWdpc3RlciBzdGFsbHMgb24gUElJSQoJJm1vdgkoJG5oaSwkWmxsKTsKCSZtb3YJKCZMQigkbmxvKSwmTEIoJG5oaSkpOwoJJm1vdgkoJGNudCwxNCk7Cgkmc2hsCSgmTEIoJG5sbyksNCk7CgkmYW5kCSgkbmhpLDB4ZjApOwoJJm1vdnEJKCRabG8sJlFXUCg4LCRIdGJsLCRubG8pKTsKCSZtb3ZxCSgkWmhpLCZRV1AoMCwkSHRibCwkbmxvKSk7CgkmbW92ZAkoJHJlbSwkWmxvKTsKCSZqbXAJKCZsYWJlbCgibW14X2xvb3AiKSk7CgogICAgJnNldF9sYWJlbCgibW14X2xvb3AiLDE2KTsKCSZwc3JscQkoJFpsbyw0KTsKCSZhbmQJKCRyZW0sMHhmKTsKCSZtb3ZxCSgkdG1wLCRaaGkpOwoJJnBzcmxxCSgkWmhpLDQpOwoJJnB4b3IJKCRabG8sJlFXUCg4LCRIdGJsLCRuaGkpKTsKCSZtb3YJKCZMQigkbmxvKSwmQlAoMCwkaW5wLCRjbnQpKTsKCSZwc2xscQkoJHRtcCw2MCk7CgkmcHhvcgkoJFpoaSwmUVdQKDAsJHJlbV80Yml0LCRyZW0sOCkpOwoJJmRlYwkoJGNudCk7CgkmbW92ZAkoJHJlbSwkWmxvKTsKCSZweG9yCSgkWmhpLCZRV1AoMCwkSHRibCwkbmhpKSk7CgkmbW92CSgkbmhpLCRubG8pOwoJJnB4b3IJKCRabG8sJHRtcCk7CgkmanMJKCZsYWJlbCgibW14X2JyZWFrIikpOwoKCSZzaGwJKCZMQigkbmxvKSw0KTsKCSZhbmQJKCRyZW0sMHhmKTsKCSZwc3JscQkoJFpsbyw0KTsKCSZhbmQJKCRuaGksMHhmMCk7CgkmbW92cQkoJHRtcCwkWmhpKTsKCSZwc3JscQkoJFpoaSw0KTsKCSZweG9yCSgkWmxvLCZRV1AoOCwkSHRibCwkbmxvKSk7CgkmcHNsbHEJKCR0bXAsNjApOwoJJnB4b3IJKCRaaGksJlFXUCgwLCRyZW1fNGJpdCwkcmVtLDgpKTsKCSZtb3ZkCSgkcmVtLCRabG8pOwoJJnB4b3IJKCRaaGksJlFXUCgwLCRIdGJsLCRubG8pKTsKCSZweG9yCSgkWmxvLCR0bXApOwoJJmptcAkoJmxhYmVsKCJtbXhfbG9vcCIpKTsKCiAgICAmc2V0X2xhYmVsKCJtbXhfYnJlYWsiLDE2KTsKCSZzaGwJKCZMQigkbmxvKSw0KTsKCSZhbmQJKCRyZW0sMHhmKTsKCSZwc3JscQkoJFpsbyw0KTsKCSZhbmQJKCRuaGksMHhmMCk7CgkmbW92cQkoJHRtcCwkWmhpKTsKCSZwc3JscQkoJFpoaSw0KTsKCSZweG9yCSgkWmxvLCZRV1AoOCwkSHRibCwkbmxvKSk7CgkmcHNsbHEJKCR0bXAsNjApOwoJJnB4b3IJKCRaaGksJlFXUCgwLCRyZW1fNGJpdCwkcmVtLDgpKTsKCSZtb3ZkCSgkcmVtLCRabG8pOwoJJnB4b3IJKCRaaGksJlFXUCgwLCRIdGJsLCRubG8pKTsKCSZweG9yCSgkWmxvLCR0bXApOwoKCSZwc3JscQkoJFpsbyw0KTsKCSZhbmQJKCRyZW0sMHhmKTsKCSZtb3ZxCSgkdG1wLCRaaGkpOwoJJnBzcmxxCSgkWmhpLDQpOwoJJnB4b3IJKCRabG8sJlFXUCg4LCRIdGJsLCRuaGkpKTsKCSZwc2xscQkoJHRtcCw2MCk7CgkmcHhvcgkoJFpoaSwmUVdQKDAsJHJlbV80Yml0LCRyZW0sOCkpOwoJJm1vdmQJKCRyZW0sJFpsbyk7CgkmcHhvcgkoJFpoaSwmUVdQKDAsJEh0YmwsJG5oaSkpOwoJJnB4b3IJKCRabG8sJHRtcCk7CgoJJnBzcmxxCSgkWmxvLDMyKTsJIyBsb3dlciBwYXJ0IG9mIFpsbyBpcyBhbHJlYWR5IHRoZXJlCgkmbW92ZAkoJFpobCwkWmhpKTsKCSZwc3JscQkoJFpoaSwzMik7CgkmbW92ZAkoJFpsaCwkWmxvKTsKCSZtb3ZkCSgkWmhoLCRaaGkpOwoKCSZic3dhcAkoJFpsbCk7CgkmYnN3YXAJKCRaaGwpOwoJJmJzd2FwCSgkWmxoKTsKCSZic3dhcAkoJFpoaCk7Cn0KCiZmdW5jdGlvbl9iZWdpbigiZ2NtX2dtdWx0XzRiaXRfbW14Iik7CgkmbW92CSgkaW5wLCZ3cGFyYW0oMCkpOwkjIGxvYWQgWGkKCSZtb3YJKCRIdGJsLCZ3cGFyYW0oMSkpOwkjIGxvYWQgSHRhYmxlCgoJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOwoJJnNldF9sYWJlbCgicGljX3BvaW50Iik7CgkmYmxpbmRwb3AoImVheCIpOwoJJmxlYQkoImVheCIsJkRXUCgmbGFiZWwoInJlbV80Yml0IikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksImVheCIpKTsKCgkmbW92egkoJFpsbCwmQlAoMTUsJGlucCkpOwoKCSZtbXhfbG9vcCgkaW5wLCJlYXgiKTsKCgkmZW1tcwkoKTsKCSZtb3YJKCZEV1AoMTIsJGlucCksJFpsbCk7CgkmbW92CSgmRFdQKDQsJGlucCksJFpobCk7CgkmbW92CSgmRFdQKDgsJGlucCksJFpsaCk7CgkmbW92CSgmRFdQKDAsJGlucCksJFpoaCk7CiZmdW5jdGlvbl9lbmQoImdjbV9nbXVsdF80Yml0X21teCIpOwoMCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBCZWxvdyBzdWJyb3V0aW5lIGlzICI1MjhCIiB2YXJpYW50IG9mICI0LWJpdCIgR0NNIEdIQVNIIGZ1bmN0aW9uCiMgKHNlZSBnY20xMjguYyBmb3IgZGV0YWlscykuIEl0IHByb3ZpZGVzIGZ1cnRoZXIgMjAtNDAlIHBlcmZvcm1hbmNlCiMgaW1wcm92ZW1lbnQgb3ZlciBhYm92ZSBtZW50aW9uZWQgIk1heSIgdmVyc2lvbi4KCiZzdGF0aWNfbGFiZWwoInJlbV84Yml0Iik7CgomZnVuY3Rpb25fYmVnaW4oImdjbV9naGFzaF80Yml0X21teCIpOwp7IG15ICgkWmxvLCRaaGkpID0gKCJtbTciLCJtbTYiKTsKICBteSAkcmVtXzhiaXQgPSAiZXNpIjsKICBteSAkSHRibCA9ICJlYngiOwoKICAgICMgcGFyYW1ldGVyIGJsb2NrCiAgICAmbW92CSgiZWF4Iiwmd3BhcmFtKDApKTsJCSMgWGkKICAgICZtb3YJKCJlYngiLCZ3cGFyYW0oMSkpOwkJIyBIdGFibGUKICAgICZtb3YJKCJlY3giLCZ3cGFyYW0oMikpOwkJIyBpbnAKICAgICZtb3YJKCJlZHgiLCZ3cGFyYW0oMykpOwkJIyBsZW4KICAgICZtb3YJKCJlYnAiLCJlc3AiKTsJCQkjIG9yaWdpbmFsICVlc3AKICAgICZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsKICAgICZzZXRfbGFiZWwJKCJwaWNfcG9pbnQiKTsKICAgICZibGluZHBvcAkoJHJlbV84Yml0KTsKICAgICZsZWEJKCRyZW1fOGJpdCwmRFdQKCZsYWJlbCgicmVtXzhiaXQiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwkcmVtXzhiaXQpKTsKCiAgICAmc3ViCSgiZXNwIiw1MTIrMTYrMTYpOwkJIyBhbGxvY2F0ZSBzdGFjayBmcmFtZS4uLgogICAgJmFuZAkoImVzcCIsLTY0KTsJCQkjIC4uLmFuZCBhbGlnbiBpdAogICAgJnN1YgkoImVzcCIsMTYpOwkJCSMgcGxhY2UgZm9yICh1OCkoSFtdPDw0KQoKICAgICZhZGQJKCJlZHgiLCJlY3giKTsJCQkjIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiBpbnB1dAogICAgJm1vdgkoJkRXUCg1MjgrMTYrMCwiZXNwIiksImVheCIpOwkjIHNhdmUgWGkKICAgICZtb3YJKCZEV1AoNTI4KzE2KzgsImVzcCIpLCJlZHgiKTsJIyBzYXZlIGlucCtsZW4KICAgICZtb3YJKCZEV1AoNTI4KzE2KzEyLCJlc3AiKSwiZWJwIik7CSMgc2F2ZSBvcmlnaW5hbCAlZXNwCgogICAgeyBteSBAbG8gID0gKCJtbTAiLCJtbTEiLCJtbTIiKTsKICAgICAgbXkgQGhpICA9ICgibW0zIiwibW00IiwibW01Iik7CiAgICAgIG15IEB0bXAgPSAoIm1tNiIsIm1tNyIpOwogICAgICBteSAoJG9mZjEsJG9mZjIsJGkpID0gKDAsMCwpOwoKICAgICAgJmFkZAkoJEh0YmwsMTI4KTsJCQkjIG9wdGltaXplIGZvciBzaXplCiAgICAgICZsZWEJKCJlZGkiLCZEV1AoMTYrMTI4LCJlc3AiKSk7CiAgICAgICZsZWEJKCJlYnAiLCZEV1AoMTYrMjU2KzEyOCwiZXNwIikpOwoKICAgICAgIyBkZWNvbXBvc2UgSHRhYmxlIChsb3cgYW5kIGhpZ2ggcGFydHMgYXJlIGtlcHQgc2VwYXJhdGVseSksCiAgICAgICMgZ2VuZXJhdGUgSHRhYmxlW10+PjQsICh1OCkoSHRhYmxlW108PDQpLCBzYXZlIHRvIHN0YWNrLi4uCiAgICAgIGZvciAoJGk9MDskaTwxODskaSsrKSB7CgoJJm1vdgkoImVkeCIsJkRXUCgxNiokaSs4LTEyOCwkSHRibCkpCQlpZiAoJGk8MTYpOwoJJm1vdnEJKCRsb1swXSwmUVdQKDE2KiRpKzgtMTI4LCRIdGJsKSkJaWYgKCRpPDE2KTsKCSZwc2xscQkoJHRtcFsxXSw2MCkJCQkJaWYgKCRpPjEpOwoJJm1vdnEJKCRoaVswXSwmUVdQKDE2KiRpKzAtMTI4LCRIdGJsKSkJaWYgKCRpPDE2KTsKCSZwb3IJKCRsb1syXSwkdG1wWzFdKQkJCWlmICgkaT4xKTsKCSZtb3ZxCSgmUVdQKCRvZmYxLTEyOCwiZWRpIiksJGxvWzFdKQkJaWYgKCRpPjAgJiYgJGk8MTcpOwoJJnBzcmxxCSgkbG9bMV0sNCkJCQkJaWYgKCRpPjAgJiYgJGk8MTcpOwoJJm1vdnEJKCZRV1AoJG9mZjEsImVkaSIpLCRoaVsxXSkJCWlmICgkaT4wICYmICRpPDE3KTsKCSZtb3ZxCSgkdG1wWzBdLCRoaVsxXSkJCQlpZiAoJGk+MCAmJiAkaTwxNyk7CgkmbW92cQkoJlFXUCgkb2ZmMi0xMjgsImVicCIpLCRsb1syXSkJCWlmICgkaT4xKTsKCSZwc3JscQkoJGhpWzFdLDQpCQkJCWlmICgkaT4wICYmICRpPDE3KTsKCSZtb3ZxCSgmUVdQKCRvZmYyLCJlYnAiKSwkaGlbMl0pCQlpZiAoJGk+MSk7Cgkmc2hsCSgiZWR4Iiw0KQkJCQlpZiAoJGk8MTYpOwoJJm1vdgkoJkJQKCRpLCJlc3AiKSwmTEIoImVkeCIpKQkJaWYgKCRpPDE2KTsKCgl1bnNoaWZ0CShAbG8scG9wKEBsbykpOwkJCSMgInJvdGF0ZSIgcmVnaXN0ZXJzCgl1bnNoaWZ0CShAaGkscG9wKEBoaSkpOwoJdW5zaGlmdAkoQHRtcCxwb3AoQHRtcCkpOwoJJG9mZjEgKz0gOAlpZiAoJGk+MCk7Cgkkb2ZmMiArPSA4CWlmICgkaT4xKTsKICAgICAgfQogICAgfQoKICAgICZtb3ZxCSgkWmhpLCZRV1AoMCwiZWF4IikpOwogICAgJm1vdgkoImVieCIsJkRXUCg4LCJlYXgiKSk7CiAgICAmbW92CSgiZWR4IiwmRFdQKDEyLCJlYXgiKSk7CQkjIGxvYWQgWGkKCiZzZXRfbGFiZWwoIm91dGVyIiwxNik7CiAgeyBteSAkbmxvID0gImVheCI7CiAgICBteSAkZGF0ID0gImVkeCI7CiAgICBteSBAbmhpID0gKCJlZGkiLCJlYnAiKTsKICAgIG15IEByZW0gPSAoImVieCIsImVjeCIpOwogICAgbXkgQHJlZCA9ICgibW0wIiwibW0xIiwibW0yIik7CiAgICBteSAkdG1wID0gIm1tMyI7CgogICAgJnhvcgkoJGRhdCwmRFdQKDEyLCJlY3giKSk7CQkjIG1lcmdlIGlucHV0IGRhdGEKICAgICZ4b3IJKCJlYngiLCZEV1AoOCwiZWN4IikpOwogICAgJnB4b3IJKCRaaGksJlFXUCgwLCJlY3giKSk7CiAgICAmbGVhCSgiZWN4IiwmRFdQKDE2LCJlY3giKSk7CQkjIGlucCs9MTYKICAgICMmbW92CSgmRFdQKDUyOCsxMiwiZXNwIiksJGRhdCk7CSMgc2F2ZSBpbnBeWGkKICAgICZtb3YJKCZEV1AoNTI4KzgsImVzcCIpLCJlYngiKTsKICAgICZtb3ZxCSgmUVdQKDUyOCswLCJlc3AiKSwkWmhpKTsKICAgICZtb3YJKCZEV1AoNTI4KzE2KzQsImVzcCIpLCJlY3giKTsJIyBzYXZlIGlucAoKICAgICZ4b3IJKCRubG8sJG5sbyk7CiAgICAmcm9sCSgkZGF0LDgpOwogICAgJm1vdgkoJkxCKCRubG8pLCZMQigkZGF0KSk7CiAgICAmbW92CSgkbmhpWzFdLCRubG8pOwogICAgJmFuZAkoJkxCKCRubG8pLDB4MGYpOwogICAgJnNocgkoJG5oaVsxXSw0KTsKICAgICZweG9yCSgkcmVkWzBdLCRyZWRbMF0pOwogICAgJnJvbAkoJGRhdCw4KTsJCQkjIG5leHQgYnl0ZQogICAgJnB4b3IJKCRyZWRbMV0sJHJlZFsxXSk7CiAgICAmcHhvcgkoJHJlZFsyXSwkcmVkWzJdKTsKCiAgICAjIEp1c3QgbGlrZSBpbiAiTWF5IiB2ZXJzb24gbW9kdWxvLXNjaGVkdWxlIGZvciBjcml0aWNhbCBwYXRoIGluCiAgICAjICdaLmhpIF49IHJlbV84Yml0W1oubG8mMHhmZl4oKHU4KUhbbmhpXTw8NCldPDw0OCcuIEZpbmFsICdweG9yJwogICAgIyBpcyBzY2hlZHVsZWQgc28gbGF0ZSB0aGF0IHJlbV84Yml0W10gaGFzIHRvIGJlIHNoaWZ0ZWQgKnJpZ2h0KgogICAgIyBieSAxNiwgd2hpY2ggaXMgd2h5IGxhc3QgYXJndW1lbnQgdG8gcGluc3J3IGlzIDIsIHdoaWNoCiAgICAjIGNvcnJlc3BvbmRzIHRvIDw8MzI9PDw0OD4+MTYuLi4KICAgIGZvciAoJGo9MTEsJGk9MDskaTwxNTskaSsrKSB7CgogICAgICBpZiAoJGk+MCkgewoJJnB4b3IJKCRabG8sJlFXUCgxNiwiZXNwIiwkbmxvLDgpKTsJCSMgWl49SFtubG9dCgkmcm9sCSgkZGF0LDgpOwkJCQkjIG5leHQgYnl0ZQoJJnB4b3IJKCRaaGksJlFXUCgxNisxMjgsImVzcCIsJG5sbyw4KSk7CgoJJnB4b3IJKCRabG8sJHRtcCk7CgkmcHhvcgkoJFpoaSwmUVdQKDE2KzI1NisxMjgsImVzcCIsJG5oaVswXSw4KSk7CgkmeG9yCSgmTEIoJHJlbVsxXSksJkJQKDAsImVzcCIsJG5oaVswXSkpOwkjIHJlbV4oSFtuaGldPDw0KQogICAgICB9IGVsc2UgewoJJm1vdnEJKCRabG8sJlFXUCgxNiwiZXNwIiwkbmxvLDgpKTsKCSZtb3ZxCSgkWmhpLCZRV1AoMTYrMTI4LCJlc3AiLCRubG8sOCkpOwogICAgICB9CgoJJm1vdgkoJkxCKCRubG8pLCZMQigkZGF0KSk7CgkmbW92CSgkZGF0LCZEV1AoNTI4KyRqLCJlc3AiKSkJCWlmICgtLSRqJTQ9PTApOwoKCSZtb3ZkCSgkcmVtWzBdLCRabG8pOwoJJm1vdnoJKCRyZW1bMV0sJkxCKCRyZW1bMV0pKQkJCWlmICgkaT4wKTsKCSZwc3JscQkoJFpsbyw4KTsJCQkJIyBaPj49OAoKCSZtb3ZxCSgkdG1wLCRaaGkpOwoJJm1vdgkoJG5oaVswXSwkbmxvKTsKCSZwc3JscQkoJFpoaSw4KTsKCgkmcHhvcgkoJFpsbywmUVdQKDE2KzI1NiswLCJlc3AiLCRuaGlbMV0sOCkpOwkjIFpePUhbbmhpXT4+NAoJJmFuZAkoJkxCKCRubG8pLDB4MGYpOwoJJnBzbGxxCSgkdG1wLDU2KTsKCgkmcHhvcgkoJFpoaSwkcmVkWzFdKQkJCQlpZiAoJGk+MSk7Cgkmc2hyCSgkbmhpWzBdLDQpOwoJJnBpbnNydwkoJHJlZFswXSwmV1AoMCwkcmVtXzhiaXQsJHJlbVsxXSwyKSwyKQlpZiAoJGk+MCk7CgoJdW5zaGlmdAkoQHJlZCxwb3AoQHJlZCkpOwkJCSMgInJvdGF0ZSIgcmVnaXN0ZXJzCgl1bnNoaWZ0CShAcmVtLHBvcChAcmVtKSk7Cgl1bnNoaWZ0CShAbmhpLHBvcChAbmhpKSk7CiAgICB9CgogICAgJnB4b3IJKCRabG8sJlFXUCgxNiwiZXNwIiwkbmxvLDgpKTsJCSMgWl49SFtubG9dCiAgICAmcHhvcgkoJFpoaSwmUVdQKDE2KzEyOCwiZXNwIiwkbmxvLDgpKTsKICAgICZ4b3IJKCZMQigkcmVtWzFdKSwmQlAoMCwiZXNwIiwkbmhpWzBdKSk7CSMgcmVtXihIW25oaV08PDQpCgogICAgJnB4b3IJKCRabG8sJHRtcCk7CiAgICAmcHhvcgkoJFpoaSwmUVdQKDE2KzI1NisxMjgsImVzcCIsJG5oaVswXSw4KSk7CiAgICAmbW92egkoJHJlbVsxXSwmTEIoJHJlbVsxXSkpOwoKICAgICZweG9yCSgkcmVkWzJdLCRyZWRbMl0pOwkJCSMgY2xlYXIgMm5kIHdvcmQKICAgICZwc2xscQkoJHJlZFsxXSw0KTsKCiAgICAmbW92ZAkoJHJlbVswXSwkWmxvKTsKICAgICZwc3JscQkoJFpsbyw0KTsJCQkJIyBaPj49NAoKICAgICZtb3ZxCSgkdG1wLCRaaGkpOwogICAgJnBzcmxxCSgkWmhpLDQpOwogICAgJnNobAkoJHJlbVswXSw0KTsJCQkJIyByZW08PDQKCiAgICAmcHhvcgkoJFpsbywmUVdQKDE2LCJlc3AiLCRuaGlbMV0sOCkpOwkjIFpePUhbbmhpXQogICAgJnBzbGxxCSgkdG1wLDYwKTsKICAgICZtb3Z6CSgkcmVtWzBdLCZMQigkcmVtWzBdKSk7CgogICAgJnB4b3IJKCRabG8sJHRtcCk7CiAgICAmcHhvcgkoJFpoaSwmUVdQKDE2KzEyOCwiZXNwIiwkbmhpWzFdLDgpKTsKCiAgICAmcGluc3J3CSgkcmVkWzBdLCZXUCgwLCRyZW1fOGJpdCwkcmVtWzFdLDIpLDIpOwogICAgJnB4b3IJKCRaaGksJHJlZFsxXSk7CgogICAgJm1vdmQJKCRkYXQsJFpsbyk7CiAgICAmcGluc3J3CSgkcmVkWzJdLCZXUCgwLCRyZW1fOGJpdCwkcmVtWzBdLDIpLDMpOwkjIGxhc3QgaXMgPDw0OAoKICAgICZwc2xscQkoJHJlZFswXSwxMik7CQkJCSMgY29ycmVjdCBieSA8PDE2Pj40CiAgICAmcHhvcgkoJFpoaSwkcmVkWzBdKTsKICAgICZwc3JscQkoJFpsbywzMik7CiAgICAmcHhvcgkoJFpoaSwkcmVkWzJdKTsKCiAgICAmbW92CSgiZWN4IiwmRFdQKDUyOCsxNis0LCJlc3AiKSk7CSMgcmVzdG9yZSBpbnAKICAgICZtb3ZkCSgiZWJ4IiwkWmxvKTsKICAgICZtb3ZxCSgkdG1wLCRaaGkpOwkJCSMgMDEyMzQ1NjcKICAgICZwc2xsdwkoJFpoaSw4KTsJCQkjIDEuMy41LjcuCiAgICAmcHNybHcJKCR0bXAsOCk7CQkJIyAuMC4yLjQuNgogICAgJnBvcgkoJFpoaSwkdG1wKTsJCQkjIDEwMzI1NDc2CiAgICAmYnN3YXAJKCRkYXQpOwogICAgJnBzaHVmdwkoJFpoaSwkWmhpLDBiMDAwMTEwMTEpOwkJIyA3NjU0MzIxMAogICAgJmJzd2FwCSgiZWJ4Iik7CiAgICAKICAgICZjbXAJKCJlY3giLCZEV1AoNTI4KzE2KzgsImVzcCIpKTsJIyBhcmUgd2UgZG9uZT8KICAgICZqbmUJKCZsYWJlbCgib3V0ZXIiKSk7CiAgfQoKICAgICZtb3YJKCJlYXgiLCZEV1AoNTI4KzE2KzAsImVzcCIpKTsJIyByZXN0b3JlIFhpCiAgICAmbW92CSgmRFdQKDEyLCJlYXgiKSwiZWR4Iik7CiAgICAmbW92CSgmRFdQKDgsImVheCIpLCJlYngiKTsKICAgICZtb3ZxCSgmUVdQKDAsImVheCIpLCRaaGkpOwoKICAgICZtb3YJKCJlc3AiLCZEV1AoNTI4KzE2KzEyLCJlc3AiKSk7CSMgcmVzdG9yZSBvcmlnaW5hbCAlZXNwCiAgICAmZW1tcwkoKTsKfQomZnVuY3Rpb25fZW5kKCJnY21fZ2hhc2hfNGJpdF9tbXgiKTsKfX0KDAppZiAoJHNzZTIpIHt7CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBQQ0xNVUxRRFEgdmVyc2lvbi4KCiRYaXA9ImVheCI7CiRIdGJsPSJlZHgiOwokY29uc3Q9ImVjeCI7CiRpbnA9ImVzaSI7CiRsZW49ImVieCI7CgooJFhpLCRYaGkpPSgieG1tMCIsInhtbTEiKTsJJEhrZXk9InhtbTIiOwooJFQxLCRUMiwkVDMpPSgieG1tMyIsInhtbTQiLCJ4bW01Iik7CigkWG4sJFhobik9KCJ4bW02IiwieG1tNyIpOwoKJnN0YXRpY19sYWJlbCgiYnN3YXAiKTsKCnN1YiBjbG11bDY0eDY0X1QyIHsJIyBtaW5pbWFsICJyZWdpc3RlciIgcHJlc3N1cmUKbXkgKCRYaGksJFhpLCRIa2V5LCRISyk9QF87CgoJJm1vdmRxYQkJKCRYaGksJFhpKTsJCSMKCSZwc2h1ZmQJCSgkVDEsJFhpLDBiMDEwMDExMTApOwoJJnBzaHVmZAkJKCRUMiwkSGtleSwwYjAxMDAxMTEwKQlpZiAoIWRlZmluZWQoJEhLKSk7CgkmcHhvcgkJKCRUMSwkWGkpOwkJIwoJJnB4b3IJCSgkVDIsJEhrZXkpCQlpZiAoIWRlZmluZWQoJEhLKSk7CgkJCSRISz0kVDIJCQlpZiAoIWRlZmluZWQoJEhLKSk7CgoJJnBjbG11bHFkcQkoJFhpLCRIa2V5LDB4MDApOwkjIyMjIyMjCgkmcGNsbXVscWRxCSgkWGhpLCRIa2V5LDB4MTEpOwkjIyMjIyMjCgkmcGNsbXVscWRxCSgkVDEsJEhLLDB4MDApOwkJIyMjIyMjIwoJJnhvcnBzCQkoJFQxLCRYaSk7CQkjCgkmeG9ycHMJCSgkVDEsJFhoaSk7CQkjCgoJJm1vdmRxYQkJKCRUMiwkVDEpOwkJIwoJJnBzcmxkcQkJKCRUMSw4KTsKCSZwc2xsZHEJCSgkVDIsOCk7CQkjCgkmcHhvcgkJKCRYaGksJFQxKTsKCSZweG9yCQkoJFhpLCRUMik7CQkjCn0KCnN1YiBjbG11bDY0eDY0X1QzIHsKIyBFdmVuIHRob3VnaCB0aGlzIHN1YnJvdXRpbmUgb2ZmZXJzIHZpc3VhbGx5IGJldHRlciBJTFAsIGl0CiMgd2FzIGVtcGlyaWNhbGx5IGZvdW5kIHRvIGJlIGEgdGFkIHNsb3dlciB0aGFuIGFib3ZlIHZlcnNpb24uCiMgQXQgbGVhc3QgaW4gZ2NtX2doYXNoX2NsbXVsIGNvbnRleHQuIEJ1dCBpdCdzIGp1c3QgYXMgd2VsbCwKIyBiZWNhdXNlIGxvb3AgbW9kdWxvLXNjaGVkdWxpbmcgaXMgcG9zc2libGUgb25seSB0aGFua3MgdG8KIyBtaW5pbWl6ZWQgInJlZ2lzdGVyIiBwcmVzc3VyZS4uLgpteSAoJFhoaSwkWGksJEhrZXkpPUBfOwoKCSZtb3ZkcWEJCSgkVDEsJFhpKTsJCSMKCSZtb3ZkcWEJCSgkWGhpLCRYaSk7CgkmcGNsbXVscWRxCSgkWGksJEhrZXksMHgwMCk7CSMjIyMjIyMKCSZwY2xtdWxxZHEJKCRYaGksJEhrZXksMHgxMSk7CSMjIyMjIyMKCSZwc2h1ZmQJCSgkVDIsJFQxLDBiMDEwMDExMTApOwkjCgkmcHNodWZkCQkoJFQzLCRIa2V5LDBiMDEwMDExMTApOwoJJnB4b3IJCSgkVDIsJFQxKTsJCSMKCSZweG9yCQkoJFQzLCRIa2V5KTsKCSZwY2xtdWxxZHEJKCRUMiwkVDMsMHgwMCk7CQkjIyMjIyMjCgkmcHhvcgkJKCRUMiwkWGkpOwkJIwoJJnB4b3IJCSgkVDIsJFhoaSk7CQkjCgoJJm1vdmRxYQkJKCRUMywkVDIpOwkJIwoJJnBzcmxkcQkJKCRUMiw4KTsKCSZwc2xsZHEJCSgkVDMsOCk7CQkjCgkmcHhvcgkJKCRYaGksJFQyKTsKCSZweG9yCQkoJFhpLCRUMyk7CQkjCn0KDAppZiAoMSkgewkJIyBBbGdvcml0aG0gOSB3aXRoIDw8MSB0d2lzdC4KCQkJIyBSZWR1Y3Rpb24gaXMgc2hvcnRlciBhbmQgdXNlcyBvbmx5IHR3bwoJCQkjIHRlbXBvcmFyeSByZWdpc3RlcnMsIHdoaWNoIG1ha2VzIGl0IGJldHRlcgoJCQkjIGNhbmRpZGF0ZSBmb3IgaW50ZXJsZWF2aW5nIHdpdGggNjR4NjQKCQkJIyBtdWx0aXBsaWNhdGlvbi4gUHJlLW1vZHVsby1zY2hlZHVsZWQgbG9vcAoJCQkjIHdhcyBmb3VuZCB0byBiZSB+MjAlIGZhc3RlciB0aGFuIEFsZ29yaXRobSA1CgkJCSMgYmVsb3cuIEFsZ29yaXRobSA5IHdhcyB0aGVyZWZvcmUgY2hvc2VuIGZvcgoJCQkjIGZ1cnRoZXIgb3B0aW1pemF0aW9uLi4uCgpzdWIgcmVkdWN0aW9uX2FsZzkgewkjIDE3LzExIHRpbWVzIGZhc3RlciB0aGFuIEludGVsIHZlcnNpb24KbXkgKCRYaGksJFhpKSA9IEBfOwoKCSMgMXN0IHBoYXNlCgkmbW92ZHFhCQkoJFQyLCRYaSk7CQkjCgkmbW92ZHFhCQkoJFQxLCRYaSk7CgkmcHNsbHEJCSgkWGksNSk7CgkmcHhvcgkJKCRUMSwkWGkpOwkJIwoJJnBzbGxxCQkoJFhpLDEpOwoJJnB4b3IJCSgkWGksJFQxKTsJCSMKCSZwc2xscQkJKCRYaSw1Nyk7CQkjCgkmbW92ZHFhCQkoJFQxLCRYaSk7CQkjCgkmcHNsbGRxCQkoJFhpLDgpOwoJJnBzcmxkcQkJKCRUMSw4KTsJCSMJCgkmcHhvcgkJKCRYaSwkVDIpOwoJJnB4b3IJCSgkWGhpLCRUMSk7CQkjCgoJIyAybmQgcGhhc2UKCSZtb3ZkcWEJCSgkVDIsJFhpKTsKCSZwc3JscQkJKCRYaSwxKTsKCSZweG9yCQkoJFhoaSwkVDIpOwkJIwoJJnB4b3IJCSgkVDIsJFhpKTsKCSZwc3JscQkJKCRYaSw1KTsKCSZweG9yCQkoJFhpLCRUMik7CQkjCgkmcHNybHEJCSgkWGksMSk7CQkjCgkmcHhvcgkJKCRYaSwkWGhpKQkJIwp9CgomZnVuY3Rpb25fYmVnaW5fQigiZ2NtX2luaXRfY2xtdWwiKTsKCSZtb3YJCSgkSHRibCwmd3BhcmFtKDApKTsKCSZtb3YJCSgkWGlwLCZ3cGFyYW0oMSkpOwoKCSZjYWxsCQkoJmxhYmVsKCJwaWMiKSk7CiZzZXRfbGFiZWwoInBpYyIpOwoJJmJsaW5kcG9wCSgkY29uc3QpOwoJJmxlYQkJKCRjb25zdCwmRFdQKCZsYWJlbCgiYnN3YXAiKS4iLSIuJmxhYmVsKCJwaWMiKSwkY29uc3QpKTsKCgkmbW92ZHF1CQkoJEhrZXksJlFXUCgwLCRYaXApKTsKCSZwc2h1ZmQJCSgkSGtleSwkSGtleSwwYjAxMDAxMTEwKTsjIGR3b3JkIHN3YXAKCgkjIDw8MSB0d2lzdAoJJnBzaHVmZAkJKCRUMiwkSGtleSwwYjExMTExMTExKTsJIyBicm9hZGNhc3QgdXBwZXJtb3N0IGR3b3JkCgkmbW92ZHFhCQkoJFQxLCRIa2V5KTsKCSZwc2xscQkJKCRIa2V5LDEpOwoJJnB4b3IJCSgkVDMsJFQzKTsJCSMKCSZwc3JscQkJKCRUMSw2Myk7CgkmcGNtcGd0ZAkoJFQzLCRUMik7CQkjIGJyb2FkY2FzdCBjYXJyeSBiaXQKCSZwc2xsZHEJCSgkVDEsOCk7CgkmcG9yCQkoJEhrZXksJFQxKTsJCSMgSDw8PTEKCgkjIG1hZ2ljIHJlZHVjdGlvbgoJJnBhbmQJCSgkVDMsJlFXUCgxNiwkY29uc3QpKTsJIyAweDFjMl9wb2x5bm9taWFsCgkmcHhvcgkJKCRIa2V5LCRUMyk7CQkjIGlmKGNhcnJ5KSBIXj0weDFjMl9wb2x5bm9taWFsCgoJIyBjYWxjdWxhdGUgSF4yCgkmbW92ZHFhCQkoJFhpLCRIa2V5KTsKCSZjbG11bDY0eDY0X1QyCSgkWGhpLCRYaSwkSGtleSk7CgkmcmVkdWN0aW9uX2FsZzkJKCRYaGksJFhpKTsKCgkmcHNodWZkCQkoJFQxLCRIa2V5LDBiMDEwMDExMTApOwoJJnBzaHVmZAkJKCRUMiwkWGksMGIwMTAwMTExMCk7CgkmcHhvcgkJKCRUMSwkSGtleSk7CQkjIEthcmF0c3ViYSBwcmUtcHJvY2Vzc2luZwoJJm1vdmRxdQkJKCZRV1AoMCwkSHRibCksJEhrZXkpOwkjIHNhdmUgSAoJJnB4b3IJCSgkVDIsJFhpKTsJCSMgS2FyYXRzdWJhIHByZS1wcm9jZXNzaW5nCgkmbW92ZHF1CQkoJlFXUCgxNiwkSHRibCksJFhpKTsJIyBzYXZlIEheMgoJJnBhbGlnbnIJKCRUMiwkVDEsOCk7CQkjIGxvdyBwYXJ0IGlzIEgubG9eSC5oaQoJJm1vdmRxdQkJKCZRV1AoMzIsJEh0YmwpLCRUMik7CSMgc2F2ZSBLYXJhdHN1YmEgInNhbHQiCgoJJnJldAkJKCk7CiZmdW5jdGlvbl9lbmRfQigiZ2NtX2luaXRfY2xtdWwiKTsKCiZmdW5jdGlvbl9iZWdpbl9CKCJnY21fZ211bHRfY2xtdWwiKTsKCSZtb3YJCSgkWGlwLCZ3cGFyYW0oMCkpOwoJJm1vdgkJKCRIdGJsLCZ3cGFyYW0oMSkpOwoKCSZjYWxsCQkoJmxhYmVsKCJwaWMiKSk7CiZzZXRfbGFiZWwoInBpYyIpOwoJJmJsaW5kcG9wCSgkY29uc3QpOwoJJmxlYQkJKCRjb25zdCwmRFdQKCZsYWJlbCgiYnN3YXAiKS4iLSIuJmxhYmVsKCJwaWMiKSwkY29uc3QpKTsKCgkmbW92ZHF1CQkoJFhpLCZRV1AoMCwkWGlwKSk7CgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKCSZtb3Z1cHMJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsKCSZwc2h1ZmIJCSgkWGksJFQzKTsKCSZtb3Z1cHMJCSgkVDIsJlFXUCgzMiwkSHRibCkpOwoKCSZjbG11bDY0eDY0X1QyCSgkWGhpLCRYaSwkSGtleSwkVDIpOwoJJnJlZHVjdGlvbl9hbGc5CSgkWGhpLCRYaSk7CgoJJnBzaHVmYgkJKCRYaSwkVDMpOwoJJm1vdmRxdQkJKCZRV1AoMCwkWGlwKSwkWGkpOwoKCSZyZXQJKCk7CiZmdW5jdGlvbl9lbmRfQigiZ2NtX2dtdWx0X2NsbXVsIik7CgomZnVuY3Rpb25fYmVnaW4oImdjbV9naGFzaF9jbG11bCIpOwoJJm1vdgkJKCRYaXAsJndwYXJhbSgwKSk7CgkmbW92CQkoJEh0YmwsJndwYXJhbSgxKSk7CgkmbW92CQkoJGlucCwmd3BhcmFtKDIpKTsKCSZtb3YJCSgkbGVuLCZ3cGFyYW0oMykpOwoKCSZjYWxsCQkoJmxhYmVsKCJwaWMiKSk7CiZzZXRfbGFiZWwoInBpYyIpOwoJJmJsaW5kcG9wCSgkY29uc3QpOwoJJmxlYQkJKCRjb25zdCwmRFdQKCZsYWJlbCgiYnN3YXAiKS4iLSIuJmxhYmVsKCJwaWMiKSwkY29uc3QpKTsKCgkmbW92ZHF1CQkoJFhpLCZRV1AoMCwkWGlwKSk7CgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsKCSZwc2h1ZmIJCSgkWGksJFQzKTsKCgkmc3ViCQkoJGxlbiwweDEwKTsKCSZqegkJKCZsYWJlbCgib2RkX3RhaWwiKSk7CgoJIyMjIyMjIwoJIyBYaSsyID1bSCooSWkrMSArIFhpKzEpXSBtb2QgUCA9CgkjCVsoSCpJaSsxKSArIChIKlhpKzEpXSBtb2QgUCA9CgkjCVsoSCpJaSsxKSArIEheMiooSWkrWGkpXSBtb2QgUAoJIwoJJm1vdmRxdQkJKCRUMSwmUVdQKDAsJGlucCkpOwkjIElpCgkmbW92ZHF1CQkoJFhuLCZRV1AoMTYsJGlucCkpOwkjIElpKzEKCSZwc2h1ZmIJCSgkVDEsJFQzKTsKCSZwc2h1ZmIJCSgkWG4sJFQzKTsKCSZtb3ZkcXUJCSgkVDMsJlFXUCgzMiwkSHRibCkpOwoJJnB4b3IJCSgkWGksJFQxKTsJCSMgSWkrWGkKCgkmcHNodWZkCQkoJFQxLCRYbiwwYjAxMDAxMTEwKTsJIyBIKklpKzEKCSZtb3ZkcWEJCSgkWGhuLCRYbik7CgkmcHhvcgkJKCRUMSwkWG4pOwkJIwoKCSZwY2xtdWxxZHEJKCRYbiwkSGtleSwweDAwKTsJIyMjIyMjIwoJJnBjbG11bHFkcQkoJFhobiwkSGtleSwweDExKTsJIyMjIyMjIwoJJm1vdnVwcwkJKCRIa2V5LCZRV1AoMTYsJEh0YmwpKTsJIyBsb2FkIEheMgoJJnBjbG11bHFkcQkoJFQxLCRUMywweDAwKTsJCSMjIyMjIyMKCgkmbGVhCQkoJGlucCwmRFdQKDMyLCRpbnApKTsJIyBpKz0yCgkmc3ViCQkoJGxlbiwweDIwKTsKCSZqYmUJCSgmbGFiZWwoImV2ZW5fdGFpbCIpKTsKCSZqbXAJCSgmbGFiZWwoIm1vZF9sb29wIikpOwoKJnNldF9sYWJlbCgibW9kX2xvb3AiLDMyKTsKCSZwc2h1ZmQJCSgkVDIsJFhpLDBiMDEwMDExMTApOwkjIEheMiooSWkrWGkpCgkmbW92ZHFhCQkoJFhoaSwkWGkpOwoJJnB4b3IJCSgkVDIsJFhpKTsJCSMKCgkmcGNsbXVscWRxCSgkWGksJEhrZXksMHgwMCk7CSMjIyMjIyMKCSZwY2xtdWxxZHEJKCRYaGksJEhrZXksMHgxMSk7CSMjIyMjIyMKCSZtb3Z1cHMJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsJIyBsb2FkIEgKCSZwY2xtdWxxZHEJKCRUMiwkVDMsMHgxMCk7CQkjIyMjIyMjCgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKCgkmeG9ycHMJCSgkWGksJFhuKTsJCSMgKEgqSWkrMSkgKyBIXjIqKElpK1hpKQoJJnhvcnBzCQkoJFhoaSwkWGhuKTsKCSAmbW92ZHF1CSgkWGhuLCZRV1AoMCwkaW5wKSk7CSMgSWkKCSZweG9yCQkoJFQxLCRYaSk7CQkjIGFnZ3JlZ2F0ZWQgS2FyYXRzdWJhIHBvc3QtcHJvY2Vzc2luZwoJICZtb3ZkcXUJKCRYbiwmUVdQKDE2LCRpbnApKTsJIyBJaSsxCgkmcHhvcgkJKCRUMSwkWGhpKTsJCSMKCgkmcHhvcgkJKCRUMiwkVDEpOwkJIwoJICZwc2h1ZmIJKCRYaG4sJFQzKTsKCgkmbW92ZHFhCQkoJFQxLCRUMik7CQkjCgkmcHNybGRxCQkoJFQyLDgpOwoJJnBzbGxkcQkJKCRUMSw4KTsJCSMKCSZweG9yCQkoJFhoaSwkVDIpOwoJJnB4b3IJCSgkWGksJFQxKTsJCSMKCSAmcHNodWZiCSgkWG4sJFQzKTsKCSAmcHhvcgkJKCRYaGksJFhobik7CQkjICJJaStYaSIsIGNvbnN1bWUgZWFybHkKCgkmbW92ZHFhCQkoJFhobiwkWG4pOwkJIyZjbG11bDY0eDY0X1RYCSgkWGhuLCRYbiwkSGtleSk7IEgqSWkrMQoJICAmbW92ZHFhCSgkVDIsJFhpKTsJCSMmcmVkdWN0aW9uX2FsZzkoJFhoaSwkWGkpOyAxc3QgcGhhc2UKCSAgJm1vdmRxYQkoJFQxLCRYaSk7CgkgICZwc2xscQkoJFhpLDUpOwoJICAmcHhvcgkJKCRUMSwkWGkpOwkJIwoJICAmcHNsbHEJKCRYaSwxKTsKCSAgJnB4b3IJCSgkWGksJFQxKTsJCSMKCSZtb3Z1cHMJCSgkVDMsJlFXUCgzMiwkSHRibCkpOwoJJnBjbG11bHFkcQkoJFhuLCRIa2V5LDB4MDApOwkjIyMjIyMjCgkgICZwc2xscQkoJFhpLDU3KTsJCSMKCSAgJm1vdmRxYQkoJFQxLCRYaSk7CQkjCgkgICZwc2xsZHEJKCRYaSw4KTsKCSAgJnBzcmxkcQkoJFQxLDgpOwkJIwkKCSAgJnB4b3IJCSgkWGksJFQyKTsKCSAgJnB4b3IJCSgkWGhpLCRUMSk7CQkjCgkmcHNodWZkCQkoJFQxLCRYaG4sMGIwMTAwMTExMCk7CgkgICZtb3ZkcWEJKCRUMiwkWGkpOwkJIyAybmQgcGhhc2UKCSAgJnBzcmxxCSgkWGksMSk7CgkmcHhvcgkJKCRUMSwkWGhuKTsKCSZwY2xtdWxxZHEJKCRYaG4sJEhrZXksMHgxMSk7CSMjIyMjIyMKCSZtb3Z1cHMJCSgkSGtleSwmUVdQKDE2LCRIdGJsKSk7CSMgbG9hZCBIXjIKCSAgJnB4b3IJCSgkWGhpLCRUMik7CQkjCgkgICZweG9yCQkoJFQyLCRYaSk7CgkgICZwc3JscQkoJFhpLDUpOwoJICAmcHhvcgkJKCRYaSwkVDIpOwkJIwoJICAmcHNybHEJKCRYaSwxKTsJCSMKCSAgJnB4b3IJCSgkWGksJFhoaSkJCSMKCSZwY2xtdWxxZHEJKCRUMSwkVDMsMHgwMCk7CQkjIyMjIyMjCgoJJmxlYQkJKCRpbnAsJkRXUCgzMiwkaW5wKSk7Cgkmc3ViCQkoJGxlbiwweDIwKTsKCSZqYQkJKCZsYWJlbCgibW9kX2xvb3AiKSk7Cgomc2V0X2xhYmVsKCJldmVuX3RhaWwiKTsKCSZwc2h1ZmQJCSgkVDIsJFhpLDBiMDEwMDExMTApOwkjIEheMiooSWkrWGkpCgkmbW92ZHFhCQkoJFhoaSwkWGkpOwoJJnB4b3IJCSgkVDIsJFhpKTsJCSMKCgkmcGNsbXVscWRxCSgkWGksJEhrZXksMHgwMCk7CSMjIyMjIyMKCSZwY2xtdWxxZHEJKCRYaGksJEhrZXksMHgxMSk7CSMjIyMjIyMKCSZwY2xtdWxxZHEJKCRUMiwkVDMsMHgxMCk7CQkjIyMjIyMjCgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKCgkmeG9ycHMJCSgkWGksJFhuKTsJCSMgKEgqSWkrMSkgKyBIXjIqKElpK1hpKQoJJnhvcnBzCQkoJFhoaSwkWGhuKTsKCSZweG9yCQkoJFQxLCRYaSk7CQkjIGFnZ3JlZ2F0ZWQgS2FyYXRzdWJhIHBvc3QtcHJvY2Vzc2luZwoJJnB4b3IJCSgkVDEsJFhoaSk7CQkjCgoJJnB4b3IJCSgkVDIsJFQxKTsJCSMKCgkmbW92ZHFhCQkoJFQxLCRUMik7CQkjCgkmcHNybGRxCQkoJFQyLDgpOwoJJnBzbGxkcQkJKCRUMSw4KTsJCSMKCSZweG9yCQkoJFhoaSwkVDIpOwoJJnB4b3IJCSgkWGksJFQxKTsJCSMKCgkmcmVkdWN0aW9uX2FsZzkJKCRYaGksJFhpKTsKCgkmdGVzdAkJKCRsZW4sJGxlbik7Cgkmam56CQkoJmxhYmVsKCJkb25lIikpOwoKCSZtb3Z1cHMJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsJIyBsb2FkIEgKJnNldF9sYWJlbCgib2RkX3RhaWwiKTsKCSZtb3ZkcXUJCSgkVDEsJlFXUCgwLCRpbnApKTsJIyBJaQoJJnBzaHVmYgkJKCRUMSwkVDMpOwoJJnB4b3IJCSgkWGksJFQxKTsJCSMgSWkrWGkKCgkmY2xtdWw2NHg2NF9UMgkoJFhoaSwkWGksJEhrZXkpOwkjIEgqKElpK1hpKQoJJnJlZHVjdGlvbl9hbGc5CSgkWGhpLCRYaSk7Cgomc2V0X2xhYmVsKCJkb25lIik7CgkmcHNodWZiCQkoJFhpLCRUMyk7CgkmbW92ZHF1CQkoJlFXUCgwLCRYaXApLCRYaSk7CiZmdW5jdGlvbl9lbmQoImdjbV9naGFzaF9jbG11bCIpOwoMCn0gZWxzZSB7CQkjIEFsZ29yaXRoIDUuIEtlcHQgZm9yIHJlZmVyZW5jZSBwdXJwb3Nlcy4KCnN1YiByZWR1Y3Rpb25fYWxnNSB7CSMgMTkvMTYgdGltZXMgZmFzdGVyIHRoYW4gSW50ZWwgdmVyc2lvbgpteSAoJFhoaSwkWGkpPUBfOwoKCSMgPDwxCgkmbW92ZHFhCQkoJFQxLCRYaSk7CQkjCgkmbW92ZHFhCQkoJFQyLCRYaGkpOwoJJnBzbGxkCQkoJFhpLDEpOwoJJnBzbGxkCQkoJFhoaSwxKTsJCSMKCSZwc3JsZAkJKCRUMSwzMSk7CgkmcHNybGQJCSgkVDIsMzEpOwkJIwoJJm1vdmRxYQkJKCRUMywkVDEpOwoJJnBzbGxkcQkJKCRUMSw0KTsKCSZwc3JsZHEJCSgkVDMsMTIpOwkJIwoJJnBzbGxkcQkJKCRUMiw0KTsKCSZwb3IJCSgkWGhpLCRUMyk7CQkjCgkmcG9yCQkoJFhpLCRUMSk7CgkmcG9yCQkoJFhoaSwkVDIpOwkJIwoKCSMgMXN0IHBoYXNlCgkmbW92ZHFhCQkoJFQxLCRYaSk7CgkmbW92ZHFhCQkoJFQyLCRYaSk7CgkmbW92ZHFhCQkoJFQzLCRYaSk7CQkjCgkmcHNsbGQJCSgkVDEsMzEpOwoJJnBzbGxkCQkoJFQyLDMwKTsKCSZwc2xsZAkJKCRYaSwyNSk7CQkjCgkmcHhvcgkJKCRUMSwkVDIpOwoJJnB4b3IJCSgkVDEsJFhpKTsJCSMKCSZtb3ZkcWEJCSgkVDIsJFQxKTsJCSMKCSZwc2xsZHEJCSgkVDEsMTIpOwoJJnBzcmxkcQkJKCRUMiw0KTsJCSMKCSZweG9yCQkoJFQzLCRUMSk7CgoJIyAybmQgcGhhc2UKCSZweG9yCQkoJFhoaSwkVDMpOwkJIwoJJm1vdmRxYQkJKCRYaSwkVDMpOwoJJm1vdmRxYQkJKCRUMSwkVDMpOwoJJnBzcmxkCQkoJFhpLDEpOwkJIwoJJnBzcmxkCQkoJFQxLDIpOwoJJnBzcmxkCQkoJFQzLDcpOwkJIwoJJnB4b3IJCSgkWGksJFQxKTsKCSZweG9yCQkoJFhoaSwkVDIpOwoJJnB4b3IJCSgkWGksJFQzKTsJCSMKCSZweG9yCQkoJFhpLCRYaGkpOwkJIwp9CgomZnVuY3Rpb25fYmVnaW5fQigiZ2NtX2luaXRfY2xtdWwiKTsKCSZtb3YJCSgkSHRibCwmd3BhcmFtKDApKTsKCSZtb3YJCSgkWGlwLCZ3cGFyYW0oMSkpOwoKCSZjYWxsCQkoJmxhYmVsKCJwaWMiKSk7CiZzZXRfbGFiZWwoInBpYyIpOwoJJmJsaW5kcG9wCSgkY29uc3QpOwoJJmxlYQkJKCRjb25zdCwmRFdQKCZsYWJlbCgiYnN3YXAiKS4iLSIuJmxhYmVsKCJwaWMiKSwkY29uc3QpKTsKCgkmbW92ZHF1CQkoJEhrZXksJlFXUCgwLCRYaXApKTsKCSZwc2h1ZmQJCSgkSGtleSwkSGtleSwwYjAxMDAxMTEwKTsjIGR3b3JkIHN3YXAKCgkjIGNhbGN1bGF0ZSBIXjIKCSZtb3ZkcWEJCSgkWGksJEhrZXkpOwoJJmNsbXVsNjR4NjRfVDMJKCRYaGksJFhpLCRIa2V5KTsKCSZyZWR1Y3Rpb25fYWxnNQkoJFhoaSwkWGkpOwoKCSZtb3ZkcXUJCSgmUVdQKDAsJEh0YmwpLCRIa2V5KTsJIyBzYXZlIEgKCSZtb3ZkcXUJCSgmUVdQKDE2LCRIdGJsKSwkWGkpOwkjIHNhdmUgSF4yCgoJJnJldAkJKCk7CiZmdW5jdGlvbl9lbmRfQigiZ2NtX2luaXRfY2xtdWwiKTsKCiZmdW5jdGlvbl9iZWdpbl9CKCJnY21fZ211bHRfY2xtdWwiKTsKCSZtb3YJCSgkWGlwLCZ3cGFyYW0oMCkpOwoJJm1vdgkJKCRIdGJsLCZ3cGFyYW0oMSkpOwoKCSZjYWxsCQkoJmxhYmVsKCJwaWMiKSk7CiZzZXRfbGFiZWwoInBpYyIpOwoJJmJsaW5kcG9wCSgkY29uc3QpOwoJJmxlYQkJKCRjb25zdCwmRFdQKCZsYWJlbCgiYnN3YXAiKS4iLSIuJmxhYmVsKCJwaWMiKSwkY29uc3QpKTsKCgkmbW92ZHF1CQkoJFhpLCZRV1AoMCwkWGlwKSk7CgkmbW92ZHFhCQkoJFhuLCZRV1AoMCwkY29uc3QpKTsKCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsKCSZwc2h1ZmIJCSgkWGksJFhuKTsKCgkmY2xtdWw2NHg2NF9UMwkoJFhoaSwkWGksJEhrZXkpOwoJJnJlZHVjdGlvbl9hbGc1CSgkWGhpLCRYaSk7CgoJJnBzaHVmYgkJKCRYaSwkWG4pOwoJJm1vdmRxdQkJKCZRV1AoMCwkWGlwKSwkWGkpOwoKCSZyZXQJKCk7CiZmdW5jdGlvbl9lbmRfQigiZ2NtX2dtdWx0X2NsbXVsIik7CgomZnVuY3Rpb25fYmVnaW4oImdjbV9naGFzaF9jbG11bCIpOwoJJm1vdgkJKCRYaXAsJndwYXJhbSgwKSk7CgkmbW92CQkoJEh0YmwsJndwYXJhbSgxKSk7CgkmbW92CQkoJGlucCwmd3BhcmFtKDIpKTsKCSZtb3YJCSgkbGVuLCZ3cGFyYW0oMykpOwoKCSZjYWxsCQkoJmxhYmVsKCJwaWMiKSk7CiZzZXRfbGFiZWwoInBpYyIpOwoJJmJsaW5kcG9wCSgkY29uc3QpOwoJJmxlYQkJKCRjb25zdCwmRFdQKCZsYWJlbCgiYnN3YXAiKS4iLSIuJmxhYmVsKCJwaWMiKSwkY29uc3QpKTsKCgkmbW92ZHF1CQkoJFhpLCZRV1AoMCwkWGlwKSk7CgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsKCSZwc2h1ZmIJCSgkWGksJFQzKTsKCgkmc3ViCQkoJGxlbiwweDEwKTsKCSZqegkJKCZsYWJlbCgib2RkX3RhaWwiKSk7CgoJIyMjIyMjIwoJIyBYaSsyID1bSCooSWkrMSArIFhpKzEpXSBtb2QgUCA9CgkjCVsoSCpJaSsxKSArIChIKlhpKzEpXSBtb2QgUCA9CgkjCVsoSCpJaSsxKSArIEheMiooSWkrWGkpXSBtb2QgUAoJIwoJJm1vdmRxdQkJKCRUMSwmUVdQKDAsJGlucCkpOwkjIElpCgkmbW92ZHF1CQkoJFhuLCZRV1AoMTYsJGlucCkpOwkjIElpKzEKCSZwc2h1ZmIJCSgkVDEsJFQzKTsKCSZwc2h1ZmIJCSgkWG4sJFQzKTsKCSZweG9yCQkoJFhpLCRUMSk7CQkjIElpK1hpCgoJJmNsbXVsNjR4NjRfVDMJKCRYaG4sJFhuLCRIa2V5KTsJIyBIKklpKzEKCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDE2LCRIdGJsKSk7CSMgbG9hZCBIXjIKCgkmc3ViCQkoJGxlbiwweDIwKTsKCSZsZWEJCSgkaW5wLCZEV1AoMzIsJGlucCkpOwkjIGkrPTIKCSZqYmUJCSgmbGFiZWwoImV2ZW5fdGFpbCIpKTsKCiZzZXRfbGFiZWwoIm1vZF9sb29wIik7CgkmY2xtdWw2NHg2NF9UMwkoJFhoaSwkWGksJEhrZXkpOwkjIEheMiooSWkrWGkpCgkmbW92ZHF1CQkoJEhrZXksJlFXUCgwLCRIdGJsKSk7CSMgbG9hZCBICgoJJnB4b3IJCSgkWGksJFhuKTsJCSMgKEgqSWkrMSkgKyBIXjIqKElpK1hpKQoJJnB4b3IJCSgkWGhpLCRYaG4pOwoKCSZyZWR1Y3Rpb25fYWxnNQkoJFhoaSwkWGkpOwoKCSMjIyMjIyMKCSZtb3ZkcWEJCSgkVDMsJlFXUCgwLCRjb25zdCkpOwoJJm1vdmRxdQkJKCRUMSwmUVdQKDAsJGlucCkpOwkjIElpCgkmbW92ZHF1CQkoJFhuLCZRV1AoMTYsJGlucCkpOwkjIElpKzEKCSZwc2h1ZmIJCSgkVDEsJFQzKTsKCSZwc2h1ZmIJCSgkWG4sJFQzKTsKCSZweG9yCQkoJFhpLCRUMSk7CQkjIElpK1hpCgoJJmNsbXVsNjR4NjRfVDMJKCRYaG4sJFhuLCRIa2V5KTsJIyBIKklpKzEKCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDE2LCRIdGJsKSk7CSMgbG9hZCBIXjIKCgkmc3ViCQkoJGxlbiwweDIwKTsKCSZsZWEJCSgkaW5wLCZEV1AoMzIsJGlucCkpOwoJJmphCQkoJmxhYmVsKCJtb2RfbG9vcCIpKTsKCiZzZXRfbGFiZWwoImV2ZW5fdGFpbCIpOwoJJmNsbXVsNjR4NjRfVDMJKCRYaGksJFhpLCRIa2V5KTsJIyBIXjIqKElpK1hpKQoKCSZweG9yCQkoJFhpLCRYbik7CQkjIChIKklpKzEpICsgSF4yKihJaStYaSkKCSZweG9yCQkoJFhoaSwkWGhuKTsKCgkmcmVkdWN0aW9uX2FsZzUJKCRYaGksJFhpKTsKCgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKCSZ0ZXN0CQkoJGxlbiwkbGVuKTsKCSZqbnoJCSgmbGFiZWwoImRvbmUiKSk7CgoJJm1vdmRxdQkJKCRIa2V5LCZRV1AoMCwkSHRibCkpOwkjIGxvYWQgSAomc2V0X2xhYmVsKCJvZGRfdGFpbCIpOwoJJm1vdmRxdQkJKCRUMSwmUVdQKDAsJGlucCkpOwkjIElpCgkmcHNodWZiCQkoJFQxLCRUMyk7CgkmcHhvcgkJKCRYaSwkVDEpOwkJIyBJaStYaQoKCSZjbG11bDY0eDY0X1QzCSgkWGhpLCRYaSwkSGtleSk7CSMgSCooSWkrWGkpCgkmcmVkdWN0aW9uX2FsZzUJKCRYaGksJFhpKTsKCgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKJnNldF9sYWJlbCgiZG9uZSIpOwoJJnBzaHVmYgkJKCRYaSwkVDMpOwoJJm1vdmRxdQkJKCZRV1AoMCwkWGlwKSwkWGkpOwomZnVuY3Rpb25fZW5kKCJnY21fZ2hhc2hfY2xtdWwiKTsKCn0KDAomc2V0X2xhYmVsKCJic3dhcCIsNjQpOwoJJmRhdGFfYnl0ZSgxNSwxNCwxMywxMiwxMSwxMCw5LDgsNyw2LDUsNCwzLDIsMSwwKTsKCSZkYXRhX2J5dGUoMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMHhjMik7CSMgMHgxYzJfcG9seW5vbWlhbAomc2V0X2xhYmVsKCJyZW1fOGJpdCIsNjQpOwoJJmRhdGFfc2hvcnQoMHgwMDAwLDB4MDFDMiwweDAzODQsMHgwMjQ2LDB4MDcwOCwweDA2Q0EsMHgwNDhDLDB4MDU0RSk7CgkmZGF0YV9zaG9ydCgweDBFMTAsMHgwRkQyLDB4MEQ5NCwweDBDNTYsMHgwOTE4LDB4MDhEQSwweDBBOUMsMHgwQjVFKTsKCSZkYXRhX3Nob3J0KDB4MUMyMCwweDFERTIsMHgxRkE0LDB4MUU2NiwweDFCMjgsMHgxQUVBLDB4MThBQywweDE5NkUpOwoJJmRhdGFfc2hvcnQoMHgxMjMwLDB4MTNGMiwweDExQjQsMHgxMDc2LDB4MTUzOCwweDE0RkEsMHgxNkJDLDB4MTc3RSk7CgkmZGF0YV9zaG9ydCgweDM4NDAsMHgzOTgyLDB4M0JDNCwweDNBMDYsMHgzRjQ4LDB4M0U4QSwweDNDQ0MsMHgzRDBFKTsKCSZkYXRhX3Nob3J0KDB4MzY1MCwweDM3OTIsMHgzNUQ0LDB4MzQxNiwweDMxNTgsMHgzMDlBLDB4MzJEQywweDMzMUUpOwoJJmRhdGFfc2hvcnQoMHgyNDYwLDB4MjVBMiwweDI3RTQsMHgyNjI2LDB4MjM2OCwweDIyQUEsMHgyMEVDLDB4MjEyRSk7CgkmZGF0YV9zaG9ydCgweDJBNzAsMHgyQkIyLDB4MjlGNCwweDI4MzYsMHgyRDc4LDB4MkNCQSwweDJFRkMsMHgyRjNFKTsKCSZkYXRhX3Nob3J0KDB4NzA4MCwweDcxNDIsMHg3MzA0LDB4NzJDNiwweDc3ODgsMHg3NjRBLDB4NzQwQywweDc1Q0UpOwoJJmRhdGFfc2hvcnQoMHg3RTkwLDB4N0Y1MiwweDdEMTQsMHg3Q0Q2LDB4Nzk5OCwweDc4NUEsMHg3QTFDLDB4N0JERSk7CgkmZGF0YV9zaG9ydCgweDZDQTAsMHg2RDYyLDB4NkYyNCwweDZFRTYsMHg2QkE4LDB4NkE2QSwweDY4MkMsMHg2OUVFKTsKCSZkYXRhX3Nob3J0KDB4NjJCMCwweDYzNzIsMHg2MTM0LDB4NjBGNiwweDY1QjgsMHg2NDdBLDB4NjYzQywweDY3RkUpOwoJJmRhdGFfc2hvcnQoMHg0OEMwLDB4NDkwMiwweDRCNDQsMHg0QTg2LDB4NEZDOCwweDRFMEEsMHg0QzRDLDB4NEQ4RSk7CgkmZGF0YV9zaG9ydCgweDQ2RDAsMHg0NzEyLDB4NDU1NCwweDQ0OTYsMHg0MUQ4LDB4NDAxQSwweDQyNUMsMHg0MzlFKTsKCSZkYXRhX3Nob3J0KDB4NTRFMCwweDU1MjIsMHg1NzY0LDB4NTZBNiwweDUzRTgsMHg1MjJBLDB4NTA2QywweDUxQUUpOwoJJmRhdGFfc2hvcnQoMHg1QUYwLDB4NUIzMiwweDU5NzQsMHg1OEI2LDB4NURGOCwweDVDM0EsMHg1RTdDLDB4NUZCRSk7CgkmZGF0YV9zaG9ydCgweEUxMDAsMHhFMEMyLDB4RTI4NCwweEUzNDYsMHhFNjA4LDB4RTdDQSwweEU1OEMsMHhFNDRFKTsKCSZkYXRhX3Nob3J0KDB4RUYxMCwweEVFRDIsMHhFQzk0LDB4RUQ1NiwweEU4MTgsMHhFOURBLDB4RUI5QywweEVBNUUpOwoJJmRhdGFfc2hvcnQoMHhGRDIwLDB4RkNFMiwweEZFQTQsMHhGRjY2LDB4RkEyOCwweEZCRUEsMHhGOUFDLDB4Rjg2RSk7CgkmZGF0YV9zaG9ydCgweEYzMzAsMHhGMkYyLDB4RjBCNCwweEYxNzYsMHhGNDM4LDB4RjVGQSwweEY3QkMsMHhGNjdFKTsKCSZkYXRhX3Nob3J0KDB4RDk0MCwweEQ4ODIsMHhEQUM0LDB4REIwNiwweERFNDgsMHhERjhBLDB4RERDQywweERDMEUpOwoJJmRhdGFfc2hvcnQoMHhENzUwLDB4RDY5MiwweEQ0RDQsMHhENTE2LDB4RDA1OCwweEQxOUEsMHhEM0RDLDB4RDIxRSk7CgkmZGF0YV9zaG9ydCgweEM1NjAsMHhDNEEyLDB4QzZFNCwweEM3MjYsMHhDMjY4LDB4QzNBQSwweEMxRUMsMHhDMDJFKTsKCSZkYXRhX3Nob3J0KDB4Q0I3MCwweENBQjIsMHhDOEY0LDB4QzkzNiwweENDNzgsMHhDREJBLDB4Q0ZGQywweENFM0UpOwoJJmRhdGFfc2hvcnQoMHg5MTgwLDB4OTA0MiwweDkyMDQsMHg5M0M2LDB4OTY4OCwweDk3NEEsMHg5NTBDLDB4OTRDRSk7CgkmZGF0YV9zaG9ydCgweDlGOTAsMHg5RTUyLDB4OUMxNCwweDlERDYsMHg5ODk4LDB4OTk1QSwweDlCMUMsMHg5QURFKTsKCSZkYXRhX3Nob3J0KDB4OERBMCwweDhDNjIsMHg4RTI0LDB4OEZFNiwweDhBQTgsMHg4QjZBLDB4ODkyQywweDg4RUUpOwoJJmRhdGFfc2hvcnQoMHg4M0IwLDB4ODI3MiwweDgwMzQsMHg4MUY2LDB4ODRCOCwweDg1N0EsMHg4NzNDLDB4ODZGRSk7CgkmZGF0YV9zaG9ydCgweEE5QzAsMHhBODAyLDB4QUE0NCwweEFCODYsMHhBRUM4LDB4QUYwQSwweEFENEMsMHhBQzhFKTsKCSZkYXRhX3Nob3J0KDB4QTdEMCwweEE2MTIsMHhBNDU0LDB4QTU5NiwweEEwRDgsMHhBMTFBLDB4QTM1QywweEEyOUUpOwoJJmRhdGFfc2hvcnQoMHhCNUUwLDB4QjQyMiwweEI2NjQsMHhCN0E2LDB4QjJFOCwweEIzMkEsMHhCMTZDLDB4QjBBRSk7CgkmZGF0YV9zaG9ydCgweEJCRjAsMHhCQTMyLDB4Qjg3NCwweEI5QjYsMHhCQ0Y4LDB4QkQzQSwweEJGN0MsMHhCRUJFKTsKfX0JIyAkc3NlMgoKJnNldF9sYWJlbCgicmVtXzRiaXQiLDY0KTsKCSZkYXRhX3dvcmQoMCwweDAwMDA8PCRTLDAsMHgxQzIwPDwkUywwLDB4Mzg0MDw8JFMsMCwweDI0NjA8PCRTKTsKCSZkYXRhX3dvcmQoMCwweDcwODA8PCRTLDAsMHg2Q0EwPDwkUywwLDB4NDhDMDw8JFMsMCwweDU0RTA8PCRTKTsKCSZkYXRhX3dvcmQoMCwweEUxMDA8PCRTLDAsMHhGRDIwPDwkUywwLDB4RDk0MDw8JFMsMCwweEM1NjA8PCRTKTsKCSZkYXRhX3dvcmQoMCwweDkxODA8PCRTLDAsMHg4REEwPDwkUywwLDB4QTlDMDw8JFMsMCwweEI1RTA8PCRTKTsKfX19CSMgISR4ODZvbmx5CgomYXNjaXooIkdIQVNIIGZvciB4ODYsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iKTsKJmFzbV9maW5pc2goKTsKCiMgQSBxdWVzdGlvbiB3YXMgcmlzZW4gYWJvdXQgY2hvaWNlIG9mIHZhbmlsbGEgTU1YLiBPciByYXRoZXIgd2h5IHdhc24ndAojIFNTRTIgY2hvc2VuIGluc3RlYWQ/IEluIGFkZGl0aW9uIHRvIHRoZSBmYWN0IHRoYXQgTU1YIHJ1bnMgb24gbGVnYWN5CiMgQ1BVcyBzdWNoIGFzIFBJSUksICI0LWJpdCIgTU1YIHZlcnNpb24gd2FzIG9ic2VydmVkIHRvIHByb3ZpZGUgYmV0dGVyCiMgcGVyZm9ybWFuY2UgdGhhbiAqY29ycmVzcG9uZGluZyogU1NFMiBvbmUgZXZlbiBvbiBjb250ZW1wb3JhcnkgQ1BVcy4KIyBTU0UyIHJlc3VsdHMgd2VyZSBwcm92aWRlZCBieSBQZXRlci1NaWNoYWVsIEhhZ2VyLiBIZSBtYWludGFpbnMgU1NFMgojIGltcGxlbWVudGF0aW9uIGZlYXR1cmluZyBmdWxsIHJhbmdlIG9mIGxvb2t1cC10YWJsZSBzaXplcywgYnV0IHdpdGgKIyBwZXItaW52b2NhdGlvbiBsb29rdXAgdGFibGUgc2V0dXAuIExhdHRlciBtZWFucyB0aGF0IHRhYmxlIHNpemUgaXMKIyBjaG9zZW4gZGVwZW5kaW5nIG9uIGhvdyBtdWNoIGRhdGEgaXMgdG8gYmUgaGFzaGVkIGluIGV2ZXJ5IGdpdmVuIGNhbGwsCiMgbW9yZSBkYXRhIC0gbGFyZ2VyIHRhYmxlLiBCZXN0IHJlcG9ydGVkIHJlc3VsdCBmb3IgQ29yZTIgaXMgfjQgY3ljbGVzCiMgcGVyIHByb2Nlc3NlZCBieXRlIG91dCBvZiA2NEtCIGJsb2NrLiBUaGlzIG51bWJlciBhY2NvdW50cyBldmVuIGZvcgojIDY0S0IgdGFibGUgc2V0dXAgb3ZlcmhlYWQuIEFzIGRpc2N1c3NlZCBpbiBnY20xMjguYyB3ZSBjaG9vc2UgdG8gYmUKIyBtb3JlIGNvbnNlcnZhdGl2ZSBpbiByZXNwZWN0IHRvIGxvb2t1cCB0YWJsZSBzaXplcywgYnV0IGhvdyBkbyB0aGUKIyByZXN1bHRzIGNvbXBhcmU/IE1pbmltYWxpc3RpYyAiMjU2QiIgTU1YIHZlcnNpb24gZGVsaXZlcnMgfjExIGN5Y2xlcwojIG9uIHNhbWUgcGxhdGZvcm0uIEFzIGFsc28gZGlzY3Vzc2VkIGluIGdjbTEyOC5jLCBuZXh0IGluIGxpbmUgIjgtYml0CiMgU2hvdXAncyIgb3IgIjRLQiIgbWV0aG9kIHNob3VsZCBkZWxpdmVyIHR3aWNlIHRoZSBwZXJmb3JtYW5jZSBvZgojICIyNTZCIiBvbmUsIGluIG90aGVyIHdvcmRzIG5vdCB3b3JzZSB0aGFuIH42IGN5Y2xlcyBwZXIgYnl0ZS4gSXQKIyBzaG91bGQgYmUgYWxzbyBiZSBub3RlZCB0aGF0IGluIFNTRTIgY2FzZSBpbXByb3ZlbWVudCBjYW4gYmUgInN1cGVyLQojIGxpbmVhciwiIGkuZS4gbW9yZSB0aGFuIHR3aWNlLCBtb3N0bHkgYmVjYXVzZSA+PjggbWFwcyB0byBzaW5nbGUKIyBpbnN0cnVjdGlvbiBvbiBTU0UyIHJlZ2lzdGVyLiBUaGlzIGlzIHVubGlrZSAiNC1iaXQiIGNhc2Ugd2hlbiA+PjQKIyBtYXBzIHRvIHNhbWUgYW1vdW50IG9mIGluc3RydWN0aW9ucyBpbiBib3RoIE1NWCBhbmQgU1NFMiBjYXNlcy4KIyBCb3R0b20gbGluZSBpcyB0aGF0IHN3aXRjaCB0byBTU0UyIGlzIGNvbnNpZGVyZWQgdG8gYmUganVzdGlmaWFibGUKIyBvbmx5IGluIGNhc2Ugd2UgY2hvb3NlIHRvIGltcGxlbWVudCAiOC1iaXQiIG1ldGhvZC4uLgo=