LyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCiAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCiAqIHRoYXQgbWF5IGFwcGx5OgogKi8KLyoKICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKICogQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICovCiNpZm5kZWYgU05NUF9BUElfSAojZGVmaW5lIFNOTVBfQVBJX0gKCi8qCiAqIEBmaWxlIHNubXBfYXBpLmggLSBBUEkgZm9yIGFjY2VzcyB0byBzbm1wLgogKiAKICogQGFkZHRvZ3JvdXAgbGlicmFyeQogKgogKiBDYXV0aW9uOiB3aGVuIHVzaW5nIHRoaXMgbGlicmFyeSBpbiBhIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uLAogKiB0aGUgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMgInNubXBfZXJybm8iIGFuZCAic25tcF9kZXRhaWwiCiAqIGNhbm5vdCBiZSByZWxpYWJseSBkZXRlcm1pbmVkLiAgU3VnZ2VzdCB1c2luZyBzbm1wX2Vycm9yKCkKICogdG8gb2J0YWluIHRoZSBsaWJyYXJ5IGVycm9yIGNvZGVzLgogKgogKiBAewogKi8KCiNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgojaW5jbHVkZSA8bmV0LXNubXAvdmFyYmluZF9hcGkuaD4KI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KI2luY2x1ZGUgPG5ldC1zbm1wL3BkdV9hcGkuaD4KI2luY2x1ZGUgPG5ldC1zbm1wL3Nlc3Npb25fYXBpLmg+CgojaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KCiNpZm5kZWYgRE9OVF9TSEFSRV9FUlJPUl9XSVRIX09USEVSX1RIUkVBRFMKI2RlZmluZSBTRVRfU05NUF9FUlJPUih4KSBzbm1wX2Vycm5vPSh4KQojZWxzZQojZGVmaW5lIFNFVF9TTk1QX0VSUk9SKHgpCiNlbmRpZgoKCiNpZmRlZiBfX2NwbHVzcGx1cwpleHRlcm4gICAgICAgICAgIkMiIHsKI2VuZGlmCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCUNvcHlyaWdodCAxOTg5IGJ5IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CgogICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAoKUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCmRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdApib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4Kc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBDTVUgbm90IGJlCnVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQpzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCgpDTVUgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORwpBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwKQ01VIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUgpBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsCldIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUwpTT0ZUV0FSRS4KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKc3RydWN0IHRpbWV2YWw7Ci8qCiAqIEEgbGlzdCBvZiBhbGwgdGhlIG91dHN0YW5kaW5nIHJlcXVlc3RzIGZvciBhIHBhcnRpY3VsYXIgc2Vzc2lvbi4KICovCiNpZmRlZiBTTk1QX05FRURfUkVRVUVTVF9MSVNUCnR5cGVkZWYgc3RydWN0IHJlcXVlc3RfbGlzdCB7CiAgICBzdHJ1Y3QgcmVxdWVzdF9saXN0ICpuZXh0X3JlcXVlc3Q7CiAgICBsb25nICAgICAgICAgICAgcmVxdWVzdF9pZDsgICAgIC8qIHJlcXVlc3QgaWQgKi8KICAgIGxvbmcgICAgICAgICAgICBtZXNzYWdlX2lkOyAgICAgLyogbWVzc2FnZSBpZCAqLwogICAgbmV0c25tcF9jYWxsYmFjayBjYWxsYmFjazsgICAgICAvKiB1c2VyIGNhbGxiYWNrIHBlciByZXF1ZXN0IChOVUxMIGlmIHVudXNlZCkgKi8KICAgIHZvaWQgICAgICAgICAgICpjYl9kYXRhOyAgICAgICAgLyogdXNlciBjYWxsYmFjayBkYXRhIHBlciByZXF1ZXN0IChOVUxMIGlmIHVudXNlZCkgKi8KICAgIGludCAgICAgICAgICAgICByZXRyaWVzOyAgICAgICAgLyogTnVtYmVyIG9mIHJldHJpZXMgKi8KICAgIHVfbG9uZyAgICAgICAgICB0aW1lb3V0OyAgICAgICAgLyogbGVuZ3RoIHRvIHdhaXQgZm9yIHRpbWVvdXQgKi8KICAgIHN0cnVjdCB0aW1ldmFsICB0aW1lTTsgICAvKiBUaW1lIHRoaXMgcmVxdWVzdCB3YXMgbWFkZSBbbW9ub3RvbmljIGNsb2NrXSAqLwogICAgc3RydWN0IHRpbWV2YWwgIGV4cGlyZU07IC8qIFRpbWUgdGhpcyByZXF1ZXN0IGlzIGR1ZSB0byBleHBpcmUgW21vbm90b25pYyBjbG9ja10uICovCiAgICBzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzZXNzaW9uOwogICAgbmV0c25tcF9wZHUgICAgKnBkdTsgICAgLyogVGhlIHBkdSBmb3IgdGhpcyByZXF1ZXN0CgkJCSAgICAgKiAoc2F2ZWQgc28gaXQgY2FuIGJlIHJldHJhbnNtaXR0ZWQgKi8KfSBuZXRzbm1wX3JlcXVlc3RfbGlzdDsKI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTk1QX05FRURfUkVRVUVTVF9MSVNUICovCgogICAgLyoKICAgICAqIFNldCBmaWVsZHMgaW4gc2Vzc2lvbiBhbmQgcGR1IHRvIHRoZSBmb2xsb3dpbmcgdG8gZ2V0IGEgZGVmYXVsdCBvciB1bmNvbmZpZ3VyZWQgdmFsdWUuCiAgICAgKi8KI2RlZmluZSBTTk1QX0RFRkFVTFRfQ09NTVVOSVRZX0xFTiAgMCAgIC8qIHRvIGdldCBhIGRlZmF1bHQgY29tbXVuaXR5IG5hbWUgKi8KI2RlZmluZSBTTk1QX0RFRkFVTFRfUkVUUklFUwkgICAgLTEKI2RlZmluZSBTTk1QX0RFRkFVTFRfVElNRU9VVAkgICAgLTEKI2RlZmluZSBTTk1QX0RFRkFVTFRfUkVNUE9SVAkgICAgMAojZGVmaW5lIFNOTVBfREVGQVVMVF9SRVFJRAkgICAgLTEKI2RlZmluZSBTTk1QX0RFRkFVTFRfTVNHSUQJICAgIC0xCiNkZWZpbmUgU05NUF9ERUZBVUxUX0VSUlNUQVQJICAgIC0xCiNkZWZpbmUgU05NUF9ERUZBVUxUX0VSUklOREVYCSAgICAtMQojZGVmaW5lIFNOTVBfREVGQVVMVF9BRERSRVNTCSAgICAwCiNkZWZpbmUgU05NUF9ERUZBVUxUX1BFRVJOQU1FCSAgICBOVUxMCiNkZWZpbmUgU05NUF9ERUZBVUxUX0VOVEVSUFJJU0VfTEVOR1RICTAKI2RlZmluZSBTTk1QX0RFRkFVTFRfVElNRQkgICAgMAojZGVmaW5lIFNOTVBfREVGQVVMVF9WRVJTSU9OCSAgICAtMQojZGVmaW5lIFNOTVBfREVGQVVMVF9TRUNNT0RFTAkgICAgLTEKI2RlZmluZSBTTk1QX0RFRkFVTFRfQ09OVEVYVCAgICAgICAgIiIKI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUQ1CiNkZWZpbmUgU05NUF9ERUZBVUxUX0FVVEhfUFJPVE8gICAgIHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wKI2Vsc2UKI2RlZmluZSBTTk1QX0RFRkFVTFRfQVVUSF9QUk9UTyAgICAgdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wKI2VuZGlmCiNkZWZpbmUgU05NUF9ERUZBVUxUX0FVVEhfUFJPVE9MRU4gIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STQojaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9ERVMKI2RlZmluZSBTTk1QX0RFRkFVTFRfUFJJVl9QUk9UTyAgICAgdXNtREVTUHJpdlByb3RvY29sCiNlbHNlCiNkZWZpbmUgU05NUF9ERUZBVUxUX1BSSVZfUFJPVE8gICAgIHVzbUFFU1ByaXZQcm90b2NvbAojZW5kaWYKI2RlZmluZSBTTk1QX0RFRkFVTFRfUFJJVl9QUk9UT0xFTiAgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNCgogICAgTkVUU05NUF9JTVBPUlQgdm9pZCAgICAgc25tcF9zZXRfZGV0YWlsKGNvbnN0IGNoYXIgKik7CgojZGVmaW5lIFNOTVBfTUFYX01TR19TSVpFICAgICAgICAgIDE0NzIgLyogZXRoZXJuZXQgTVRVIG1pbnVzIElQL1VEUCBoZWFkZXIgKi8KI2RlZmluZSBTTk1QX01BWF9NU0dfVjNfSERSUyAgICAgICAoNCszKzQrNys3KzMrNysxNikgICAvKiBmdWRnZSBmYWN0b3I9MTYgKi8KI2RlZmluZSBTTk1QX01BWF9FTkdfU0laRSAgICAgICAgICAzMgojZGVmaW5lIFNOTVBfTUFYX1NFQ19OQU1FX1NJWkUgICAgIDI1NgojZGVmaW5lIFNOTVBfTUFYX0NPTlRFWFRfU0laRSAgICAgIDI1NgojZGVmaW5lIFNOTVBfU0VDX1BBUkFNX0JVRl9TSVpFICAgIDI1NgoKICAgIC8qCiAgICAgKiBzZXQgdG8gb25lIHRvIGlnbm9yZSB1bmF1dGhlbnRpY2F0ZWQgUmVwb3J0cyAKICAgICAqLwojZGVmaW5lIFNOTVBWM19JR05PUkVfVU5BVVRIX1JFUE9SVFMgMAoKICAgIC8qCiAgICAgKiBhdXRob3JpdGF0aXZlIGVuZ2luZSBkZWZpbml0aW9ucyAKICAgICAqLwojZGVmaW5lIFNOTVBfU0VTU19OT05BVVRIT1JJVEFUSVZFIDAgICAgLyogc2hvdWxkIGJlIDAgdG8gZGVmYXVsdCB0byB0aGlzICovCiNkZWZpbmUgU05NUF9TRVNTX0FVVEhPUklUQVRJVkUgICAgMSAgICAvKiBkb24ndCBsZWFybiBlbmdpbmVJRHMgKi8KI2RlZmluZSBTTk1QX1NFU1NfVU5LTk9XTkFVVEggICAgICAyICAgIC8qIHNvbWV0aW1lcyAobGlrZSBOUnMpICovCgogICAgLyoKICAgICAqIHRvIGRldGVybWluZSB0eXBlIG9mIFJlcG9ydCBmcm9tIHZhcmJpbmRfbGlzdCAKICAgICAqLwojZGVmaW5lIFJFUE9SVF9TVEFUU19MRU4gIDkJLyogTGVuZ3RoIG9mIHByZWZpeCBmb3IgTVBEL1VTTSByZXBvcnQgc3RhdGlzdGljIG9iamVjdHMgKi8KI2RlZmluZSBSRVBPUlRfU1RBVFNfTEVOMiA4CS8qIExlbmd0aCBvZiBwcmVmaXggZm9yIFRhcmdldCByZXBvcnQgc3RhdGlzdGljIG9iamVjdHMgKi8KLyogRnJvbSBTTk1QLU1QRC1NSUIgKi8KI2RlZmluZSBSRVBPUlRfc25tcFVua25vd25TZWN1cml0eU1vZGVsc19OVU0gMQojZGVmaW5lIFJFUE9SVF9zbm1wSW52YWxpZE1zZ3NfTlVNICAgICAgICAgICAyCiNkZWZpbmUgUkVQT1JUX3NubXBVbmtub3duUERVSGFuZGxlcnNfTlVNICAgIDMKLyogRnJvbSBTTk1QLVVTRVItQkFTRUQtU00tTUlCICovCiNkZWZpbmUgUkVQT1JUX3VzbVN0YXRzVW5zdXBwb3J0ZWRTZWNMZXZlbHNfTlVNIDEKI2RlZmluZSBSRVBPUlRfdXNtU3RhdHNOb3RJblRpbWVXaW5kb3dzX05VTSAyCiNkZWZpbmUgUkVQT1JUX3VzbVN0YXRzVW5rbm93blVzZXJOYW1lc19OVU0gMwojZGVmaW5lIFJFUE9SVF91c21TdGF0c1Vua25vd25FbmdpbmVJRHNfTlVNIDQKI2RlZmluZSBSRVBPUlRfdXNtU3RhdHNXcm9uZ0RpZ2VzdHNfTlVNICAgICA1CiNkZWZpbmUgUkVQT1JUX3VzbVN0YXRzRGVjcnlwdGlvbkVycm9yc19OVU0gNgovKiBGcm9tIFNOTVAtVEFSR0VULU1JQiAqLwojZGVmaW5lIFJFUE9SVF9zbm1wVW5hdmFpbGFibGVDb250ZXh0c19OVU0gIDQKI2RlZmluZSBSRVBPUlRfc25tcFVua25vd25Db250ZXh0c19OVU0gICAgICA1CgojZGVmaW5lIFNOTVBfREVUQUlMX1NJWkUgICAgICAgIDUxMgoKI2RlZmluZSBTTk1QX0ZMQUdTX1VEUF9CUk9BRENBU1QgICAweDgwMAojZGVmaW5lIFNOTVBfRkxBR1NfUkVTUF9DQUxMQkFDSyAgIDB4NDAwICAgICAgLyogQWRkaXRpb25hbCBjYWxsYmFjayBvbiByZXNwb25zZSAqLwojZGVmaW5lIFNOTVBfRkxBR1NfVVNFUl9DUkVBVEVEICAgIDB4MjAwICAgICAgLyogVVNNIHVzZXIgaGFzIGJlZW4gY3JlYXRlZCAqLwojZGVmaW5lIFNOTVBfRkxBR1NfRE9OVF9QUk9CRSAgICAgIDB4MTAwICAgICAgLyogZG9uJ3QgcHJvYmUgZm9yIGFuIGVuZ2luZUlEICovCiNkZWZpbmUgU05NUF9GTEFHU19TVFJFQU1fU09DS0VUICAgMHg4MAojZGVmaW5lIFNOTVBfRkxBR1NfTElTVEVOSU5HICAgICAgIDB4NDAgLyogU2VydmVyIHN0cmVhbSBzb2NrZXRzIG9ubHkgKi8KI2RlZmluZSBTTk1QX0ZMQUdTX1NVQlNFU1NJT04gICAgICAweDIwCiNkZWZpbmUgU05NUF9GTEFHU19TVFJJS0UyICAgICAgICAgMHgwMgojZGVmaW5lIFNOTVBfRkxBR1NfU1RSSUtFMSAgICAgICAgIDB4MDEKCiNkZWZpbmUgQ0xFQVJfU05NUF9TVFJJS0VfRkxBR1MoeCkgXAoJeCAmPSB+KFNOTVBfRkxBR1NfU1RSSUtFMnxTTk1QX0ZMQUdTX1NUUklLRTEpCgogICAgLyoKICAgICAqIHJldHVybnMgJzEnIGlmIHRoZSBzZXNzaW9uIGlzIHRvIGJlIHJlZ2FyZGVkIGFzIGRlYWQsCiAgICAgKiBvdGhlcndpc2Ugc2V0IHRoZSBzdHJpa2UgZmxhZ3MgYXBwcm9wcmlhdGVseSwgYW5kIHJldHVybiAwCiAgICAgKi8KI2RlZmluZSBTRVRfU05NUF9TVFJJS0VfRkxBR1MoeCkgXAoJKCggICB4ICYgU05NUF9GTEFHU19TVFJJS0UyICkgPyAxIDoJCQkJXAoJICgoKCB4ICYgU05NUF9GTEFHU19TVFJJS0UxICkgPyAoIHggfD0gU05NUF9GTEFHU19TVFJJS0UyICkgOglcCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggeCB8PSBTTk1QX0ZMQUdTX1NUUklLRTEgKSksCVwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpCgogICAgLyoKICAgICAqIEVycm9yIHJldHVybiB2YWx1ZXMuCiAgICAgKgogICAgICogU05NUEVSUl9TVUNDRVNTIGlzIHRoZSBub24tUERVICJzdWNjZXNzIiBjb2RlLgogICAgICoKICAgICAqIFhYWCAgVGhlc2Ugc2hvdWxkIGJlIG1lcmdlZCB3aXRoIFNOTVBfRVJSXyogZGVmaW5lcyBhbmQgY29uZmluZWQKICAgICAqICAgICAgdG8gdmFsdWVzIDwgMC4gID8/PwogICAgICovCiNkZWZpbmUgU05NUEVSUl9TVUNDRVNTCQkJKDApICAgICAvKiBYWFggIE5vbi1QRFUgInN1Y2Nlc3MiIGNvZGUuICovCiNkZWZpbmUgU05NUEVSUl9HRU5FUlIJCQkoLTEpCiNkZWZpbmUgU05NUEVSUl9CQURfTE9DUE9SVAkJKC0yKQojZGVmaW5lIFNOTVBFUlJfQkFEX0FERFJFU1MJCSgtMykKI2RlZmluZSBTTk1QRVJSX0JBRF9TRVNTSU9OCQkoLTQpCiNkZWZpbmUgU05NUEVSUl9UT09fTE9ORwkJKC01KQojZGVmaW5lIFNOTVBFUlJfTk9fU09DS0VUCQkoLTYpCiNkZWZpbmUgU05NUEVSUl9WMl9JTl9WMQkJKC03KQojZGVmaW5lIFNOTVBFUlJfVjFfSU5fVjIJCSgtOCkKI2RlZmluZSBTTk1QRVJSX0JBRF9SRVBFQVRFUlMJCSgtOSkKI2RlZmluZSBTTk1QRVJSX0JBRF9SRVBFVElUSU9OUwkJKC0xMCkKI2RlZmluZSBTTk1QRVJSX0JBRF9BU04xX0JVSUxECQkoLTExKQojZGVmaW5lIFNOTVBFUlJfQkFEX1NFTkRUTwkJKC0xMikKI2RlZmluZSBTTk1QRVJSX0JBRF9QQVJTRQkJKC0xMykKI2RlZmluZSBTTk1QRVJSX0JBRF9WRVJTSU9OCQkoLTE0KQojZGVmaW5lIFNOTVBFUlJfQkFEX1NSQ19QQVJUWQkJKC0xNSkKI2RlZmluZSBTTk1QRVJSX0JBRF9EU1RfUEFSVFkJCSgtMTYpCiNkZWZpbmUgU05NUEVSUl9CQURfQ09OVEVYVAkJKC0xNykKI2RlZmluZSBTTk1QRVJSX0JBRF9DT01NVU5JVFkJCSgtMTgpCiNkZWZpbmUgU05NUEVSUl9OT0FVVEhfREVTUFJJVgkJKC0xOSkKI2RlZmluZSBTTk1QRVJSX0JBRF9BQ0wJCQkoLTIwKQojZGVmaW5lIFNOTVBFUlJfQkFEX1BBUlRZCQkoLTIxKQojZGVmaW5lIFNOTVBFUlJfQUJPUlQJCQkoLTIyKQojZGVmaW5lIFNOTVBFUlJfVU5LTk9XTl9QRFUJCSgtMjMpCiNkZWZpbmUgU05NUEVSUl9USU1FT1VUIAkJKC0yNCkKI2RlZmluZSBTTk1QRVJSX0JBRF9SRUNWRlJPTSAJCSgtMjUpCiNkZWZpbmUgU05NUEVSUl9CQURfRU5HX0lEIAkJKC0yNikKI2RlZmluZSBTTk1QRVJSX0JBRF9TRUNfTkFNRSAJCSgtMjcpCiNkZWZpbmUgU05NUEVSUl9CQURfU0VDX0xFVkVMIAkJKC0yOCkKI2RlZmluZSBTTk1QRVJSX0FTTl9QQVJTRV9FUlIgICAgICAgICAgICgtMjkpCiNkZWZpbmUgU05NUEVSUl9VTktOT1dOX1NFQ19NT0RFTCAJKC0zMCkKI2RlZmluZSBTTk1QRVJSX0lOVkFMSURfTVNHICAgICAgICAgICAgICgtMzEpCiNkZWZpbmUgU05NUEVSUl9VTktOT1dOX0VOR19JRCAgICAgICAgICAoLTMyKQojZGVmaW5lIFNOTVBFUlJfVU5LTk9XTl9VU0VSX05BTUUgCSgtMzMpCiNkZWZpbmUgU05NUEVSUl9VTlNVUFBPUlRFRF9TRUNfTEVWRUwgCSgtMzQpCiNkZWZpbmUgU05NUEVSUl9BVVRIRU5USUNBVElPTl9GQUlMVVJFIAkoLTM1KQojZGVmaW5lIFNOTVBFUlJfTk9UX0lOX1RJTUVfV0lORE9XIAkoLTM2KQojZGVmaW5lIFNOTVBFUlJfREVDUllQVElPTl9FUlIgICAgICAgICAgKC0zNykKI2RlZmluZSBTTk1QRVJSX1NDX0dFTkVSQUxfRkFJTFVSRQkoLTM4KQojZGVmaW5lIFNOTVBFUlJfU0NfTk9UX0NPTkZJR1VSRUQJKC0zOSkKI2RlZmluZSBTTk1QRVJSX0tUX05PVF9BVkFJTEFCTEUJKC00MCkKI2RlZmluZSBTTk1QRVJSX1VOS05PV05fUkVQT1JUICAgICAgICAgICgtNDEpCiNkZWZpbmUgU05NUEVSUl9VU01fR0VORVJJQ0VSUk9SCQkoLTQyKQojZGVmaW5lIFNOTVBFUlJfVVNNX1VOS05PV05TRUNVUklUWU5BTUUJCSgtNDMpCiNkZWZpbmUgU05NUEVSUl9VU01fVU5TVVBQT1JURURTRUNVUklUWUxFVkVMCSgtNDQpCiNkZWZpbmUgU05NUEVSUl9VU01fRU5DUllQVElPTkVSUk9SCQkoLTQ1KQojZGVmaW5lIFNOTVBFUlJfVVNNX0FVVEhFTlRJQ0FUSU9ORkFJTFVSRQkoLTQ2KQojZGVmaW5lIFNOTVBFUlJfVVNNX1BBUlNFRVJST1IJCQkoLTQ3KQojZGVmaW5lIFNOTVBFUlJfVVNNX1VOS05PV05FTkdJTkVJRAkJKC00OCkKI2RlZmluZSBTTk1QRVJSX1VTTV9OT1RJTlRJTUVXSU5ET1cJCSgtNDkpCiNkZWZpbmUgU05NUEVSUl9VU01fREVDUllQVElPTkVSUk9SCQkoLTUwKQojZGVmaW5lIFNOTVBFUlJfTk9NSUIJCQkoLTUxKQojZGVmaW5lIFNOTVBFUlJfUkFOR0UJCQkoLTUyKQojZGVmaW5lIFNOTVBFUlJfTUFYX1NVQklECQkoLTUzKQojZGVmaW5lIFNOTVBFUlJfQkFEX1NVQklECQkoLTU0KQojZGVmaW5lIFNOTVBFUlJfTE9OR19PSUQJCSgtNTUpCiNkZWZpbmUgU05NUEVSUl9CQURfTkFNRQkJKC01NikKI2RlZmluZSBTTk1QRVJSX1ZBTFVFCQkJKC01NykKI2RlZmluZSBTTk1QRVJSX1VOS05PV05fT0JKSUQJCSgtNTgpCiNkZWZpbmUgU05NUEVSUl9OVUxMX1BEVQkJKC01OSkKI2RlZmluZSBTTk1QRVJSX05PX1ZBUlMJCQkoLTYwKQojZGVmaW5lIFNOTVBFUlJfVkFSX1RZUEUJCSgtNjEpCiNkZWZpbmUgU05NUEVSUl9NQUxMT0MJCQkoLTYyKQojZGVmaW5lIFNOTVBFUlJfS1JCNQkJCSgtNjMpCiNkZWZpbmUgU05NUEVSUl9QUk9UT0NPTAkJKC02NCkKI2RlZmluZSBTTk1QRVJSX09JRF9OT05JTkNSRUFTSU5HICAgICAgICgtNjUpCiNkZWZpbmUgU05NUEVSUl9KVVNUX0FfQ09OVEVYVF9QUk9CRSAgICAoLTY2KQojZGVmaW5lIFNOTVBFUlJfVFJBTlNQT1JUX05PX0NPTkZJRyAgICAgKC02NykKI2RlZmluZSBTTk1QRVJSX1RSQU5TUE9SVF9DT05GSUdfRVJST1IgICgtNjgpCiNkZWZpbmUgU05NUEVSUl9UTFNfTk9fQ0VSVElGSUNBVEUgICAgICAoLTY5KQoKI2RlZmluZSBTTk1QRVJSX01BWAkJCSgtNjkpCgoKICAgIC8qCiAgICAgKiBHZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLiBVc2UgdGhlc2UgZnVuY3Rpb25zIHRvCiAgICAgKiBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBtYXkgYmUgcmVhbGxvY2F0ZWQgb3IgZnJlZWQgYnkgdGhlIE5ldC1TTk1QCiAgICAgKiBsaWJyYXJ5IG9yIHRvIHJlYWxsb2NhdGUgb3IgZnJlZSBtZW1vcnkgdGhhdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkgdGhlCiAgICAgKiBOZXQtU05NUCBsaWJyYXJ5LCBhbmQgd2hlbiB3b3JraW5nIGluIGEgY29udGV4dCB3aGVyZSB0aGVyZSBpcyBtb3JlIHRoYW4KICAgICAqIG9uZSBoZWFwLiBFeGFtcGxlcyBhcmU6CiAgICAgKiAtIFBlcmwgWFNVQidzLgogICAgICogLSBNU1ZDIG9yIE1pbkdXIHdpdGggdGhlIE5ldC1TTk1QIGxpYnJhcnkgY29tcGlsZWQgYXMgYSBETEwgaW5zdGVhZCBvZgogICAgICogICBhIHN0YXRpYyBsaWJyYXJ5LgogICAgICovCiAgICBORVRTTk1QX0lNUE9SVCB2b2lkICpuZXRzbm1wX21hbGxvYyhzaXplX3Qgc2l6ZSk7CiAgICBORVRTTk1QX0lNUE9SVCB2b2lkICpuZXRzbm1wX2NhbGxvYyhzaXplX3QgbmVsZW0sIHNpemVfdCBlbHNpemUpOwogICAgTkVUU05NUF9JTVBPUlQgdm9pZCAqbmV0c25tcF9yZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOwogICAgTkVUU05NUF9JTVBPUlQgdm9pZCBuZXRzbm1wX2ZyZWUodm9pZCAqcHRyKTsKICAgIE5FVFNOTVBfSU1QT1JUIGNoYXIgKm5ldHNubXBfc3RyZHVwKGNvbnN0IGNoYXIgKnMxKTsKCiAgICAvKgogICAgICogdm9pZAogICAgICogc25tcF9mcmVlX3BkdShwZHUpCiAgICAgKiAgICAgbmV0c25tcF9wZHUgKnBkdTsKICAgICAqCiAgICAgKiBGcmVlcyB0aGUgcGR1IGFuZCBhbnkgbWFsbG9jJ2QgZGF0YSBhc3NvY2lhdGVkIHdpdGggaXQuCiAgICAgKi8KCiAgICBORVRTTk1QX0lNUE9SVCB2b2lkIHNubXBfZnJlZV92YXJfaW50ZXJuYWxzKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKTsgICAgIC8qIGZyZWVzIGNvbnRlbnRzIG9ubHkgKi8KCgogICAgLyoKICAgICAqIFRoaXMgcm91dGluZSBtdXN0IGJlIHN1cHBsaWVkIGJ5IHRoZSBhcHBsaWNhdGlvbjoKICAgICAqCiAgICAgKiB1X2NoYXIgKmF1dGhlbnRpY2F0b3IocGR1LCBsZW5ndGgsIGNvbW11bml0eSwgY29tbXVuaXR5X2xlbikKICAgICAqIHVfY2hhciAqcGR1OyAgICAgICAgIFRoZSByZXN0IG9mIHRoZSBQRFUgdG8gYmUgYXV0aGVudGljYXRlZAogICAgICogaW50ICpsZW5ndGg7ICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgUERVICh1cGRhdGVkIGJ5IHRoZSBhdXRoZW50aWNhdG9yKQogICAgICogdV9jaGFyICpjb21tdW5pdHk7ICAgVGhlIGNvbW11bml0eSBuYW1lIHRvIGF1dGhlbnRpY2F0ZSB1bmRlci4KICAgICAqIGludCAgY29tbXVuaXR5X2xlbiAgIFRoZSBsZW5ndGggb2YgdGhlIGNvbW11bml0eSBuYW1lLgogICAgICoKICAgICAqIFJldHVybnMgdGhlIGF1dGhlbnRpY2F0ZWQgcGR1LCBvciBOVUxMIGlmIGF1dGhlbnRpY2F0aW9uIGZhaWxlZC4KICAgICAqIElmIG51bGwgYXV0aGVudGljYXRpb24gaXMgdXNlZCwgdGhlIGF1dGhlbnRpY2F0b3IgaW4gc25tcF9zZXNzaW9uIGNhbiBiZQogICAgICogc2V0IHRvIE5VTEwoMCkuCiAgICAgKi8KCgoKICAgIC8qCiAgICAgKiBUaGlzIHJvdXRpbmUgbXVzdCBiZSBzdXBwbGllZCBieSB0aGUgYXBwbGljYXRpb246CiAgICAgKgogICAgICogaW50IGNhbGxiYWNrKG9wZXJhdGlvbiwgc2Vzc2lvbiwgcmVxaWQsIHBkdSwgbWFnaWMpCiAgICAgKiBpbnQgb3BlcmF0aW9uOwogICAgICogbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOyAgICBUaGUgc2Vzc2lvbiBhdXRoZW50aWNhdGVkIHVuZGVyLgogICAgICogaW50IHJlcWlkOyAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlcXVlc3QgaWQgb2YgdGhpcyBwZHUgKDAgZm9yIFRSQVApCiAgICAgKiBuZXRzbm1wX3BkdSAqcGR1OyAgICAgICAgVGhlIHBkdSBpbmZvcm1hdGlvbi4KICAgICAqIHZvaWQgKm1hZ2ljICAgICAgICAgICAgICAgICAgICAgIEEgbGluayB0byB0aGUgZGF0YSBmb3IgdGhpcyByb3V0aW5lLgogICAgICoKICAgICAqIFJldHVybnMgMSBpZiByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsLCAwIGlmIGl0IHNob3VsZCBiZSBrZXB0IHBlbmRpbmcuCiAgICAgKiBBbnkgZGF0YSBpbiB0aGUgcGR1IG11c3QgYmUgY29waWVkIGJlY2F1c2UgaXQgd2lsbCBiZSBmcmVlZCBlbHNld2hlcmUuCiAgICAgKiBPcGVyYXRpb25zIGFyZSBkZWZpbmVkIGJlbG93OgogICAgICovCgojZGVmaW5lIE5FVFNOTVBfQ0FMTEJBQ0tfT1BfUkVDRUlWRURfTUVTU0FHRQkxCiNkZWZpbmUgTkVUU05NUF9DQUxMQkFDS19PUF9USU1FRF9PVVQJCTIKI2RlZmluZSBORVRTTk1QX0NBTExCQUNLX09QX1NFTkRfRkFJTEVECQkzCiNkZWZpbmUgTkVUU05NUF9DQUxMQkFDS19PUF9DT05ORUNUCQk0CiNkZWZpbmUgTkVUU05NUF9DQUxMQkFDS19PUF9ESVNDT05ORUNUCQk1CgogICAgbG9uZyAgICAgICAgICAgIHNubXBfZ2V0X25leHRfbXNnaWQodm9pZCk7CiAgICBsb25nICAgICAgICAgICAgc25tcF9nZXRfbmV4dF9yZXFpZCh2b2lkKTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICBsb25nICAgICAgICAgICAgc25tcF9nZXRfbmV4dF9zZXNzaWQodm9pZCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgbG9uZyAgICAgICAgICAgIHNubXBfZ2V0X25leHRfdHJhbnNpZCh2b2lkKTsKCiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIHNubXBfb2lkX2NvbXBhcmUoY29uc3Qgb2lkICosIHNpemVfdCwgY29uc3Qgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOwogICAgaW50ICAgICAgICAgICAgIHNubXBfb2lkX25jb21wYXJlKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCwgc2l6ZV90KTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICBpbnQgICAgICAgICAgICAgc25tcF9vaWR0cmVlX2NvbXBhcmUoY29uc3Qgb2lkICosIHNpemVfdCwgY29uc3Qgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICBpbnQgICAgICAgICAgICAgc25tcF9vaWRzdWJ0cmVlX2NvbXBhcmUoY29uc3Qgb2lkICosIHNpemVfdCwgY29uc3Qgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9vaWRfY29tcGFyZV9sbChjb25zdCBvaWQgKiBpbl9uYW1lMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKiBpbl9uYW1lMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4yLCBzaXplX3QgKm9mZnB0KTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9vaWRfZXF1YWxzKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOwogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX3RyZWVfZXF1YWxzKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX2lzX3N1YnRyZWUoY29uc3Qgb2lkICosIHNpemVfdCwgY29uc3Qgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX29pZF9maW5kX3ByZWZpeChjb25zdCBvaWQgKiBpbl9uYW1lMSwgc2l6ZV90IGxlbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogaW5fbmFtZTIsIHNpemVfdCBsZW4yKTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICB2b2lkICAgICAgICAgICAgaW5pdF9zbm1wKGNvbnN0IGNoYXIgKik7CiAgICB1X2NoYXIgICAgICAgICAqc25tcF9wZHVfYnVpbGQobmV0c25tcF9wZHUgKiwgdV9jaGFyICosIHNpemVfdCAqKTsKI2lmZGVmIE5FVFNOTVBfVVNFX1JFVkVSU0VfQVNORU5DT0RJTkcKICAgIHVfY2hhciAgICAgICAgICpzbm1wX3BkdV9yYnVpbGQobmV0c25tcF9wZHUgKiwgdV9jaGFyICosIHNpemVfdCAqKTsKI2VuZGlmCiAgICBpbnQgICAgICAgICAgICAgc25tcHYzX3BhcnNlKG5ldHNubXBfcGR1ICosIHVfY2hhciAqLCBzaXplX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoqLCBuZXRzbm1wX3Nlc3Npb24gKik7CiAgICBpbnQgICAgICAgICAgICAgc25tcHYzX3BhY2tldF9idWlsZChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICpwZHUsIHVfY2hhciAqIHBhY2tldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBwZHVfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwZHVfZGF0YV9sZW4pOwogICAgaW50ICAgICAgICAgICAgIHNubXB2M19wYWNrZXRfcmJ1aWxkKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICpwZHUsIHVfY2hhciAqIHBhY2tldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHBkdV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwZHVfZGF0YV9sZW4pOwogICAgaW50ICAgICAgICAgICAgIHNubXB2M19tYWtlX3JlcG9ydChuZXRzbm1wX3BkdSAqcGR1LCBpbnQgZXJyb3IpOwogICAgaW50ICAgICAgICAgICAgIHNubXB2M19nZXRfcmVwb3J0X3R5cGUobmV0c25tcF9wZHUgKnBkdSk7CiAgICBpbnQgICAgICAgICAgICAgc25tcF9wZHVfcGFyc2UobmV0c25tcF9wZHUgKnBkdSwgdV9jaGFyICogZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgpOwogICAgdV9jaGFyICAgICAgICAgKnNubXB2M19zY29wZWRQRFVfcGFyc2UobmV0c25tcF9wZHUgKnBkdSwgdV9jaGFyICogY3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIHZvaWQgICAgICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChjb25zdCBjaGFyICp0eXBlKTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICB2b2lkICAgICAgICAgICAgc25tcF9zdG9yZV9pZl9uZWVkZWQodm9pZCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgdm9pZCAgICAgICAgICAgIHNubXBfc3RvcmUoY29uc3QgY2hhciAqdHlwZSk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgdm9pZCAgICAgICAgICAgIHNubXBfc2h1dGRvd24oY29uc3QgY2hhciAqdHlwZSk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIHNubXBfYWRkX3ZhcihuZXRzbm1wX3BkdSAqLCBjb25zdCBvaWQgKiwgc2l6ZV90LCBjaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOwogICAgTkVUU05NUF9JTVBPUlQKICAgIG9pZCAgICAgICAgICAgICpzbm1wX2R1cGxpY2F0ZV9vYmppZChjb25zdCBvaWQgKiBvYmpUb0NvcHksIHNpemVfdCk7CiAgICBORVRTTk1QX0lNUE9SVAoKI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVRJU1RJQ1MKICAgIHVfaW50ICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoaW50IHdoaWNoKTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICB1X2ludCAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljX2J5KGludCB3aGljaCwgaW50IGNvdW50KTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICB1X2ludCAgICAgICAgICAgc25tcF9nZXRfc3RhdGlzdGljKGludCB3aGljaCk7CiAgICB2b2lkICAgICAgICAgICAgc25tcF9pbml0X3N0YXRpc3RpY3Modm9pZCk7CiNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBVElTVElDUyAqLwoKLyogYWxsb3cgY29kZSB0byBjb250aW51ZSByZWZlcmVuY2luZyBBUEkgZXZlbiBpZiBzdGF0aXN0aWNzIGFyZSByZW1vdmVkICovCiNkZWZpbmUgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFgpCiNkZWZpbmUgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljX2J5KFgsWSkKI2RlZmluZSBzbm1wX2luaXRfc3RhdGlzdGljcygpCgojZW5kaWYKCiAgICBpbnQgICAgICAgICAgICAgY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24pOwogICAgaW50IHNubXB2M19wcm9iZV9jb250ZXh0RW5naW5lSURfcmZjNTM0Myh2b2lkICpzbHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbik7CgogICAgLyoKICAgICAqIE5ldyByZS1hbGxvY2F0aW5nIHJldmVyc2UgZW5jb2RpbmcgZnVuY3Rpb25zLiAgCiAgICAgKi8KI2lmZGVmIE5FVFNOTVBfVVNFX1JFVkVSU0VfQVNORU5DT0RJTkcKCiAgICBpbnQgICAgICAgIHNubXB2M19wYWNrZXRfcmVhbGxvY19yYnVpbGQodV9jaGFyICoqIHBrdCwgc2l6ZV90ICogcGt0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqcGR1LCB1X2NoYXIgKiBwZHVfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwZHVfZGF0YV9sZW4pOwoKICAgIGludCAgICAgICAgc25tcF9wZHVfcmVhbGxvY19yYnVpbGQodV9jaGFyICoqIHBrdCwgc2l6ZV90ICogcGt0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvZmZzZXQsIG5ldHNubXBfcGR1ICpwZHUpOwojZW5kaWYKCgoKc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3M7CgogICAgLyoKICAgICAqIEV4dGVuZGVkIG9wZW47IGZwcmVfcGFyc2UgaGFzIGNoYW5nZWQuICAKICAgICAqLwoKICAgIE5FVFNOTVBfSU1QT1JUCiAgICBuZXRzbm1wX3Nlc3Npb24gKnNubXBfb3Blbl9leChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwcmVfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9zICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCBpbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnBhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcG9zdF9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCBpbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZmJ1aWxkKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZyYnVpbGQpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCB1X2NoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICosIHNpemVfdCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZjaGVjaykgKHVfY2hhciAqLCBzaXplX3QpKTsKCiAgICAvKgogICAgICogcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5LiAgRG9uJ3QgdXNlIHRoZXNlIGZ1bmN0aW9ucy4KICAgICAqIFNlZSBzbm1wX2RlYnVnLmggYW5kIHNubXBfZGVidWcuYyBpbnN0ZWFkLgogICAgICovCgogICAgTkVUU05NUF9JTVBPUlQKICAgIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9kb19kZWJ1Z2dpbmcoaW50KTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICBpbnQgICAgICAgICAgICAgc25tcF9nZXRfZG9fZGVidWdnaW5nKHZvaWQpOwoKCiAgICBORVRTTk1QX0lNUE9SVAogICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfc2Vzc19sb2dfZXJyb3IoaW50IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvZ19zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzcyk7CiAgICBjb25zdCBjaGFyICogICAgc25tcF9wZHVfdHlwZShpbnQgdHlwZSk7CgogICAgLyoKICAgICAqIFJldHVybiB0aGUgbmV0c25tcF90cmFuc3BvcnQgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gb3BhcXVlCiAgICAgKiBwb2ludGVyLiAgCiAgICAgKi8KCiAgICBORVRTTk1QX0lNUE9SVAogICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKnNubXBfc2Vzc190cmFuc3BvcnQodm9pZCAqKTsKICAgIHZvaWQgICAgICAgICAgICBzbm1wX3Nlc3NfdHJhbnNwb3J0X3NldCh2b2lkICosCgkJCQkJICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICopOwoKICAgIE5FVFNOTVBfSU1QT1JUIGludAogICAgbmV0c25tcF9zZXNzX2NvbmZpZ190cmFuc3BvcnQoc3RydWN0IG5ldHNubXBfY29udGFpbmVyX3MgKnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKnRyYW5zcG9ydCk7CgogICAgTkVUU05NUF9JTVBPUlQgaW50CiAgICBuZXRzbm1wX3Nlc3NfY29uZmlnX2FuZF9vcGVuX3RyYW5zcG9ydChuZXRzbm1wX3Nlc3Npb24gKmluX3Nlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqdHJhbnNwb3J0KTsKCiAgICAvKgogICAgICogRVhURU5ERUQgU0VTU0lPTiBBUEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogICAgICogCiAgICAgKiBzbm1wX3Nlc3NfYWRkX2V4LCBzbm1wX3Nlc3NfYWRkLCBzbm1wX2FkZCAKICAgICAqIAogICAgICogQW5hbG9nb3VzIHRvIHNubXBfb3BlbiBmYW1pbHkgb2YgZnVuY3Rpb25zLCBidXQgdGFraW5nIGFuCiAgICAgKiBuZXRzbm1wX3RyYW5zcG9ydCBwb2ludGVyIGFzIGFuIGV4dHJhIGFyZ3VtZW50LiAgVW5saWtlIHNubXBfb3BlbiBldAogICAgICogYWwuIGl0IGRvZXNuJ3QgYXR0ZW1wdCB0byBpbnRlcnByZXQgdGhlIGluX3Nlc3Npb24tPnBlZXJuYW1lIGFzIGEKICAgICAqIHRyYW5zcG9ydCBlbmRwb2ludCBzcGVjaWZpZXIsIGJ1dCBpbnN0ZWFkIHVzZXMgdGhlIHN1cHBsaWVkIHRyYW5zcG9ydC4KICAgICAqIEpCUE4KICAgICAqIAogICAgICovCgogICAgdm9pZCAgICAgICAgICAgKnNubXBfc2Vzc19hZGRfZXgobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnByZV9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLCB2b2lkICosIGludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbm1wX3BkdSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICosIHNpemVfdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcG9zdF9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25tcF9wZHUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZidWlsZCkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNubXBfcGR1ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiwgc2l6ZV90ICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnJidWlsZCkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbm1wX3BkdSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKiwgc2l6ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZmNoZWNrKSAodV9jaGFyICosIHNpemVfdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqKCpmY3JlYXRlX3BkdSkgKHN0cnVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KSk7CgogICAgdm9pZCAgICAgICAgICAgKnNubXBfc2Vzc19hZGQobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnByZV9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X3MgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICosIGludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcG9zdF9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCBpbnQpKTsKCiAgICBORVRTTk1QX0lNUE9SVAogICAgbmV0c25tcF9zZXNzaW9uICpzbm1wX2FkZChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnByZV9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICosIHZvaWQgKiwgaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnBvc3RfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCBpbnQpKTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICBuZXRzbm1wX3Nlc3Npb24gKnNubXBfYWRkX2Z1bGwobmV0c25tcF9zZXNzaW9uICogaW5fc2Vzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqdHJhbnNwb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwcmVfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiwgdm9pZCAqLCBpbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosIHVfY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnBvc3RfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosIGludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZmJ1aWxkKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgdV9jaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZyYnVpbGQpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoqLCBzaXplX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZjaGVjaykgKHVfY2hhciAqLCBzaXplX3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICooKmZjcmVhdGVfcGR1KSAoc3RydWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpCiAgICAgICAgKTsKICAgIC8qCiAgICAgKiBlbmQgc2luZ2xlIHNlc3Npb24gQVBJIAogICAgICovCgogICAgLyoKICAgICAqIGdlbmVyaWMgc3RhdGlzdGljIGNvdW50ZXJzIAogICAgICovCgogICAgLyoKICAgICAqIHNubXB2MyBzdGF0aXN0aWNzIAogICAgICovCgogICAgLyoKICAgICAqIG1wZCBzdGF0cyAKICAgICAqLwojZGVmaW5lICAgU1RBVF9TTk1QVU5LTk9XTlNFQ1VSSVRZTU9ERUxTICAgICAwCiNkZWZpbmUgICBTVEFUX1NOTVBJTlZBTElETVNHUyAgICAgICAgICAgICAgIDEKI2RlZmluZSAgIFNUQVRfU05NUFVOS05PV05QRFVIQU5ETEVSUyAgICAgICAgMgojZGVmaW5lICAgU1RBVF9NUERfU1RBVFNfU1RBUlQgICAgICAgICAgICAgICBTVEFUX1NOTVBVTktOT1dOU0VDVVJJVFlNT0RFTFMKI2RlZmluZSAgIFNUQVRfTVBEX1NUQVRTX0VORCAgICAgICAgICAgICAgICAgU1RBVF9TTk1QVU5LTk9XTlBEVUhBTkRMRVJTCgogICAgLyoKICAgICAqIHVzbSBzdGF0cyAKICAgICAqLwojZGVmaW5lICAgU1RBVF9VU01TVEFUU1VOU1VQUE9SVEVEU0VDTEVWRUxTICAzCiNkZWZpbmUgICBTVEFUX1VTTVNUQVRTTk9USU5USU1FV0lORE9XUyAgICAgIDQKI2RlZmluZSAgIFNUQVRfVVNNU1RBVFNVTktOT1dOVVNFUk5BTUVTICAgICAgNQojZGVmaW5lICAgU1RBVF9VU01TVEFUU1VOS05PV05FTkdJTkVJRFMgICAgICA2CiNkZWZpbmUgICBTVEFUX1VTTVNUQVRTV1JPTkdESUdFU1RTICAgICAgICAgIDcKI2RlZmluZSAgIFNUQVRfVVNNU1RBVFNERUNSWVBUSU9ORVJST1JTICAgICAgOAojZGVmaW5lICAgU1RBVF9VU01fU1RBVFNfU1RBUlQgICAgICAgICAgICAgICBTVEFUX1VTTVNUQVRTVU5TVVBQT1JURURTRUNMRVZFTFMKI2RlZmluZSAgIFNUQVRfVVNNX1NUQVRTX0VORCAgICAgICAgICAgICAgICAgU1RBVF9VU01TVEFUU0RFQ1JZUFRJT05FUlJPUlMKCiAgICAvKgogICAgICogc25tcCBjb3VudGVycyAKICAgICAqLwojZGVmaW5lICBTVEFUX1NOTVBJTlBLVFMgICAgICAgICAgICAgICAgICAgICA5CiNkZWZpbmUgIFNUQVRfU05NUE9VVFBLVFMgICAgICAgICAgICAgICAgICAgIDEwCiNkZWZpbmUgIFNUQVRfU05NUElOQkFEVkVSU0lPTlMgICAgICAgICAgICAgIDExCiNkZWZpbmUgIFNUQVRfU05NUElOQkFEQ09NTVVOSVRZTkFNRVMgICAgICAgIDEyCiNkZWZpbmUgIFNUQVRfU05NUElOQkFEQ09NTVVOSVRZVVNFUyAgICAgICAgIDEzCiNkZWZpbmUgIFNUQVRfU05NUElOQVNOUEFSU0VFUlJTICAgICAgICAgICAgIDE0CiAgICAvKgogICAgICogI2RlZmluZSAgU1RBVF9TTk1QSU5CQURUWVBFUyAgICAgICAgICAgICAgMTUgCiAgICAgKi8KI2RlZmluZSAgU1RBVF9TTk1QSU5UT09CSUdTICAgICAgICAgICAgICAgICAgMTYKI2RlZmluZSAgU1RBVF9TTk1QSU5OT1NVQ0hOQU1FUyAgICAgICAgICAgICAgMTcKI2RlZmluZSAgU1RBVF9TTk1QSU5CQURWQUxVRVMgICAgICAgICAgICAgICAgMTgKI2RlZmluZSAgU1RBVF9TTk1QSU5SRUFET05MWVMgICAgICAgICAgICAgICAgMTkKI2RlZmluZSAgU1RBVF9TTk1QSU5HRU5FUlJTICAgICAgICAgICAgICAgICAgMjAKI2RlZmluZSAgU1RBVF9TTk1QSU5UT1RBTFJFUVZBUlMgICAgICAgICAgICAgMjEKI2RlZmluZSAgU1RBVF9TTk1QSU5UT1RBTFNFVFZBUlMgICAgICAgICAgICAgMjIKI2RlZmluZSAgU1RBVF9TTk1QSU5HRVRSRVFVRVNUUyAgICAgICAgICAgICAgMjMKI2RlZmluZSAgU1RBVF9TTk1QSU5HRVRORVhUUyAgICAgICAgICAgICAgICAgMjQKI2RlZmluZSAgU1RBVF9TTk1QSU5TRVRSRVFVRVNUUyAgICAgICAgICAgICAgMjUKI2RlZmluZSAgU1RBVF9TTk1QSU5HRVRSRVNQT05TRVMgICAgICAgICAgICAgMjYKI2RlZmluZSAgU1RBVF9TTk1QSU5UUkFQUyAgICAgICAgICAgICAgICAgICAgMjcKI2RlZmluZSAgU1RBVF9TTk1QT1VUVE9PQklHUyAgICAgICAgICAgICAgICAgMjgKI2RlZmluZSAgU1RBVF9TTk1QT1VUTk9TVUNITkFNRVMgICAgICAgICAgICAgMjkKI2RlZmluZSAgU1RBVF9TTk1QT1VUQkFEVkFMVUVTICAgICAgICAgICAgICAgMzAKICAgIC8qCiAgICAgKiAjZGVmaW5lICBTVEFUX1NOTVBPVVRSRUFET05MWVMgICAgICAgICAgICAzMSAKICAgICAqLwojZGVmaW5lICBTVEFUX1NOTVBPVVRHRU5FUlJTICAgICAgICAgICAgICAgICAzMgojZGVmaW5lICBTVEFUX1NOTVBPVVRHRVRSRVFVRVNUUyAgICAgICAgICAgICAzMwojZGVmaW5lICBTVEFUX1NOTVBPVVRHRVRORVhUUyAgICAgICAgICAgICAgICAzNAojZGVmaW5lICBTVEFUX1NOTVBPVVRTRVRSRVFVRVNUUyAgICAgICAgICAgICAzNQojZGVmaW5lICBTVEFUX1NOTVBPVVRHRVRSRVNQT05TRVMgICAgICAgICAgICAzNgojZGVmaW5lICBTVEFUX1NOTVBPVVRUUkFQUyAgICAgICAgICAgICAgICAgICAzNwogICAgLyoKICAgICAqIEFVVEhUUkFQRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4IAogICAgICovCiNkZWZpbmUgIFNUQVRfU05NUFNJTEVOVERST1BTCQkgICAgIDM5CiNkZWZpbmUgIFNUQVRfU05NUFBST1hZRFJPUFMJCSAgICAgNDAKI2RlZmluZSAgU1RBVF9TTk1QX1NUQVRTX1NUQVJUICAgICAgICAgICAgICAgU1RBVF9TTk1QSU5QS1RTCiNkZWZpbmUgIFNUQVRfU05NUF9TVEFUU19FTkQgICAgICAgICAgICAgICAgIFNUQVRfU05NUFBST1hZRFJPUFMKCiAgICAvKgogICAgICogdGFyZ2V0IG1pYiBjb3VudGVycyAKICAgICAqLwojZGVmaW5lICBTVEFUX1NOTVBVTkFWQUlMQUJMRUNPTlRFWFRTCSAgICAgNDEKI2RlZmluZSAgU1RBVF9TTk1QVU5LTk9XTkNPTlRFWFRTCSAgICAgNDIKI2RlZmluZSAgU1RBVF9UQVJHRVRfU1RBVFNfU1RBUlQgICAgICAgICAgICAgU1RBVF9TTk1QVU5BVkFJTEFCTEVDT05URVhUUwojZGVmaW5lICBTVEFUX1RBUkdFVF9TVEFUU19FTkQgICAgICAgICAgICAgICBTVEFUX1NOTVBVTktOT1dOQ09OVEVYVFMKCiAgICAvKgogICAgICogVFNNIGNvdW50ZXJzCiAgICAgKi8KI2RlZmluZSAgU1RBVF9UU01fU05NUFRTTUlOVkFMSURDQUNIRVMgICAgICAgICAgICAgNDMKI2RlZmluZSAgU1RBVF9UU01fU05NUFRTTUlOQURFUVVBVEVTRUNVUklUWUxFVkVMUyAgNDQKI2RlZmluZSAgU1RBVF9UU01fU05NUFRTTVVOS05PV05QUkVGSVhFUyAgICAgICAgICAgNDUKI2RlZmluZSAgU1RBVF9UU01fU05NUFRTTUlOVkFMSURQUkVGSVhFUyAgICAgICAgICAgNDYKI2RlZmluZSAgU1RBVF9UU01fU1RBVFNfU1RBUlQgICAgICAgICAgICAgICAgIFNUQVRfVFNNX1NOTVBUU01JTlZBTElEQ0FDSEVTCiNkZWZpbmUgIFNUQVRfVFNNX1NUQVRTX0VORCAgICAgICAgICAgICAgICAgICBTVEFUX1RTTV9TTk1QVFNNSU5WQUxJRFBSRUZJWEVTCgogICAgLyoKICAgICAqIFRMU1RNIGNvdW50ZXJzCiAgICAgKi8KI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OT1BFTlMgICAgICAgICAgICAgICAgICAgICAgNDcKI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OQ0xJRU5UQ0xPU0VTICAgICAgICAgICAgICAgNDgKI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OT1BFTkVSUk9SUyAgICAgICAgICAgICAgICAgNDkKI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OQUNDRVBUUyAgICAgICAgICAgICAgICAgICAgNTAKI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OU0VSVkVSQ0xPU0VTICAgICAgICAgICAgICAgNTEKI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OTk9TRVNTSU9OUyAgICAgICAgICAgICAgICAgNTIKI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OSU5WQUxJRENMSUVOVENFUlRJRklDQVRFUyAgNTMKI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OVU5LTk9XTlNFUlZFUkNFUlRJRklDQVRFICAgNTQKI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OSU5WQUxJRFNFUlZFUkNFUlRJRklDQVRFUyAgNTUKI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OSU5WQUxJRENBQ0hFUyAgICAgICAgICAgICAgNTYKCiNkZWZpbmUgIFNUQVRfVExTVE1fU1RBVFNfU1RBUlQgICAgICAgICAgICAgICAgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk9QRU5TCiNkZWZpbmUgIFNUQVRfVExTVE1fU1RBVFNfRU5EICAgICAgICAgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURDQUNIRVMKCiAgICAvKiB0aGlzIHByZXZpb3VzbHkgd2FzIGVuZCsxOyBkb24ndCBrbm93IHdoeSB0aGUgKzEgaXMgbmVlZGVkOwogICAgICAgWFhYOiBjaGVjayB0aGUgY29kZSAqLwojZGVmaW5lICBORVRTTk1QX1NUQVRfTUFYX1NUQVRTICAgICAgICAgICAgICAoU1RBVF9UTFNUTV9TVEFUU19FTkQrMSkKLyoqIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5ICovCiNkZWZpbmUgTUFYX1NUQVRTIE5FVFNOTVBfU1RBVF9NQVhfU1RBVFMKCiAgICAvKgogICAgICogSW50ZXJuYWw6IFRoZSBsaXN0IG9mIGFjdGl2ZS9vcGVuIHNlc3Npb25zLgogICAgICovCiAgICBzdHJ1Y3Qgc2Vzc2lvbl9saXN0IHsKICAgICAgIHN0cnVjdCBzZXNzaW9uX2xpc3QgKm5leHQ7CiAgICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb247CiAgICAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0OwogICAgICAgc3RydWN0IHNubXBfaW50ZXJuYWxfc2Vzc2lvbiAqaW50ZXJuYWw7CiAgICB9OwoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCiNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUF9BUElfSCAqLwo=