LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQogKiBUcmFjZWFseXplciB2Mi40LjEgUmVjb3JkZXIgTGlicmFyeQ0KICogUGVyY2VwaW8gQUIsIHd3dy5wZXJjZXBpby5jb20NCiAqDQogKiB0cmNIYXJkd2FyZVBvcnQuaA0KICoNCiAqIENvbnRhaW5zIHRvZ2V0aGVyIHdpdGggdHJjSGFyZHdhcmVQb3J0LmMgYWxsIGhhcmR3YXJlIHBvcnRhYmlsaXR5IGlzc3VlcyBvZiANCiAqIHRoZSB0cmFjZSByZWNvcmRlciBsaWJyYXJ5Lg0KICoNCiAqIFRlcm1zIG9mIFVzZQ0KICogVGhpcyBzb2Z0d2FyZSBpcyBjb3B5cmlnaHQgUGVyY2VwaW8gQUIuIFRoZSByZWNvcmRlciBsaWJyYXJ5IGlzIGZyZWUgZm9yDQogKiB1c2UgdG9nZXRoZXIgd2l0aCBQZXJjZXBpbyBwcm9kdWN0cy4gWW91IG1heSBkaXN0cmlidXRlIHRoZSByZWNvcmRlciBsaWJyYXJ5DQogKiBpbiBpdHMgb3JpZ2luYWwgZm9ybSwgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMgaW4gdHJjUG9ydC5jIGFuZCB0cmNQb3J0LmgNCiAqIGdpdmVuIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9uIGFyZSBjbGVhcmx5IG1hcmtlZCBhcyB5b3VyIG93biBtb2RpZmljYXRpb25zDQogKiBhbmQgZG9jdW1lbnRlZCBpbiB0aGUgaW5pdGlhbCBjb21tZW50IHNlY3Rpb24gb2YgdGhlc2Ugc291cmNlIGZpbGVzLiANCiAqIFRoaXMgc29mdHdhcmUgaXMgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBQZXJjZXBpbyBBQiBhbmQgbWF5IG5vdCBiZSANCiAqIHNvbGQgb3IgaW4gb3RoZXIgd2F5cyBjb21tZXJjaWFsbHkgcmVkaXN0cmlidXRlZCB3aXRob3V0IGV4cGxpY2l0IHdyaXR0ZW4gDQogKiBwZXJtaXNzaW9uIGJ5IFBlcmNlcGlvIEFCLg0KICoNCiAqIERpc2NsYWltZXIgDQogKiBUaGUgdHJhY2UgdG9vbCBhbmQgcmVjb3JkZXIgbGlicmFyeSBpcyBiZWluZyBkZWxpdmVyZWQgdG8geW91IEFTIElTIGFuZCANCiAqIFBlcmNlcGlvIEFCIG1ha2VzIG5vIHdhcnJhbnR5IGFzIHRvIGl0cyB1c2Ugb3IgcGVyZm9ybWFuY2UuIFBlcmNlcGlvIEFCIGRvZXMgDQogKiBub3QgYW5kIGNhbm5vdCB3YXJyYW50IHRoZSBwZXJmb3JtYW5jZSBvciByZXN1bHRzIHlvdSBtYXkgb2J0YWluIGJ5IHVzaW5nIHRoZSANCiAqIHNvZnR3YXJlIG9yIGRvY3VtZW50YXRpb24uIFBlcmNlcGlvIEFCIG1ha2Ugbm8gd2FycmFudGllcywgZXhwcmVzcyBvciANCiAqIGltcGxpZWQsIGFzIHRvIG5vbmluZnJpbmdlbWVudCBvZiB0aGlyZCBwYXJ0eSByaWdodHMsIG1lcmNoYW50YWJpbGl0eSwgb3IgDQogKiBmaXRuZXNzIGZvciBhbnkgcGFydGljdWxhciBwdXJwb3NlLiBJbiBubyBldmVudCB3aWxsIFBlcmNlcGlvIEFCLCBpdHMgDQogKiB0ZWNobm9sb2d5IHBhcnRuZXJzLCBvciBkaXN0cmlidXRvcnMgYmUgbGlhYmxlIHRvIHlvdSBmb3IgYW55IGNvbnNlcXVlbnRpYWwsIA0KICogaW5jaWRlbnRhbCBvciBzcGVjaWFsIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgbG9zdCBwcm9maXRzIG9yIGxvc3Qgc2F2aW5ncywgDQogKiBldmVuIGlmIGEgcmVwcmVzZW50YXRpdmUgb2YgUGVyY2VwaW8gQUIgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgDQogKiBvZiBzdWNoIGRhbWFnZXMsIG9yIGZvciBhbnkgY2xhaW0gYnkgYW55IHRoaXJkIHBhcnR5LiBTb21lIGp1cmlzZGljdGlvbnMgZG8gDQogKiBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwsIGNvbnNlcXVlbnRpYWwgb3Igc3BlY2lhbCANCiAqIGRhbWFnZXMsIG9yIHRoZSBleGNsdXNpb24gb2YgaW1wbGllZCB3YXJyYW50aWVzIG9yIGxpbWl0YXRpb25zIG9uIGhvdyBsb25nIGFuIA0KICogaW1wbGllZCB3YXJyYW50eSBtYXkgbGFzdCwgc28gdGhlIGFib3ZlIGxpbWl0YXRpb25zIG1heSBub3QgYXBwbHkgdG8geW91Lg0KICoNCiAqIENvcHlyaWdodCBQZXJjZXBpbyBBQiwgMjAxMy4NCiAqIHd3dy5wZXJjZXBpby5jb20NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCiNpZm5kZWYgVFJDUE9SVF9IDQojZGVmaW5lIFRSQ1BPUlRfSA0KDQojaW5jbHVkZSAidHJjS2VybmVsUG9ydC5oIg0KDQovKiBJZiBXaW4zMiBwb3J0ICovDQojaWZkZWYgV0lOMzINCg0KICAgI3VuZGVmIF9XSU4zMl9XSU5OVA0KICAgI2RlZmluZSBfV0lOMzJfV0lOTlQgMHgwNjAwDQoNCiAgIC8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KICAgI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAjaW5jbHVkZSA8d2luZG93cy5oPg0KICAgI2luY2x1ZGUgPGRpcmVjdC5oPg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogVGhlIFdpbjMyIHBvcnQgYnkgZGVmYXVsdCBzYXZlcyB0aGUgdHJhY2UgdG8gZmlsZSBhbmQgdGhlbiBraWxscyB0aGUNCiAqIHByb2dyYW0gd2hlbiB0aGUgcmVjb3JkZXIgaXMgc3RvcHBlZCwgdG8gZmFjaWxpdGF0ZSBxdWljaywgc2ltcGxlIHRlc3RzDQogKiBvZiB0aGUgcmVjb3JkZXIuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgI2RlZmluZSBXSU4zMl9QT1JUX1NBVkVfV0hFTl9TVE9QUEVEIDENCiAgICNkZWZpbmUgV0lOMzJfUE9SVF9FWElUX1dIRU5fU1RPUFBFRCAxDQoNCiNlbmRpZg0KDQojZGVmaW5lIERJUkVDVElPTl9JTkNSRU1FTlRJTkcgMQ0KI2RlZmluZSBESVJFQ1RJT05fREVDUkVNRU5USU5HIDINCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogU3VwcG9ydGVkIHBvcnRzDQogKiANCiAqIFBPUlRfSFdJbmRlcGVuZGVudA0KICogQSBoYXJkd2FyZSBpbmRlcGVuZGVudCBmYWxsYmFjayBvcHRpb24gZm9yIGV2ZW50IHRpbWVzdGFtcGluZy4gUHJvdmlkZXMgbG93IA0KICogcmVzb2x1dGlvbiB0aW1lc3RhbXBzIGJhc2VkIG9uIHRoZSBPUyB0aWNrLg0KICogVGhpcyBtYXkgYmUgdXNlZCBvbiB0aGUgV2luMzIgcG9ydCwgYnV0IG1heSBhbHNvIGJlIHVzZWQgb24gZW1iZWRkZWQgaGFyZHdhcmUgDQogKiBwbGF0Zm9ybXMuIEFsbCB0aW1lIGR1cmF0aW9ucyB3aWxsIGJlIHRydW5jYXRlZCB0byB0aGUgT1MgdGljayBmcmVxdWVuY3ksIA0KICogdHlwaWNhbGx5IDEgS0h6LiBUaGlzIG1lYW5zIHRoYXQgYSB0YXNrIG9yIElTUiB0aGF0IGV4ZWN1dGVzIGluIGxlc3MgdGhhbiANCiAqIDEgbXMgZ2V0IGFuIGV4ZWN1dGlvbiB0aW1lIG9mIHplcm8uDQogKg0KICogUE9SVF9XaW4zMg0KICogIkFjY3VyYXRlIiB0aW1lc3RhbXBpbmcgYmFzZWQgb24gdGhlIFdpbmRvd3MgcGVyZm9ybWFuY2UgY291bnRlci4gTm90ZSB0aGF0DQogKiB0aGlzIGdpdmVzIHRoZSBob3N0IG1hY2hpbmUgdGltZS4NCiAqDQogKiBPZmZpY2lhbGx5IHN1cHBvcnRlZCBoYXJkd2FyZSB0aW1lciBwb3J0czoNCiAqIC0gUE9SVF9BdG1lbF9BVDkxU0FNNw0KICogLSBQT1JUX0F0bWVsX1VDM0EwDQogKiAtIFBPUlRfQVJNX0NvcnRleE0gDQogKiAtIFBPUlRfUmVuZXNhc19SWDYwMA0KICogLSBQT1JUX01pY3JvY2hpcF9kc1BJQ19BTkRfUElDMjQNCiAqDQogKiBXZSBhbHNvIHByb3ZpZGUgc2V2ZXJhbCAidW5vZmZpY2lhbCIgaGFyZHdhcmUtc3BlY2lmaWMgcG9ydHMuIFRoZXJlIGhhdmUgDQogKiBiZWVuIGRldmVsb3BlZCBieSBleHRlcm5hbCBjb250cmlidXRvcnMsIGFuZCBoYXZlIG5vdCB5ZXQgYmVlbiB2ZXJpZmllZCANCiAqIGJ5IFBlcmNlcGlvIEFCLiBMZXQgdXMga25vdyBpZiB5b3UgaGF2ZSBwcm9ibGVtcyBnZXR0aW5nIHRoZXNlIHRvIHdvcmsuDQogKiANCiAqIFVub2ZmaWNpYWwgaGFyZHdhcmUgc3BlY2lmaWMgcG9ydHMgcHJvdmlkZWQgYXJlOg0KICogLSBQT1JUX1RFWEFTX0lOU1RSVU1FTlRTX1RNUzU3MA0KICogLSBQT1JUX1RFWEFTX0lOU1RSVU1FTlRTX01TUDQzMA0KICogLSBQT1JUX01JQ1JPQ0hJUF9QSUMzMg0KICogLSBQT1JUX1hJTElOWF9QUEM0MDUNCiAqIC0gUE9SVF9YSUxJTlhfUFBDNDQwDQogKiAtIFBPUlRfWElMSU5YX01JQ1JPQkxBWkUNCiAqIC0gUE9SVF9OWFBfTFBDMjEwWA0KICoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2RlZmluZSBQT1JUX05PVF9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgIC0xDQoNCi8qKiogT2ZmaWNpYWxseSBzdXBwb3J0ZWQgaGFyZHdhcmUgdGltZXIgcG9ydHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNkZWZpbmUgUE9SVF9IV0luZGVwZW5kZW50ICAgICAgICAgICAgICAgICAgICAgMA0KI2RlZmluZSBQT1JUX1dpbjMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxDQojZGVmaW5lIFBPUlRfQXRtZWxfQVQ5MVNBTTcgICAgICAgICAgICAgICAgICAgIDINCiNkZWZpbmUgUE9SVF9BdG1lbF9VQzNBMCAgICAgICAgICAgICAgICAgICAgICAgMw0KI2RlZmluZSBQT1JUX0FSTV9Db3J0ZXhNICAgICAgICAgICAgICAgICAgICAgICA0DQojZGVmaW5lIFBPUlRfUmVuZXNhc19SWDYwMCAgICAgICAgICAgICAgICAgICAgIDUNCiNkZWZpbmUgUE9SVF9NaWNyb2NoaXBfZHNQSUNfQU5EX1BJQzI0ICAgICAgICAgNg0KDQovKioqIFVub2ZmaWNpYWwgcG9ydHMsIHByb3ZpZGVkIGJ5IGV4dGVybmFsIGRldmVsb3BlcnMsIG5vdCB5ZXQgdmVyaWZpZWQgKioqKiovDQojZGVmaW5lIFBPUlRfVEVYQVNfSU5TVFJVTUVOVFNfVE1TNTcwICAgICAgICAgIDcNCiNkZWZpbmUgUE9SVF9URVhBU19JTlNUUlVNRU5UU19NU1A0MzAgICAgICAgICAgOA0KI2RlZmluZSBQT1JUX01JQ1JPQ0hJUF9QSUMzMiAgICAgICAgICAgICAgICAgICA5DQojZGVmaW5lIFBPUlRfWElMSU5YX1BQQzQwNSAgICAgICAgICAgICAgICAgICAgMTANCiNkZWZpbmUgUE9SVF9YSUxJTlhfUFBDNDQwICAgICAgICAgICAgICAgICAgICAxMQ0KI2RlZmluZSBQT1JUX1hJTElOWF9NSUNST0JMQVpFICAgICAgICAgICAgICAgIDEyDQojZGVmaW5lIFBPUlRfTlhQX0xQQzIxMFggICAgICAgICAgICAgICAgICAgICAgMTMNCg0KLyoqKiBTZWxlY3QgeW91ciBwb3J0IGhlcmUhICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2RlZmluZSBTRUxFQ1RFRF9QT1JUIFBPUlRfV2luMzINCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2lmIChTRUxFQ1RFRF9QT1JUID09IFBPUlRfTk9UX1NFVCkgDQojZXJyb3IgIllvdSBuZWVkIHRvIGRlZmluZSBTRUxFQ1RFRF9QT1JUIGhlcmUhIg0KI2VuZGlmDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBJUlFfUFJJT1JJVFlfT1JERVINCiAqDQogKiBNYWNybyB3aGljaCBzaG91bGQgYmUgZGVmaW5lZCBhcyBhbiBpbnRlZ2VyIG9mIDAgb3IgMS4NCiAqDQogKiBUaGlzIHNob3VsZCBiZSAwIGlmIGxvd2VyIElSUSBwcmlvcml0eSB2YWx1ZXMgaW1wbGllcyBoaWdoZXIgcHJpb3JpdHkgDQogKiBsZXZlbHMsIHN1Y2ggYXMgb24gQVJNIENvcnRleCBNLiBJZiB0aGUgb3Bwb3NpdGUgc2NoZW1lIGlzIHVzZWQsIGkuZS4sIA0KICogaWYgaGlnaGVyIElSUSBwcmlvcml0eSB2YWx1ZXMgbWVhbnMgaGlnaGVyIHByaW9yaXR5LCB0aGlzIHNob3VsZCBiZSAxLg0KICoNCiAqIFRoaXMgc2V0dGluZyBpcyBub3QgY3JpdGljYWwuIEl0IGlzIHVzZWQgb25seSB0byBzb3J0IGFuZCBjb2xvcml6ZSB0aGUgDQogKiBpbnRlcnJ1cHRzIGluIHByaW9yaXR5IG9yZGVyLCBpbiBjYXNlIHlvdSByZWNvcmQgaW50ZXJydXB0cyB1c2luZw0KICogdGhlIHZUcmFjZVN0b3JlSVNSQmVnaW4gYW5kIHZUcmFjZVN0b3JlSVNSRW5kIHJvdXRpbmVzLg0KICoNCiAqIFdlIHByb3ZpZGUgdGhpcyBzZXR0aW5nIGZvciBzb21lIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMgYmVsb3c6DQogKiAtIEFSTSBDb3J0ZXggTTogICAgICAgMCAobG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudCkNCiAqIC0gQXRtZWwgQVQ5MVNBTTd4OiAgICAxIChoaWdoZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudCkNCiAqIC0gQXRtZWwgQVZSMzI6ICAgICAgICAxIChoaWdoZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudCkNCiAqIC0gUmVuZXNhcyBSWDYwMDogICAgICAxIChoaWdoZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudCkNCiAqIC0gTWljcm9jaGlwIFBJQzI0OiAgICAwIChsb3dlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50KQ0KICogLSBNaWNyb2NoaXAgZHNQSUM6ICAgIDAgKGxvd2VyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQpDQogKiAtIFRJIFRNUzU3MDogICAgICAgICAgMCAobG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudCkNCiAqIC0gRnJlZXNjYWxlIEhDUzA4OiAgICAwIChsb3dlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50KQ0KICogLSBGcmVlc2NhbGUgSENTMTI6ICAgIDAgKGxvd2VyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQpDQogKiAtIFBvd2VyUEMgNDA1OiAgICAgICAgMCAobG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudCkNCiAqIC0gUG93ZXJQQyA0NDA6ICAgICAgICAwIChsb3dlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50KQ0KICogLSBGcmVlc2NhbGUgQ29sZEZpcmU6IDEgKGhpZ2hlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50KQ0KICogLSBOWFAgTFBDMjEweDogICAgICAgIDAgKGxvd2VyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQpDQogKiAtIE1pY3JvQmxhemU6ICAgICAgICAwICAobG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudCkNCiAqDQogKiBJZiB5b3VyIGNoaXAgaXMgbm90IG9uIHRoZSBhYm92ZSBsaXN0LCBhbmQgeW91IHBlcmhhcHMga25vdyB0aGlzIGRldGFpbCBieSANCiAqIGhlYXJ0LCBwbGVhc2UgaW5mb3JtIHVzIGJ5IGUtbWFpbCB0byBzdXBwb3J0QHBlcmNlcGlvLmNvbS4NCiAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKg0KICogSFdUQyBNYWNyb3MgDQogKg0KICogVGhlc2UgZm91ciBIV1RDIG1hY3JvcyBwcm92aWRlcyBhIGhhcmR3YXJlIGlzb2xhdGlvbiBsYXllciByZXByZXNlbnRpbmcgYSANCiAqIGdlbmVyaWMgaGFyZHdhcmUgdGltZXIvY291bnRlciB1c2VkIGZvciBkcml2aW5nIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHRpY2ssIA0KICogc3VjaCBhcyB0aGUgU3lzVGljayBmZWF0dXJlIG9mIEFSTSBDb3J0ZXggTTMvTTQsIG9yIHRoZSBQSVQgb2YgdGhlIEF0bWVsIA0KICogQVQ5MVNBTTdYLg0KICoNCiAqIEhXVENfQ09VTlQ6IFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb3VudGVyLiBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIHJlc2V0IA0KICogYSBlYWNoIHRpY2sgaW50ZXJydXB0LiBUaHVzLCB3aGVuIHRoZSB0aWNrIGhhbmRsZXIgc3RhcnRzLCB0aGUgY291bnRlciBoYXMgDQogKiBhbHJlYWR5IHdyYXBwZWQuDQogKg0KICogSFdUQ19DT1VOVF9ESVJFQ1RJT046IFNob3VsZCBiZSBvbmUgb2Y6DQogKiAtIERJUkVDVElPTl9JTkNSRU1FTlRJTkcgLSBmb3IgaGFyZHdhcmUgdGltZXIvY291bnRlcnMgb2YgaW5jcmVtZW50aW5nIHR5cGUNCiAqICAgc3VjaCBhcyB0aGUgUElUIG9uIEF0bWVsIEFUOTFTQU03WC4NCiAqICAgV2hlbiB0aGUgY291bnRlciB2YWx1ZSByZWFjaCBIV1RDX1BFUklPRCwgaXQgaXMgcmVzZXQgdG8gemVybyBhbmQgdGhlDQogKiAgIGludGVycnVwdCBpcyBzaWduYWxlZC4NCiAqIC0gRElSRUNUSU9OX0RFQ1JFTUVOVElORyAtIGZvciBoYXJkd2FyZSB0aW1lci9jb3VudGVycyBvZiBkZWNyZW1lbnRpbmcgdHlwZQ0KICogICBzdWNoIGFzIHRoZSBTeXNUaWNrIG9uIEFSTSBDb3J0ZXggTTMvTTQgY2hpcHMuDQogKiAgIFdoZW4gdGhlIGNvdW50ZXIgdmFsdWUgcmVhY2ggMCwgaXQgaXMgcmVzZXQgdG8gSFdUQ19QRVJJT0QgYW5kIHRoZQ0KICogICBpbnRlcnJ1cHQgaXMgc2lnbmFsZWQuDQogKg0KICogSFdUQ19QRVJJT0Q6IFRoZSBudW1iZXIgb2YgaW5jcmVtZW50cyBvciBkZWNyZW1lbnRzIG9mIEhXVENfQ09VTlQgYmV0d2Vlbg0KICogdHdvIHRpY2sgaW50ZXJydXB0cy4gVGhpcyBzaG91bGQgcHJlZmVyYWJseSBiZSBtYXBwZWQgdG8gdGhlIHJlbG9hZA0KICogcmVnaXN0ZXIgb2YgdGhlIGhhcmR3YXJlIHRpbWVyLCB0byBtYWtlIGl0IG1vcmUgcG9ydGFibGUgYmV0d2VlbiBjaGlwcyBpbiB0aGUgDQogKiBzYW1lIGZhbWlseS4gVGhlIG1hY3JvIHNob3VsZCBpbiBtb3N0IGNhc2VzIGJlIChyZWxvYWQgcmVnaXN0ZXIgKyAxKS4NCiAqDQogKiBIV1RDX0RJVklTT1I6IElmIHRoZSB0aW1lciBmcmVxdWVuY3kgaXMgdmVyeSBoaWdoLCBsaWtlIG9uIHRoZSBDb3J0ZXggTSBjaGlwcw0KICogKHdoZXJlIHRoZSBTeXNUaWNrIHJ1bnMgYXQgdGhlIGNvcmUgY2xvY2sgZnJlcXVlbmN5KSwgdGhlICJkaWZmZXJlbnRpYWwgDQogKiB0aW1lc3RhbXBpbmciIHVzZWQgaW4gdGhlIHJlY29yZGVyIHdpbGwgbW9yZSBmcmVxdWVudGx5IGluc2VydCBleHRyYSBYVFMgDQogKiBldmVudHMgdG8gc3RvcmUgdGhlIHRpbWVzdGFtcHMsIHdoaWNoIGluY3JlYXNlcyB0aGUgZXZlbnQgYnVmZmVyIHVzYWdlLiANCiAqIEluIHN1Y2ggY2FzZXMsIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIFhUUyBldmVudHMgYW5kIHRoZXJlYnkgZ2V0IGxvbmdlciANCiAqIHRyYWNlcywgeW91IHVzZSBIV1RDX0RJVklTT1IgdG8gc2NhbGUgZG93biB0aGUgdGltZXN0YW1wcyBhbmQgZnJlcXVlbmN5Lg0KICogQXNzdW1pbmcgYSBPUyB0aWNrIHJhdGUgb2YgMSBLSHosIGl0IGlzIHN1Z2dlc3RlZCB0byBrZWVwIHRoZSBlZmZlY3RpdmUgdGltZXINCiAqIGZyZXF1ZW5jeSBiZWxvdyA2NSBNSHogdG8gYXZvaWQgYW4gZXhjZXNzaXZlIGFtb3VudCBvZiBYVFMgZXZlbnRzLiBUaHVzLCBhDQogKiBDb3J0ZXggTSBjaGlwIHJ1bm5pbmcgYXQgNzIgTUhaIHNob3VsZCB1c2UgYSBIV1RDX0RJVklTT1Igb2YgMiwgd2hpbGUgYSANCiAqIGZhc3RlciBjaGlwIHJlcXVpcmUgYSBoaWdoZXIgSFdUQ19ESVZJU09SIHZhbHVlLiANCiAqDQogKiBUaGUgSFdUQyBtYWNyb3MgYW5kIHZUcmFjZVBvcnRHZXRUaW1lU3RhbXAgaXMgdGhlIG1haW4gcG9ydGluZyBpc3N1ZQ0KICogb3IgdGhlIHRyYWNlIHJlY29yZGVyIGxpYnJhcnkuIFR5cGljYWxseSB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIGNoYW5nZQ0KICogdGhlIGNvZGUgb2YgdlRyYWNlUG9ydEdldFRpbWVTdGFtcCBpZiB1c2luZyB0aGUgSFdUQyBtYWNyb3MuDQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2lmIChTRUxFQ1RFRF9QT1JUID09IFBPUlRfV2luMzIpDQogICAgDQogICAgI2RlZmluZSBIV1RDX0NPVU5UX0RJUkVDVElPTiBESVJFQ1RJT05fSU5DUkVNRU5USU5HDQogICAgI2RlZmluZSBIV1RDX0NPVU5UICh1bEdldFJ1blRpbWVDb3VudGVyVmFsdWUoKSkNCiAgICAjZGVmaW5lIEhXVENfUEVSSU9EIDANCiAgICAjZGVmaW5lIEhXVENfRElWSVNPUiAxDQogICAgDQogICAgI2RlZmluZSBJUlFfUFJJT1JJVFlfT1JERVIgMSAgLy8gUGxlYXNlIHVwZGF0ZSBhY2NvcmRpbmcgdG8geW91ciBoYXJkd2FyZS4uLg0KDQojZWxpZiAoU0VMRUNURURfUE9SVCA9PSBQT1JUX0hXSW5kZXBlbmRlbnQpDQogICAgDQogICAgI2RlZmluZSBIV1RDX0NPVU5UX0RJUkVDVElPTiBESVJFQ1RJT05fSU5DUkVNRU5USU5HDQogICAgI2RlZmluZSBIV1RDX0NPVU5UIDANCiAgICAjZGVmaW5lIEhXVENfUEVSSU9EIDENCiAgICAjZGVmaW5lIEhXVENfRElWSVNPUiAxDQoNCiAgICAjZGVmaW5lIElSUV9QUklPUklUWV9PUkRFUiAxICAvLyBQbGVhc2UgdXBkYXRlIGFjY29yZGluZyB0byB5b3VyIGhhcmR3YXJlLi4uDQoNCiNlbGlmIChTRUxFQ1RFRF9QT1JUID09IFBPUlRfQXRtZWxfQVQ5MVNBTTcpDQoNCiAgICAvKiBIV1RDX1BFUklPRCBpcyBoYXJkY29kZWQgZm9yIEFUOTFTQU03WDI1Ni1FSyBCb2FyZCAoNDggTUh6KQ0KICAgIEEgbW9yZSBnZW5lcmljIHNvbHV0aW9uIGlzIHRvIGdldCB0aGUgcGVyaW9kIGZyb20gcHhQSVQtPlBJVENfUElNUiAqLw0KICAgIA0KICAgICNkZWZpbmUgSFdUQ19DT1VOVF9ESVJFQ1RJT04gRElSRUNUSU9OX0lOQ1JFTUVOVElORw0KICAgICNkZWZpbmUgSFdUQ19DT1VOVCAoQVQ5MUNfQkFTRV9QSVRDLT5QSVRDX1BJSVIgJiAweEZGRkZGKQ0KICAgICNkZWZpbmUgSFdUQ19QRVJJT0QgMjk5NSANCiAgICAjZGVmaW5lIEhXVENfRElWSVNPUiAxDQoNCiAgICAjZGVmaW5lIElSUV9QUklPUklUWV9PUkRFUiAxICAvLyBoaWdoZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudA0KDQojZWxpZiAoU0VMRUNURURfUE9SVCA9PSBQT1JUX0F0bWVsX1VDM0EwKSANCiAgDQogICAgLyogRm9yIEF0bWVsIEFWUjMyIChBVDMyVUMzQSkgKi8NCiAgDQogICAgI2RlZmluZSBIV1RDX0NPVU5UX0RJUkVDVElPTiBESVJFQ1RJT05fSU5DUkVNRU5USU5HDQogICAgI2RlZmluZSBIV1RDX0NPVU5UIHN5c3JlZ19yZWFkKEFWUjMyX0NPVU5UKQ0KICAgICNkZWZpbmUgSFdUQ19QRVJJT0QgKCBUUkFDRV9DUFVfQ0xPQ0tfSFogLyBUUkFDRV9USUNLX1JBVEVfSFogKQ0KICAgICNkZWZpbmUgSFdUQ19ESVZJU09SIDEgICAgDQoNCiAgICAjZGVmaW5lIElSUV9QUklPUklUWV9PUkRFUiAxICAvLyBoaWdoZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudA0KDQojZWxpZiAoU0VMRUNURURfUE9SVCA9PSBQT1JUX0FSTV9Db3J0ZXhNKQ0KDQogICAgLyogRm9yIGFsbCBjaGlwcyB1c2luZyBBUk0gQ29ydGV4IE0gY29yZXMgKi8NCg0KICAgICNkZWZpbmUgSFdUQ19DT1VOVF9ESVJFQ1RJT04gRElSRUNUSU9OX0RFQ1JFTUVOVElORw0KICAgICNkZWZpbmUgSFdUQ19DT1VOVCAoKigodWludDMyX3QqKTB4RTAwMEUwMTgpKQ0KICAgICNkZWZpbmUgSFdUQ19QRVJJT0QgKCgqKHVpbnQzMl90KikweEUwMDBFMDE0KSArIDEpDQogICAgI2RlZmluZSBIV1RDX0RJVklTT1IgMg0KICAgIA0KICAgICNkZWZpbmUgSVJRX1BSSU9SSVRZX09SREVSIDAgIC8vIGxvd2VyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQNCg0KI2VsaWYgKFNFTEVDVEVEX1BPUlQgPT0gUE9SVF9SZW5lc2FzX1JYNjAwKSAgICANCg0KICAgICNpbmNsdWRlICJpb2RlZmluZS5oIg0KDQogICAgI2RlZmluZSBIV1RDX0NPVU5UX0RJUkVDVElPTiBESVJFQ1RJT05fSU5DUkVNRU5USU5HDQogICAgI2RlZmluZSBIV1RDX0NPVU5UIChDTVQwLkNNQ05UKQ0KICAgICNkZWZpbmUgSFdUQ19QRVJJT0QgKCgoKFRSQUNFX1BFUklQSEVSQUxfQ0xPQ0tfSFovVFJBQ0VfVElDS19SQVRFX0haKS0xKS84KSkNCiAgICAjZGVmaW5lIEhXVENfRElWSVNPUiAxDQoNCiAgICAjZGVmaW5lIElSUV9QUklPUklUWV9PUkRFUiAxICAvLyBoaWdoZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudA0KDQojZWxpZiAoU0VMRUNURURfUE9SVCA9PSBQT1JUX01pY3JvY2hpcF9kc1BJQ19BTkRfUElDMjQpIA0KDQogICAgLyogRm9yIE1pY3JvY2hpcCBQSUMyNCBhbmQgZHNQSUMgKDE2IGJpdCkgKi8NCg0KICAgIC8qIE5vdGU6IFRoZSB0cmFjZSBsaWJyYXJ5IHdhcyBvcmlnaW5hbGx5IGRlc2lnbmVkIGZvciAzMi1iaXQgTUNVcywgYW5kIGlzIHNsb3dlcg0KICAgICAgIHRoYW4gaW50ZW5kZWQgb24gMTYtYml0IE1DVXMuIFN0b3JpbmcgYW4gZXZlbnQgb24gYSBQSUMyNCB0YWtlcyBhYm91dCA3MCC1cy4gDQogICAgICAgSW4gY29tcGFyaXNvbiwgMzItYml0IE1DVXMgYXJlIG9mdGVuIDEwLTIwIHRpbWVzIGZhc3Rlci4gSWYgcmVjb3JkaW5nIG92ZXJoZWFkIA0KICAgICAgIGJlY29tZXMgYSBwcm9ibGVtIG9uIFBJQzI0LCB1c2UgdGhlIGZpbHRlcnMgdG8gZXhjbHVkZSBsZXNzIGludGVyZXN0aW5nIHRhc2tzIA0KICAgICAgIG9yIHN5c3RlbSBjYWxscy4gKi8NCg0KICAgICNkZWZpbmUgSFdUQ19DT1VOVF9ESVJFQ1RJT04gRElSRUNUSU9OX0lOQ1JFTUVOVElORw0KICAgICNkZWZpbmUgSFdUQ19DT1VOVCAoVE1SMSkNCiAgICAjZGVmaW5lIEhXVENfUEVSSU9EIChQUjErMSkNCiAgICAjZGVmaW5lIEhXVENfRElWSVNPUiAxDQoNCiAgICAjZGVmaW5lIElSUV9QUklPUklUWV9PUkRFUiAwICAvLyBsb3dlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50DQoNCiNlbGlmIChTRUxFQ1RFRF9QT1JUID09IFBPUlRfTlhQX0xQQzIxMFgpDQogICAgLyogVU5PRkZJQ0lBTCBQT1JUIC0gTk9UIFlFVCBWRVJJRklFRCBCWSBQRVJDRVBJTyAqLw0KICAgIA0KICAgIC8qIFRlc3RlZCB3aXRoIExQQzIxMDYsIGJ1dCBzaG91bGQgd29yayB3aXRoIG1vc3QgTFBDMjFYWCBjaGlwcy4gKi8NCiAgICAgIA0KICAgICNkZWZpbmUgSFdUQ19DT1VOVF9ESVJFQ1RJT04gRElSRUNUSU9OX0lOQ1JFTUVOVElORw0KICAgICNkZWZpbmUgSFdUQ19DT1VOVCAgKigodWludDMyX3QgKikweEUwMDA0MDA4ICkNCiAgICAjZGVmaW5lIEhXVENfUEVSSU9EICggVFJBQ0VfQ1BVX0NMT0NLX0haIC8gVFJBQ0VfVElDS19SQVRFX0haICkgDQogICAgI2RlZmluZSBIV1RDX0RJVklTT1IgMSAgICANCg0KICAgICNkZWZpbmUgSVJRX1BSSU9SSVRZX09SREVSIDAgIC8vIGxvd2VyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQNCg0KI2VsaWYgKFNFTEVDVEVEX1BPUlQgPT0gUE9SVF9URVhBU19JTlNUUlVNRU5UU19UTVM1NzApDQogICAgLyogVU5PRkZJQ0lBTCBQT1JUIC0gTk9UIFlFVCBWRVJJRklFRCBCWSBQRVJDRVBJTyAqLw0KDQogICAgI2RlZmluZSBSVElGUkMwICooKHVpbnQzMl90ICopMHhGRkZGRkMxMCkNCiAgICAjZGVmaW5lIFJUSUNPTVAwICooKHVpbnQzMl90ICopMHhGRkZGRkM1MCkNCiAgICAjZGVmaW5lIFJUSVVEQ1AwICooKHVpbnQzMl90ICopMHhGRkZGRkM1NCkNCiAgICAjZGVmaW5lIEhXVENfQ09VTlRfRElSRUNUSU9OIERJUkVDVElPTl9JTkNSRU1FTlRJTkcNCiAgICAjZGVmaW5lIEhXVENfQ09VTlQgKFJUSUZSQzAgLSAoUlRJQ09NUDAgLSBSVElVRENQMCkpDQogICAgI2RlZmluZSBIV1RDX1BFUklPRCAoUlRJVURDUDApDQogICAgI2RlZmluZSBIV1RDX0RJVklTT1IgMQ0KDQogICAgI2RlZmluZSBJUlFfUFJJT1JJVFlfT1JERVIgMCAgLy8gbG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudA0KDQojZWxpZiAoU0VMRUNURURfUE9SVCA9PSBQT1JUX1RFWEFTX0lOU1RSVU1FTlRTX01TUDQzMCkNCiAgICAvKiBVTk9GRklDSUFMIFBPUlQgLSBOT1QgWUVUIFZFUklGSUVEIEJZIFBFUkNFUElPICovDQoNCiAgICAjZGVmaW5lIEhXVENfQ09VTlRfRElSRUNUSU9OIERJUkVDVElPTl9JTkNSRU1FTlRJTkcNCiAgICAjZGVmaW5lIEhXVENfQ09VTlQgKFRBMFIpDQogICAgI2RlZmluZSBIV1RDX1BFUklPRCBUUkFDRV9DUFVfQ0xPQ0tTX1BFUl9USUNLICAgICAgDQogICAgI2RlZmluZSBIV1RDX0RJVklTT1IgMQ0KDQogICAgI2RlZmluZSBJUlFfUFJJT1JJVFlfT1JERVIgMSAgLy8gaGlnaGVyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQNCg0KI2VsaWYgKFNFTEVDVEVEX1BPUlQgPT0gUE9SVF9NSUNST0NISVBfUElDMzIpDQogICAgLyogVU5PRkZJQ0lBTCBQT1JUIC0gTk9UIFlFVCBWRVJJRklFRCBCWSBQRVJDRVBJTyAqLw0KDQogICAgI2RlZmluZSBIV1RDX0NPVU5UX0RJUkVDVElPTiBESVJFQ1RJT05fSU5DUkVNRU5USU5HDQogICAgI2RlZmluZSBIV1RDX0NPVU5UIChSZWFkVGltZXIxKCkpICAgICAvKiBTaG91bGQgYmUgYXZhaWxhYmxlIGluIEJTUCAqLw0KICAgICNkZWZpbmUgSFdUQ19QRVJJT0QgKFJlYWRQZXJpb2QxKCkrMSkgLyogU2hvdWxkIGJlIGF2YWlsYWJsZSBpbiBCU1AgKi8NCiAgICAjZGVmaW5lIEhXVENfRElWSVNPUiAxDQoNCiAgICAjZGVmaW5lIElSUV9QUklPUklUWV9PUkRFUiAwICAvLyBsb3dlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50DQoNCiNlbGlmIChTRUxFQ1RFRF9QT1JUID09IFBPUlRfWElMSU5YX1BQQzQwNSkgDQogICAgLyogVU5PRkZJQ0lBTCBQT1JUIC0gTk9UIFlFVCBWRVJJRklFRCBCWSBQRVJDRVBJTyAqLw0KDQogICAgI2RlZmluZSBIV1RDX0NPVU5UX0RJUkVDVElPTiBESVJFQ1RJT05fREVDUkVNRU5USU5HDQogICAgI2RlZmluZSBIV1RDX0NPVU5UICBtZnNwciggMHgzZGIpDQogICAgI2RlZmluZSBIV1RDX1BFUklPRCAoIFRSQUNFX0NQVV9DTE9DS19IWiAvIFRSQUNFX1RJQ0tfUkFURV9IWiApDQogICAgI2RlZmluZSBIV1RDX0RJVklTT1IgMQ0KDQogICAgI2RlZmluZSBJUlFfUFJJT1JJVFlfT1JERVIgMCAgLy8gbG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudA0KDQojZWxpZiAoU0VMRUNURURfUE9SVCA9PSBQT1JUX1hJTElOWF9QUEM0NDApIA0KICAgIC8qIFVOT0ZGSUNJQUwgUE9SVCAtIE5PVCBZRVQgVkVSSUZJRUQgQlkgUEVSQ0VQSU8gKi8NCg0KICAgIC8qIFRoaXMgc2hvdWxkIHdvcmsgd2l0aCBtb3N0IFBvd2VyUEMgY2hpcHMgKi8NCiAgICANCiAgICAjZGVmaW5lIEhXVENfQ09VTlRfRElSRUNUSU9OIERJUkVDVElPTl9ERUNSRU1FTlRJTkcNCiAgICAjZGVmaW5lIEhXVENfQ09VTlQgIG1mc3ByKCAweDAxNiApDQogICAgI2RlZmluZSBIV1RDX1BFUklPRCAoIFRSQUNFX0NQVV9DTE9DS19IWiAvIFRSQUNFX1RJQ0tfUkFURV9IWiApDQogICAgI2RlZmluZSBIV1RDX0RJVklTT1IgMSAgICANCg0KICAgICNkZWZpbmUgSVJRX1BSSU9SSVRZX09SREVSIDAgIC8vIGxvd2VyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQNCiAgICANCiNlbGlmIChTRUxFQ1RFRF9QT1JUID09IFBPUlRfWElMSU5YX01JQ1JPQkxBWkUpDQogICAgLyogVU5PRkZJQ0lBTCBQT1JUIC0gTk9UIFlFVCBWRVJJRklFRCBCWSBQRVJDRVBJTyAqLw0KDQogICAgLyogVGhpcyBzaG91bGQgd29yayB3aXRoIG1vc3QgTWljcm9ibGF6ZSBjb25maWd1cmF0aW9ucy4NCiAgICAgKiBJdCB1c2VzIHRoZSBBWEkgVGltZXIgMCAtIHRoZSB0aWNrIGludGVycnVwdCBzb3VyY2UuDQogICAgICogSWYgYW4gQVhJIFRpbWVyIDAgcGVyaXBoZXJhbCBpcyBhdmFpbGFibGUgb24geW91ciBoYXJkd2FyZSBwbGF0Zm9ybSwgbm8gbW9kaWZpY2F0aW9ucyBhcmUgcmVxdWlyZWQuDQogICAgICovDQogICAgI2luY2x1ZGUgInh0bXJjdHJfbC5oIg0KDQogICAgI2RlZmluZSBIV1RDX0NPVU5UX0RJUkVDVElPTiBESVJFQ1RJT05fREVDUkVNRU5USU5HDQogICAgI2RlZmluZSBIV1RDX0NPVU5UIFhUbXJDdHJfR2V0VGltZXJDb3VudGVyUmVnKCBYUEFSX1RNUkNUUl8wX0JBU0VBRERSLCAwICkNCiAgICAjZGVmaW5lIEhXVENfUEVSSU9EICggVFJBQ0VfQ1BVX0NMT0NLX0haIC8gVFJBQ0VfVElDS19SQVRFX0haICkNCiAgICAjZGVmaW5lIEhXVENfRElWSVNPUiAxNg0KDQogICAgI2RlZmluZSBJUlFfUFJJT1JJVFlfT1JERVIgMCAgLy8gbG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudA0KDQojZWxpZiAoU0VMRUNURURfUE9SVCAhPSBQT1JUX05PVF9TRVQpDQoNCiAgICAjZXJyb3IgIlNFTEVDVEVEX1BPUlQgaGFkIHVuc3VwcG9ydGVkIHZhbHVlISINCiAgICAjZGVmaW5lIFNFTEVDVEVEX1BPUlQgUE9SVF9OT1RfU0VUDQoNCiNlbmRpZg0KDQojaWYgKFNFTEVDVEVEX1BPUlQgIT0gUE9SVF9OT1RfU0VUKQ0KICAgIA0KICAgICNpZm5kZWYgSFdUQ19DT1VOVF9ESVJFQ1RJT04NCiAgICAjZXJyb3IgIkhXVENfQ09VTlRfRElSRUNUSU9OIGlzIG5vdCBzZXQhIg0KICAgICNlbmRpZiANCiAgICANCiAgICAjaWZuZGVmIEhXVENfQ09VTlQNCiAgICAjZXJyb3IgIkhXVENfQ09VTlQgaXMgbm90IHNldCEiICAgIA0KICAgICNlbmRpZiANCiAgICANCiAgICAjaWZuZGVmIEhXVENfUEVSSU9EDQogICAgI2Vycm9yICJIV1RDX1BFUklPRCBpcyBub3Qgc2V0ISINCiAgICAjZW5kaWYgDQogICAgDQogICAgI2lmbmRlZiBIV1RDX0RJVklTT1INCiAgICAjZXJyb3IgIkhXVENfRElWSVNPUiBpcyBub3Qgc2V0ISIgICAgDQogICAgI2VuZGlmIA0KICAgIA0KICAgICNpZm5kZWYgSVJRX1BSSU9SSVRZX09SREVSDQogICAgI2Vycm9yICJJUlFfUFJJT1JJVFlfT1JERVIgaXMgbm90IHNldCEiDQogICAgI2VsaWYgKElSUV9QUklPUklUWV9PUkRFUiAhPSAwKSAmJiAoSVJRX1BSSU9SSVRZX09SREVSICE9IDEpDQogICAgI2Vycm9yICJJUlFfUFJJT1JJVFlfT1JERVIgaGFzIGJhZCB2YWx1ZSEiDQogICAgI2VuZGlmIA0KICAgIA0KICAgICNpZiAoSFdUQ19ESVZJU09SIDwgMSkNCiAgICAjZXJyb3IgIkhXVENfRElWSVNPUiBtdXN0IGJlIGEgbm9uLXplcm8gcG9zaXRpdmUgdmFsdWUhIg0KICAgICNlbmRpZiANCg0KI2VuZGlmDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlQ29uc29sZU1lc3NhZ2UNCiAqDQogKiBBIHdyYXBwZXIgZm9yIHlvdXIgc3lzdGVtLXNwZWNpZmljIGNvbnNvbGUgInByaW50ZiIgY29uc29sZSBvdXRwdXQgZnVuY3Rpb24uDQogKiBUaGlzIG5lZWRzIHRvIGJlIGNvcnJlY3RseSBkZWZpbmVkIHRvIHNlZSBzdGF0dXMgcmVwb3J0cyBmcm9tIHRoZSB0cmFjZSANCiAqIHN0YXR1cyBtb25pdG9yIHRhc2sgKHRoaXMgaXMgZGVmaW5lZCBpbiB0cmNVc2VyLmMpLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAgICAgICANCiNpZiAoU0VMRUNURURfUE9SVCA9PSBQT1JUX0F0bWVsX0FUOTFTQU03KQ0KLyogUG9ydCBzcGVjaWZpYyBpbmNsdWRlcyAqLw0KI2luY2x1ZGUgImNvbnNvbGUuaCINCiNlbmRpZg0KDQojZGVmaW5lIHZUcmFjZUNvbnNvbGVNZXNzYWdlKHgpDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiB2VHJhY2VQb3J0R2V0VGltZVN0YW1wDQogKg0KICogUmV0dXJucyB0aGUgY3VycmVudCB0aW1lIGJhc2VkIG9uIHRoZSBIV1RDIG1hY3JvcyB3aGljaCBwcm92aWRlIGEgaGFyZHdhcmUNCiAqIGlzb2xhdGlvbiBsYXllciB0b3dhcmRzIHRoZSBoYXJkd2FyZSB0aW1lci9jb3VudGVyLg0KICoNCiAqIFRoZSBIV1RDIG1hY3JvcyBhbmQgdlRyYWNlUG9ydEdldFRpbWVTdGFtcCBpcyB0aGUgbWFpbiBwb3J0aW5nIGlzc3VlDQogKiBvciB0aGUgdHJhY2UgcmVjb3JkZXIgbGlicmFyeS4gVHlwaWNhbGx5IHlvdSBzaG91bGQgbm90IG5lZWQgdG8gY2hhbmdlDQogKiB0aGUgY29kZSBvZiB2VHJhY2VQb3J0R2V0VGltZVN0YW1wIGlmIHVzaW5nIHRoZSBIV1RDIG1hY3Jvcy4NCiAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VQb3J0R2V0VGltZVN0YW1wKHVpbnQzMl90ICpwdWlUaW1lc3RhbXApOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlUG9ydEVuZA0KICogDQogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZWNvcmRlciBpcyBzdG9wcGVkIGR1ZSB0byBmdWxsIGJ1ZmZlci4NCiAqIE1haW5seSBpbnRlbmRlZCB0byBzaG93IGEgbWVzc2FnZSBpbiB0aGUgY29uc29sZS4NCiAqIFRoaXMgaXMgdXNlZCBieSB0aGUgV2luMzIgcG9ydCB0byBzdG9yZSB0aGUgdHJhY2UgdG8gYSBmaWxlLiBUaGUgZmlsZSBwYXRoIGlzDQogKiBzZXQgdXNpbmcgdlRyYWNlUG9ydFNldEZpbGVOYW1lLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgdlRyYWNlUG9ydEVuZCh2b2lkKTsNCg0KI2lmIChJTkNMVURFX1NBVkVfVE9fRklMRSA9PSAxKQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlUG9ydFNldE91dEZpbGUNCiAqDQogKiBTZXRzIHRoZSBmaWxlbmFtZS9wYXRoIHVzZWQgaW4gdlRyYWNlUG9ydFNhdmUuDQogKiBUaGlzIGlzIHNldCBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uLCBzaW5jZSB0aGUgV2luMzIgcG9ydCBjYWxscyB2VHJhY2VQb3J0U2F2ZQ0KICogaW4gdlRyYWNlUG9ydEVuZCBpZiBXSU4zMl9QT1JUX1NBVkVfV0hFTl9TVE9QUEVEIGlzIHNldC4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp2b2lkIHZUcmFjZVBvcnRTZXRPdXRGaWxlKGNoYXIqIHBhdGgpOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiB2VHJhY2VQb3J0U2F2ZQ0KICoNCiAqIFNhdmVzIHRoZSB0cmFjZSB0byBhIGZpbGUgb24gYSB0YXJnZXQtc2lkZSBmaWxlIHN5c3RlbS4gVGhlIHBhdGggaXMgc2V0IGluIGEgDQogKiBzZXBhcmF0ZSBmdW5jdGlvbiwgdlRyYWNlUG9ydFNldE91dEZpbGUsIHNpbmNlIHRoZSBXaW4zMiBwb3J0IG1heSBjYWxsDQogKiB2VHJhY2VQb3J0U2F2ZSBpbiB2VHJhY2VQb3J0RW5kLCBpZiB1c2luZyBXSU4zMl9QT1JUX1NBVkVfV0hFTl9TVE9QUEVELg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgdlRyYWNlUG9ydFNhdmUodm9pZCk7DQoNCiNlbHNlDQoNCiNkZWZpbmUgdlRyYWNlQ29uc29sZU1lc3NhZ2UoeCkNCiNkZWZpbmUgdlRyYWNlUG9ydFNldE91dEZpbGUocGF0aCkNCiNkZWZpbmUgdlRyYWNlUG9ydFNhdmUodm9pZCkNCg0KI2VuZGlmDQoNCiNlbmRpZg0K