LyogdGZtLmgKICoKICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgU2F3dG9vdGggQ29uc3VsdGluZyBMdGQuCiAqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEN5YVNTTC4KICoKICogQ3lhU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogQ3lhU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQogKi8KCgovKgogKiBCYXNlZCBvbiBwdWJsaWMgZG9tYWluIFRvbXNGYXN0TWF0aCAwLjEwIGJ5IFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BpYWh1LmNhLAogKiBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KICovCgoKLyoqCiAqICBFZGl0ZWQgYnkgTW9pc+lzIEd1aW1hcuNlcyAobW9pc2VzLmd1aW1hcmFlc0BwaG9lYnVzLmNvbS5icikKICogIHRvIGZpdCBDeWFTU0wncyBuZWVkcy4KICovCgoKI2lmbmRlZiBDVEFPX0NSWVBUX1RGTV9ICiNkZWZpbmUgQ1RBT19DUllQVF9URk1fSAoKI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvdHlwZXMuaD4KI2lmbmRlZiBDSEFSX0JJVAogICAgI2luY2x1ZGUgPGxpbWl0cy5oPgojZW5kaWYKCgojaWZkZWYgX19jcGx1c3BsdXMKICAgIGV4dGVybiAiQyIgewojZW5kaWYKCiNpZm5kZWYgTUlOCiAgICNkZWZpbmUgTUlOKHgseSkgKCh4KTwoeSk/KHgpOih5KSkKI2VuZGlmCgojaWZuZGVmIE1BWAogICAjZGVmaW5lIE1BWCh4LHkpICgoeCk+KHkpPyh4KTooeSkpCiNlbmRpZgoKCi8qIGF1dG9kZXRlY3QgeDg2LTY0IGFuZCBtYWtlIHN1cmUgd2UgYXJlIHVzaW5nIDY0LWJpdCBkaWdpdHMgd2l0aCB4ODYtNjQgYXNtICovCiNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiAgICNpZiBkZWZpbmVkKFRGTV9YODYpIHx8IGRlZmluZWQoVEZNX1NTRTIpIHx8IGRlZmluZWQoVEZNX0FSTSkgCiAgICAgICAjZXJyb3IgeDg2LTY0IGRldGVjdGVkLCB4ODYtMzIvU1NFMi9BUk0gb3B0aW1pemF0aW9ucyBhcmUgbm90IHZhbGlkIQogICAjZW5kaWYKICAgI2lmICFkZWZpbmVkKFRGTV9YODZfNjQpICYmICFkZWZpbmVkKFRGTV9OT19BU00pCiAgICAgICNkZWZpbmUgVEZNX1g4Nl82NAogICAjZW5kaWYKI2VuZGlmCiNpZiBkZWZpbmVkKFRGTV9YODZfNjQpCiAgICAjaWYgIWRlZmluZWQoRlBfNjRCSVQpCiAgICAgICAjZGVmaW5lIEZQXzY0QklUCiAgICAjZW5kaWYKI2VuZGlmCi8qIHVzZSA2NC1iaXQgZGlnaXQgZXZlbiBpZiBub3QgdXNpbmcgYXNtIG9uIHg4Nl82NCAqLwojaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiAhZGVmaW5lZChGUF82NEJJVCkKICAgICNkZWZpbmUgRlBfNjRCSVQKI2VuZGlmCgovKiB0cnkgdG8gZGV0ZWN0IHg4Ni0zMiAqLwojaWYgZGVmaW5lZChfX2kzODZfXykgJiYgIWRlZmluZWQoVEZNX1NTRTIpCiAgICNpZiBkZWZpbmVkKFRGTV9YODZfNjQpIHx8IGRlZmluZWQoVEZNX0FSTSkgCiAgICAgICAjZXJyb3IgeDg2LTMyIGRldGVjdGVkLCB4ODYtNjQvQVJNIG9wdGltaXphdGlvbnMgYXJlIG5vdCB2YWxpZCEKICAgI2VuZGlmCiAgICNpZiAhZGVmaW5lZChURk1fWDg2KSAmJiAhZGVmaW5lZChURk1fTk9fQVNNKQogICAgICAjZGVmaW5lIFRGTV9YODYKICAgI2VuZGlmCiNlbmRpZgoKLyogbWFrZSBzdXJlIHdlJ3JlIDMyLWJpdCBmb3IgeDg2LTMyL3NzZS9hcm0vcHBjMzIgKi8KI2lmIChkZWZpbmVkKFRGTV9YODYpIHx8IGRlZmluZWQoVEZNX1NTRTIpIHx8IGRlZmluZWQoVEZNX0FSTSkgfHwgZGVmaW5lZChURk1fUFBDMzIpKSAmJiBkZWZpbmVkKEZQXzY0QklUKQogICAjd2FybmluZyB4ODYtMzIsIFNTRTIgYW5kIEFSTSwgUFBDMzIgb3B0aW1pemF0aW9ucyByZXF1aXJlIDMyLWJpdCBkaWdpdHMgKHVuZGVmaW5pbmcpCiAgICN1bmRlZiBGUF82NEJJVAojZW5kaWYKCi8qIG11bHRpIGFzbXM/ICovCiNpZmRlZiBURk1fWDg2CiAgICNkZWZpbmUgVEZNX0FTTQojZW5kaWYKI2lmZGVmIFRGTV9YODZfNjQKICAgI2lmZGVmIFRGTV9BU00KICAgICAgI2Vycm9yIFRGTV9BU00gYWxyZWFkeSBkZWZpbmVkIQogICAjZW5kaWYKICAgI2RlZmluZSBURk1fQVNNCiNlbmRpZgojaWZkZWYgVEZNX1NTRTIKICAgI2lmZGVmIFRGTV9BU00KICAgICAgI2Vycm9yIFRGTV9BU00gYWxyZWFkeSBkZWZpbmVkIQogICAjZW5kaWYKICAgI2RlZmluZSBURk1fQVNNCiNlbmRpZgojaWZkZWYgVEZNX0FSTQogICAjaWZkZWYgVEZNX0FTTQogICAgICAjZXJyb3IgVEZNX0FTTSBhbHJlYWR5IGRlZmluZWQhCiAgICNlbmRpZgogICAjZGVmaW5lIFRGTV9BU00KI2VuZGlmCiNpZmRlZiBURk1fUFBDMzIKICAgI2lmZGVmIFRGTV9BU00KICAgICAgI2Vycm9yIFRGTV9BU00gYWxyZWFkeSBkZWZpbmVkIQogICAjZW5kaWYKICAgI2RlZmluZSBURk1fQVNNCiNlbmRpZgojaWZkZWYgVEZNX1BQQzY0CiAgICNpZmRlZiBURk1fQVNNCiAgICAgICNlcnJvciBURk1fQVNNIGFscmVhZHkgZGVmaW5lZCEKICAgI2VuZGlmCiAgICNkZWZpbmUgVEZNX0FTTQojZW5kaWYKI2lmZGVmIFRGTV9BVlIzMgogICAjaWZkZWYgVEZNX0FTTQogICAgICAjZXJyb3IgVEZNX0FTTSBhbHJlYWR5IGRlZmluZWQhCiAgICNlbmRpZgogICAjZGVmaW5lIFRGTV9BU00KI2VuZGlmCgovKiB3ZSB3YW50IG5vIGFzbT8gKi8KI2lmZGVmIFRGTV9OT19BU00KICAgI3VuZGVmIFRGTV9YODYKICAgI3VuZGVmIFRGTV9YODZfNjQKICAgI3VuZGVmIFRGTV9TU0UyCiAgICN1bmRlZiBURk1fQVJNCiAgICN1bmRlZiBURk1fUFBDMzIKICAgI3VuZGVmIFRGTV9QUEM2NAogICAjdW5kZWYgVEZNX0FWUjMyCiAgICN1bmRlZiBURk1fQVNNICAgCiNlbmRpZgoKLyogRUNDIGhlbHBlcnMgKi8KI2lmZGVmIFRGTV9FQ0MxOTIKICAgI2lmZGVmIEZQXzY0QklUCiAgICAgICAjZGVmaW5lIFRGTV9NVUwzCiAgICAgICAjZGVmaW5lIFRGTV9TUVIzCiAgICNlbHNlCiAgICAgICAjZGVmaW5lIFRGTV9NVUw2CiAgICAgICAjZGVmaW5lIFRGTV9TUVI2CiAgICNlbmRpZgojZW5kaWYKCiNpZmRlZiBURk1fRUNDMjI0CiAgICNpZmRlZiBGUF82NEJJVAogICAgICAgI2RlZmluZSBURk1fTVVMNAogICAgICAgI2RlZmluZSBURk1fU1FSNAogICAjZWxzZQogICAgICAgI2RlZmluZSBURk1fTVVMNwogICAgICAgI2RlZmluZSBURk1fU1FSNwogICAjZW5kaWYKI2VuZGlmCgojaWZkZWYgVEZNX0VDQzI1NgogICAjaWZkZWYgRlBfNjRCSVQKICAgICAgICNkZWZpbmUgVEZNX01VTDQKICAgICAgICNkZWZpbmUgVEZNX1NRUjQKICAgI2Vsc2UKICAgICAgICNkZWZpbmUgVEZNX01VTDgKICAgICAgICNkZWZpbmUgVEZNX1NRUjgKICAgI2VuZGlmCiNlbmRpZgoKI2lmZGVmIFRGTV9FQ0MzODQKICAgI2lmZGVmIEZQXzY0QklUCiAgICAgICAjZGVmaW5lIFRGTV9NVUw2CiAgICAgICAjZGVmaW5lIFRGTV9TUVI2CiAgICNlbHNlCiAgICAgICAjZGVmaW5lIFRGTV9NVUwxMgogICAgICAgI2RlZmluZSBURk1fU1FSMTIKICAgI2VuZGlmCiNlbmRpZgoKI2lmZGVmIFRGTV9FQ0M1MjEKICAgI2lmZGVmIEZQXzY0QklUCiAgICAgICAjZGVmaW5lIFRGTV9NVUw5CiAgICAgICAjZGVmaW5lIFRGTV9TUVI5CiAgICNlbHNlCiAgICAgICAjZGVmaW5lIFRGTV9NVUwxNwogICAgICAgI2RlZmluZSBURk1fU1FSMTcKICAgI2VuZGlmCiNlbmRpZgoKCi8qIHNvbWUgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4KICovCiNpZiBkZWZpbmVkKEZQXzY0QklUKQogICAvKiBmb3IgR0NDIG9ubHkgb24gc3VwcG9ydGVkIHBsYXRmb3JtcyAqLwojaWZuZGVmIENSWVBUCiAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzY0OwojZW5kaWYKICAgdHlwZWRlZiB1bG9uZzY0ICAgICAgICAgICAgZnBfZGlnaXQ7CiAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgIGZwX3dvcmQgX19hdHRyaWJ1dGVfXyAoKG1vZGUoVEkpKSk7CiNlbHNlCiAgIC8qIHRoaXMgaXMgdG8gbWFrZSBwb3J0aW5nIGludG8gTGliVG9tQ3J5cHQgZWFzaWVyIDotKSAqLwojaWZuZGVmIENSWVBUCiAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykgCiAgICAgIHR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCAgIHVsb25nNjQ7CiAgICAgIHR5cGVkZWYgc2lnbmVkIF9faW50NjQgICAgIGxvbmc2NDsKICAgI2Vsc2UKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxvbmc2NDsKICAgICAgdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nICAgbG9uZzY0OwogICAjZW5kaWYKI2VuZGlmCiAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgIGZwX2RpZ2l0OwogICB0eXBlZGVmIHVsb25nNjQgICAgICAgICAgICBmcF93b3JkOwojZW5kaWYKCi8qICMgb2YgZGlnaXRzIHRoaXMgaXMgKi8KI2RlZmluZSBESUdJVF9CSVQgIChpbnQpKChDSEFSX0JJVCkgKiBzaXplb2YoZnBfZGlnaXQpKQoKLyogTWF4IHNpemUgb2YgYW55IG51bWJlciBpbiBiaXRzLiAgQmFzaWNhbGx5IHRoZSBsYXJnZXN0IHNpemUgeW91IHdpbGwgYmUKICogbXVsdGlwbHlpbmcgc2hvdWxkIGJlIGhhbGYgW29yIHNtYWxsZXJdIG9mIEZQX01BWF9TSVpFLWZvdXJfZGlnaXQKICoKICogSXQgZGVmYXVsdHMgdG8gNDA5Ni1iaXRzIFthbGxvd2luZyBtdWx0aXBsaWNhdGlvbnMgdXB0byAyMDQ4eDIwNDggYml0cyBdCiAqLwojaWZuZGVmIEZQX01BWF9CSVRTCiAgICAjZGVmaW5lIEZQX01BWF9CSVRTICAgICAgICAgICA0MDk2CiNlbmRpZgojZGVmaW5lIEZQX01BWF9TSVpFICAgICAgICAgICAoRlBfTUFYX0JJVFMrKDgqRElHSVRfQklUKSkKCi8qIHdpbGwgdGhpcyBsaWIgd29yaz8gKi8KI2lmIChDSEFSX0JJVCAmIDcpCiAgICNlcnJvciBDSEFSX0JJVCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgZWlnaHQuCiNlbmRpZgojaWYgRlBfTUFYX0JJVFMgJSBDSEFSX0JJVAogICAjZXJyb3IgRlBfTUFYX0JJVFMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIENIQVJfQklUCiNlbmRpZgoKI2RlZmluZSBGUF9NQVNLICAgIChmcF9kaWdpdCkoLTEpCiNkZWZpbmUgRlBfU0laRSAgICAoRlBfTUFYX1NJWkUvRElHSVRfQklUKQoKLyogc2lnbnMgKi8KI2RlZmluZSBGUF9aUE9TICAgICAwCiNkZWZpbmUgRlBfTkVHICAgICAgMQoKLyogcmV0dXJuIGNvZGVzICovCiNkZWZpbmUgRlBfT0tBWSAgICAgMAojZGVmaW5lIEZQX1ZBTCAgICAgIDEKI2RlZmluZSBGUF9NRU0gICAgICAyCgovKiBlcXVhbGl0aWVzICovCiNkZWZpbmUgRlBfTFQgICAgICAgIC0xICAgLyogbGVzcyB0aGFuICovCiNkZWZpbmUgRlBfRVEgICAgICAgICAwICAgLyogZXF1YWwgdG8gKi8KI2RlZmluZSBGUF9HVCAgICAgICAgIDEgICAvKiBncmVhdGVyIHRoYW4gKi8KCi8qIHJlcGxpZXMgKi8KI2RlZmluZSBGUF9ZRVMgICAgICAgIDEgICAvKiB5ZXMgcmVzcG9uc2UgKi8KI2RlZmluZSBGUF9OTyAgICAgICAgIDAgICAvKiBubyByZXNwb25zZSAqLwoKLyogYSBGUCB0eXBlICovCnR5cGVkZWYgc3RydWN0IHsKICAgIGZwX2RpZ2l0IGRwW0ZQX1NJWkVdOwogICAgaW50ICAgICAgdXNlZCwgCiAgICAgICAgICAgICBzaWduOwp9IGZwX2ludDsKCi8qIGV4dGVybmFsbHkgZGVmaW5lIHRoaXMgc3ltYm9sIHRvIGlnbm9yZSB0aGUgZGVmYXVsdCBzZXR0aW5ncywgdXNlZnVsIGZvciBjaGFuZ2luZyB0aGUgYnVpbGQgZnJvbSB0aGUgbWFrZSBwcm9jZXNzICovCiNpZm5kZWYgVEZNX0FMUkVBRFlfU0VUCgovKiBkbyB3ZSB3YW50IHRoZSBsYXJnZSBzZXQgb2Ygc21hbGwgbXVsdGlwbGljYXRpb25zID8gCiAgIEVuYWJsZSB0aGVzZSBpZiB5b3UgYXJlIGdvaW5nIHRvIGJlIGRvaW5nIGEgbG90IG9mIHNtYWxsICg8PSAxNiBkaWdpdCkgbXVsdGlwbGljYXRpb25zIHNheSBpbiBFQ0MKICAgT3IgaWYgeW91J3JlIG9uIGEgNjQtYml0IG1hY2hpbmUgZG9pbmcgUlNBIGFzIGEgMTAyNC1iaXQgaW50ZWdlciA9PSAxNiBkaWdpdHMgOy0pCiAqLwovKiBuZWVkIHRvIHJlZmFjdG9yIHRoZSBmdW5jdGlvbiAqLwovKiNkZWZpbmUgVEZNX1NNQUxMX1NFVCAqLwoKLyogZG8gd2Ugd2FudCBodWdlIGNvZGUgCiAgIEVuYWJsZSB0aGVzZSBpZiB5b3UgYXJlIGRvaW5nIDIwLCAyNCwgMjgsIDMyLCA0OCwgNjQgZGlnaXQgbXVsdGlwbGljYXRpb25zICh1c2VmdWwgZm9yIFJTQSkKICAgTGVzcyBpbXBvcnRhbnQgb24gNjQtYml0IG1hY2hpbmVzIGFzIDMyIGRpZ2l0cyA9PSAyMDQ4IGJpdHMKICovCiNpZiAwCiNkZWZpbmUgVEZNX01VTDMKI2RlZmluZSBURk1fTVVMNAojZGVmaW5lIFRGTV9NVUw2CiNkZWZpbmUgVEZNX01VTDcKI2RlZmluZSBURk1fTVVMOAojZGVmaW5lIFRGTV9NVUw5CiNkZWZpbmUgVEZNX01VTDEyCiNkZWZpbmUgVEZNX01VTDE3CiNlbmRpZgojaWZkZWYgVEZNX1NNQUxMX1NFVAojZGVmaW5lIFRGTV9NVUwyMAojZGVmaW5lIFRGTV9NVUwyNAojZGVmaW5lIFRGTV9NVUwyOAojZGVmaW5lIFRGTV9NVUwzMgojaWYgKEZQX01BWF9CSVRTID49IDYxNDQpICYmIGRlZmluZWQoRlBfNjRCSVQpCiAgICAjZGVmaW5lIFRGTV9NVUw0OAojZW5kaWYKI2lmIChGUF9NQVhfQklUUyA+PSA4MTkyKSAmJiBkZWZpbmVkKEZQXzY0QklUKQogICAgI2RlZmluZSBURk1fTVVMNjQKI2VuZGlmCiNlbmRpZgoKI2lmIDAKI2RlZmluZSBURk1fU1FSMwojZGVmaW5lIFRGTV9TUVI0CiNkZWZpbmUgVEZNX1NRUjYKI2RlZmluZSBURk1fU1FSNwojZGVmaW5lIFRGTV9TUVI4CiNkZWZpbmUgVEZNX1NRUjkKI2RlZmluZSBURk1fU1FSMTIKI2RlZmluZSBURk1fU1FSMTcKI2VuZGlmCiNpZmRlZiBURk1fU01BTExfU0VUCiNkZWZpbmUgVEZNX1NRUjIwCiNkZWZpbmUgVEZNX1NRUjI0CiNkZWZpbmUgVEZNX1NRUjI4CiNkZWZpbmUgVEZNX1NRUjMyCiNkZWZpbmUgVEZNX1NRUjQ4CiNkZWZpbmUgVEZNX1NRUjY0CiNlbmRpZgoKLyogZG8gd2Ugd2FudCBzb21lIG92ZXJmbG93IGNoZWNrcwogICBOb3QgcmVxdWlyZWQgaWYgeW91IG1ha2Ugc3VyZSB5b3VyIG51bWJlcnMgYXJlIHdpdGhpbiByYW5nZSAoZS5nLiBieSBkZWZhdWx0IGEgbW9kdWx1cyBmb3IgZnBfZXhwdG1vZCgpIGNhbiBvbmx5IGJlIHVwdG8gMjA0OCBiaXRzIGxvbmcpCiAqLwovKiAjZGVmaW5lIFRGTV9DSEVDSyAqLwoKLyogSXMgdGhlIHRhcmdldCBhIFA0IFByZXNjb3R0CiAqLwovKiAjZGVmaW5lIFRGTV9QUkVTQ09UVCAqLwoKLyogRG8gd2Ugd2FudCB0aW1pbmcgcmVzaXN0YW50IGZwX2V4cHRtb2QoKSA/CiAqIFRoaXMgbWFrZXMgaXQgc2xvd2VyIGJ1dCBhbHNvIHRpbWluZyBpbnZhcmlhbnQgd2l0aCByZXNwZWN0IHRvIHRoZSBleHBvbmVudCAKICovCi8qICNkZWZpbmUgVEZNX1RJTUlOR19SRVNJU1RBTlQgKi8KCiNlbmRpZiAvKiBURk1fQUxSRUFEWV9TRVQgKi8KCi8qIGZ1bmN0aW9ucyAqLwoKLyogcmV0dXJucyBhIFRGTSBpZGVudCBzdHJpbmcgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuLi4gKi8KLypjb25zdCBjaGFyICpmcF9pZGVudCh2b2lkKTsqLwoKLyogaW5pdGlhbGl6ZSBbb3IgemVyb10gYW4gZnAgaW50ICovCiNkZWZpbmUgZnBfaW5pdChhKSAgKHZvaWQpWE1FTVNFVCgoYSksIDAsIHNpemVvZihmcF9pbnQpKQojZGVmaW5lIGZwX3plcm8oYSkgIGZwX2luaXQoYSkKCi8qIHplcm8vZXZlbi9vZGQgPyAqLwojZGVmaW5lIGZwX2lzemVybyhhKSAoKChhKS0+dXNlZCA9PSAwKSA/IEZQX1lFUyA6IEZQX05PKQojZGVmaW5lIGZwX2lzZXZlbihhKSAoKChhKS0+dXNlZCA+PSAwICYmICgoKGEpLT5kcFswXSAmIDEpID09IDApKSA/IEZQX1lFUyA6IEZQX05PKQojZGVmaW5lIGZwX2lzb2RkKGEpICAoKChhKS0+dXNlZCA+IDAgICYmICgoKGEpLT5kcFswXSAmIDEpID09IDEpKSA/IEZQX1lFUyA6IEZQX05PKQoKLyogc2V0IHRvIGEgc21hbGwgZGlnaXQgKi8Kdm9pZCBmcF9zZXQoZnBfaW50ICphLCBmcF9kaWdpdCBiKTsKCi8qIGNvcHkgZnJvbSBhIHRvIGIgKi8KI2RlZmluZSBmcF9jb3B5KGEsIGIpICAodm9pZCkoKChhKSAhPSAoYikpID8gKFhNRU1DUFkoKGIpLCAoYSksIHNpemVvZihmcF9pbnQpKSkgOiAodm9pZCkwKQojZGVmaW5lIGZwX2luaXRfY29weShhLCBiKSBmcF9jb3B5KGIsIGEpCgovKiBjbGFtcCBkaWdpdHMgKi8KI2RlZmluZSBmcF9jbGFtcChhKSAgIHsgd2hpbGUgKChhKS0+dXNlZCAmJiAoYSktPmRwWyhhKS0+dXNlZC0xXSA9PSAwKSAtLSgoYSktPnVzZWQpOyAoYSktPnNpZ24gPSAoYSktPnVzZWQgPyAoYSktPnNpZ24gOiBGUF9aUE9TOyB9CgovKiBuZWdhdGUgYW5kIGFic29sdXRlICovCiNkZWZpbmUgZnBfbmVnKGEsIGIpICB7IGZwX2NvcHkoYSwgYik7IChiKS0+c2lnbiBePSAxOyBmcF9jbGFtcChiKTsgfQojZGVmaW5lIGZwX2FicyhhLCBiKSAgeyBmcF9jb3B5KGEsIGIpOyAoYiktPnNpZ24gID0gMDsgfQoKLyogcmlnaHQgc2hpZnQgeCBkaWdpdHMgKi8Kdm9pZCBmcF9yc2hkKGZwX2ludCAqYSwgaW50IHgpOwoKLyogbGVmdCBzaGlmdCB4IGRpZ2l0cyAqLwp2b2lkIGZwX2xzaGQoZnBfaW50ICphLCBpbnQgeCk7CgovKiBzaWduZWQgY29tcGFyaXNvbiAqLwppbnQgZnBfY21wKGZwX2ludCAqYSwgZnBfaW50ICpiKTsKCi8qIHVuc2lnbmVkIGNvbXBhcmlzb24gKi8KaW50IGZwX2NtcF9tYWcoZnBfaW50ICphLCBmcF9pbnQgKmIpOwoKLyogcG93ZXIgb2YgMiBvcGVyYXRpb25zICovCnZvaWQgZnBfZGl2XzJkKGZwX2ludCAqYSwgaW50IGIsIGZwX2ludCAqYywgZnBfaW50ICpkKTsKdm9pZCBmcF9tb2RfMmQoZnBfaW50ICphLCBpbnQgYiwgZnBfaW50ICpjKTsKdm9pZCBmcF9tdWxfMmQoZnBfaW50ICphLCBpbnQgYiwgZnBfaW50ICpjKTsKdm9pZCBmcF8yZXhwdCAoZnBfaW50ICphLCBpbnQgYik7CnZvaWQgZnBfbXVsXzIoZnBfaW50ICphLCBmcF9pbnQgKmMpOwp2b2lkIGZwX2Rpdl8yKGZwX2ludCAqYSwgZnBfaW50ICpjKTsKCi8qIENvdW50cyB0aGUgbnVtYmVyIG9mIGxzYnMgd2hpY2ggYXJlIHplcm8gYmVmb3JlIHRoZSBmaXJzdCB6ZXJvIGJpdCAqLwovKmludCBmcF9jbnRfbHNiKGZwX2ludCAqYSk7Ki8KCi8qIGMgPSBhICsgYiAqLwp2b2lkIGZwX2FkZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKCi8qIGMgPSBhIC0gYiAqLwp2b2lkIGZwX3N1YihmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKCi8qIGMgPSBhICogYiAqLwp2b2lkIGZwX211bChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKCi8qIGIgPSBhKmEgICovCnZvaWQgZnBfc3FyKGZwX2ludCAqYSwgZnBfaW50ICpiKTsKCi8qIGEvYiA9PiBjYiArIGQgPT0gYSAqLwppbnQgZnBfZGl2KGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMsIGZwX2ludCAqZCk7CgovKiBjID0gYSBtb2QgYiwgMCA8PSBjIDwgYiAgKi8KaW50IGZwX21vZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKCi8qIGNvbXBhcmUgYWdhaW5zdCBhIHNpbmdsZSBkaWdpdCAqLwppbnQgZnBfY21wX2QoZnBfaW50ICphLCBmcF9kaWdpdCBiKTsKCi8qIGMgPSBhICsgYiAqLwp2b2lkIGZwX2FkZF9kKGZwX2ludCAqYSwgZnBfZGlnaXQgYiwgZnBfaW50ICpjKTsKCi8qIGMgPSBhIC0gYiAqLwp2b2lkIGZwX3N1Yl9kKGZwX2ludCAqYSwgZnBfZGlnaXQgYiwgZnBfaW50ICpjKTsKCi8qIGMgPSBhICogYiAqLwp2b2lkIGZwX211bF9kKGZwX2ludCAqYSwgZnBfZGlnaXQgYiwgZnBfaW50ICpjKTsKCi8qIGEvYiA9PiBjYiArIGQgPT0gYSAqLwovKmludCBmcF9kaXZfZChmcF9pbnQgKmEsIGZwX2RpZ2l0IGIsIGZwX2ludCAqYywgZnBfZGlnaXQgKmQpOyovCgovKiBjID0gYSBtb2QgYiwgMCA8PSBjIDwgYiAgKi8KLyppbnQgZnBfbW9kX2QoZnBfaW50ICphLCBmcF9kaWdpdCBiLCBmcF9kaWdpdCAqYyk7Ki8KCi8qIC0tLT4gbnVtYmVyIHRoZW9yeSA8LS0tICovCi8qIGQgPSBhICsgYiAobW9kIGMpICovCi8qaW50IGZwX2FkZG1vZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjLCBmcF9pbnQgKmQpOyovCgovKiBkID0gYSAtIGIgKG1vZCBjKSAqLwovKmludCBmcF9zdWJtb2QoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYywgZnBfaW50ICpkKTsqLwoKLyogZCA9IGEgKiBiIChtb2QgYykgKi8KaW50IGZwX211bG1vZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjLCBmcF9pbnQgKmQpOwoKLyogYyA9IGEgKiBhIChtb2QgYikgKi8KaW50IGZwX3Nxcm1vZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKCi8qIGMgPSAxL2EgKG1vZCBiKSAqLwppbnQgZnBfaW52bW9kKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOwoKLyogYyA9IChhLCBiKSAqLwovKnZvaWQgZnBfZ2NkKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOyovCgovKiBjID0gW2EsIGJdICovCi8qdm9pZCBmcF9sY20oZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7Ki8KCi8qIHNldHVwcyB0aGUgbW9udGdvbWVyeSByZWR1Y3Rpb24gKi8KaW50IGZwX21vbnRnb21lcnlfc2V0dXAoZnBfaW50ICphLCBmcF9kaWdpdCAqbXApOwoKLyogY29tcHV0ZXMgYSA9IEIqKm4gbW9kIGIgd2l0aG91dCBkaXZpc2lvbiBvciBtdWx0aXBsaWNhdGlvbiB1c2VmdWwgZm9yCiAqIG5vcm1hbGl6aW5nIG51bWJlcnMgaW4gYSBNb250Z29tZXJ5IHN5c3RlbS4KICovCnZvaWQgZnBfbW9udGdvbWVyeV9jYWxjX25vcm1hbGl6YXRpb24oZnBfaW50ICphLCBmcF9pbnQgKmIpOwoKLyogY29tcHV0ZXMgeC9SID09IHggKG1vZCBOKSB2aWEgTW9udGdvbWVyeSBSZWR1Y3Rpb24gKi8Kdm9pZCBmcF9tb250Z29tZXJ5X3JlZHVjZShmcF9pbnQgKmEsIGZwX2ludCAqbSwgZnBfZGlnaXQgbXApOwoKLyogZCA9IGEqKmIgKG1vZCBjKSAqLwppbnQgZnBfZXhwdG1vZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjLCBmcF9pbnQgKmQpOwoKLyogcHJpbWFsaXR5IHN0dWZmICovCgovKiBwZXJmb3JtIGEgTWlsbGVyLVJhYmluIHRlc3Qgb2YgYSB0byB0aGUgYmFzZSBiIGFuZCBzdG9yZSByZXN1bHQgaW4gInJlc3VsdCIgKi8KLyp2b2lkIGZwX3ByaW1lX21pbGxlcl9yYWJpbiAoZnBfaW50ICogYSwgZnBfaW50ICogYiwgaW50ICpyZXN1bHQpOyovCgovKiAyNTYgdHJpYWwgZGl2aXNpb25zICsgOCBNaWxsZXItUmFiaW5zLCByZXR1cm5zIEZQX1lFUyBpZiBwcm9iYWJsZSBwcmltZSAgKi8KLyppbnQgZnBfaXNwcmltZShmcF9pbnQgKmEpOyovCgovKiBQcmltYWxpdHkgZ2VuZXJhdGlvbiBmbGFncyAqLwovKiNkZWZpbmUgVEZNX1BSSU1FX0JCUyAgICAgIDB4MDAwMSAqLyAvKiBCQlMgc3R5bGUgcHJpbWUgKi8KLyojZGVmaW5lIFRGTV9QUklNRV9TQUZFICAgICAweDAwMDIgKi8gLyogU2FmZSBwcmltZSAocC0xKS8yID09IHByaW1lICovCi8qI2RlZmluZSBURk1fUFJJTUVfMk1TQl9PRkYgMHgwMDA0ICovIC8qIGZvcmNlIDJuZCBNU0IgdG8gMCAqLwovKiNkZWZpbmUgVEZNX1BSSU1FXzJNU0JfT04gIDB4MDAwOCAqLyAvKiBmb3JjZSAybmQgTVNCIHRvIDEgKi8KCi8qIGNhbGxiYWNrIGZvciBmcF9wcmltZV9yYW5kb20sIHNob3VsZCBmaWxsIGRzdCB3aXRoIHJhbmRvbSBieXRlcyBhbmQgcmV0dXJuIGhvdyBtYW55IHJlYWQgW3VwdG8gbGVuXSAqLwovKnR5cGVkZWYgaW50IHRmbV9wcmltZV9jYWxsYmFjayh1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sIHZvaWQgKmRhdCk7Ki8KCi8qI2RlZmluZSBmcF9wcmltZV9yYW5kb20oYSwgdCwgc2l6ZSwgYmJzLCBjYiwgZGF0KSBmcF9wcmltZV9yYW5kb21fZXgoYSwgdCwgKChzaXplKSAqIDgpICsgMSwgKGJicz09MSk/VEZNX1BSSU1FX0JCUzowLCBjYiwgZGF0KSovCgovKmludCBmcF9wcmltZV9yYW5kb21fZXgoZnBfaW50ICphLCBpbnQgdCwgaW50IHNpemUsIGludCBmbGFncywgdGZtX3ByaW1lX2NhbGxiYWNrIGNiLCB2b2lkICpkYXQpOyovCgovKiByYWRpeCBjb25lcnNpb25zICovCmludCBmcF9jb3VudF9iaXRzKGZwX2ludCAqYSk7CgppbnQgZnBfdW5zaWduZWRfYmluX3NpemUoZnBfaW50ICphKTsKdm9pZCBmcF9yZWFkX3Vuc2lnbmVkX2JpbihmcF9pbnQgKmEsIHVuc2lnbmVkIGNoYXIgKmIsIGludCBjKTsKdm9pZCBmcF90b191bnNpZ25lZF9iaW4oZnBfaW50ICphLCB1bnNpZ25lZCBjaGFyICpiKTsKCi8qaW50IGZwX3NpZ25lZF9iaW5fc2l6ZShmcF9pbnQgKmEpOyovCi8qdm9pZCBmcF9yZWFkX3NpZ25lZF9iaW4oZnBfaW50ICphLCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgYyk7Ki8KLyp2b2lkIGZwX3RvX3NpZ25lZF9iaW4oZnBfaW50ICphLCB1bnNpZ25lZCBjaGFyICpiKTsqLwoKLyppbnQgZnBfcmVhZF9yYWRpeChmcF9pbnQgKmEsIGNoYXIgKnN0ciwgaW50IHJhZGl4KTsqLwovKmludCBmcF90b3JhZGl4KGZwX2ludCAqYSwgY2hhciAqc3RyLCBpbnQgcmFkaXgpOyovCi8qaW50IGZwX3RvcmFkaXhfbihmcF9pbnQgKiBhLCBjaGFyICpzdHIsIGludCByYWRpeCwgaW50IG1heGxlbik7Ki8KCgovKiBWQVJJT1VTIExPVyBMRVZFTCBTVFVGRlMgKi8Kdm9pZCBzX2ZwX2FkZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKdm9pZCBzX2ZwX3N1YihmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKdm9pZCBmcF9yZXZlcnNlKHVuc2lnbmVkIGNoYXIgKnMsIGludCBsZW4pOwoKdm9pZCBmcF9tdWxfY29tYmEoZnBfaW50ICpBLCBmcF9pbnQgKkIsIGZwX2ludCAqQyk7CgojaWZkZWYgVEZNX1NNQUxMX1NFVAp2b2lkIGZwX211bF9jb21iYV9zbWFsbChmcF9pbnQgKkEsIGZwX2ludCAqQiwgZnBfaW50ICpDKTsKI2VuZGlmCgojaWZkZWYgVEZNX01VTDMKdm9pZCBmcF9tdWxfY29tYmEzKGZwX2ludCAqQSwgZnBfaW50ICpCLCBmcF9pbnQgKkMpOwojZW5kaWYKI2lmZGVmIFRGTV9NVUw0CnZvaWQgZnBfbXVsX2NvbWJhNChmcF9pbnQgKkEsIGZwX2ludCAqQiwgZnBfaW50ICpDKTsKI2VuZGlmCiNpZmRlZiBURk1fTVVMNgp2b2lkIGZwX211bF9jb21iYTYoZnBfaW50ICpBLCBmcF9pbnQgKkIsIGZwX2ludCAqQyk7CiNlbmRpZgojaWZkZWYgVEZNX01VTDcKdm9pZCBmcF9tdWxfY29tYmE3KGZwX2ludCAqQSwgZnBfaW50ICpCLCBmcF9pbnQgKkMpOwojZW5kaWYKI2lmZGVmIFRGTV9NVUw4CnZvaWQgZnBfbXVsX2NvbWJhOChmcF9pbnQgKkEsIGZwX2ludCAqQiwgZnBfaW50ICpDKTsKI2VuZGlmCiNpZmRlZiBURk1fTVVMOQp2b2lkIGZwX211bF9jb21iYTkoZnBfaW50ICpBLCBmcF9pbnQgKkIsIGZwX2ludCAqQyk7CiNlbmRpZgojaWZkZWYgVEZNX01VTDEyCnZvaWQgZnBfbXVsX2NvbWJhMTIoZnBfaW50ICpBLCBmcF9pbnQgKkIsIGZwX2ludCAqQyk7CiNlbmRpZgojaWZkZWYgVEZNX01VTDE3CnZvaWQgZnBfbXVsX2NvbWJhMTcoZnBfaW50ICpBLCBmcF9pbnQgKkIsIGZwX2ludCAqQyk7CiNlbmRpZgoKI2lmZGVmIFRGTV9NVUwyMAp2b2lkIGZwX211bF9jb21iYTIwKGZwX2ludCAqQSwgZnBfaW50ICpCLCBmcF9pbnQgKkMpOwojZW5kaWYKI2lmZGVmIFRGTV9NVUwyNAp2b2lkIGZwX211bF9jb21iYTI0KGZwX2ludCAqQSwgZnBfaW50ICpCLCBmcF9pbnQgKkMpOwojZW5kaWYKI2lmZGVmIFRGTV9NVUwyOAp2b2lkIGZwX211bF9jb21iYTI4KGZwX2ludCAqQSwgZnBfaW50ICpCLCBmcF9pbnQgKkMpOwojZW5kaWYKI2lmZGVmIFRGTV9NVUwzMgp2b2lkIGZwX211bF9jb21iYTMyKGZwX2ludCAqQSwgZnBfaW50ICpCLCBmcF9pbnQgKkMpOwojZW5kaWYKI2lmZGVmIFRGTV9NVUw0OAp2b2lkIGZwX211bF9jb21iYTQ4KGZwX2ludCAqQSwgZnBfaW50ICpCLCBmcF9pbnQgKkMpOwojZW5kaWYKI2lmZGVmIFRGTV9NVUw2NAp2b2lkIGZwX211bF9jb21iYTY0KGZwX2ludCAqQSwgZnBfaW50ICpCLCBmcF9pbnQgKkMpOwojZW5kaWYKCnZvaWQgZnBfc3FyX2NvbWJhKGZwX2ludCAqQSwgZnBfaW50ICpCKTsKCiNpZmRlZiBURk1fU01BTExfU0VUCnZvaWQgZnBfc3FyX2NvbWJhX3NtYWxsKGZwX2ludCAqQSwgZnBfaW50ICpCKTsKI2VuZGlmCgojaWZkZWYgVEZNX1NRUjMKdm9pZCBmcF9zcXJfY29tYmEzKGZwX2ludCAqQSwgZnBfaW50ICpCKTsKI2VuZGlmCiNpZmRlZiBURk1fU1FSNAp2b2lkIGZwX3Nxcl9jb21iYTQoZnBfaW50ICpBLCBmcF9pbnQgKkIpOwojZW5kaWYKI2lmZGVmIFRGTV9TUVI2CnZvaWQgZnBfc3FyX2NvbWJhNihmcF9pbnQgKkEsIGZwX2ludCAqQik7CiNlbmRpZgojaWZkZWYgVEZNX1NRUjcKdm9pZCBmcF9zcXJfY29tYmE3KGZwX2ludCAqQSwgZnBfaW50ICpCKTsKI2VuZGlmCiNpZmRlZiBURk1fU1FSOAp2b2lkIGZwX3Nxcl9jb21iYTgoZnBfaW50ICpBLCBmcF9pbnQgKkIpOwojZW5kaWYKI2lmZGVmIFRGTV9TUVI5CnZvaWQgZnBfc3FyX2NvbWJhOShmcF9pbnQgKkEsIGZwX2ludCAqQik7CiNlbmRpZgojaWZkZWYgVEZNX1NRUjEyCnZvaWQgZnBfc3FyX2NvbWJhMTIoZnBfaW50ICpBLCBmcF9pbnQgKkIpOwojZW5kaWYKI2lmZGVmIFRGTV9TUVIxNwp2b2lkIGZwX3Nxcl9jb21iYTE3KGZwX2ludCAqQSwgZnBfaW50ICpCKTsKI2VuZGlmCgojaWZkZWYgVEZNX1NRUjIwCnZvaWQgZnBfc3FyX2NvbWJhMjAoZnBfaW50ICpBLCBmcF9pbnQgKkIpOwojZW5kaWYKI2lmZGVmIFRGTV9TUVIyNAp2b2lkIGZwX3Nxcl9jb21iYTI0KGZwX2ludCAqQSwgZnBfaW50ICpCKTsKI2VuZGlmCiNpZmRlZiBURk1fU1FSMjgKdm9pZCBmcF9zcXJfY29tYmEyOChmcF9pbnQgKkEsIGZwX2ludCAqQik7CiNlbmRpZgojaWZkZWYgVEZNX1NRUjMyCnZvaWQgZnBfc3FyX2NvbWJhMzIoZnBfaW50ICpBLCBmcF9pbnQgKkIpOwojZW5kaWYKI2lmZGVmIFRGTV9TUVI0OAp2b2lkIGZwX3Nxcl9jb21iYTQ4KGZwX2ludCAqQSwgZnBfaW50ICpCKTsKI2VuZGlmCiNpZmRlZiBURk1fU1FSNjQKdm9pZCBmcF9zcXJfY29tYmE2NChmcF9pbnQgKkEsIGZwX2ludCAqQik7CiNlbmRpZgovKmV4dGVybiBjb25zdCBjaGFyICpmcF9zX3JtYXA7Ki8KCgovKioKICogVXNlZCBieSBDeWFTU0wgCiAqLwoKLyogVHlwZXMgKi8KICAgIHR5cGVkZWYgZnBfZGlnaXQgbXBfZGlnaXQ7CiAgICB0eXBlZGVmIGZwX3dvcmQgIG1wX3dvcmQ7CiAgICB0eXBlZGVmIGZwX2ludCBtcF9pbnQ7CgovKiBDb25zdGFudHMgKi8KICAgICNkZWZpbmUgTVBfTFQgICBGUF9MVCAgIC8qIGxlc3MgdGhhbiAgICAqLwogICAgI2RlZmluZSBNUF9FUSAgIEZQX0VRICAgLyogZXF1YWwgdG8gICAgICovCiAgICAjZGVmaW5lIE1QX0dUICAgRlBfR1QgICAvKiBncmVhdGVyIHRoYW4gKi8KICAgICNkZWZpbmUgTVBfT0tBWSBGUF9PS0FZIC8qIG9rIHJlc3VsdCAgICAqLwogICAgI2RlZmluZSBNUF9OTyAgIEZQX05PICAgLyogeWVzL25vIHJlc3VsdCAqLwogICAgI2RlZmluZSBNUF9ZRVMgIEZQX1lFUyAgLyogeWVzL25vIHJlc3VsdCAqLwoKLyogUHJvdG90eXBlcyAqLwppbnQgIG1wX2luaXQgKG1wX2ludCAqIGEpOwp2b2lkIG1wX2NsZWFyIChtcF9pbnQgKiBhKTsKaW50IG1wX2luaXRfbXVsdGkobXBfaW50KiBhLCBtcF9pbnQqIGIsIG1wX2ludCogYywgbXBfaW50KiBkLCBtcF9pbnQqIGUsIG1wX2ludCogZik7CgppbnQgIG1wX2FkZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYyk7CmludCAgbXBfc3ViIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKTsKaW50ICBtcF9hZGRfZCAobXBfaW50ICogYSwgbXBfZGlnaXQgYiwgbXBfaW50ICogYyk7CgppbnQgIG1wX211bCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYyk7CmludCAgbXBfbXVsbW9kIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjLCBtcF9pbnQgKiBkKTsKaW50ICBtcF9tb2QobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7CmludCAgbXBfaW52bW9kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOwppbnQgIG1wX2V4cHRtb2QgKG1wX2ludCAqIEcsIG1wX2ludCAqIFgsIG1wX2ludCAqIFAsIG1wX2ludCAqIFkpOwoKaW50ICBtcF9jbXAobXBfaW50ICphLCBtcF9pbnQgKmIpOwppbnQgIG1wX2NtcF9kKG1wX2ludCAqYSwgbXBfZGlnaXQgYik7CgppbnQgIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKG1wX2ludCAqIGEpOwppbnQgIG1wX3JlYWRfdW5zaWduZWRfYmluIChtcF9pbnQgKiBhLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgYyk7CmludCAgbXBfdG9fdW5zaWduZWRfYmluIChtcF9pbnQgKiBhLCB1bnNpZ25lZCBjaGFyICpiKTsKCmludCAgbXBfc3ViX2QoZnBfaW50ICphLCBmcF9kaWdpdCBiLCBmcF9pbnQgKmMpOwppbnQgIG1wX2NvcHkoZnBfaW50KiBhLCBmcF9pbnQqIGIpOwppbnQgIG1wX2lzb2RkKG1wX2ludCogYSk7CmludCAgbXBfaXN6ZXJvKG1wX2ludCogYSk7CmludCAgbXBfY291bnRfYml0cyhtcF9pbnQgKmEpOwppbnQgIG1wX3NldF9pbnQoZnBfaW50ICphLCBmcF9kaWdpdCBiKTsKCiNpZmRlZiBIQVZFX0VDQwogICAgaW50IG1wX3JlYWRfcmFkaXgobXBfaW50KiBhLCBjb25zdCBjaGFyKiBzdHIsIGludCByYWRpeCk7CiAgICBpbnQgbXBfc2V0KGZwX2ludCAqYSwgZnBfZGlnaXQgYik7CiAgICBpbnQgbXBfc3FyKGZwX2ludCAqQSwgZnBfaW50ICpCKTsKICAgIGludCBtcF9tb250Z29tZXJ5X3JlZHVjZShmcF9pbnQgKmEsIGZwX2ludCAqbSwgZnBfZGlnaXQgbXApOwogICAgaW50IG1wX21vbnRnb21lcnlfc2V0dXAoZnBfaW50ICphLCBmcF9kaWdpdCAqcmhvKTsKICAgIGludCBtcF9kaXZfMihmcF9pbnQgKiBhLCBmcF9pbnQgKiBiKTsKICAgIGludCBtcF9pbml0X2NvcHkoZnBfaW50ICogYSwgZnBfaW50ICogYik7IAojZW5kaWYKCiNpZiBkZWZpbmVkKEhBVkVfRUNDKSB8fCBkZWZpbmVkKENZQVNTTF9LRVlfR0VOKQogICAgaW50IG1wX3Nxcm1vZChtcF9pbnQqIGEsIG1wX2ludCogYiwgbXBfaW50KiBjKTsKICAgIGludCBtcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbihtcF9pbnQgKmEsIG1wX2ludCAqYik7CiNlbmRpZgoKI2lmZGVmIENZQVNTTF9LRVlfR0VOCmludCAgbXBfZ2NkKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOwppbnQgIG1wX2xjbShmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKaW50ICBtcF9wcmltZV9pc19wcmltZShtcF9pbnQqIGEsIGludCB0LCBpbnQqIHJlc3VsdCk7CiNlbmRpZiAvKiBDWUFTU0xfS0VZX0dFTiAqLwoKQ1lBU1NMX0FQSSB3b3JkMzIgQ2hlY2tSdW5UaW1lRmFzdE1hdGgodm9pZCk7CgovKiBJZiB1c2VyIHVzZXMgUlNBLCBESCwgRFNBLCBvciBFQ0MgbWF0aCBsaWIgZGlyZWN0bHkgdGhlbiBmYXN0IG1hdGggRlBfU0laRQogICBtdXN0IG1hdGNoLCByZXR1cm4gMSBpZiBhIG1hdGNoIG90aGVyd2lzZSAwICovCiNkZWZpbmUgQ2hlY2tGYXN0TWF0aFNldHRpbmdzKCkgKEZQX1NJWkUgPT0gQ2hlY2tSdW5UaW1lRmFzdE1hdGgoKSkKI2lmZGVmIF9fY3BsdXNwbHVzCiAgIH0KI2VuZGlmCgoKI2VuZGlmICAvKiBDVEFPX0NSWVBUX1RGTV9IICovCg==