IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgTWFyY2gsIE1heSwgSnVuZSAyMDEwCiMKIyBUaGUgbW9kdWxlIGltcGxlbWVudHMgIjQtYml0IiBHQ00gR0hBU0ggZnVuY3Rpb24gYW5kIHVuZGVybHlpbmcKIyBzaW5nbGUgbXVsdGlwbGljYXRpb24gb3BlcmF0aW9uIGluIEdGKDJeMTI4KS4gIjQtYml0IiBtZWFucyB0aGF0IGl0CiMgdXNlcyAyNTYgYnl0ZXMgcGVyLWtleSB0YWJsZSBbKzY0LzEyOCBieXRlcyBmaXhlZCB0YWJsZV0uIEl0IGhhcyB0d28KIyBjb2RlIHBhdGhzOiB2YW5pbGxhIHg4NiBhbmQgdmFuaWxsYSBNTVguIEZvcm1lciB3aWxsIGJlIGV4ZWN1dGVkIG9uCiMgNDg2IGFuZCBQZW50aXVtLCBsYXR0ZXIgb24gYWxsIG90aGVycy4gTU1YIEdIQVNIIGZlYXR1cmVzIHNvIGNhbGxlZAojICI1MjhCIiB2YXJpYW50IG9mICI0LWJpdCIgbWV0aG9kIHV0aWxpemluZyBhZGRpdGlvbmFsIDI1NisxNiBieXRlcwojIG9mIHBlci1rZXkgc3RvcmFnZSBbKzUxMiBieXRlcyBzaGFyZWQgdGFibGVdLiBQZXJmb3JtYW5jZSByZXN1bHRzCiMgYXJlIGZvciBzdHJlYW1lZCBHSEFTSCBzdWJyb3V0aW5lIGFuZCBhcmUgZXhwcmVzc2VkIGluIGN5Y2xlcyBwZXIKIyBwcm9jZXNzZWQgYnl0ZSwgbGVzcyBpcyBiZXR0ZXI6CiMKIwkJZ2NjIDIuOTUuMygqKQlNTVggYXNzZW1ibGVyCXg4NiBhc3NlbWJsZXIKIwojIFBlbnRpdW0JMTA1LzExMSgqKikJLQkJNTAKIyBQSUlJCQk2OCAvNzUJCTEyLjIJCTI0CiMgUDQJCTEyNS8xMjUJCTE3LjgJCTg0KCoqKikKIyBPcHRlcm9uCTY2IC83MAkJMTAuMQkJMzAKIyBDb3JlMgkJNTQgLzY3CQk4LjQJCTE4CiMKIyAoKikJZ2NjIDMuNC54IHdhcyBvYnNlcnZlZCB0byBnZW5lcmF0ZSBmZXcgcGVyY2VudCBzbG93ZXIgY29kZSwKIwl3aGljaCBpcyBvbmUgb2YgcmVhc29ucyB3aHkgMi45NS4zIHJlc3VsdHMgd2VyZSBjaG9zZW4sCiMJYW5vdGhlciByZWFzb24gaXMgbGFjayBvZiAzLjQueCByZXN1bHRzIGZvciBvbGRlciBDUFVzOwojCWNvbXBhcmlzb24gd2l0aCBNTVggcmVzdWx0cyBpcyBub3QgY29tcGxldGVseSBmYWlyLCBiZWNhdXNlIEMKIwlyZXN1bHRzIGFyZSBmb3IgdmFuaWxsYSAiMjU2QiIgaW1wbGVtZW50YXRpb24sIHdoaWxlCiMJYXNzZW1ibGVyIHJlc3VsdHMgYXJlIGZvciAiNTI4QiI7LSkKIyAoKiopCXNlY29uZCBudW1iZXIgaXMgcmVzdWx0IGZvciBjb2RlIGNvbXBpbGVkIHdpdGggLWZQSUMgZmxhZywKIwl3aGljaCBpcyBhY3R1YWxseSBtb3JlIHJlbGV2YW50LCBiZWNhdXNlIGFzc2VtYmxlciBjb2RlIGlzCiMJcG9zaXRpb24taW5kZXBlbmRlbnQ7CiMgKCoqKikJc2VlIGNvbW1lbnQgaW4gbm9uLU1NWCByb3V0aW5lIGZvciBmdXJ0aGVyIGRldGFpbHM7CiMKIyBUbyBzdW1tYXJpemUsIGl0J3MgPjItNSB0aW1lcyBmYXN0ZXIgdGhhbiBnY2MtZ2VuZXJhdGVkIGNvZGUuIFRvCiMgYW5jaG9yIGl0IHRvIHNvbWV0aGluZyBlbHNlIFNIQTEgYXNzZW1ibGVyIHByb2Nlc3NlcyBvbmUgYnl0ZSBpbgojIDExLTEzIGN5Y2xlcyBvbiBjb250ZW1wb3JhcnkgeDg2IGNvcmVzLiBBcyBmb3IgY2hvaWNlIG9mIE1NWCBpbgojIHBhcnRpY3VsYXIsIHNlZSBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuLi4KCiMgTWF5IDIwMTAKIwojIEFkZCBQQ0xNVUxRRFEgdmVyc2lvbiBwZXJmb3JtaW5nIGF0IDIuMTAgY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZS4KIyBUaGUgcXVlc3Rpb24gaXMgaG93IGNsb3NlIGlzIGl0IHRvIHRoZW9yZXRpY2FsIGxpbWl0PyBUaGUgcGNsbXVscWRxCiMgaW5zdHJ1Y3Rpb24gbGF0ZW5jeSBhcHBlYXJzIHRvIGJlIDE0IGN5Y2xlcyBhbmQgdGhlcmUgY2FuJ3QgYmUgbW9yZQojIHRoYW4gMiBvZiB0aGVtIGV4ZWN1dGluZyBhdCBhbnkgZ2l2ZW4gdGltZS4gVGhpcyBtZWFucyB0aGF0IHNpbmdsZQojIEthcmF0c3ViYSBtdWx0aXBsaWNhdGlvbiB3b3VsZCB0YWtlIDI4IGN5Y2xlcyAqcGx1cyogZmV3IGN5Y2xlcyBmb3IKIyBwcmUtIGFuZCBwb3N0LXByb2Nlc3NpbmcuIFRoZW4gbXVsdGlwbGljYXRpb24gaGFzIHRvIGJlIGZvbGxvd2VkIGJ5CiMgbW9kdWxvLXJlZHVjdGlvbi4gR2l2ZW4gdGhhdCBhZ2dyZWdhdGVkIHJlZHVjdGlvbiBtZXRob2QgW3NlZQojICJDYXJyeS1sZXNzIE11bHRpcGxpY2F0aW9uIGFuZCBJdHMgVXNhZ2UgZm9yIENvbXB1dGluZyB0aGUgR0NNIE1vZGUiCiMgd2hpdGUgcGFwZXIgYnkgSW50ZWxdIGFsbG93cyB5b3UgdG8gcGVyZm9ybSByZWR1Y3Rpb24gb25seSBvbmNlIGluCiMgYSB3aGlsZSB3ZSBjYW4gYXNzdW1lIHRoYXQgYXN5bXB0b3RpYyBwZXJmb3JtYW5jZSBjYW4gYmUgZXN0aW1hdGVkCiMgYXMgKDI4K1Rtb2QvTmFnZ3IpLzE2LCB3aGVyZSBUbW9kIGlzIHRpbWUgdG8gcGVyZm9ybSByZWR1Y3Rpb24KIyBhbmQgTmFnZ3IgaXMgdGhlIGFnZ3JlZ2F0aW9uIGZhY3Rvci4KIwojIEJlZm9yZSB3ZSBwcm9jZWVkIHRvIHRoaXMgaW1wbGVtZW50YXRpb24gbGV0J3MgaGF2ZSBjbG9zZXIgbG9vayBhdAojIHRoZSBiZXN0LXBlcmZvcm1pbmcgY29kZSBzdWdnZXN0ZWQgYnkgSW50ZWwgaW4gdGhlaXIgd2hpdGUgcGFwZXIuCiMgQnkgdHJhY2luZyBpbnRlci1yZWdpc3RlciBkZXBlbmRlbmNpZXMgVG1vZCBpcyBlc3RpbWF0ZWQgYXMgfjE5CiMgY3ljbGVzIGFuZCBOYWdnciBjaG9zZW4gYnkgSW50ZWwgaXMgNCwgcmVzdWx0aW5nIGluIDIuMDUgY3ljbGVzIHBlcgojIHByb2Nlc3NlZCBieXRlLiBBcyBpbXBsaWVkLCB0aGlzIGlzIHF1aXRlIG9wdGltaXN0aWMgZXN0aW1hdGUsCiMgYmVjYXVzZSBpdCBkb2VzIG5vdCBhY2NvdW50IGZvciBLYXJhdHN1YmEgcHJlLSBhbmQgcG9zdC1wcm9jZXNzaW5nLAojIHdoaWNoIGZvciBhIHNpbmdsZSBtdWx0aXBsaWNhdGlvbiBpcyB+NSBjeWNsZXMuIFVuZm9ydHVuYXRlbHkgSW50ZWwKIyBkb2VzIG5vdCBwcm92aWRlIHBlcmZvcm1hbmNlIGRhdGEgZm9yIEdIQVNIIGFsb25lLiBCdXQgYmVuY2htYXJraW5nCiMgQUVTX0dDTV9lbmNyeXB0IHJpcHBlZCBvdXQgb2YgRmlnLiAxNSBvZiB0aGUgd2hpdGUgcGFwZXIgd2l0aCBhYWR0CiMgYWxvbmUgcmVzdWx0ZWQgaW4gMi40NiBjeWNsZXMgcGVyIGJ5dGUgb2Ygb3V0IDE2S0IgYnVmZmVyLiBOb3RlIHRoYXQKIyB0aGUgcmVzdWx0IGFjY291bnRzIGV2ZW4gZm9yIHByZS1jb21wdXRpbmcgb2YgZGVncmVlcyBvZiB0aGUgaGFzaAojIGtleSBILCBidXQgaXRzIHBvcnRpb24gaXMgbmVnbGlnaWJsZSBhdCAxNktCIGJ1ZmZlciBzaXplLgojCiMgTW92aW5nIG9uIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBxdWVzdGlvbi4gVG1vZCBpcyBlc3RpbWF0ZWQgYXMKIyB+MTMgY3ljbGVzIGFuZCBOYWdnciBpcyAyLCBnaXZpbmcgYXN5bXB0b3RpYyBwZXJmb3JtYW5jZSBvZiAuLi4KIyAyLjE2LiBIb3cgaXMgaXQgcG9zc2libGUgdGhhdCBtZWFzdXJlZCBwZXJmb3JtYW5jZSBpcyBiZXR0ZXIgdGhhbgojIG9wdGltaXN0aWMgdGhlb3JldGljYWwgZXN0aW1hdGU/IFRoZXJlIGlzIG9uZSB0aGluZyBJbnRlbCBmYWlsZWQKIyB0byByZWNvZ25pemUuIEJ5IHNlcmlhbGl6aW5nIEdIQVNIIHdpdGggQ1RSIGluIHNhbWUgc3Vicm91dGluZQojIGZvcm1lcidzIHBlcmZvcm1hbmNlIGlzIHJlYWxseSBsaW1pdGVkIHRvIGFib3ZlIChUbXVsICsgVG1vZC9OYWdncikKIyBlcXVhdGlvbi4gQnV0IGlmIEdIQVNIIHByb2NlZHVyZSBpcyBkZXRhY2hlZCwgdGhlIG1vZHVsby1yZWR1Y3Rpb24KIyBjYW4gYmUgaW50ZXJsZWF2ZWQgd2l0aCBOYWdnci0xIG11bHRpcGxpY2F0aW9ucyBhdCBpbnN0cnVjdGlvbiBsZXZlbAojIGFuZCB1bmRlciBpZGVhbCBjb25kaXRpb25zIGV2ZW4gZGlzYXBwZWFyIGZyb20gdGhlIGVxdWF0aW9uLiBTbyB0aGF0CiMgb3B0aW1pc3RpYyB0aGVvcmV0aWNhbCBlc3RpbWF0ZSBmb3IgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyAuLi4KIyAyOC8xNj0xLjc1LCBhbmQgbm90IDIuMTYuIFdlbGwsIGl0J3MgcHJvYmFibHkgd2F5IHRvbyBvcHRpbWlzdGljLAojIGF0IGxlYXN0IGZvciBzdWNoIHNtYWxsIE5hZ2dyLiBJJ2QgYXJndWUgdGhhdCAoMjgrVHByb2MvTmFnZ3IpLAojIHdoZXJlIFRwcm9jIGlzIHRpbWUgcmVxdWlyZWQgZm9yIEthcmF0c3ViYSBwcmUtIGFuZCBwb3N0LXByb2Nlc3NpbmcsCiMgaXMgbW9yZSByZWFsaXN0aWMgZXN0aW1hdGUuIEluIHRoaXMgY2FzZSBpdCBnaXZlcyAuLi4gMS45MSBjeWNsZXMuCiMgT3IgaW4gb3RoZXIgd29yZHMsIGRlcGVuZGluZyBvbiBob3cgd2VsbCB3ZSBjYW4gaW50ZXJsZWF2ZSByZWR1Y3Rpb24KIyBhbmQgb25lIG9mIHRoZSB0d28gbXVsdGlwbGljYXRpb25zIHRoZSBwZXJmb3JtYW5jZSBzaG91bGQgYmUgYmV0d2VuCiMgMS45MSBhbmQgMi4xNi4gQXMgYWxyZWFkeSBtZW50aW9uZWQsIHRoaXMgaW1wbGVtZW50YXRpb24gcHJvY2Vzc2VzCiMgb25lIGJ5dGUgb3V0IG9mIDhLQiBidWZmZXIgaW4gMi4xMCBjeWNsZXMsIHdoaWxlIHg4Nl82NCBjb3VudGVycGFydAojIC0gaW4gMi4wMi4geDg2XzY0IHBlcmZvcm1hbmNlIGlzIGJldHRlciwgYmVjYXVzZSBsYXJnZXIgcmVnaXN0ZXIKIyBiYW5rIGFsbG93cyB0byBpbnRlcmxlYXZlIHJlZHVjdGlvbiBhbmQgbXVsdGlwbGljYXRpb24gYmV0dGVyLgojCiMgRG9lcyBpdCBtYWtlIHNlbnNlIHRvIGluY3JlYXNlIE5hZ2dyPyBUbyBzdGFydCB3aXRoIGl0J3MgdmlydHVhbGx5CiMgaW1wb3NzaWJsZSBpbiAzMi1iaXQgbW9kZSwgYmVjYXVzZSBvZiBsaW1pdGVkIHJlZ2lzdGVyIGJhbmsKIyBjYXBhY2l0eS4gT3RoZXJ3aXNlIGltcHJvdmVtZW50IGhhcyB0byBiZSB3ZWlnaGVkIGFnaWFpbnN0IHNsb3dlcgojIHNldHVwLCBhcyB3ZWxsIGFzIGNvZGUgc2l6ZSBhbmQgY29tcGxleGl0eSBpbmNyZWFzZS4gQXMgZXZlbgojIG9wdGltaXN0aWMgZXN0aW1hdGUgZG9lc24ndCBwcm9taXNlIDMwJSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCwKIyB0aGVyZSBhcmUgY3VycmVudGx5IG5vIHBsYW5zIHRvIGluY3JlYXNlIE5hZ2dyLgojCiMgU3BlY2lhbCB0aGFua3MgdG8gRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiBmb3IKIyBwcm92aWRpbmcgYWNjZXNzIHRvIGEgV2VzdG1lcmUtYmFzZWQgc3lzdGVtIG9uIGJlaGFsZiBvZiBJbnRlbAojIE9wZW4gU291cmNlIFRlY2hub2xvZ3kgQ2VudHJlLgoKIyBKYW51YXJ5IDIwMTAKIwojIFR3ZWFrZWQgdG8gb3B0aW1pemUgdHJhbnNpdGlvbnMgYmV0d2VlbiBpbnRlZ2VyIGFuZCBGUCBvcGVyYXRpb25zCiMgb24gc2FtZSBYTU0gcmVnaXN0ZXIsIFBDTE1VTFFEUSBzdWJyb3V0aW5lIHdhcyBtZWFzdXJlZCB0byBwcm9jZXNzCiMgb25lIGJ5dGUgaW4gMi4wNyBjeWNsZXMgb24gU2FuZHkgQnJpZGdlLCBhbmQgaW4gMi4xMiAtIG9uIFdlc3RtZXJlLgojIFRoZSBtaW5vciByZWdyZXNzaW9uIG9uIFdlc3RtZXJlIGlzIG91dHdlaWdoZWQgYnkgfjE1JSBpbXByb3ZlbWVudAojIG9uIFNhbmR5IEJyaWRnZS4gU3RyYW5nZWx5IGVub3VnaCBhdHRlbXB0IHRvIG1vZGlmeSA2NC1iaXQgY29kZSBpbgojIHNpbWlsYXIgbWFubmVyIHJlc3VsdGVkIGluIGFsbW9zdCAyMCUgZGVncmFkYXRpb24gb24gU2FuZHkgQnJpZGdlLAojIHdoZXJlIG9yaWdpbmFsIDY0LWJpdCBjb2RlIHByb2Nlc3NlcyBvbmUgYnl0ZSBpbiAxLjk1IGN5Y2xlcy4KCiQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CnB1c2goQElOQywiJHtkaXJ9IiwiJHtkaXJ9Li4vLi4vcGVybGFzbSIpOwpyZXF1aXJlICJ4ODZhc20ucGwiOwoKJmFzbV9pbml0KCRBUkdWWzBdLCJnaGFzaC14ODYucGwiLCR4ODZvbmx5ID0gJEFSR1ZbJCNBUkdWXSBlcSAiMzg2Iik7Cgokc3NlMj0wOwpmb3IgKEBBUkdWKSB7ICRzc2UyPTEgaWYgKC8tRE9QRU5TU0xfSUEzMl9TU0UyLyk7IH0KCigkWmhoLCRaaGwsJFpsaCwkWmxsKSA9ICgiZWJwIiwiZWR4IiwiZWN4IiwiZWJ4Iik7CiRpbnAgID0gImVkaSI7CiRIdGJsID0gImVzaSI7CgwKJHVucm9sbCA9IDA7CSMgQWZmZWN0cyB4ODYgbG9vcC4gRm9sZGVkIGxvb3AgcGVyZm9ybXMgfjclIHdvcnNlCgkJIyB0aGFuIHVucm9sbGVkLCB3aGljaCBoYXMgdG8gYmUgd2VpZ2h0ZWQgYWdhaW5zdAoJCSMgMi41eCB4ODYtc3BlY2lmaWMgY29kZSBzaXplIHJlZHVjdGlvbi4KCnN1YiB4ODZfbG9vcCB7CiAgICBteSAkb2ZmID0gc2hpZnQ7CiAgICBteSAkcmVtID0gImVheCI7CgoJJm1vdgkoJFpoaCwmRFdQKDQsJEh0YmwsJFpsbCkpOwoJJm1vdgkoJFpobCwmRFdQKDAsJEh0YmwsJFpsbCkpOwoJJm1vdgkoJFpsaCwmRFdQKDEyLCRIdGJsLCRabGwpKTsKCSZtb3YJKCRabGwsJkRXUCg4LCRIdGJsLCRabGwpKTsKCSZ4b3IJKCRyZW0sJHJlbSk7CSMgYXZvaWQgcGFydGlhbCByZWdpc3RlciBzdGFsbHMgb24gUElJSQoKCSMgc2hyZCBwcmFjdGljYWxseSBraWxscyBQNCwgMi41eCBkZXRlcmlvcmF0aW9uLCBidXQgUDQgaGFzCgkjIE1NWCBjb2RlLXBhdGggdG8gZXhlY3V0ZS4gc2hyZCBydW5zIHRhZCBmYXN0ZXIgW3RoYW4gdHdpY2UKCSMgdGhlIHNoaWZ0cywgbW92ZSdzIGFuZCBvcidzXSBvbiBwcmUtTU1YIFBlbnRpdW0gKGFzIHdlbGwgYXMKCSMgUElJSSBhbmQgQ29yZTIpLCAqYnV0KiBtaW5pbWl6ZXMgY29kZSBzaXplLCBzcGFyZXMgcmVnaXN0ZXIKCSMgYW5kIHRodXMgYWxsb3dzIHRvIGZvbGQgdGhlIGxvb3AuLi4KCWlmICghJHVucm9sbCkgewoJbXkgJGNudCA9ICRpbnA7CgkmbW92CSgkY250LDE1KTsKCSZqbXAJKCZsYWJlbCgieDg2X2xvb3AiKSk7Cgkmc2V0X2xhYmVsKCJ4ODZfbG9vcCIsMTYpOwoJICAgIGZvcigkaT0xOyRpPD0yOyRpKyspIHsKCQkmbW92CSgmTEIoJHJlbSksJkxCKCRabGwpKTsKCQkmc2hyZAkoJFpsbCwkWmxoLDQpOwoJCSZhbmQJKCZMQigkcmVtKSwweGYpOwoJCSZzaHJkCSgkWmxoLCRaaGwsNCk7CgkJJnNocmQJKCRaaGwsJFpoaCw0KTsKCQkmc2hyCSgkWmhoLDQpOwoJCSZ4b3IJKCRaaGgsJkRXUCgkb2ZmKzE2LCJlc3AiLCRyZW0sNCkpOwoKCQkmbW92CSgmTEIoJHJlbSksJkJQKCRvZmYsImVzcCIsJGNudCkpOwoJCWlmICgkaSYxKSB7CgkJCSZhbmQJKCZMQigkcmVtKSwweGYwKTsKCQl9IGVsc2UgewoJCQkmc2hsCSgmTEIoJHJlbSksNCk7CgkJfQoKCQkmeG9yCSgkWmxsLCZEV1AoOCwkSHRibCwkcmVtKSk7CgkJJnhvcgkoJFpsaCwmRFdQKDEyLCRIdGJsLCRyZW0pKTsKCQkmeG9yCSgkWmhsLCZEV1AoMCwkSHRibCwkcmVtKSk7CgkJJnhvcgkoJFpoaCwmRFdQKDQsJEh0YmwsJHJlbSkpOwoKCQlpZiAoJGkmMSkgewoJCQkmZGVjCSgkY250KTsKCQkJJmpzCSgmbGFiZWwoIng4Nl9icmVhayIpKTsKCQl9IGVsc2UgewoJCQkmam1wCSgmbGFiZWwoIng4Nl9sb29wIikpOwoJCX0KCSAgICB9Cgkmc2V0X2xhYmVsKCJ4ODZfYnJlYWsiLDE2KTsKCX0gZWxzZSB7CgkgICAgZm9yKCRpPTE7JGk8MzI7JGkrKykgewoJCSZjb21tZW50KCRpKTsKCQkmbW92CSgmTEIoJHJlbSksJkxCKCRabGwpKTsKCQkmc2hyZAkoJFpsbCwkWmxoLDQpOwoJCSZhbmQJKCZMQigkcmVtKSwweGYpOwoJCSZzaHJkCSgkWmxoLCRaaGwsNCk7CgkJJnNocmQJKCRaaGwsJFpoaCw0KTsKCQkmc2hyCSgkWmhoLDQpOwoJCSZ4b3IJKCRaaGgsJkRXUCgkb2ZmKzE2LCJlc3AiLCRyZW0sNCkpOwoKCQlpZiAoJGkmMSkgewoJCQkmbW92CSgmTEIoJHJlbSksJkJQKCRvZmYrMTUtKCRpPj4xKSwiZXNwIikpOwoJCQkmYW5kCSgmTEIoJHJlbSksMHhmMCk7CgkJfSBlbHNlIHsKCQkJJm1vdgkoJkxCKCRyZW0pLCZCUCgkb2ZmKzE1LSgkaT4+MSksImVzcCIpKTsKCQkJJnNobAkoJkxCKCRyZW0pLDQpOwoJCX0KCgkJJnhvcgkoJFpsbCwmRFdQKDgsJEh0YmwsJHJlbSkpOwoJCSZ4b3IJKCRabGgsJkRXUCgxMiwkSHRibCwkcmVtKSk7CgkJJnhvcgkoJFpobCwmRFdQKDAsJEh0YmwsJHJlbSkpOwoJCSZ4b3IJKCRaaGgsJkRXUCg0LCRIdGJsLCRyZW0pKTsKCSAgICB9Cgl9CgkmYnN3YXAJKCRabGwpOwoJJmJzd2FwCSgkWmxoKTsKCSZic3dhcAkoJFpobCk7CglpZiAoISR4ODZvbmx5KSB7CgkJJmJzd2FwCSgkWmhoKTsKCX0gZWxzZSB7CgkJJm1vdgkoImVheCIsJFpoaCk7CgkJJmJzd2FwCSgiZWF4Iik7CgkJJm1vdgkoJFpoaCwiZWF4Iik7Cgl9Cn0KCmlmICgkdW5yb2xsKSB7CiAgICAmZnVuY3Rpb25fYmVnaW5fQigiX3g4Nl9nbXVsdF80Yml0X2lubmVyIik7CgkmeDg2X2xvb3AoNCk7CgkmcmV0CSgpOwogICAgJmZ1bmN0aW9uX2VuZF9CKCJfeDg2X2dtdWx0XzRiaXRfaW5uZXIiKTsKfQoKc3ViIGRlcG9zaXRfcmVtXzRiaXQgewogICAgbXkgJGJpYXMgPSBzaGlmdDsKCgkmbW92CSgmRFdQKCRiaWFzKzAsICJlc3AiKSwweDAwMDA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrNCwgImVzcCIpLDB4MUMyMDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcys4LCAiZXNwIiksMHgzODQwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzEyLCJlc3AiKSwweDI0NjA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrMTYsImVzcCIpLDB4NzA4MDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcysyMCwiZXNwIiksMHg2Q0EwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzI0LCJlc3AiKSwweDQ4QzA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrMjgsImVzcCIpLDB4NTRFMDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcyszMiwiZXNwIiksMHhFMTAwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzM2LCJlc3AiKSwweEZEMjA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrNDAsImVzcCIpLDB4RDk0MDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcys0NCwiZXNwIiksMHhDNTYwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzQ4LCJlc3AiKSwweDkxODA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrNTIsImVzcCIpLDB4OERBMDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcys1NiwiZXNwIiksMHhBOUMwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzYwLCJlc3AiKSwweEI1RTA8PDE2KTsKfQoMCiRzdWZmaXggPSAkeDg2b25seSA/ICIiIDogIl94ODYiOwoKJmZ1bmN0aW9uX2JlZ2luKCJnY21fZ211bHRfNGJpdCIuJHN1ZmZpeCk7Cgkmc3RhY2tfcHVzaCgxNis0KzEpOwkJCSMgKzEgZm9yIHN0YWNrIGFsaWdubWVudAoJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsJCSMgbG9hZCBYaQoJJm1vdgkoJEh0YmwsJndwYXJhbSgxKSk7CQkjIGxvYWQgSHRhYmxlCgoJJm1vdgkoJFpoaCwmRFdQKDAsJGlucCkpOwkJIyBsb2FkIFhpWzE2XQoJJm1vdgkoJFpobCwmRFdQKDQsJGlucCkpOwoJJm1vdgkoJFpsaCwmRFdQKDgsJGlucCkpOwoJJm1vdgkoJFpsbCwmRFdQKDEyLCRpbnApKTsKCgkmZGVwb3NpdF9yZW1fNGJpdCgxNik7CgoJJm1vdgkoJkRXUCgwLCJlc3AiKSwkWmhoKTsJCSMgY29weSBYaVsxNl0gb24gc3RhY2sKCSZtb3YJKCZEV1AoNCwiZXNwIiksJFpobCk7CgkmbW92CSgmRFdQKDgsImVzcCIpLCRabGgpOwoJJm1vdgkoJkRXUCgxMiwiZXNwIiksJFpsbCk7Cgkmc2hyCSgkWmxsLDIwKTsKCSZhbmQJKCRabGwsMHhmMCk7CgoJaWYgKCR1bnJvbGwpIHsKCQkmY2FsbAkoIl94ODZfZ211bHRfNGJpdF9pbm5lciIpOwoJfSBlbHNlIHsKCQkmeDg2X2xvb3AoMCk7CgkJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsKCX0KCgkmbW92CSgmRFdQKDEyLCRpbnApLCRabGwpOwoJJm1vdgkoJkRXUCg4LCRpbnApLCRabGgpOwoJJm1vdgkoJkRXUCg0LCRpbnApLCRaaGwpOwoJJm1vdgkoJkRXUCgwLCRpbnApLCRaaGgpOwoJJnN0YWNrX3BvcCgxNis0KzEpOwomZnVuY3Rpb25fZW5kKCJnY21fZ211bHRfNGJpdCIuJHN1ZmZpeCk7CgomZnVuY3Rpb25fYmVnaW4oImdjbV9naGFzaF80Yml0Ii4kc3VmZml4KTsKCSZzdGFja19wdXNoKDE2KzQrMSk7CQkJIyArMSBmb3IgNjQtYml0IGFsaWdubWVudAoJJm1vdgkoJFpsbCwmd3BhcmFtKDApKTsJCSMgbG9hZCBYaQoJJm1vdgkoJEh0YmwsJndwYXJhbSgxKSk7CQkjIGxvYWQgSHRhYmxlCgkmbW92CSgkaW5wLCZ3cGFyYW0oMikpOwkJIyBsb2FkIGluCgkmbW92CSgiZWN4Iiwmd3BhcmFtKDMpKTsJCSMgbG9hZCBsZW4KCSZhZGQJKCJlY3giLCRpbnApOwoJJm1vdgkoJndwYXJhbSgzKSwiZWN4Iik7CgoJJm1vdgkoJFpoaCwmRFdQKDAsJFpsbCkpOwkJIyBsb2FkIFhpWzE2XQoJJm1vdgkoJFpobCwmRFdQKDQsJFpsbCkpOwoJJm1vdgkoJFpsaCwmRFdQKDgsJFpsbCkpOwoJJm1vdgkoJFpsbCwmRFdQKDEyLCRabGwpKTsKCgkmZGVwb3NpdF9yZW1fNGJpdCgxNik7CgogICAgJnNldF9sYWJlbCgieDg2X291dGVyX2xvb3AiLDE2KTsKCSZ4b3IJKCRabGwsJkRXUCgxMiwkaW5wKSk7CQkjIHhvciB3aXRoIGlucHV0CgkmeG9yCSgkWmxoLCZEV1AoOCwkaW5wKSk7CgkmeG9yCSgkWmhsLCZEV1AoNCwkaW5wKSk7CgkmeG9yCSgkWmhoLCZEV1AoMCwkaW5wKSk7CgkmbW92CSgmRFdQKDEyLCJlc3AiKSwkWmxsKTsJCSMgZHVtcCBpdCBvbiBzdGFjawoJJm1vdgkoJkRXUCg4LCJlc3AiKSwkWmxoKTsKCSZtb3YJKCZEV1AoNCwiZXNwIiksJFpobCk7CgkmbW92CSgmRFdQKDAsImVzcCIpLCRaaGgpOwoKCSZzaHIJKCRabGwsMjApOwoJJmFuZAkoJFpsbCwweGYwKTsKCglpZiAoJHVucm9sbCkgewoJCSZjYWxsCSgiX3g4Nl9nbXVsdF80Yml0X2lubmVyIik7Cgl9IGVsc2UgewoJCSZ4ODZfbG9vcCgwKTsKCQkmbW92CSgkaW5wLCZ3cGFyYW0oMikpOwoJfQoJJmxlYQkoJGlucCwmRFdQKDE2LCRpbnApKTsKCSZjbXAJKCRpbnAsJndwYXJhbSgzKSk7CgkmbW92CSgmd3BhcmFtKDIpLCRpbnApCWlmICghJHVucm9sbCk7CgkmamIJKCZsYWJlbCgieDg2X291dGVyX2xvb3AiKSk7CgoJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsJIyBsb2FkIFhpCgkmbW92CSgmRFdQKDEyLCRpbnApLCRabGwpOwoJJm1vdgkoJkRXUCg4LCRpbnApLCRabGgpOwoJJm1vdgkoJkRXUCg0LCRpbnApLCRaaGwpOwoJJm1vdgkoJkRXUCgwLCRpbnApLCRaaGgpOwoJJnN0YWNrX3BvcCgxNis0KzEpOwomZnVuY3Rpb25fZW5kKCJnY21fZ2hhc2hfNGJpdCIuJHN1ZmZpeCk7CgwKaWYgKCEkeDg2b25seSkge3t7Cgomc3RhdGljX2xhYmVsKCJyZW1fNGJpdCIpOwoKaWYgKCEkc3NlMikge3sJIyBwdXJlLU1NWCAiTWF5IiB2ZXJzaW9uLi4uCgokUz0xMjsJCSMgc2hpZnQgZmFjdG9yIGZvciByZW1fNGJpdAoKJmZ1bmN0aW9uX2JlZ2luX0IoIl9tbXhfZ211bHRfNGJpdF9pbm5lciIpOwojIE1NWCB2ZXJzaW9uIHBlcmZvcm1zIDMuNSB0aW1lcyBiZXR0ZXIgb24gUDQgKHNlZSBjb21tZW50IGluIG5vbi1NTVgKIyByb3V0aW5lIGZvciBmdXJ0aGVyIGRldGFpbHMpLCAxMDAlIGJldHRlciBvbiBPcHRlcm9uLCB+NzAlIGJldHRlcgojIG9uIENvcmUyIGFuZCBQSUlJLi4uIEluIG90aGVyIHdvcmRzIGVmZm9ydCBpcyBjb25zaWRlcmVkIHRvIGJlIHdlbGwKIyBzcGVudC4uLiBTaW5jZSBpbml0aWFsIHJlbGVhc2UgdGhlIGxvb3Agd2FzIHVucm9sbGVkIGluIG9yZGVyIHRvCiMgImxpYmVyYXRlIiByZWdpc3RlciBwcmV2aW91c2x5IHVzZWQgYXMgbG9vcCBjb3VudGVyLiBJbnN0ZWFkIGl0J3MKIyB1c2VkIHRvIG9wdGltaXplIGNyaXRpY2FsIHBhdGggaW4gJ1ouaGkgXj0gcmVtXzRiaXRbWi5sbyYweGZdJy4KIyBUaGUgcGF0aCBpbnZvbHZlcyBtb3ZlIG9mIFoubG8gZnJvbSBNTVggdG8gaW50ZWdlciByZWdpc3RlciwKIyBlZmZlY3RpdmUgYWRkcmVzcyBjYWxjdWxhdGlvbiBhbmQgZmluYWxseSBtZXJnZSBvZiB2YWx1ZSB0byBaLmhpLgojIFJlZmVyZW5jZSB0byByZW1fNGJpdCBpcyBzY2hlZHVsZWQgc28gbGF0ZSB0aGF0IEkgaGFkIHRvID4+NAojIHJlbV80Yml0IGVsZW1lbnRzLiBUaGlzIHJlc3VsdGVkIGluIDIwLTQ1JSBwcm9jZW50IGltcHJvdmVtZW50CiMgb24gY29udGVtcG9yYXJ5ILUtYXJjaHMuCnsKICAgIG15ICRjbnQ7CiAgICBteSAkcmVtXzRiaXQgPSAiZWF4IjsKICAgIG15IEByZW0gPSAoJFpoaCwkWmxsKTsKICAgIG15ICRuaGkgPSAkWmhsOwogICAgbXkgJG5sbyA9ICRabGg7CgogICAgbXkgKCRabG8sJFpoaSkgPSAoIm1tMCIsIm1tMSIpOwogICAgbXkgJHRtcCA9ICJtbTIiOwoKCSZ4b3IJKCRubG8sJG5sbyk7CSMgYXZvaWQgcGFydGlhbCByZWdpc3RlciBzdGFsbHMgb24gUElJSQoJJm1vdgkoJG5oaSwkWmxsKTsKCSZtb3YJKCZMQigkbmxvKSwmTEIoJG5oaSkpOwoJJnNobAkoJkxCKCRubG8pLDQpOwoJJmFuZAkoJG5oaSwweGYwKTsKCSZtb3ZxCSgkWmxvLCZRV1AoOCwkSHRibCwkbmxvKSk7CgkmbW92cQkoJFpoaSwmUVdQKDAsJEh0YmwsJG5sbykpOwoJJm1vdmQJKCRyZW1bMF0sJFpsbyk7CgoJZm9yICgkY250PTI4OyRjbnQ+PS0yOyRjbnQtLSkgewoJICAgIG15ICRvZGQgPSAkY250JjE7CgkgICAgbXkgJG5peCA9ICRvZGQgPyAkbmxvIDogJG5oaTsKCgkJJnNobAkoJkxCKCRubG8pLDQpCQkJaWYgKCRvZGQpOwoJCSZwc3JscQkoJFpsbyw0KTsKCQkmbW92cQkoJHRtcCwkWmhpKTsKCQkmcHNybHEJKCRaaGksNCk7CgkJJnB4b3IJKCRabG8sJlFXUCg4LCRIdGJsLCRuaXgpKTsKCQkmbW92CSgmTEIoJG5sbyksJkJQKCRjbnQvMiwkaW5wKSkJaWYgKCEkb2RkICYmICRjbnQ+PTApOwoJCSZwc2xscQkoJHRtcCw2MCk7CgkJJmFuZAkoJG5oaSwweGYwKQkJCWlmICgkb2RkKTsKCQkmcHhvcgkoJFpoaSwmUVdQKDAsJHJlbV80Yml0LCRyZW1bMV0sOCkpIGlmICgkY250PDI4KTsKCQkmYW5kCSgkcmVtWzBdLDB4Zik7CgkJJnB4b3IJKCRaaGksJlFXUCgwLCRIdGJsLCRuaXgpKTsKCQkmbW92CSgkbmhpLCRubG8pCQkJaWYgKCEkb2RkICYmICRjbnQ+PTApOwoJCSZtb3ZkCSgkcmVtWzFdLCRabG8pOwoJCSZweG9yCSgkWmxvLCR0bXApOwoKCQlwdXNoCShAcmVtLHNoaWZ0KEByZW0pKTsJCSMgInJvdGF0ZSIgcmVnaXN0ZXJzCgl9CgoJJm1vdgkoJGlucCwmRFdQKDQsJHJlbV80Yml0LCRyZW1bMV0sOCkpOwkjIGxhc3QgcmVtXzRiaXRbcmVtXQoKCSZwc3JscQkoJFpsbywzMik7CSMgbG93ZXIgcGFydCBvZiBabG8gaXMgYWxyZWFkeSB0aGVyZQoJJm1vdmQJKCRaaGwsJFpoaSk7CgkmcHNybHEJKCRaaGksMzIpOwoJJm1vdmQJKCRabGgsJFpsbyk7CgkmbW92ZAkoJFpoaCwkWmhpKTsKCSZzaGwJKCRpbnAsNCk7CSMgY29tcGVuc2F0ZSBmb3IgcmVtXzRiaXRbaV0gYmVpbmcgPj40CgoJJmJzd2FwCSgkWmxsKTsKCSZic3dhcAkoJFpobCk7CgkmYnN3YXAJKCRabGgpOwoJJnhvcgkoJFpoaCwkaW5wKTsKCSZic3dhcAkoJFpoaCk7CgoJJnJldAkoKTsKfQomZnVuY3Rpb25fZW5kX0IoIl9tbXhfZ211bHRfNGJpdF9pbm5lciIpOwoKJmZ1bmN0aW9uX2JlZ2luKCJnY21fZ211bHRfNGJpdF9tbXgiKTsKCSZtb3YJKCRpbnAsJndwYXJhbSgwKSk7CSMgbG9hZCBYaQoJJm1vdgkoJEh0YmwsJndwYXJhbSgxKSk7CSMgbG9hZCBIdGFibGUKCgkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7Cgkmc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKCSZibGluZHBvcCgiZWF4Iik7CgkmbGVhCSgiZWF4IiwmRFdQKCZsYWJlbCgicmVtXzRiaXQiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwiZWF4IikpOwoKCSZtb3Z6CSgkWmxsLCZCUCgxNSwkaW5wKSk7CgoJJmNhbGwJKCJfbW14X2dtdWx0XzRiaXRfaW5uZXIiKTsKCgkmbW92CSgkaW5wLCZ3cGFyYW0oMCkpOwkjIGxvYWQgWGkKCSZlbW1zCSgpOwoJJm1vdgkoJkRXUCgxMiwkaW5wKSwkWmxsKTsKCSZtb3YJKCZEV1AoNCwkaW5wKSwkWmhsKTsKCSZtb3YJKCZEV1AoOCwkaW5wKSwkWmxoKTsKCSZtb3YJKCZEV1AoMCwkaW5wKSwkWmhoKTsKJmZ1bmN0aW9uX2VuZCgiZ2NtX2dtdWx0XzRiaXRfbW14Iik7CgwKIyBTdHJlYW1lZCB2ZXJzaW9uIHBlcmZvcm1zIDIwJSBiZXR0ZXIgb24gUDQsIDclIG9uIE9wdGVyb24sCiMgMTAlIG9uIENvcmUyIGFuZCBQSUlJLi4uCiZmdW5jdGlvbl9iZWdpbigiZ2NtX2doYXNoXzRiaXRfbW14Iik7CgkmbW92CSgkWmhoLCZ3cGFyYW0oMCkpOwkjIGxvYWQgWGkKCSZtb3YJKCRIdGJsLCZ3cGFyYW0oMSkpOwkjIGxvYWQgSHRhYmxlCgkmbW92CSgkaW5wLCZ3cGFyYW0oMikpOwkjIGxvYWQgaW4KCSZtb3YJKCRabGgsJndwYXJhbSgzKSk7CSMgbG9hZCBsZW4KCgkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7Cgkmc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKCSZibGluZHBvcCgiZWF4Iik7CgkmbGVhCSgiZWF4IiwmRFdQKCZsYWJlbCgicmVtXzRiaXQiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwiZWF4IikpOwoKCSZhZGQJKCRabGgsJGlucCk7CgkmbW92CSgmd3BhcmFtKDMpLCRabGgpOwkjIGxlbiB0byBwb2ludCBhdCB0aGUgZW5kIG9mIGlucHV0Cgkmc3RhY2tfcHVzaCg0KzEpOwkJIyArMSBmb3Igc3RhY2sgYWxpZ25tZW50CgoJJm1vdgkoJFpsbCwmRFdQKDEyLCRaaGgpKTsJIyBsb2FkIFhpWzE2XQoJJm1vdgkoJFpobCwmRFdQKDQsJFpoaCkpOwoJJm1vdgkoJFpsaCwmRFdQKDgsJFpoaCkpOwoJJm1vdgkoJFpoaCwmRFdQKDAsJFpoaCkpOwoJJmptcAkoJmxhYmVsKCJtbXhfb3V0ZXJfbG9vcCIpKTsKCiAgICAmc2V0X2xhYmVsKCJtbXhfb3V0ZXJfbG9vcCIsMTYpOwoJJnhvcgkoJFpsbCwmRFdQKDEyLCRpbnApKTsKCSZ4b3IJKCRaaGwsJkRXUCg0LCRpbnApKTsKCSZ4b3IJKCRabGgsJkRXUCg4LCRpbnApKTsKCSZ4b3IJKCRaaGgsJkRXUCgwLCRpbnApKTsKCSZtb3YJKCZ3cGFyYW0oMiksJGlucCk7CgkmbW92CSgmRFdQKDEyLCJlc3AiKSwkWmxsKTsKCSZtb3YJKCZEV1AoNCwiZXNwIiksJFpobCk7CgkmbW92CSgmRFdQKDgsImVzcCIpLCRabGgpOwoJJm1vdgkoJkRXUCgwLCJlc3AiKSwkWmhoKTsKCgkmbW92CSgkaW5wLCJlc3AiKTsKCSZzaHIJKCRabGwsMjQpOwoKCSZjYWxsCSgiX21teF9nbXVsdF80Yml0X2lubmVyIik7CgoJJm1vdgkoJGlucCwmd3BhcmFtKDIpKTsKCSZsZWEJKCRpbnAsJkRXUCgxNiwkaW5wKSk7CgkmY21wCSgkaW5wLCZ3cGFyYW0oMykpOwoJJmpiCSgmbGFiZWwoIm1teF9vdXRlcl9sb29wIikpOwoKCSZtb3YJKCRpbnAsJndwYXJhbSgwKSk7CSMgbG9hZCBYaQoJJmVtbXMJKCk7CgkmbW92CSgmRFdQKDEyLCRpbnApLCRabGwpOwoJJm1vdgkoJkRXUCg0LCRpbnApLCRaaGwpOwoJJm1vdgkoJkRXUCg4LCRpbnApLCRabGgpOwoJJm1vdgkoJkRXUCgwLCRpbnApLCRaaGgpOwoKCSZzdGFja19wb3AoNCsxKTsKJmZ1bmN0aW9uX2VuZCgiZ2NtX2doYXNoXzRiaXRfbW14Iik7CgwKfX0gZWxzZSB7ewkjICJKdW5lIiBNTVggdmVyc2lvbi4uLgoJCSMgLi4uIGhhcyBzbG93ZXIgIkFwcmlsIiBnY21fZ211bHRfNGJpdF9tbXggd2l0aCBmb2xkZWQKCQkjIGxvb3AuIFRoaXMgaXMgZG9uZSB0byBjb25zZXJ2ZSBjb2RlIHNpemUuLi4KJFM9MTY7CQkjIHNoaWZ0IGZhY3RvciBmb3IgcmVtXzRiaXQKCnN1YiBtbXhfbG9vcCgpIHsKIyBNTVggdmVyc2lvbiBwZXJmb3JtcyAyLjggdGltZXMgYmV0dGVyIG9uIFA0IChzZWUgY29tbWVudCBpbiBub24tTU1YCiMgcm91dGluZSBmb3IgZnVydGhlciBkZXRhaWxzKSwgNDAlIGJldHRlciBvbiBPcHRlcm9uIGFuZCBDb3JlMiwgNTAlCiMgYmV0dGVyIG9uIFBJSUkuLi4gSW4gb3RoZXIgd29yZHMgZWZmb3J0IGlzIGNvbnNpZGVyZWQgdG8gYmUgd2VsbAojIHNwZW50Li4uCiAgICBteSAkaW5wID0gc2hpZnQ7CiAgICBteSAkcmVtXzRiaXQgPSBzaGlmdDsKICAgIG15ICRjbnQgPSAkWmhoOwogICAgbXkgJG5oaSA9ICRaaGw7CiAgICBteSAkbmxvID0gJFpsaDsKICAgIG15ICRyZW0gPSAkWmxsOwoKICAgIG15ICgkWmxvLCRaaGkpID0gKCJtbTAiLCJtbTEiKTsKICAgIG15ICR0bXAgPSAibW0yIjsKCgkmeG9yCSgkbmxvLCRubG8pOwkjIGF2b2lkIHBhcnRpYWwgcmVnaXN0ZXIgc3RhbGxzIG9uIFBJSUkKCSZtb3YJKCRuaGksJFpsbCk7CgkmbW92CSgmTEIoJG5sbyksJkxCKCRuaGkpKTsKCSZtb3YJKCRjbnQsMTQpOwoJJnNobAkoJkxCKCRubG8pLDQpOwoJJmFuZAkoJG5oaSwweGYwKTsKCSZtb3ZxCSgkWmxvLCZRV1AoOCwkSHRibCwkbmxvKSk7CgkmbW92cQkoJFpoaSwmUVdQKDAsJEh0YmwsJG5sbykpOwoJJm1vdmQJKCRyZW0sJFpsbyk7Cgkmam1wCSgmbGFiZWwoIm1teF9sb29wIikpOwoKICAgICZzZXRfbGFiZWwoIm1teF9sb29wIiwxNik7CgkmcHNybHEJKCRabG8sNCk7CgkmYW5kCSgkcmVtLDB4Zik7CgkmbW92cQkoJHRtcCwkWmhpKTsKCSZwc3JscQkoJFpoaSw0KTsKCSZweG9yCSgkWmxvLCZRV1AoOCwkSHRibCwkbmhpKSk7CgkmbW92CSgmTEIoJG5sbyksJkJQKDAsJGlucCwkY250KSk7CgkmcHNsbHEJKCR0bXAsNjApOwoJJnB4b3IJKCRaaGksJlFXUCgwLCRyZW1fNGJpdCwkcmVtLDgpKTsKCSZkZWMJKCRjbnQpOwoJJm1vdmQJKCRyZW0sJFpsbyk7CgkmcHhvcgkoJFpoaSwmUVdQKDAsJEh0YmwsJG5oaSkpOwoJJm1vdgkoJG5oaSwkbmxvKTsKCSZweG9yCSgkWmxvLCR0bXApOwoJJmpzCSgmbGFiZWwoIm1teF9icmVhayIpKTsKCgkmc2hsCSgmTEIoJG5sbyksNCk7CgkmYW5kCSgkcmVtLDB4Zik7CgkmcHNybHEJKCRabG8sNCk7CgkmYW5kCSgkbmhpLDB4ZjApOwoJJm1vdnEJKCR0bXAsJFpoaSk7CgkmcHNybHEJKCRaaGksNCk7CgkmcHhvcgkoJFpsbywmUVdQKDgsJEh0YmwsJG5sbykpOwoJJnBzbGxxCSgkdG1wLDYwKTsKCSZweG9yCSgkWmhpLCZRV1AoMCwkcmVtXzRiaXQsJHJlbSw4KSk7CgkmbW92ZAkoJHJlbSwkWmxvKTsKCSZweG9yCSgkWmhpLCZRV1AoMCwkSHRibCwkbmxvKSk7CgkmcHhvcgkoJFpsbywkdG1wKTsKCSZqbXAJKCZsYWJlbCgibW14X2xvb3AiKSk7CgogICAgJnNldF9sYWJlbCgibW14X2JyZWFrIiwxNik7Cgkmc2hsCSgmTEIoJG5sbyksNCk7CgkmYW5kCSgkcmVtLDB4Zik7CgkmcHNybHEJKCRabG8sNCk7CgkmYW5kCSgkbmhpLDB4ZjApOwoJJm1vdnEJKCR0bXAsJFpoaSk7CgkmcHNybHEJKCRaaGksNCk7CgkmcHhvcgkoJFpsbywmUVdQKDgsJEh0YmwsJG5sbykpOwoJJnBzbGxxCSgkdG1wLDYwKTsKCSZweG9yCSgkWmhpLCZRV1AoMCwkcmVtXzRiaXQsJHJlbSw4KSk7CgkmbW92ZAkoJHJlbSwkWmxvKTsKCSZweG9yCSgkWmhpLCZRV1AoMCwkSHRibCwkbmxvKSk7CgkmcHhvcgkoJFpsbywkdG1wKTsKCgkmcHNybHEJKCRabG8sNCk7CgkmYW5kCSgkcmVtLDB4Zik7CgkmbW92cQkoJHRtcCwkWmhpKTsKCSZwc3JscQkoJFpoaSw0KTsKCSZweG9yCSgkWmxvLCZRV1AoOCwkSHRibCwkbmhpKSk7CgkmcHNsbHEJKCR0bXAsNjApOwoJJnB4b3IJKCRaaGksJlFXUCgwLCRyZW1fNGJpdCwkcmVtLDgpKTsKCSZtb3ZkCSgkcmVtLCRabG8pOwoJJnB4b3IJKCRaaGksJlFXUCgwLCRIdGJsLCRuaGkpKTsKCSZweG9yCSgkWmxvLCR0bXApOwoKCSZwc3JscQkoJFpsbywzMik7CSMgbG93ZXIgcGFydCBvZiBabG8gaXMgYWxyZWFkeSB0aGVyZQoJJm1vdmQJKCRaaGwsJFpoaSk7CgkmcHNybHEJKCRaaGksMzIpOwoJJm1vdmQJKCRabGgsJFpsbyk7CgkmbW92ZAkoJFpoaCwkWmhpKTsKCgkmYnN3YXAJKCRabGwpOwoJJmJzd2FwCSgkWmhsKTsKCSZic3dhcAkoJFpsaCk7CgkmYnN3YXAJKCRaaGgpOwp9CgomZnVuY3Rpb25fYmVnaW4oImdjbV9nbXVsdF80Yml0X21teCIpOwoJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsJIyBsb2FkIFhpCgkmbW92CSgkSHRibCwmd3BhcmFtKDEpKTsJIyBsb2FkIEh0YWJsZQoKCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsKCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOwoJJmJsaW5kcG9wKCJlYXgiKTsKCSZsZWEJKCJlYXgiLCZEV1AoJmxhYmVsKCJyZW1fNGJpdCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCJlYXgiKSk7CgoJJm1vdnoJKCRabGwsJkJQKDE1LCRpbnApKTsKCgkmbW14X2xvb3AoJGlucCwiZWF4Iik7CgoJJmVtbXMJKCk7CgkmbW92CSgmRFdQKDEyLCRpbnApLCRabGwpOwoJJm1vdgkoJkRXUCg0LCRpbnApLCRaaGwpOwoJJm1vdgkoJkRXUCg4LCRpbnApLCRabGgpOwoJJm1vdgkoJkRXUCgwLCRpbnApLCRaaGgpOwomZnVuY3Rpb25fZW5kKCJnY21fZ211bHRfNGJpdF9tbXgiKTsKDAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQmVsb3cgc3Vicm91dGluZSBpcyAiNTI4QiIgdmFyaWFudCBvZiAiNC1iaXQiIEdDTSBHSEFTSCBmdW5jdGlvbgojIChzZWUgZ2NtMTI4LmMgZm9yIGRldGFpbHMpLiBJdCBwcm92aWRlcyBmdXJ0aGVyIDIwLTQwJSBwZXJmb3JtYW5jZQojIGltcHJvdmVtZW50IG92ZXIgYWJvdmUgbWVudGlvbmVkICJNYXkiIHZlcnNpb24uCgomc3RhdGljX2xhYmVsKCJyZW1fOGJpdCIpOwoKJmZ1bmN0aW9uX2JlZ2luKCJnY21fZ2hhc2hfNGJpdF9tbXgiKTsKeyBteSAoJFpsbywkWmhpKSA9ICgibW03IiwibW02Iik7CiAgbXkgJHJlbV84Yml0ID0gImVzaSI7CiAgbXkgJEh0YmwgPSAiZWJ4IjsKCiAgICAjIHBhcmFtZXRlciBibG9jawogICAgJm1vdgkoImVheCIsJndwYXJhbSgwKSk7CQkjIFhpCiAgICAmbW92CSgiZWJ4Iiwmd3BhcmFtKDEpKTsJCSMgSHRhYmxlCiAgICAmbW92CSgiZWN4Iiwmd3BhcmFtKDIpKTsJCSMgaW5wCiAgICAmbW92CSgiZWR4Iiwmd3BhcmFtKDMpKTsJCSMgbGVuCiAgICAmbW92CSgiZWJwIiwiZXNwIik7CQkJIyBvcmlnaW5hbCAlZXNwCiAgICAmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7CiAgICAmc2V0X2xhYmVsCSgicGljX3BvaW50Iik7CiAgICAmYmxpbmRwb3AJKCRyZW1fOGJpdCk7CiAgICAmbGVhCSgkcmVtXzhiaXQsJkRXUCgmbGFiZWwoInJlbV84Yml0IikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksJHJlbV84Yml0KSk7CgogICAgJnN1YgkoImVzcCIsNTEyKzE2KzE2KTsJCSMgYWxsb2NhdGUgc3RhY2sgZnJhbWUuLi4KICAgICZhbmQJKCJlc3AiLC02NCk7CQkJIyAuLi5hbmQgYWxpZ24gaXQKICAgICZzdWIJKCJlc3AiLDE2KTsJCQkjIHBsYWNlIGZvciAodTgpKEhbXTw8NCkKCiAgICAmYWRkCSgiZWR4IiwiZWN4Iik7CQkJIyBwb2ludGVyIHRvIHRoZSBlbmQgb2YgaW5wdXQKICAgICZtb3YJKCZEV1AoNTI4KzE2KzAsImVzcCIpLCJlYXgiKTsJIyBzYXZlIFhpCiAgICAmbW92CSgmRFdQKDUyOCsxNis4LCJlc3AiKSwiZWR4Iik7CSMgc2F2ZSBpbnArbGVuCiAgICAmbW92CSgmRFdQKDUyOCsxNisxMiwiZXNwIiksImVicCIpOwkjIHNhdmUgb3JpZ2luYWwgJWVzcAoKICAgIHsgbXkgQGxvICA9ICgibW0wIiwibW0xIiwibW0yIik7CiAgICAgIG15IEBoaSAgPSAoIm1tMyIsIm1tNCIsIm1tNSIpOwogICAgICBteSBAdG1wID0gKCJtbTYiLCJtbTciKTsKICAgICAgbXkgKCRvZmYxLCRvZmYyLCRpKSA9ICgwLDAsKTsKCiAgICAgICZhZGQJKCRIdGJsLDEyOCk7CQkJIyBvcHRpbWl6ZSBmb3Igc2l6ZQogICAgICAmbGVhCSgiZWRpIiwmRFdQKDE2KzEyOCwiZXNwIikpOwogICAgICAmbGVhCSgiZWJwIiwmRFdQKDE2KzI1NisxMjgsImVzcCIpKTsKCiAgICAgICMgZGVjb21wb3NlIEh0YWJsZSAobG93IGFuZCBoaWdoIHBhcnRzIGFyZSBrZXB0IHNlcGFyYXRlbHkpLAogICAgICAjIGdlbmVyYXRlIEh0YWJsZVtdPj40LCAodTgpKEh0YWJsZVtdPDw0KSwgc2F2ZSB0byBzdGFjay4uLgogICAgICBmb3IgKCRpPTA7JGk8MTg7JGkrKykgewoKCSZtb3YJKCJlZHgiLCZEV1AoMTYqJGkrOC0xMjgsJEh0YmwpKQkJaWYgKCRpPDE2KTsKCSZtb3ZxCSgkbG9bMF0sJlFXUCgxNiokaSs4LTEyOCwkSHRibCkpCWlmICgkaTwxNik7CgkmcHNsbHEJKCR0bXBbMV0sNjApCQkJCWlmICgkaT4xKTsKCSZtb3ZxCSgkaGlbMF0sJlFXUCgxNiokaSswLTEyOCwkSHRibCkpCWlmICgkaTwxNik7CgkmcG9yCSgkbG9bMl0sJHRtcFsxXSkJCQlpZiAoJGk+MSk7CgkmbW92cQkoJlFXUCgkb2ZmMS0xMjgsImVkaSIpLCRsb1sxXSkJCWlmICgkaT4wICYmICRpPDE3KTsKCSZwc3JscQkoJGxvWzFdLDQpCQkJCWlmICgkaT4wICYmICRpPDE3KTsKCSZtb3ZxCSgmUVdQKCRvZmYxLCJlZGkiKSwkaGlbMV0pCQlpZiAoJGk+MCAmJiAkaTwxNyk7CgkmbW92cQkoJHRtcFswXSwkaGlbMV0pCQkJaWYgKCRpPjAgJiYgJGk8MTcpOwoJJm1vdnEJKCZRV1AoJG9mZjItMTI4LCJlYnAiKSwkbG9bMl0pCQlpZiAoJGk+MSk7CgkmcHNybHEJKCRoaVsxXSw0KQkJCQlpZiAoJGk+MCAmJiAkaTwxNyk7CgkmbW92cQkoJlFXUCgkb2ZmMiwiZWJwIiksJGhpWzJdKQkJaWYgKCRpPjEpOwoJJnNobAkoImVkeCIsNCkJCQkJaWYgKCRpPDE2KTsKCSZtb3YJKCZCUCgkaSwiZXNwIiksJkxCKCJlZHgiKSkJCWlmICgkaTwxNik7CgoJdW5zaGlmdAkoQGxvLHBvcChAbG8pKTsJCQkjICJyb3RhdGUiIHJlZ2lzdGVycwoJdW5zaGlmdAkoQGhpLHBvcChAaGkpKTsKCXVuc2hpZnQJKEB0bXAscG9wKEB0bXApKTsKCSRvZmYxICs9IDgJaWYgKCRpPjApOwoJJG9mZjIgKz0gOAlpZiAoJGk+MSk7CiAgICAgIH0KICAgIH0KCiAgICAmbW92cQkoJFpoaSwmUVdQKDAsImVheCIpKTsKICAgICZtb3YJKCJlYngiLCZEV1AoOCwiZWF4IikpOwogICAgJm1vdgkoImVkeCIsJkRXUCgxMiwiZWF4IikpOwkJIyBsb2FkIFhpCgomc2V0X2xhYmVsKCJvdXRlciIsMTYpOwogIHsgbXkgJG5sbyA9ICJlYXgiOwogICAgbXkgJGRhdCA9ICJlZHgiOwogICAgbXkgQG5oaSA9ICgiZWRpIiwiZWJwIik7CiAgICBteSBAcmVtID0gKCJlYngiLCJlY3giKTsKICAgIG15IEByZWQgPSAoIm1tMCIsIm1tMSIsIm1tMiIpOwogICAgbXkgJHRtcCA9ICJtbTMiOwoKICAgICZ4b3IJKCRkYXQsJkRXUCgxMiwiZWN4IikpOwkJIyBtZXJnZSBpbnB1dCBkYXRhCiAgICAmeG9yCSgiZWJ4IiwmRFdQKDgsImVjeCIpKTsKICAgICZweG9yCSgkWmhpLCZRV1AoMCwiZWN4IikpOwogICAgJmxlYQkoImVjeCIsJkRXUCgxNiwiZWN4IikpOwkJIyBpbnArPTE2CiAgICAjJm1vdgkoJkRXUCg1MjgrMTIsImVzcCIpLCRkYXQpOwkjIHNhdmUgaW5wXlhpCiAgICAmbW92CSgmRFdQKDUyOCs4LCJlc3AiKSwiZWJ4Iik7CiAgICAmbW92cQkoJlFXUCg1MjgrMCwiZXNwIiksJFpoaSk7CiAgICAmbW92CSgmRFdQKDUyOCsxNis0LCJlc3AiKSwiZWN4Iik7CSMgc2F2ZSBpbnAKCiAgICAmeG9yCSgkbmxvLCRubG8pOwogICAgJnJvbAkoJGRhdCw4KTsKICAgICZtb3YJKCZMQigkbmxvKSwmTEIoJGRhdCkpOwogICAgJm1vdgkoJG5oaVsxXSwkbmxvKTsKICAgICZhbmQJKCZMQigkbmxvKSwweDBmKTsKICAgICZzaHIJKCRuaGlbMV0sNCk7CiAgICAmcHhvcgkoJHJlZFswXSwkcmVkWzBdKTsKICAgICZyb2wJKCRkYXQsOCk7CQkJIyBuZXh0IGJ5dGUKICAgICZweG9yCSgkcmVkWzFdLCRyZWRbMV0pOwogICAgJnB4b3IJKCRyZWRbMl0sJHJlZFsyXSk7CgogICAgIyBKdXN0IGxpa2UgaW4gIk1heSIgdmVyc29uIG1vZHVsby1zY2hlZHVsZSBmb3IgY3JpdGljYWwgcGF0aCBpbgogICAgIyAnWi5oaSBePSByZW1fOGJpdFtaLmxvJjB4ZmZeKCh1OClIW25oaV08PDQpXTw8NDgnLiBGaW5hbCAncHhvcicKICAgICMgaXMgc2NoZWR1bGVkIHNvIGxhdGUgdGhhdCByZW1fOGJpdFtdIGhhcyB0byBiZSBzaGlmdGVkICpyaWdodCoKICAgICMgYnkgMTYsIHdoaWNoIGlzIHdoeSBsYXN0IGFyZ3VtZW50IHRvIHBpbnNydyBpcyAyLCB3aGljaAogICAgIyBjb3JyZXNwb25kcyB0byA8PDMyPTw8NDg+PjE2Li4uCiAgICBmb3IgKCRqPTExLCRpPTA7JGk8MTU7JGkrKykgewoKICAgICAgaWYgKCRpPjApIHsKCSZweG9yCSgkWmxvLCZRV1AoMTYsImVzcCIsJG5sbyw4KSk7CQkjIFpePUhbbmxvXQoJJnJvbAkoJGRhdCw4KTsJCQkJIyBuZXh0IGJ5dGUKCSZweG9yCSgkWmhpLCZRV1AoMTYrMTI4LCJlc3AiLCRubG8sOCkpOwoKCSZweG9yCSgkWmxvLCR0bXApOwoJJnB4b3IJKCRaaGksJlFXUCgxNisyNTYrMTI4LCJlc3AiLCRuaGlbMF0sOCkpOwoJJnhvcgkoJkxCKCRyZW1bMV0pLCZCUCgwLCJlc3AiLCRuaGlbMF0pKTsJIyByZW1eKEhbbmhpXTw8NCkKICAgICAgfSBlbHNlIHsKCSZtb3ZxCSgkWmxvLCZRV1AoMTYsImVzcCIsJG5sbyw4KSk7CgkmbW92cQkoJFpoaSwmUVdQKDE2KzEyOCwiZXNwIiwkbmxvLDgpKTsKICAgICAgfQoKCSZtb3YJKCZMQigkbmxvKSwmTEIoJGRhdCkpOwoJJm1vdgkoJGRhdCwmRFdQKDUyOCskaiwiZXNwIikpCQlpZiAoLS0kaiU0PT0wKTsKCgkmbW92ZAkoJHJlbVswXSwkWmxvKTsKCSZtb3Z6CSgkcmVtWzFdLCZMQigkcmVtWzFdKSkJCQlpZiAoJGk+MCk7CgkmcHNybHEJKCRabG8sOCk7CQkJCSMgWj4+PTgKCgkmbW92cQkoJHRtcCwkWmhpKTsKCSZtb3YJKCRuaGlbMF0sJG5sbyk7CgkmcHNybHEJKCRaaGksOCk7CgoJJnB4b3IJKCRabG8sJlFXUCgxNisyNTYrMCwiZXNwIiwkbmhpWzFdLDgpKTsJIyBaXj1IW25oaV0+PjQKCSZhbmQJKCZMQigkbmxvKSwweDBmKTsKCSZwc2xscQkoJHRtcCw1Nik7CgoJJnB4b3IJKCRaaGksJHJlZFsxXSkJCQkJaWYgKCRpPjEpOwoJJnNocgkoJG5oaVswXSw0KTsKCSZwaW5zcncJKCRyZWRbMF0sJldQKDAsJHJlbV84Yml0LCRyZW1bMV0sMiksMikJaWYgKCRpPjApOwoKCXVuc2hpZnQJKEByZWQscG9wKEByZWQpKTsJCQkjICJyb3RhdGUiIHJlZ2lzdGVycwoJdW5zaGlmdAkoQHJlbSxwb3AoQHJlbSkpOwoJdW5zaGlmdAkoQG5oaSxwb3AoQG5oaSkpOwogICAgfQoKICAgICZweG9yCSgkWmxvLCZRV1AoMTYsImVzcCIsJG5sbyw4KSk7CQkjIFpePUhbbmxvXQogICAgJnB4b3IJKCRaaGksJlFXUCgxNisxMjgsImVzcCIsJG5sbyw4KSk7CiAgICAmeG9yCSgmTEIoJHJlbVsxXSksJkJQKDAsImVzcCIsJG5oaVswXSkpOwkjIHJlbV4oSFtuaGldPDw0KQoKICAgICZweG9yCSgkWmxvLCR0bXApOwogICAgJnB4b3IJKCRaaGksJlFXUCgxNisyNTYrMTI4LCJlc3AiLCRuaGlbMF0sOCkpOwogICAgJm1vdnoJKCRyZW1bMV0sJkxCKCRyZW1bMV0pKTsKCiAgICAmcHhvcgkoJHJlZFsyXSwkcmVkWzJdKTsJCQkjIGNsZWFyIDJuZCB3b3JkCiAgICAmcHNsbHEJKCRyZWRbMV0sNCk7CgogICAgJm1vdmQJKCRyZW1bMF0sJFpsbyk7CiAgICAmcHNybHEJKCRabG8sNCk7CQkJCSMgWj4+PTQKCiAgICAmbW92cQkoJHRtcCwkWmhpKTsKICAgICZwc3JscQkoJFpoaSw0KTsKICAgICZzaGwJKCRyZW1bMF0sNCk7CQkJCSMgcmVtPDw0CgogICAgJnB4b3IJKCRabG8sJlFXUCgxNiwiZXNwIiwkbmhpWzFdLDgpKTsJIyBaXj1IW25oaV0KICAgICZwc2xscQkoJHRtcCw2MCk7CiAgICAmbW92egkoJHJlbVswXSwmTEIoJHJlbVswXSkpOwoKICAgICZweG9yCSgkWmxvLCR0bXApOwogICAgJnB4b3IJKCRaaGksJlFXUCgxNisxMjgsImVzcCIsJG5oaVsxXSw4KSk7CgogICAgJnBpbnNydwkoJHJlZFswXSwmV1AoMCwkcmVtXzhiaXQsJHJlbVsxXSwyKSwyKTsKICAgICZweG9yCSgkWmhpLCRyZWRbMV0pOwoKICAgICZtb3ZkCSgkZGF0LCRabG8pOwogICAgJnBpbnNydwkoJHJlZFsyXSwmV1AoMCwkcmVtXzhiaXQsJHJlbVswXSwyKSwzKTsJIyBsYXN0IGlzIDw8NDgKCiAgICAmcHNsbHEJKCRyZWRbMF0sMTIpOwkJCQkjIGNvcnJlY3QgYnkgPDwxNj4+NAogICAgJnB4b3IJKCRaaGksJHJlZFswXSk7CiAgICAmcHNybHEJKCRabG8sMzIpOwogICAgJnB4b3IJKCRaaGksJHJlZFsyXSk7CgogICAgJm1vdgkoImVjeCIsJkRXUCg1MjgrMTYrNCwiZXNwIikpOwkjIHJlc3RvcmUgaW5wCiAgICAmbW92ZAkoImVieCIsJFpsbyk7CiAgICAmbW92cQkoJHRtcCwkWmhpKTsJCQkjIDAxMjM0NTY3CiAgICAmcHNsbHcJKCRaaGksOCk7CQkJIyAxLjMuNS43LgogICAgJnBzcmx3CSgkdG1wLDgpOwkJCSMgLjAuMi40LjYKICAgICZwb3IJKCRaaGksJHRtcCk7CQkJIyAxMDMyNTQ3NgogICAgJmJzd2FwCSgkZGF0KTsKICAgICZwc2h1ZncJKCRaaGksJFpoaSwwYjAwMDExMDExKTsJCSMgNzY1NDMyMTAKICAgICZic3dhcAkoImVieCIpOwogICAgCiAgICAmY21wCSgiZWN4IiwmRFdQKDUyOCsxNis4LCJlc3AiKSk7CSMgYXJlIHdlIGRvbmU/CiAgICAmam5lCSgmbGFiZWwoIm91dGVyIikpOwogIH0KCiAgICAmbW92CSgiZWF4IiwmRFdQKDUyOCsxNiswLCJlc3AiKSk7CSMgcmVzdG9yZSBYaQogICAgJm1vdgkoJkRXUCgxMiwiZWF4IiksImVkeCIpOwogICAgJm1vdgkoJkRXUCg4LCJlYXgiKSwiZWJ4Iik7CiAgICAmbW92cQkoJlFXUCgwLCJlYXgiKSwkWmhpKTsKCiAgICAmbW92CSgiZXNwIiwmRFdQKDUyOCsxNisxMiwiZXNwIikpOwkjIHJlc3RvcmUgb3JpZ2luYWwgJWVzcAogICAgJmVtbXMJKCk7Cn0KJmZ1bmN0aW9uX2VuZCgiZ2NtX2doYXNoXzRiaXRfbW14Iik7Cn19CgwKaWYgKCRzc2UyKSB7ewojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgUENMTVVMUURRIHZlcnNpb24uCgokWGlwPSJlYXgiOwokSHRibD0iZWR4IjsKJGNvbnN0PSJlY3giOwokaW5wPSJlc2kiOwokbGVuPSJlYngiOwoKKCRYaSwkWGhpKT0oInhtbTAiLCJ4bW0xIik7CSRIa2V5PSJ4bW0yIjsKKCRUMSwkVDIsJFQzKT0oInhtbTMiLCJ4bW00IiwieG1tNSIpOwooJFhuLCRYaG4pPSgieG1tNiIsInhtbTciKTsKCiZzdGF0aWNfbGFiZWwoImJzd2FwIik7CgpzdWIgY2xtdWw2NHg2NF9UMiB7CSMgbWluaW1hbCAicmVnaXN0ZXIiIHByZXNzdXJlCm15ICgkWGhpLCRYaSwkSGtleSk9QF87CgoJJm1vdmRxYQkJKCRYaGksJFhpKTsJCSMKCSZwc2h1ZmQJCSgkVDEsJFhpLDBiMDEwMDExMTApOwoJJnBzaHVmZAkJKCRUMiwkSGtleSwwYjAxMDAxMTEwKTsKCSZweG9yCQkoJFQxLCRYaSk7CQkjCgkmcHhvcgkJKCRUMiwkSGtleSk7CgoJJnBjbG11bHFkcQkoJFhpLCRIa2V5LDB4MDApOwkjIyMjIyMjCgkmcGNsbXVscWRxCSgkWGhpLCRIa2V5LDB4MTEpOwkjIyMjIyMjCgkmcGNsbXVscWRxCSgkVDEsJFQyLDB4MDApOwkJIyMjIyMjIwoJJnhvcnBzCQkoJFQxLCRYaSk7CQkjCgkmeG9ycHMJCSgkVDEsJFhoaSk7CQkjCgoJJm1vdmRxYQkJKCRUMiwkVDEpOwkJIwoJJnBzcmxkcQkJKCRUMSw4KTsKCSZwc2xsZHEJCSgkVDIsOCk7CQkjCgkmcHhvcgkJKCRYaGksJFQxKTsKCSZweG9yCQkoJFhpLCRUMik7CQkjCn0KCnN1YiBjbG11bDY0eDY0X1QzIHsKIyBFdmVuIHRob3VnaCB0aGlzIHN1YnJvdXRpbmUgb2ZmZXJzIHZpc3VhbGx5IGJldHRlciBJTFAsIGl0CiMgd2FzIGVtcGlyaWNhbGx5IGZvdW5kIHRvIGJlIGEgdGFkIHNsb3dlciB0aGFuIGFib3ZlIHZlcnNpb24uCiMgQXQgbGVhc3QgaW4gZ2NtX2doYXNoX2NsbXVsIGNvbnRleHQuIEJ1dCBpdCdzIGp1c3QgYXMgd2VsbCwKIyBiZWNhdXNlIGxvb3AgbW9kdWxvLXNjaGVkdWxpbmcgaXMgcG9zc2libGUgb25seSB0aGFua3MgdG8KIyBtaW5pbWl6ZWQgInJlZ2lzdGVyIiBwcmVzc3VyZS4uLgpteSAoJFhoaSwkWGksJEhrZXkpPUBfOwoKCSZtb3ZkcWEJCSgkVDEsJFhpKTsJCSMKCSZtb3ZkcWEJCSgkWGhpLCRYaSk7CgkmcGNsbXVscWRxCSgkWGksJEhrZXksMHgwMCk7CSMjIyMjIyMKCSZwY2xtdWxxZHEJKCRYaGksJEhrZXksMHgxMSk7CSMjIyMjIyMKCSZwc2h1ZmQJCSgkVDIsJFQxLDBiMDEwMDExMTApOwkjCgkmcHNodWZkCQkoJFQzLCRIa2V5LDBiMDEwMDExMTApOwoJJnB4b3IJCSgkVDIsJFQxKTsJCSMKCSZweG9yCQkoJFQzLCRIa2V5KTsKCSZwY2xtdWxxZHEJKCRUMiwkVDMsMHgwMCk7CQkjIyMjIyMjCgkmcHhvcgkJKCRUMiwkWGkpOwkJIwoJJnB4b3IJCSgkVDIsJFhoaSk7CQkjCgoJJm1vdmRxYQkJKCRUMywkVDIpOwkJIwoJJnBzcmxkcQkJKCRUMiw4KTsKCSZwc2xsZHEJCSgkVDMsOCk7CQkjCgkmcHhvcgkJKCRYaGksJFQyKTsKCSZweG9yCQkoJFhpLCRUMyk7CQkjCn0KDAppZiAoMSkgewkJIyBBbGdvcml0aG0gOSB3aXRoIDw8MSB0d2lzdC4KCQkJIyBSZWR1Y3Rpb24gaXMgc2hvcnRlciBhbmQgdXNlcyBvbmx5IHR3bwoJCQkjIHRlbXBvcmFyeSByZWdpc3RlcnMsIHdoaWNoIG1ha2VzIGl0IGJldHRlcgoJCQkjIGNhbmRpZGF0ZSBmb3IgaW50ZXJsZWF2aW5nIHdpdGggNjR4NjQKCQkJIyBtdWx0aXBsaWNhdGlvbi4gUHJlLW1vZHVsby1zY2hlZHVsZWQgbG9vcAoJCQkjIHdhcyBmb3VuZCB0byBiZSB+MjAlIGZhc3RlciB0aGFuIEFsZ29yaXRobSA1CgkJCSMgYmVsb3cuIEFsZ29yaXRobSA5IHdhcyB0aGVyZWZvcmUgY2hvc2VuIGZvcgoJCQkjIGZ1cnRoZXIgb3B0aW1pemF0aW9uLi4uCgpzdWIgcmVkdWN0aW9uX2FsZzkgewkjIDE3LzEzIHRpbWVzIGZhc3RlciB0aGFuIEludGVsIHZlcnNpb24KbXkgKCRYaGksJFhpKSA9IEBfOwoKCSMgMXN0IHBoYXNlCgkmbW92ZHFhCQkoJFQxLCRYaSk7CQkjCgkmcHNsbHEJCSgkWGksMSk7CgkmcHhvcgkJKCRYaSwkVDEpOwkJIwoJJnBzbGxxCQkoJFhpLDUpOwkJIwoJJnB4b3IJCSgkWGksJFQxKTsJCSMKCSZwc2xscQkJKCRYaSw1Nyk7CQkjCgkmbW92ZHFhCQkoJFQyLCRYaSk7CQkjCgkmcHNsbGRxCQkoJFhpLDgpOwoJJnBzcmxkcQkJKCRUMiw4KTsJCSMKCSZweG9yCQkoJFhpLCRUMSk7CgkmcHhvcgkJKCRYaGksJFQyKTsJCSMKCgkjIDJuZCBwaGFzZQoJJm1vdmRxYQkJKCRUMiwkWGkpOwoJJnBzcmxxCQkoJFhpLDUpOwoJJnB4b3IJCSgkWGksJFQyKTsJCSMKCSZwc3JscQkJKCRYaSwxKTsJCSMKCSZweG9yCQkoJFhpLCRUMik7CQkjCgkmcHhvcgkJKCRUMiwkWGhpKTsKCSZwc3JscQkJKCRYaSwxKTsJCSMKCSZweG9yCQkoJFhpLCRUMik7CQkjCn0KCiZmdW5jdGlvbl9iZWdpbl9CKCJnY21faW5pdF9jbG11bCIpOwoJJm1vdgkJKCRIdGJsLCZ3cGFyYW0oMCkpOwoJJm1vdgkJKCRYaXAsJndwYXJhbSgxKSk7CgoJJmNhbGwJCSgmbGFiZWwoInBpYyIpKTsKJnNldF9sYWJlbCgicGljIik7CgkmYmxpbmRwb3AJKCRjb25zdCk7CgkmbGVhCQkoJGNvbnN0LCZEV1AoJmxhYmVsKCJic3dhcCIpLiItIi4mbGFiZWwoInBpYyIpLCRjb25zdCkpOwoKCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDAsJFhpcCkpOwoJJnBzaHVmZAkJKCRIa2V5LCRIa2V5LDBiMDEwMDExMTApOyMgZHdvcmQgc3dhcAoKCSMgPDwxIHR3aXN0CgkmcHNodWZkCQkoJFQyLCRIa2V5LDBiMTExMTExMTEpOwkjIGJyb2FkY2FzdCB1cHBlcm1vc3QgZHdvcmQKCSZtb3ZkcWEJCSgkVDEsJEhrZXkpOwoJJnBzbGxxCQkoJEhrZXksMSk7CgkmcHhvcgkJKCRUMywkVDMpOwkJIwoJJnBzcmxxCQkoJFQxLDYzKTsKCSZwY21wZ3RkCSgkVDMsJFQyKTsJCSMgYnJvYWRjYXN0IGNhcnJ5IGJpdAoJJnBzbGxkcQkJKCRUMSw4KTsKCSZwb3IJCSgkSGtleSwkVDEpOwkJIyBIPDw9MQoKCSMgbWFnaWMgcmVkdWN0aW9uCgkmcGFuZAkJKCRUMywmUVdQKDE2LCRjb25zdCkpOwkjIDB4MWMyX3BvbHlub21pYWwKCSZweG9yCQkoJEhrZXksJFQzKTsJCSMgaWYoY2FycnkpIEhePTB4MWMyX3BvbHlub21pYWwKCgkjIGNhbGN1bGF0ZSBIXjIKCSZtb3ZkcWEJCSgkWGksJEhrZXkpOwoJJmNsbXVsNjR4NjRfVDIJKCRYaGksJFhpLCRIa2V5KTsKCSZyZWR1Y3Rpb25fYWxnOQkoJFhoaSwkWGkpOwoKCSZtb3ZkcXUJCSgmUVdQKDAsJEh0YmwpLCRIa2V5KTsJIyBzYXZlIEgKCSZtb3ZkcXUJCSgmUVdQKDE2LCRIdGJsKSwkWGkpOwkjIHNhdmUgSF4yCgoJJnJldAkJKCk7CiZmdW5jdGlvbl9lbmRfQigiZ2NtX2luaXRfY2xtdWwiKTsKCiZmdW5jdGlvbl9iZWdpbl9CKCJnY21fZ211bHRfY2xtdWwiKTsKCSZtb3YJCSgkWGlwLCZ3cGFyYW0oMCkpOwoJJm1vdgkJKCRIdGJsLCZ3cGFyYW0oMSkpOwoKCSZjYWxsCQkoJmxhYmVsKCJwaWMiKSk7CiZzZXRfbGFiZWwoInBpYyIpOwoJJmJsaW5kcG9wCSgkY29uc3QpOwoJJmxlYQkJKCRjb25zdCwmRFdQKCZsYWJlbCgiYnN3YXAiKS4iLSIuJmxhYmVsKCJwaWMiKSwkY29uc3QpKTsKCgkmbW92ZHF1CQkoJFhpLCZRV1AoMCwkWGlwKSk7CgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKCSZtb3Z1cHMJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsKCSZwc2h1ZmIJCSgkWGksJFQzKTsKCgkmY2xtdWw2NHg2NF9UMgkoJFhoaSwkWGksJEhrZXkpOwoJJnJlZHVjdGlvbl9hbGc5CSgkWGhpLCRYaSk7CgoJJnBzaHVmYgkJKCRYaSwkVDMpOwoJJm1vdmRxdQkJKCZRV1AoMCwkWGlwKSwkWGkpOwoKCSZyZXQJKCk7CiZmdW5jdGlvbl9lbmRfQigiZ2NtX2dtdWx0X2NsbXVsIik7CgomZnVuY3Rpb25fYmVnaW4oImdjbV9naGFzaF9jbG11bCIpOwoJJm1vdgkJKCRYaXAsJndwYXJhbSgwKSk7CgkmbW92CQkoJEh0YmwsJndwYXJhbSgxKSk7CgkmbW92CQkoJGlucCwmd3BhcmFtKDIpKTsKCSZtb3YJCSgkbGVuLCZ3cGFyYW0oMykpOwoKCSZjYWxsCQkoJmxhYmVsKCJwaWMiKSk7CiZzZXRfbGFiZWwoInBpYyIpOwoJJmJsaW5kcG9wCSgkY29uc3QpOwoJJmxlYQkJKCRjb25zdCwmRFdQKCZsYWJlbCgiYnN3YXAiKS4iLSIuJmxhYmVsKCJwaWMiKSwkY29uc3QpKTsKCgkmbW92ZHF1CQkoJFhpLCZRV1AoMCwkWGlwKSk7CgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsKCSZwc2h1ZmIJCSgkWGksJFQzKTsKCgkmc3ViCQkoJGxlbiwweDEwKTsKCSZqegkJKCZsYWJlbCgib2RkX3RhaWwiKSk7CgoJIyMjIyMjIwoJIyBYaSsyID1bSCooSWkrMSArIFhpKzEpXSBtb2QgUCA9CgkjCVsoSCpJaSsxKSArIChIKlhpKzEpXSBtb2QgUCA9CgkjCVsoSCpJaSsxKSArIEheMiooSWkrWGkpXSBtb2QgUAoJIwoJJm1vdmRxdQkJKCRUMSwmUVdQKDAsJGlucCkpOwkjIElpCgkmbW92ZHF1CQkoJFhuLCZRV1AoMTYsJGlucCkpOwkjIElpKzEKCSZwc2h1ZmIJCSgkVDEsJFQzKTsKCSZwc2h1ZmIJCSgkWG4sJFQzKTsKCSZweG9yCQkoJFhpLCRUMSk7CQkjIElpK1hpCgoJJmNsbXVsNjR4NjRfVDIJKCRYaG4sJFhuLCRIa2V5KTsJIyBIKklpKzEKCSZtb3Z1cHMJCSgkSGtleSwmUVdQKDE2LCRIdGJsKSk7CSMgbG9hZCBIXjIKCgkmbGVhCQkoJGlucCwmRFdQKDMyLCRpbnApKTsJIyBpKz0yCgkmc3ViCQkoJGxlbiwweDIwKTsKCSZqYmUJCSgmbGFiZWwoImV2ZW5fdGFpbCIpKTsKCiZzZXRfbGFiZWwoIm1vZF9sb29wIik7CgkmY2xtdWw2NHg2NF9UMgkoJFhoaSwkWGksJEhrZXkpOwkjIEheMiooSWkrWGkpCgkmbW92ZHF1CQkoJFQxLCZRV1AoMCwkaW5wKSk7CSMgSWkKCSZtb3Z1cHMJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsJIyBsb2FkIEgKCgkmcHhvcgkJKCRYaSwkWG4pOwkJIyAoSCpJaSsxKSArIEheMiooSWkrWGkpCgkmcHhvcgkJKCRYaGksJFhobik7CgoJJm1vdmRxdQkJKCRYbiwmUVdQKDE2LCRpbnApKTsJIyBJaSsxCgkmcHNodWZiCQkoJFQxLCRUMyk7CgkmcHNodWZiCQkoJFhuLCRUMyk7CgoJJm1vdmRxYQkJKCRUMywkWG4pOwkJIyZjbG11bDY0eDY0X1RYCSgkWGhuLCRYbiwkSGtleSk7IEgqSWkrMQoJJm1vdmRxYQkJKCRYaG4sJFhuKTsKCSAmcHhvcgkJKCRYaGksJFQxKTsJCSMgIklpK1hpIiwgY29uc3VtZSBlYXJseQoKCSAgJm1vdmRxYQkoJFQxLCRYaSk7CQkjJnJlZHVjdGlvbl9hbGc5KCRYaGksJFhpKTsgMXN0IHBoYXNlCgkgICZwc2xscQkoJFhpLDEpOwoJICAmcHhvcgkJKCRYaSwkVDEpOwkJIwoJICAmcHNsbHEJKCRYaSw1KTsJCSMKCSAgJnB4b3IJCSgkWGksJFQxKTsJCSMKCSZwY2xtdWxxZHEJKCRYbiwkSGtleSwweDAwKTsJIyMjIyMjIwoJICAmcHNsbHEJKCRYaSw1Nyk7CQkjCgkgICZtb3ZkcWEJKCRUMiwkWGkpOwkJIwoJICAmcHNsbGRxCSgkWGksOCk7CgkgICZwc3JsZHEJKCRUMiw4KTsJCSMJCgkgICZweG9yCQkoJFhpLCRUMSk7CgkmcHNodWZkCQkoJFQxLCRUMywwYjAxMDAxMTEwKTsKCSAgJnB4b3IJCSgkWGhpLCRUMik7CQkjCgkmcHhvcgkJKCRUMSwkVDMpOwoJJnBzaHVmZAkJKCRUMywkSGtleSwwYjAxMDAxMTEwKTsKCSZweG9yCQkoJFQzLCRIa2V5KTsJCSMKCgkmcGNsbXVscWRxCSgkWGhuLCRIa2V5LDB4MTEpOwkjIyMjIyMjCgkgICZtb3ZkcWEJKCRUMiwkWGkpOwkJIyAybmQgcGhhc2UKCSAgJnBzcmxxCSgkWGksNSk7CgkgICZweG9yCQkoJFhpLCRUMik7CQkjCgkgICZwc3JscQkoJFhpLDEpOwkJIwoJICAmcHhvcgkJKCRYaSwkVDIpOwkJIwoJICAmcHhvcgkJKCRUMiwkWGhpKTsKCSAgJnBzcmxxCSgkWGksMSk7CQkjCgkgICZweG9yCQkoJFhpLCRUMik7CQkjCgoJJnBjbG11bHFkcQkoJFQxLCRUMywweDAwKTsJCSMjIyMjIyMKCSZtb3Z1cHMJCSgkSGtleSwmUVdQKDE2LCRIdGJsKSk7CSMgbG9hZCBIXjIKCSZ4b3JwcwkJKCRUMSwkWG4pOwkJIwoJJnhvcnBzCQkoJFQxLCRYaG4pOwkJIwoKCSZtb3ZkcWEJCSgkVDMsJFQxKTsJCSMKCSZwc3JsZHEJCSgkVDEsOCk7CgkmcHNsbGRxCQkoJFQzLDgpOwkJIwoJJnB4b3IJCSgkWGhuLCRUMSk7CgkmcHhvcgkJKCRYbiwkVDMpOwkJIwoJJm1vdmRxYQkJKCRUMywmUVdQKDAsJGNvbnN0KSk7CgoJJmxlYQkJKCRpbnAsJkRXUCgzMiwkaW5wKSk7Cgkmc3ViCQkoJGxlbiwweDIwKTsKCSZqYQkJKCZsYWJlbCgibW9kX2xvb3AiKSk7Cgomc2V0X2xhYmVsKCJldmVuX3RhaWwiKTsKCSZjbG11bDY0eDY0X1QyCSgkWGhpLCRYaSwkSGtleSk7CSMgSF4yKihJaStYaSkKCgkmcHhvcgkJKCRYaSwkWG4pOwkJIyAoSCpJaSsxKSArIEheMiooSWkrWGkpCgkmcHhvcgkJKCRYaGksJFhobik7CgoJJnJlZHVjdGlvbl9hbGc5CSgkWGhpLCRYaSk7CgoJJnRlc3QJCSgkbGVuLCRsZW4pOwoJJmpuegkJKCZsYWJlbCgiZG9uZSIpKTsKCgkmbW92dXBzCQkoJEhrZXksJlFXUCgwLCRIdGJsKSk7CSMgbG9hZCBICiZzZXRfbGFiZWwoIm9kZF90YWlsIik7CgkmbW92ZHF1CQkoJFQxLCZRV1AoMCwkaW5wKSk7CSMgSWkKCSZwc2h1ZmIJCSgkVDEsJFQzKTsKCSZweG9yCQkoJFhpLCRUMSk7CQkjIElpK1hpCgoJJmNsbXVsNjR4NjRfVDIJKCRYaGksJFhpLCRIa2V5KTsJIyBIKihJaStYaSkKCSZyZWR1Y3Rpb25fYWxnOQkoJFhoaSwkWGkpOwoKJnNldF9sYWJlbCgiZG9uZSIpOwoJJnBzaHVmYgkJKCRYaSwkVDMpOwoJJm1vdmRxdQkJKCZRV1AoMCwkWGlwKSwkWGkpOwomZnVuY3Rpb25fZW5kKCJnY21fZ2hhc2hfY2xtdWwiKTsKDAp9IGVsc2UgewkJIyBBbGdvcml0aCA1LiBLZXB0IGZvciByZWZlcmVuY2UgcHVycG9zZXMuCgpzdWIgcmVkdWN0aW9uX2FsZzUgewkjIDE5LzE2IHRpbWVzIGZhc3RlciB0aGFuIEludGVsIHZlcnNpb24KbXkgKCRYaGksJFhpKT1AXzsKCgkjIDw8MQoJJm1vdmRxYQkJKCRUMSwkWGkpOwkJIwoJJm1vdmRxYQkJKCRUMiwkWGhpKTsKCSZwc2xsZAkJKCRYaSwxKTsKCSZwc2xsZAkJKCRYaGksMSk7CQkjCgkmcHNybGQJCSgkVDEsMzEpOwoJJnBzcmxkCQkoJFQyLDMxKTsJCSMKCSZtb3ZkcWEJCSgkVDMsJFQxKTsKCSZwc2xsZHEJCSgkVDEsNCk7CgkmcHNybGRxCQkoJFQzLDEyKTsJCSMKCSZwc2xsZHEJCSgkVDIsNCk7CgkmcG9yCQkoJFhoaSwkVDMpOwkJIwoJJnBvcgkJKCRYaSwkVDEpOwoJJnBvcgkJKCRYaGksJFQyKTsJCSMKCgkjIDFzdCBwaGFzZQoJJm1vdmRxYQkJKCRUMSwkWGkpOwoJJm1vdmRxYQkJKCRUMiwkWGkpOwoJJm1vdmRxYQkJKCRUMywkWGkpOwkJIwoJJnBzbGxkCQkoJFQxLDMxKTsKCSZwc2xsZAkJKCRUMiwzMCk7CgkmcHNsbGQJCSgkWGksMjUpOwkJIwoJJnB4b3IJCSgkVDEsJFQyKTsKCSZweG9yCQkoJFQxLCRYaSk7CQkjCgkmbW92ZHFhCQkoJFQyLCRUMSk7CQkjCgkmcHNsbGRxCQkoJFQxLDEyKTsKCSZwc3JsZHEJCSgkVDIsNCk7CQkjCgkmcHhvcgkJKCRUMywkVDEpOwoKCSMgMm5kIHBoYXNlCgkmcHhvcgkJKCRYaGksJFQzKTsJCSMKCSZtb3ZkcWEJCSgkWGksJFQzKTsKCSZtb3ZkcWEJCSgkVDEsJFQzKTsKCSZwc3JsZAkJKCRYaSwxKTsJCSMKCSZwc3JsZAkJKCRUMSwyKTsKCSZwc3JsZAkJKCRUMyw3KTsJCSMKCSZweG9yCQkoJFhpLCRUMSk7CgkmcHhvcgkJKCRYaGksJFQyKTsKCSZweG9yCQkoJFhpLCRUMyk7CQkjCgkmcHhvcgkJKCRYaSwkWGhpKTsJCSMKfQoKJmZ1bmN0aW9uX2JlZ2luX0IoImdjbV9pbml0X2NsbXVsIik7CgkmbW92CQkoJEh0YmwsJndwYXJhbSgwKSk7CgkmbW92CQkoJFhpcCwmd3BhcmFtKDEpKTsKCgkmY2FsbAkJKCZsYWJlbCgicGljIikpOwomc2V0X2xhYmVsKCJwaWMiKTsKCSZibGluZHBvcAkoJGNvbnN0KTsKCSZsZWEJCSgkY29uc3QsJkRXUCgmbGFiZWwoImJzd2FwIikuIi0iLiZsYWJlbCgicGljIiksJGNvbnN0KSk7CgoJJm1vdmRxdQkJKCRIa2V5LCZRV1AoMCwkWGlwKSk7CgkmcHNodWZkCQkoJEhrZXksJEhrZXksMGIwMTAwMTExMCk7IyBkd29yZCBzd2FwCgoJIyBjYWxjdWxhdGUgSF4yCgkmbW92ZHFhCQkoJFhpLCRIa2V5KTsKCSZjbG11bDY0eDY0X1QzCSgkWGhpLCRYaSwkSGtleSk7CgkmcmVkdWN0aW9uX2FsZzUJKCRYaGksJFhpKTsKCgkmbW92ZHF1CQkoJlFXUCgwLCRIdGJsKSwkSGtleSk7CSMgc2F2ZSBICgkmbW92ZHF1CQkoJlFXUCgxNiwkSHRibCksJFhpKTsJIyBzYXZlIEheMgoKCSZyZXQJCSgpOwomZnVuY3Rpb25fZW5kX0IoImdjbV9pbml0X2NsbXVsIik7CgomZnVuY3Rpb25fYmVnaW5fQigiZ2NtX2dtdWx0X2NsbXVsIik7CgkmbW92CQkoJFhpcCwmd3BhcmFtKDApKTsKCSZtb3YJCSgkSHRibCwmd3BhcmFtKDEpKTsKCgkmY2FsbAkJKCZsYWJlbCgicGljIikpOwomc2V0X2xhYmVsKCJwaWMiKTsKCSZibGluZHBvcAkoJGNvbnN0KTsKCSZsZWEJCSgkY29uc3QsJkRXUCgmbGFiZWwoImJzd2FwIikuIi0iLiZsYWJlbCgicGljIiksJGNvbnN0KSk7CgoJJm1vdmRxdQkJKCRYaSwmUVdQKDAsJFhpcCkpOwoJJm1vdmRxYQkJKCRYbiwmUVdQKDAsJGNvbnN0KSk7CgkmbW92ZHF1CQkoJEhrZXksJlFXUCgwLCRIdGJsKSk7CgkmcHNodWZiCQkoJFhpLCRYbik7CgoJJmNsbXVsNjR4NjRfVDMJKCRYaGksJFhpLCRIa2V5KTsKCSZyZWR1Y3Rpb25fYWxnNQkoJFhoaSwkWGkpOwoKCSZwc2h1ZmIJCSgkWGksJFhuKTsKCSZtb3ZkcXUJCSgmUVdQKDAsJFhpcCksJFhpKTsKCgkmcmV0CSgpOwomZnVuY3Rpb25fZW5kX0IoImdjbV9nbXVsdF9jbG11bCIpOwoKJmZ1bmN0aW9uX2JlZ2luKCJnY21fZ2hhc2hfY2xtdWwiKTsKCSZtb3YJCSgkWGlwLCZ3cGFyYW0oMCkpOwoJJm1vdgkJKCRIdGJsLCZ3cGFyYW0oMSkpOwoJJm1vdgkJKCRpbnAsJndwYXJhbSgyKSk7CgkmbW92CQkoJGxlbiwmd3BhcmFtKDMpKTsKCgkmY2FsbAkJKCZsYWJlbCgicGljIikpOwomc2V0X2xhYmVsKCJwaWMiKTsKCSZibGluZHBvcAkoJGNvbnN0KTsKCSZsZWEJCSgkY29uc3QsJkRXUCgmbGFiZWwoImJzd2FwIikuIi0iLiZsYWJlbCgicGljIiksJGNvbnN0KSk7CgoJJm1vdmRxdQkJKCRYaSwmUVdQKDAsJFhpcCkpOwoJJm1vdmRxYQkJKCRUMywmUVdQKDAsJGNvbnN0KSk7CgkmbW92ZHF1CQkoJEhrZXksJlFXUCgwLCRIdGJsKSk7CgkmcHNodWZiCQkoJFhpLCRUMyk7CgoJJnN1YgkJKCRsZW4sMHgxMCk7CgkmanoJCSgmbGFiZWwoIm9kZF90YWlsIikpOwoKCSMjIyMjIyMKCSMgWGkrMiA9W0gqKElpKzEgKyBYaSsxKV0gbW9kIFAgPQoJIwlbKEgqSWkrMSkgKyAoSCpYaSsxKV0gbW9kIFAgPQoJIwlbKEgqSWkrMSkgKyBIXjIqKElpK1hpKV0gbW9kIFAKCSMKCSZtb3ZkcXUJCSgkVDEsJlFXUCgwLCRpbnApKTsJIyBJaQoJJm1vdmRxdQkJKCRYbiwmUVdQKDE2LCRpbnApKTsJIyBJaSsxCgkmcHNodWZiCQkoJFQxLCRUMyk7CgkmcHNodWZiCQkoJFhuLCRUMyk7CgkmcHhvcgkJKCRYaSwkVDEpOwkJIyBJaStYaQoKCSZjbG11bDY0eDY0X1QzCSgkWGhuLCRYbiwkSGtleSk7CSMgSCpJaSsxCgkmbW92ZHF1CQkoJEhrZXksJlFXUCgxNiwkSHRibCkpOwkjIGxvYWQgSF4yCgoJJnN1YgkJKCRsZW4sMHgyMCk7CgkmbGVhCQkoJGlucCwmRFdQKDMyLCRpbnApKTsJIyBpKz0yCgkmamJlCQkoJmxhYmVsKCJldmVuX3RhaWwiKSk7Cgomc2V0X2xhYmVsKCJtb2RfbG9vcCIpOwoJJmNsbXVsNjR4NjRfVDMJKCRYaGksJFhpLCRIa2V5KTsJIyBIXjIqKElpK1hpKQoJJm1vdmRxdQkJKCRIa2V5LCZRV1AoMCwkSHRibCkpOwkjIGxvYWQgSAoKCSZweG9yCQkoJFhpLCRYbik7CQkjIChIKklpKzEpICsgSF4yKihJaStYaSkKCSZweG9yCQkoJFhoaSwkWGhuKTsKCgkmcmVkdWN0aW9uX2FsZzUJKCRYaGksJFhpKTsKCgkjIyMjIyMjCgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKCSZtb3ZkcXUJCSgkVDEsJlFXUCgwLCRpbnApKTsJIyBJaQoJJm1vdmRxdQkJKCRYbiwmUVdQKDE2LCRpbnApKTsJIyBJaSsxCgkmcHNodWZiCQkoJFQxLCRUMyk7CgkmcHNodWZiCQkoJFhuLCRUMyk7CgkmcHhvcgkJKCRYaSwkVDEpOwkJIyBJaStYaQoKCSZjbG11bDY0eDY0X1QzCSgkWGhuLCRYbiwkSGtleSk7CSMgSCpJaSsxCgkmbW92ZHF1CQkoJEhrZXksJlFXUCgxNiwkSHRibCkpOwkjIGxvYWQgSF4yCgoJJnN1YgkJKCRsZW4sMHgyMCk7CgkmbGVhCQkoJGlucCwmRFdQKDMyLCRpbnApKTsKCSZqYQkJKCZsYWJlbCgibW9kX2xvb3AiKSk7Cgomc2V0X2xhYmVsKCJldmVuX3RhaWwiKTsKCSZjbG11bDY0eDY0X1QzCSgkWGhpLCRYaSwkSGtleSk7CSMgSF4yKihJaStYaSkKCgkmcHhvcgkJKCRYaSwkWG4pOwkJIyAoSCpJaSsxKSArIEheMiooSWkrWGkpCgkmcHhvcgkJKCRYaGksJFhobik7CgoJJnJlZHVjdGlvbl9hbGc1CSgkWGhpLCRYaSk7CgoJJm1vdmRxYQkJKCRUMywmUVdQKDAsJGNvbnN0KSk7CgkmdGVzdAkJKCRsZW4sJGxlbik7Cgkmam56CQkoJmxhYmVsKCJkb25lIikpOwoKCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsJIyBsb2FkIEgKJnNldF9sYWJlbCgib2RkX3RhaWwiKTsKCSZtb3ZkcXUJCSgkVDEsJlFXUCgwLCRpbnApKTsJIyBJaQoJJnBzaHVmYgkJKCRUMSwkVDMpOwoJJnB4b3IJCSgkWGksJFQxKTsJCSMgSWkrWGkKCgkmY2xtdWw2NHg2NF9UMwkoJFhoaSwkWGksJEhrZXkpOwkjIEgqKElpK1hpKQoJJnJlZHVjdGlvbl9hbGc1CSgkWGhpLCRYaSk7CgoJJm1vdmRxYQkJKCRUMywmUVdQKDAsJGNvbnN0KSk7CiZzZXRfbGFiZWwoImRvbmUiKTsKCSZwc2h1ZmIJCSgkWGksJFQzKTsKCSZtb3ZkcXUJCSgmUVdQKDAsJFhpcCksJFhpKTsKJmZ1bmN0aW9uX2VuZCgiZ2NtX2doYXNoX2NsbXVsIik7Cgp9CgwKJnNldF9sYWJlbCgiYnN3YXAiLDY0KTsKCSZkYXRhX2J5dGUoMTUsMTQsMTMsMTIsMTEsMTAsOSw4LDcsNiw1LDQsMywyLDEsMCk7CgkmZGF0YV9ieXRlKDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB4YzIpOwkjIDB4MWMyX3BvbHlub21pYWwKfX0JIyAkc3NlMgoKJnNldF9sYWJlbCgicmVtXzRiaXQiLDY0KTsKCSZkYXRhX3dvcmQoMCwweDAwMDA8PCRTLDAsMHgxQzIwPDwkUywwLDB4Mzg0MDw8JFMsMCwweDI0NjA8PCRTKTsKCSZkYXRhX3dvcmQoMCwweDcwODA8PCRTLDAsMHg2Q0EwPDwkUywwLDB4NDhDMDw8JFMsMCwweDU0RTA8PCRTKTsKCSZkYXRhX3dvcmQoMCwweEUxMDA8PCRTLDAsMHhGRDIwPDwkUywwLDB4RDk0MDw8JFMsMCwweEM1NjA8PCRTKTsKCSZkYXRhX3dvcmQoMCwweDkxODA8PCRTLDAsMHg4REEwPDwkUywwLDB4QTlDMDw8JFMsMCwweEI1RTA8PCRTKTsKJnNldF9sYWJlbCgicmVtXzhiaXQiLDY0KTsKCSZkYXRhX3Nob3J0KDB4MDAwMCwweDAxQzIsMHgwMzg0LDB4MDI0NiwweDA3MDgsMHgwNkNBLDB4MDQ4QywweDA1NEUpOwoJJmRhdGFfc2hvcnQoMHgwRTEwLDB4MEZEMiwweDBEOTQsMHgwQzU2LDB4MDkxOCwweDA4REEsMHgwQTlDLDB4MEI1RSk7CgkmZGF0YV9zaG9ydCgweDFDMjAsMHgxREUyLDB4MUZBNCwweDFFNjYsMHgxQjI4LDB4MUFFQSwweDE4QUMsMHgxOTZFKTsKCSZkYXRhX3Nob3J0KDB4MTIzMCwweDEzRjIsMHgxMUI0LDB4MTA3NiwweDE1MzgsMHgxNEZBLDB4MTZCQywweDE3N0UpOwoJJmRhdGFfc2hvcnQoMHgzODQwLDB4Mzk4MiwweDNCQzQsMHgzQTA2LDB4M0Y0OCwweDNFOEEsMHgzQ0NDLDB4M0QwRSk7CgkmZGF0YV9zaG9ydCgweDM2NTAsMHgzNzkyLDB4MzVENCwweDM0MTYsMHgzMTU4LDB4MzA5QSwweDMyREMsMHgzMzFFKTsKCSZkYXRhX3Nob3J0KDB4MjQ2MCwweDI1QTIsMHgyN0U0LDB4MjYyNiwweDIzNjgsMHgyMkFBLDB4MjBFQywweDIxMkUpOwoJJmRhdGFfc2hvcnQoMHgyQTcwLDB4MkJCMiwweDI5RjQsMHgyODM2LDB4MkQ3OCwweDJDQkEsMHgyRUZDLDB4MkYzRSk7CgkmZGF0YV9zaG9ydCgweDcwODAsMHg3MTQyLDB4NzMwNCwweDcyQzYsMHg3Nzg4LDB4NzY0QSwweDc0MEMsMHg3NUNFKTsKCSZkYXRhX3Nob3J0KDB4N0U5MCwweDdGNTIsMHg3RDE0LDB4N0NENiwweDc5OTgsMHg3ODVBLDB4N0ExQywweDdCREUpOwoJJmRhdGFfc2hvcnQoMHg2Q0EwLDB4NkQ2MiwweDZGMjQsMHg2RUU2LDB4NkJBOCwweDZBNkEsMHg2ODJDLDB4NjlFRSk7CgkmZGF0YV9zaG9ydCgweDYyQjAsMHg2MzcyLDB4NjEzNCwweDYwRjYsMHg2NUI4LDB4NjQ3QSwweDY2M0MsMHg2N0ZFKTsKCSZkYXRhX3Nob3J0KDB4NDhDMCwweDQ5MDIsMHg0QjQ0LDB4NEE4NiwweDRGQzgsMHg0RTBBLDB4NEM0QywweDREOEUpOwoJJmRhdGFfc2hvcnQoMHg0NkQwLDB4NDcxMiwweDQ1NTQsMHg0NDk2LDB4NDFEOCwweDQwMUEsMHg0MjVDLDB4NDM5RSk7CgkmZGF0YV9zaG9ydCgweDU0RTAsMHg1NTIyLDB4NTc2NCwweDU2QTYsMHg1M0U4LDB4NTIyQSwweDUwNkMsMHg1MUFFKTsKCSZkYXRhX3Nob3J0KDB4NUFGMCwweDVCMzIsMHg1OTc0LDB4NThCNiwweDVERjgsMHg1QzNBLDB4NUU3QywweDVGQkUpOwoJJmRhdGFfc2hvcnQoMHhFMTAwLDB4RTBDMiwweEUyODQsMHhFMzQ2LDB4RTYwOCwweEU3Q0EsMHhFNThDLDB4RTQ0RSk7CgkmZGF0YV9zaG9ydCgweEVGMTAsMHhFRUQyLDB4RUM5NCwweEVENTYsMHhFODE4LDB4RTlEQSwweEVCOUMsMHhFQTVFKTsKCSZkYXRhX3Nob3J0KDB4RkQyMCwweEZDRTIsMHhGRUE0LDB4RkY2NiwweEZBMjgsMHhGQkVBLDB4RjlBQywweEY4NkUpOwoJJmRhdGFfc2hvcnQoMHhGMzMwLDB4RjJGMiwweEYwQjQsMHhGMTc2LDB4RjQzOCwweEY1RkEsMHhGN0JDLDB4RjY3RSk7CgkmZGF0YV9zaG9ydCgweEQ5NDAsMHhEODgyLDB4REFDNCwweERCMDYsMHhERTQ4LDB4REY4QSwweEREQ0MsMHhEQzBFKTsKCSZkYXRhX3Nob3J0KDB4RDc1MCwweEQ2OTIsMHhENEQ0LDB4RDUxNiwweEQwNTgsMHhEMTlBLDB4RDNEQywweEQyMUUpOwoJJmRhdGFfc2hvcnQoMHhDNTYwLDB4QzRBMiwweEM2RTQsMHhDNzI2LDB4QzI2OCwweEMzQUEsMHhDMUVDLDB4QzAyRSk7CgkmZGF0YV9zaG9ydCgweENCNzAsMHhDQUIyLDB4QzhGNCwweEM5MzYsMHhDQzc4LDB4Q0RCQSwweENGRkMsMHhDRTNFKTsKCSZkYXRhX3Nob3J0KDB4OTE4MCwweDkwNDIsMHg5MjA0LDB4OTNDNiwweDk2ODgsMHg5NzRBLDB4OTUwQywweDk0Q0UpOwoJJmRhdGFfc2hvcnQoMHg5RjkwLDB4OUU1MiwweDlDMTQsMHg5REQ2LDB4OTg5OCwweDk5NUEsMHg5QjFDLDB4OUFERSk7CgkmZGF0YV9zaG9ydCgweDhEQTAsMHg4QzYyLDB4OEUyNCwweDhGRTYsMHg4QUE4LDB4OEI2QSwweDg5MkMsMHg4OEVFKTsKCSZkYXRhX3Nob3J0KDB4ODNCMCwweDgyNzIsMHg4MDM0LDB4ODFGNiwweDg0QjgsMHg4NTdBLDB4ODczQywweDg2RkUpOwoJJmRhdGFfc2hvcnQoMHhBOUMwLDB4QTgwMiwweEFBNDQsMHhBQjg2LDB4QUVDOCwweEFGMEEsMHhBRDRDLDB4QUM4RSk7CgkmZGF0YV9zaG9ydCgweEE3RDAsMHhBNjEyLDB4QTQ1NCwweEE1OTYsMHhBMEQ4LDB4QTExQSwweEEzNUMsMHhBMjlFKTsKCSZkYXRhX3Nob3J0KDB4QjVFMCwweEI0MjIsMHhCNjY0LDB4QjdBNiwweEIyRTgsMHhCMzJBLDB4QjE2QywweEIwQUUpOwoJJmRhdGFfc2hvcnQoMHhCQkYwLDB4QkEzMiwweEI4NzQsMHhCOUI2LDB4QkNGOCwweEJEM0EsMHhCRjdDLDB4QkVCRSk7Cn19fQkjICEkeDg2b25seQoKJmFzY2l6KCJHSEFTSCBmb3IgeDg2LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+Iik7CiZhc21fZmluaXNoKCk7CgojIEEgcXVlc3Rpb24gd2FzIHJpc2VuIGFib3V0IGNob2ljZSBvZiB2YW5pbGxhIE1NWC4gT3IgcmF0aGVyIHdoeSB3YXNuJ3QKIyBTU0UyIGNob3NlbiBpbnN0ZWFkPyBJbiBhZGRpdGlvbiB0byB0aGUgZmFjdCB0aGF0IE1NWCBydW5zIG9uIGxlZ2FjeQojIENQVXMgc3VjaCBhcyBQSUlJLCAiNC1iaXQiIE1NWCB2ZXJzaW9uIHdhcyBvYnNlcnZlZCB0byBwcm92aWRlIGJldHRlcgojIHBlcmZvcm1hbmNlIHRoYW4gKmNvcnJlc3BvbmRpbmcqIFNTRTIgb25lIGV2ZW4gb24gY29udGVtcG9yYXJ5IENQVXMuCiMgU1NFMiByZXN1bHRzIHdlcmUgcHJvdmlkZWQgYnkgUGV0ZXItTWljaGFlbCBIYWdlci4gSGUgbWFpbnRhaW5zIFNTRTIKIyBpbXBsZW1lbnRhdGlvbiBmZWF0dXJpbmcgZnVsbCByYW5nZSBvZiBsb29rdXAtdGFibGUgc2l6ZXMsIGJ1dCB3aXRoCiMgcGVyLWludm9jYXRpb24gbG9va3VwIHRhYmxlIHNldHVwLiBMYXR0ZXIgbWVhbnMgdGhhdCB0YWJsZSBzaXplIGlzCiMgY2hvc2VuIGRlcGVuZGluZyBvbiBob3cgbXVjaCBkYXRhIGlzIHRvIGJlIGhhc2hlZCBpbiBldmVyeSBnaXZlbiBjYWxsLAojIG1vcmUgZGF0YSAtIGxhcmdlciB0YWJsZS4gQmVzdCByZXBvcnRlZCByZXN1bHQgZm9yIENvcmUyIGlzIH40IGN5Y2xlcwojIHBlciBwcm9jZXNzZWQgYnl0ZSBvdXQgb2YgNjRLQiBibG9jay4gVGhpcyBudW1iZXIgYWNjb3VudHMgZXZlbiBmb3IKIyA2NEtCIHRhYmxlIHNldHVwIG92ZXJoZWFkLiBBcyBkaXNjdXNzZWQgaW4gZ2NtMTI4LmMgd2UgY2hvb3NlIHRvIGJlCiMgbW9yZSBjb25zZXJ2YXRpdmUgaW4gcmVzcGVjdCB0byBsb29rdXAgdGFibGUgc2l6ZXMsIGJ1dCBob3cgZG8gdGhlCiMgcmVzdWx0cyBjb21wYXJlPyBNaW5pbWFsaXN0aWMgIjI1NkIiIE1NWCB2ZXJzaW9uIGRlbGl2ZXJzIH4xMSBjeWNsZXMKIyBvbiBzYW1lIHBsYXRmb3JtLiBBcyBhbHNvIGRpc2N1c3NlZCBpbiBnY20xMjguYywgbmV4dCBpbiBsaW5lICI4LWJpdAojIFNob3VwJ3MiIG9yICI0S0IiIG1ldGhvZCBzaG91bGQgZGVsaXZlciB0d2ljZSB0aGUgcGVyZm9ybWFuY2Ugb2YKIyAiMjU2QiIgb25lLCBpbiBvdGhlciB3b3JkcyBub3Qgd29yc2UgdGhhbiB+NiBjeWNsZXMgcGVyIGJ5dGUuIEl0CiMgc2hvdWxkIGJlIGFsc28gYmUgbm90ZWQgdGhhdCBpbiBTU0UyIGNhc2UgaW1wcm92ZW1lbnQgY2FuIGJlICJzdXBlci0KIyBsaW5lYXIsIiBpLmUuIG1vcmUgdGhhbiB0d2ljZSwgbW9zdGx5IGJlY2F1c2UgPj44IG1hcHMgdG8gc2luZ2xlCiMgaW5zdHJ1Y3Rpb24gb24gU1NFMiByZWdpc3Rlci4gVGhpcyBpcyB1bmxpa2UgIjQtYml0IiBjYXNlIHdoZW4gPj40CiMgbWFwcyB0byBzYW1lIGFtb3VudCBvZiBpbnN0cnVjdGlvbnMgaW4gYm90aCBNTVggYW5kIFNTRTIgY2FzZXMuCiMgQm90dG9tIGxpbmUgaXMgdGhhdCBzd2l0Y2ggdG8gU1NFMiBpcyBjb25zaWRlcmVkIHRvIGJlIGp1c3RpZmlhYmxlCiMgb25seSBpbiBjYXNlIHdlIGNob29zZSB0byBpbXBsZW1lbnQgIjgtYml0IiBtZXRob2QuLi4K