LyoKICogU3RhcnQKICogUG9ydHVndWVzZSBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAzIE1hcmNlbG8gRHVhcnRlCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19ERUZBVUxUCiNwcmFnbWEgY29kZV9wYWdlKDg1MCkKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1VTQUdFLCAiSW5pY2lhIHVtIHByb2dyYW1hLCBvdSBhYnJlIHVtIGRvY3VtZW50byBubyBwcm9ncmFtYSBub3JtYWxtZW50ZSB1c2FkbyBwYXJhIGFycXVpdm9zIGNvbSBkZXRlcm1pbmFkbyBzdWZ1eG8uIFxuXApVc286IFxuXApzdGFydCBbb3Dn9WVzXSBhcnF1aXZvX2RlX3Byb2dyYW1hIFthcmd1bWVudG9zLi4uXSBcblwKc3RhcnQgW29w5/Vlc10gYXJxdWl2b19kZV9kb2N1bWVudG8uZXh0IFxuXAogXG5cCk9wdGlvbnM6IFxuXAovTVtpbmltaXplZF0gSW5pY2lhIG8gcHJvZ3JhbWEgbWluaW1pemFkby4gXG5cCi9NQVhbaW1pemVkXSBJbmljaWEgbyBwcm9ncmFtYSBtYXhpbWl6YWRvLiBcblwKL1JbZXN0b3JlZF0gIEluaWNpYSBvIHByb2dyYW1hIG5vcm1hbG1lbnRlIChzZW0gbWluaW1pemFyIG5lbSBtYXhpbWl6YXIpLiBcblwKL1dbYWl0XSAgICAgIEFndWFyZGEgcXVlIG8gcHJvZ3JhbWEgaW5pY2lhZG8gdGVybWluZSBlIGVudONvIHJldG9ybm8gdW0gY/NkaWdvIChleGl0IGNvZGUpLiBcblwKL0wgICAgICAgICAgIE1vc3RyYSBhIGxpY2Vu52EgYW8gdXN14XJpby4gXG5cCiBcblwKc3RhcnQuZXhlIHZlcnNpb24gMC4yIENvcHlyaWdodCAoQykgMjAwMywgRGFuIEtlZ2VsIFxuXApTdGFydCBu428gdmVtIGNvbSBBQlNPTFVUQU1FTlRFIE5FTkhVTUEgR0FSQU5USUE7IHBhcmEgZGV0YWhlcyBleGVjdXRlIGNvbSBhIG9w5+NvIC9MLiBcblwKRXN0ZSDpIHVtIHNvZnR3YXJlIGxpdnJlIChmcmVlIHNvZnR3YXJlKSwgZSB2b2PqIOkgYmVudmluZG8gYSByZWRpc3RyaWJ17S1sbyBzb2IgXG5cCmNlcnRhcyBjb25kaef1ZXM7IGV4ZWN1dGUgJ3N0YXJ0IC9MJyBwYXJhIGRldGFsaGVzLiBcblwKIgoKU1RSSU5HX0xJQ0VOU0UsICJzdGFydC5leGUgdmVyc+NvIDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbCBcblwKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBcblwKbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBQdWJsaWMgTGljZW5zZSBcblwKYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBcblwKb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIFxuXAogXG5cClRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBcblwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgXG5cCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgXG5cCkdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gXG5cCiBcblwKWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBQdWJsaWMgTGljZW5zZSBcblwKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgXG5cCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiBcblwKIFxuXApWZWphIG8gYXJxdWl2byBDT1BZSU5HLkxJQiBwYXJhIGluZm9ybWHn428gc29icmUgYSBsaWNlbudhLiBcblwKIgoKU1RSSU5HX0VYRUNGQUlMICJBcGxpY2Hn428gbuNvIHBvZGUgc2VyIGluaWNpYWRhLCBvdSBu428gZXhpc3RlIGFwbGljYefjbyBhc3NvY2lhZGEgY29tIG8gYXJxdWl2byBlc3BlY2lmaWNhZG8uXG5TaGVsbEV4ZWN1dGVFeCBmYWxob3UiCn0K