LyogVGhpcyBmaWxlIGlzIG9iai1ldmF4LmgKICAgQ29weXJpZ2h0IChDKSAxOTk2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogICBDb250cmlidXRlZCBieSBLbGF1cyBL5G1wZiAoa2thZW1wZkBwcm9naXMuZGUpIG9mCiAgICAgcHJvR0lTIFNvZnR3YXJlLCBBYWNoZW4sIEdlcm1hbnkuCgogICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQVMsIHRoZSBHTlUgQXNzZW1ibGVyLgoKICAgR0FTIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICBhbnkgbGF0ZXIgdmVyc2lvbi4KCiAgIEdBUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICBhbG9uZyB3aXRoIEdBUzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAogICBNQSAwMjExMS0xMzA3LCBVU0EuICAqLwoKLyoKICogVGhpcyBmaWxlIGlzIG9iai1ldmF4LmggYW5kIGlzIGludGVuZGVkIHRvIGJlIGEgdGVtcGxhdGUgZm9yCiAqIG9iamVjdCBmb3JtYXQgc3BlY2lmaWMgaGVhZGVyIGZpbGVzLgogKi8KCi8qIGRlZmluZSBhbiBvYmogc3BlY2lmaWMgbWFjcm8gb2ZmIHdoaWNoIHRhcmdldCBjcHUgYmFjayBlbmRzIG1heSBrZXkuICovCiNkZWZpbmUgT0JKX0VWQVggMQoKLyogaW5jbHVkZSB3aGF0ZXZlciB0YXJnZXQgY3B1IGlzIGFwcHJvcHJpYXRlLiAqLwojaW5jbHVkZSAidGFyZy1jcHUuaCIKCiNpZmRlZiBCRkRfQVNTRU1CTEVSCiNkZWZpbmUgT1VUUFVUX0ZMQVZPUiBiZmRfdGFyZ2V0X2V2YXhfZmxhdm91cgojZW5kaWYKCi8qCiAqIFNZTUJPTFMKICovCgovKgogKiBJZiB5b3VyIG9iamVjdCBmb3JtYXQgbmVlZHMgdG8gcmVvcmRlciBzeW1ib2xzLCBkZWZpbmUgdGhpcy4gIFdoZW4KICogZGVmaW5lZCwgc3ltYm9scyBhcmUga2VwdCBvbiBhIGRvdWJseSBsaW5rZWQgbGlzdCBhbmQgZnVuY3Rpb25zIGFyZQogKiBtYWRlIGF2YWlsYWJsZSBmb3IgcHVzaCwgaW5zZXJ0LCBhcHBlbmQsIGFuZCBkZWxldGUuICBJZiBub3QgZGVmaW5lZCwKICogc3ltYm9scyBhcmUga2VwdCBvbiBhIHNpbmdseSBsaW5rZWQgbGlzdCwgb25seSB0aGUgYXBwZW5kIGFuZCBjbGVhcgogKiBmYWNpbGl0aWVzIGFyZSBhdmFpbGFibGUsIGFuZCB0aGV5IGFyZSBtYWNyb3MuCiAqLwoKLyogI2RlZmluZSBTWU1CT0xTX05FRURfUEFDS1BPSU5URVJTICovCgovKiAgKi8KdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB2b2lkICpub3RoaW5nOwogIH0Kb2JqX3N5bWJvbF90eXBlOwkJLyogc2hvdWxkIGJlIHRoZSBmb3JtYXQncyBzeW1ib2wgc3RydWN0dXJlICovCgp0eXBlZGVmIHZvaWQgKm9iamVjdF9oZWFkZXJzOwoKI2RlZmluZSBERUZBVUxUX01BR0lDX05VTUJFUl9GT1JfT0JKRUNUX0ZJTEUgKDApCS8qIHlvdXIgbWFnaWMgbnVtYmVyICovCgojZGVmaW5lIE9CSl9FTUlUX0xJTkVOTyhhLGIsYykJLyogbXVzdCBiZSAqc29tZXRoaW5nKi4gIFRoaXMgbm8tb3AncyBpdCBvdXQuICovCgojZGVmaW5lIG9ial9zeW1ib2xfbmV3X2hvb2socykgICAgICAgIHs7fQoKI2RlZmluZSBTX1NFVF9PVEhFUihTLFYpCiNkZWZpbmUgU19TRVRfVFlQRShTLFQpCiNkZWZpbmUgU19TRVRfREVTQyhTLEQpCiNkZWZpbmUgU19HRVRfT1RIRVIoUykJMAojZGVmaW5lIFNfR0VUX1RZUEUoUykJMAojZGVmaW5lIFNfR0VUX0RFU0MoUykJMAoKI2RlZmluZSBQRFNDX1NfS19LSU5EX0ZQX1NUQUNLIDkKI2RlZmluZSBQRFNDX1NfS19LSU5EX0ZQX1JFR0lTVEVSIDEwCiNkZWZpbmUgUERTQ19TX0tfS0lORF9OVUxMIDgKCiNkZWZpbmUgUERTQ19TX0tfTUlOX1NUQUNLX1NJWkUgMzIKI2RlZmluZSBQRFNDX1NfS19NSU5fUkVHSVNURVJfU0laRSAyNAojZGVmaW5lIFBEU0NfU19LX05VTExfU0laRSAxNgoKI2RlZmluZSBQRFNDX1NfTV9CQVNFX1JFR19JU19GUCAweDgwCS8qIGxvdyBieXRlICovCiNkZWZpbmUgUERTQ19TX01fTkFUSVZFIDB4MTAJCS8qIGhpZ2ggYnl0ZSAqLwojZGVmaW5lIFBEU0NfU19NX05PX0pBQ0tFVCAweDIwCQkvKiBoaWdoIGJ5dGUgKi8KCiNkZWZpbmUgTEtQX1NfS19TSVpFIDE2CgovKgogKiBMb2NhbCBWYXJpYWJsZXM6CiAqIGNvbW1lbnQtY29sdW1uOiAwCiAqIGZpbGwtY29sdW1uOiAxMzEKICogRW5kOgogKi8KCi8qIGVuZCBvZiBvYmotZXZheC5oICovCg==