PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIHNpbmNlIFUtQm9vdCAxLjEuNDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgYm9hcmQvY3B1IHNwZWNpZmljIE5BTkQgY2hpcCBzZWxlY3QgZnVuY3Rpb24gdG8gNDQwIE5ERkMKICBCYXNlZCBvbiBpZGVhIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIEplZmYgTWFubgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDYKCiogTWFrZSA0eHggYm9vdHVwIG1lc3NhZ2Ugc2hvcnRlciBvbiA0NDBFUHgvR1J4IHBsYXRmb3JtcwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggT2N0IDIwMDYKCiogQWRkIChwcmVsaW1pbmFyeSkgc3VwcG9ydCBmb3IgVjM4QiBib2FyZAoKKiBQUEM0MDVFUDogQWRkIHN1cHBvcnQgZm9yIGJvYXJkIGNvbmZpZ3VyYXRpb24gb2YgQ1BDMF9QQ0kgcmVnaXN0ZXIKICBUaGlzIGlzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGNvbmZpZ3VyZSBQZXJXRSovUENJX0lOVCogcGluIGFzIFBlcldFKgogIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDA3IEFwciAyMDA2CgoqIFBQQzQwNUVQOiBBZGQgQ0ZHX0dQSU8wX09SLCBDRkdfR1BJTzBfT0RSIHRvIHNldHVwIEdQSU8gY29tcGxldGVseS4KICAtIEFkZCBjb25maWd1cmF0aW9uIG9mIE9wZW4gRHJhaW4gR1BJTyBPdXRwdXQgc2VsZWN0aW9uCiAgLSBBZGQgY29uZmlndXJhdGlvbiBvZiBpbml0aWFsIHZhbHVlIG9mIEdQSU8gb3V0cHV0IHBpbnMKICBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAwNyBBcHIgMjAwNgoKKiBGaXggc3BlbGxpbmc7IG1pbm9yIGNvZGUgY2xlYW51cC4KCiogRml4IEpGRlMyIGNvbXBpbGF0aW9uIHByb2JsZW0KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEyIE9jdCAyMDA2CgoqIENsZWFudXAgb2YgTkFORCB1cGRhdGUgcGF0Y2ggKHJlbW92ZSBjaGFuZ2Vsb2cgZnJvbSBjbWRfbmFuZC5jKQogIFBhdGNoIGJ5IEd1aWRvIENsYXNzZW4sIDEwIE9jdCAyMDA2CgoqIFNldmVyYWwgaW1wcm92ZW1lbnRzIHRvIHRoZSBuZXcgTkFORCBzdWJzeXN0ZW06CiAgLSBKRkZTMiByZWxhdGVkIGNvbW1hbmRzIGltcGxlbWVudGVkIGluIG10ZC11dGlscyBzdHlsZQogIC0gU3VwcG9ydCBmb3IgYmFkIGJsb2NrcwogIC0gQmFkIGJsb2NrIHRlc3RpbmcgY29tbWFuZHMKICAtIE5BTkQgbG9jayBjb21tYW5kcwogIFBsZWFzZSB0YWtlIGEgbG9vayBhdCBkb2MvUkVBRE1FLm5hbmQgZm9yIG1vcmUgZGV0YWlscwogIFBhdGNoIGJ5IEd1aWRvIENsYXNzZW4sIDEwIE9jdCAyMDA2CgoqIERlZmluZSBJSF9DUFVfQVZSMzIKICBNYWtlIGl0IHBvc3NpYmxlIHRvIGdlbmVyYXRlIEFWUjMyIHVJbWFnZSBmaWxlcyB3aXRoIG1raW1hZ2UgYW5kCiAgbWFrZSBjbWRfYm9vdG0gcmVjb2duaXplIHRoZW0uCiAgUGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCAyMiBTZXAgMjAwNgoKKiBGaXggYnVmZmVyIG92ZXJmbG93IHByb2JsZW0gaW4gZnRfYnVpbGQuYwogIFBhdGNoIGJ5IEZyZWRyaWsgUm91YmVydCwgMDkgT2N0IDIwMDYKCiogTWFrZSBib290cCBpbXBsZW1lbnRhdGlvbiBSRkMzMDQ2IGNvbXBsaWFudAogIFBhdGNoIGJ5IEpvYWtpbSBMYXJzc29uLCAyNyBKdW4gMjAwNgoKKiBUUU01MjAwOiBwZXJmb3JtIFBPU1QgbWVtb3J5IHRlc3Qgb25seSBvbiBTVEs1Mnh4IGNhcnJpZXIgYm9hcmQuCiAgKGFuZCB0aGVuIG9ubHkgaWYgUFNDNl8zIGlzIHJlYWQgYXMgIjEiIHdoZW4gYm9vdGluZykuCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjEgSnVuIDIwMDYKCiogTW92ZSAiYXIiIGZsYWdzIHRvIGNvbmZpZy5tayB0byBhbGxvdyBmb3Igc2lsZW50ICJtYWtlIC1zIgogIEJhc2VkIG9uIHBhdGNoIGJ5IE1pa2UgRnJ5c2luZ2VyLCAyMCBKdW4gMjAwNgoKKiBDb2Rpbmcgc3R5bGUgY2xlYW51cAoKKiBBZGQgc3VwcG9ydCBmb3IgRVA4Mnh4TSBib2FyZHMKICBQYXRjaCBieSBBYXJvbiBTZWxscywgMjAgSnVuIDIwMDYKCiogRml4IGNvbW1lbnRzIGluIGluY2x1ZGUvcHBjNDQwLmgKICBQYXRjaCBieSBNYXJ0aW4gSGlja3MsIDE2IEp1biAyMDA2CgoqIFVwZGF0ZSBmb3IgQ0FNNTIwMCBib2FyZDoKICAtIE1hcCBpbiBhIGFkZGl0aW9uYWwgY2hpcCBzZWxlY3RzIENTNCBhbmQgQ1M1LgogIC0gTW9kaWZ5IHRoZSBwb3J0IGNvbmZpZ3JhdGlvbiwgY29uZmlndXJlIHNpeCBVQVJUcyBhbmQgbm8gUENJLAogICAgQVRBIGFuZCBVU0IuCiAgLSBBZGQgY3VzdG9tIGZsYXNoIGRyaXZlciB0byBoYW5kbGUgc3BlY2lmaWMgYnl0ZSBzd2FwcGluZwoKKiBGaXggVExCIHNldHVwIGZvciBPY290ZWEgYm9hcmQKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDMwIFNlcCAyMDA2CgoqIEZpeCByZXNldCBwcm9ibGVtIGluIHNlcXVvaWEgc2RyYW0gaW5pdCBjb2RlCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMyBTZXAgMjAwNgoKKiBEaXNhYmxlIGF1dG9ib290IGFib3J0IGZvciBGTzMwMCB3aGVuIHNpbGVudCBtb2RlIGlzIGVuYWJsZWQKICAoYWNjb3JkaW5nIHRvIFMxIHN3aXRjaCBzZXR0aW5nKS4KCiogQ2xlYW51cCBleGFtcGxlcyBiaW5hcmllcwoKKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyBSYWluaWVyIFBQWDQ0MEdSeCBldmFsIGJvYXJkCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBTZXAgMjAwNgoKKiBBZGQgTkFORCBlbnZpcm9ubWVudCBzdXBwb3J0IGZvciBQUEM0NDBFUHggU2VxdW9pYSBOQU5EIGJvb3QgY29uZmlnCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMiBTZXAgMjAwNgoKKiBVcGRhdGUgTkFORCBib290IGRvY3VtZW50YXRpb24KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEyIFNlcCAyMDA2CgoqIEZpeCBhbGlnbm1lbnQgcHJvYmxlbSBpbiAibXRkcGFydHMiIGNvbW1hbmQKCiogQWRkIGRvY3VtZW50YXRpb24gb24gdGhlIGxhdGVzdCBidWlsZCBlbnZpcm9ubWVudCBleHRlbnNpb25zIHRvCiAgdGhlIFJFQURNRSBmaWxlLgoKKiBSZW1vdmUgZGVhZCBjb2RlIChpMm8gYW5kIGRtYSkgZnJvbSBjcHUvbXBjODI0eC9kcml2ZXJzLyBkaXJlY3RvcnkuCgoqIEZpeCBMT0dfRElSIGRpcmVjdG9yeSBjcmVhdGlvbiBlcnJvci4KICBBZGQgc3VwcG9ydCBmb3IgYXV0b21hdGljIGNyZWF0aW9uIG9mIEJVSUxEX0RJUiBkaXJlY3RvcnkuCgoqIEZpeCBidWlsZCBwcm9ibGVtIGNwdS9wcGM0eHgvbmRmYy5jCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBTZXAgMjAwNgoKKiBGaXggYnVpbGQgcHJvYmxlbSB3aXRoIENQQ0k0NDAKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IFNlcCAyMDA2CgoqIENoYW5nZSBZZWxsb3dzdG9uZSB0byB1c2UgQ0ZJIHdyaXRlIGJ1ZmZlcgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgU2VwIDIwMDYKCiogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgU2VxdW9pYSBQUEM0NDBFUHggZXZhbCBib2FyZAogIC0gQWRkIHN1cHBvcnQgZm9yIFBQQzQ0MEVQeCAmIFBQQzQ0MEdSeAogIC0gQWRkIHN1cHBvcnQgZm9yIFBQQzQ0MEVQKHgpL0dSKHgpIE5BTkQgY29udHJvbGxlcgogICAgaW4gY3B1L3BwYzR4eCBkaXJlY3RvcnkKICAtIEFkZCBOQU5EIGJvb3QgZnVuY3Rpb25hbGl0eSBmb3IgU2VxdW9pYSBib2FyZCwKICAgIHBsZWFzZSBzZWUgZG9jL1JFQURNRS5uYW5kLWJvb3QtcHBjNDQwIGZvciBkZXRhaWxzCiAgLSBUaGlzIFNlcXVvaWEgTkFORCBpbWFnZSBkb2Vzbid0IHN1cHBvcnQgZW52aXJvbm1lbnQKICAgIGluIE5BTkQgZm9yIG5vdy4gVGhpcyB3aWxsIGJlIGFkZGVkIGluIGEgc2hvcnQgd2hpbGUuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBTZXAgMjAwNgoKKiBGaXggbWtpbWFnZSAtbCBidWcgd2l0aCBtdWx0aWZpbGUgaW1hZ2VzIG9uIDY0Yml0IHBsYXRmb3JtcwogIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMDYgU2VwIDIwMDYKCiogRml4IGJ1aWxkIHByb2JsZW1zIG9uIHNvcmNlcnkgYm9hcmQuCgoqIEZpeCBjb2xkZmlyZSBidWlsZCBwcm9ibGVtcy4KICBQYXRjaCBieSBNYXJpYW4gQmFsYWtvd2ljeiwgMDEgU2VwIDIwMDYKCiogQWRkIHN1cHBvcnQgZm9yIGEgc2F2aW5nIGJ1aWxkIG9iamVjdHMgaW4gYSBzZXBhcmF0ZSBkaXJlY3RvcnkuCiAgTW9kaWZpY2F0aW9ucyBhcmUgYmFzZWQgb24gdGhlIExpbnV4IGtlcm5lbCBhcHByb2FjaCBhbmQgc3VwcG9ydAogIHR3byB1c2UgY2FzZXM6CiAgMSkgQWRkIE89IHRvIHRoZSBtYWtlIGNvbW1hbmQgbGluZSAnbWFrZSBPPS90bXAvYnVpbGQgYWxsJwogIDIpIFNldCBlbnZpcm9uZW1lbnQgdmFyaWFibGUgQlVJTERfRElSIHRvIHBvaW50IHRvIHRoZSBkZXNpcmVkIGxvY2F0aW9uCgknZXhwb3J0IEJVSUxEX0RJUj0vdG1wL2J1aWxkJwoJJ21ha2UnCiAgVGhlIHNlY29uZCBhcHByb2FjaCBjYW4gYWxzbyBiZSB1c2VkIHdpdGggYSBNQUtFQUxMIHNjcmlwdAoJJ2V4cG9ydCBCVUlMRF9ESVI9L3RtcC9idWlsZCcKCScuL01BS0VBTEwnCiAgQ29tbWFuZCBsaW5lICdPPScgc2V0dGluZyBvdmVycmlkZXMgdGhlIEJVSUxEX0RJUiBlbnZpcm9uZW50IHZhcmlhYmxlLgogIFdoZW4gbm9uZSBvZiB0aGUgYWJvdmUgbWV0aG9kcyBpcyB1c2VkIHRoZSBsb2NhbCBidWlsZCBpcyBwZXJmb3JtZWQKICBhbmQgdGhlIG9iamVjdCBmaWxlcyBhcmUgcGxhY2VkIGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5LgoKKiBSZW1vdmUgdGhlIGJvYXJkL25ldHN0YXIvY3JjaXQgYmluYXJ5IGZyb20gZ2l0IHJlcG9zaXRvcnkuCgoqIEZpeCB0b29scy91cGRhdGVyIGJ1aWxkIGVycm9yLgoKKiBGaXggdG9vbHMvZWFzeWxvZ28gYnVpbGQgZXJyb3IuCgoqIEZpeGVkIHByb2JsZW1zIG9uIFBSUzIwMCBib2FyZCBjYXVzZWQgYnkgYWRkaW5nIHNwbGFzaCBzY3JlZW4gb24gTUNDMjAwCgoqIEV4dGVuZGVkIFJFQURNRSBlbnRyeSBvbiBjb2Rpbmcgc3R5bGUKCiogQWRkZWQgYW5vdGhlciBleGFtcGxlIHNob3dpbmcgc2ltcGxlIGludGVycnVwdCBpbnRlcmNlcHRpb24uCgoqIEFkZGVkIHNpbXBsZV9zdHJ0b3VsKCksIGdldGVudigpIGFuZCBzZXRlbnYoKSB0byB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zLgogIEFsc28gYnVtcGVkIHVwIEFCSSB2ZXJzaW9uIHRvIHJlZmxlY3QgdGhpcyBjaGFuZ2UuCgoqIEFkZGVkIGludGVycnVwdCBoYW5kbGluZyBjYXBhYmlsaXRpZXMgZm9yIG1wYzV4eHggcHJvY2Vzc29ycy4KICBBbHNvIGFkZGVkIExpbnV4IGxpa2UgQlVHKCkgbWFjcm9zLgoKKiBDb2RpbmcgU3R5bGUgY2xlYW51cC4KICBQYXRjaCBieSBTdGVmYW5vIEJhYmljLCAzMSBBdWcgMjAwNgoKKiBBZGQgc3BsYXNoc2NyZWVuIHN1cHBvcnQgZm9yIE1DQzIwMCBib2FyZC4KCiogTWFrZSB0aGUgc2VyaWFsIGRyaXZlciBmcmFtZXdvcmsgd29yayB3aXRoIENPTkZJR19TRVJJQUxfTVVMVEkKICBlbmFibGVkCgoqIFBDSWUgZW5kcG9pbnQgc3VwcG9ydCBmb3IgQU1DQyBZdWNjYSA0NDBTUGUgYm9hcmQKICBQYXRjaCBieSBUaXJ1bWFsYSBSIE1hcnJpLCAyNiBBdWcgMjAwNgoKKiBJbXByb3ZlIERJTU0gZGV0ZWN0aW9uIGZvciBBTUNDIFl1Y2NhIDQ0MFNQZSBib2FyZAogIEltcHJvdmVkIHRoZSBtZW1vcnkgRElNTSBkZXRlY3Rpb24gZm9yIHRoZSBZdWNjYSA0NDBTUGUgYm9hcmQgZm9yCiAgdGhlIGNhc2Ugd2hlcmUgYSBtZW1vcnkgRElNTSBpcyBmYWxzZWx5IGRldGVjdGVkIGFzIHByZXNlbnQuCiAgVGhpcyBpc3N1ZSBpcyBzZWVuIG9uIHNvbWUgQU1DQyBZdWNjYSA0NDBTUGUgdmFsaWRhdGlvbiBib2FyZHMgaWYKICBvbmx5IG9uZSA1MTJNQiBtZW1vcnkgRElNTSBpcyBpbnN0YWxsZWQsIGkuZS4gRElNTSBzbG90IDAgaXMKICBwb3B1bGF0ZWQgYW5kIERJTU0gc2xvdCAxIGlzIGVtcHR5LiAgSW4gdGhpcyBjYXNlLCBVLUJvb3QgZG9lcwogIG5vdCBjb3JyZWN0bHkgZGV0ZWN0IHRoYXQgdGhlcmUgaXMgb25seSBvbmUgRElNTSBtZW1vcnkgbW9kdWxlCiAgaW5zdGFsbGVkIGFuZCB3aWxsIGZhbHNlbHkgZGV0ZWN0IHR3byBESU1NIG1lbW9yeSBtb2R1bGVzIGFyZQogIHByZXNlbnQgYW5kIHRoZXJlZm9yZSBVLUJvb3Qgd2lsbCBub3QgY2FsY3VsYXRlIHRoZSBjb3JyZWN0IGFtb3VudAogIG9mIHRvdGFsIG1lbW9yeSBhbmQgdS1ib290IHdpbGwgbm90IGJvb3RpbmcgdXAuCiAgUGF0Y2ggYnkgQWRhbSBHcmFoYW0sIDI0IEF1ZyAyMDA2CgoqIEZpeCB0eXBvLgoKKiBDb2RlIGNsZWFudXAKCiogVXBkYXRlIGZvciBNQ0MyMDAgLyBQUlMyMDAgYm9hcmRzOgogIC0gYXV0by1hZGp1c3QgY29uc29sZSBkZXZpY2UgZm9yIExpbnV4LgogIC0gZml4IHR5cG9zLgoKKiBBZGQgYSBmaXggZm9yIGEgYnVnZ3kgVVNCIGRldmljZSBvbiB0aGUgRk8zMDAgYm9hcmQuCgoqIFVwZGF0ZXMgZm9yIE1DQzIwMCAvIFBSUzIwMCBib2FyZHM6CiAgLSBzdXBwb3J0IGZvciBjb25maWd1cmF0aW9ucyB3aXRoIFNEUkFNIG9yIEREUiBtZW1vcnksCiAgLSBzdXBwb3J0IGZvciBoaWdoYm9vdCBhbmQgbG93Ym9vdAogIC0gYWRqdXN0aW5nIGVudmlyb25tZW50IGRlZmluaXRpb25zCgoqIEFkZCBzdXBwb3J0IGZvciBXVEsgRk8zMDAgYm9hcmQgKFRRTTUyMDAgYmFzZWQpLgoKKiBGaXggVFFNODM0eCBoYW5nLgoKKiBVcGRhdGUgZm9yIFNDNTIwIGJvYXJkLgogIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMDIgRGVjIDIwMDUKCiogRml4ZWQgY29tbW9uLmggc3BlbGxpbmcgZXJyb3IuCiAgUGF0Y2ggYnkgQ29yeSBUdXNhciwgMzAgTm92IDIwMDUKCiogRml4IHR5cG8uCiAgUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMjggTm92IDIwMDUKCiogRml4IGZhdGxvYWQgY29tbWFuZCBvbiBGQVQzMiBmb3JtYXR0ZWQgcGFydGl0aW9ucy4KICBQYXRjaCBieSBKb2FjaGltIEphZWdlciwgMTggTm92IDIwMDUKCiogRml4IGRyaXZlcnMvZG05MDAwLmMgd2hlbiBjb25maWd1cmVkIGluIDMyIGJpdCBtb2RlLgogIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAxNyBOb3YgMjAwNQoKKiBDbGVhbnVwIGRlYnVnIGNvZGUgZm9yIHl1Y2NhIGJvYXJkLgoKKiBNQ0MyMDA6IHJlc3RyaWN0IGFkZHJlc3NhYmxlIGZsYXNoIHNwYWNlIHRvIDMyIE1CCgoqIEFkZCBkZWJ1ZyBjb25zb2xlIG9uIENPTTEyIGZvciBNQ0MyMDAgYm9hcmQKCiogRml4IGNvbnRyb2wtYyBoYW5kaW5nIGluIENPTkZJR19DTURMSU5FX0VESVRJTkcKICBQcm9wZXJseSBwYXNzIGJyZWFrIGNvZGUgYmFjayBmcm9tIHJlYWRsaW5lLgogIFBhdGNoIGJ5IFJvZ2VyIEJsb2ZlbGQsIDMxIEp1bCAyMDA2CgoqIEFkZCBjb21tYW5kbGluZSBoaXN0b3J5IHN1cHBvcnQgdG8gYWxsIEFNQ0MgZXZhbCBib2FyZHMKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IEF1ZyAyMDA2CgoqIEFkZCBNYWNyb25peCBNWExWMzIwVCBmbGFzaCBzdXBwb3J0IGZvciBBTUNDIEJhbWJvbwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgQXVnIDIwMDYKCiogQ2hhbmdlICJtaWkgaW5mbyIgdG8gbm90IHByaW50IGFuIGVycm9yIHVwb24gbWlzc2luZyBQSFkgYXQgYWRkcmVzcwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgQXVnIDIwMDYKCiogRml4IFBDSS1FeHByZXNzIG9uIFBQQzQ0MFNQZSByZXYuIEEuCgoqIEZpeCBwcmVib290IG1lc3NhZ2Ugb24gVFFNODV4eCBhZnRlciBzd2l0Y2hpbmcgdG8gaHVzaCBwYXJzZXIuCgoqIEFkYXB0IFRRTTg1eHggcmFtZGlzayBhZGRyZXNzIHRvIExpbnV4IGtlcm5lbCBtZW1vcnkgbWFwCgoqIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIFBDSS1FeHByZXNzIG9uIFBQQzQ0MFNQZSAoWXVjY2EgYm9hcmQpLgoKKiBGaXggY29tcGlsZXIgd2FybmluZyBmb3IgVFJBQiBib2FyZC4KICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNyBBdWcgMjAwNgoKKiBQcmV2ZW50IFVTQiBjb21tYW5kcyBmcm9tIHdvcmtpbmcgd2hlbiBVU0IgaXMgc3RvcHBlZC4KCiogQWRkIHJ1ZGltZW50YXJ5IGhhbmRsaW5nIG9mIGFsdGVybmF0ZSBzZXR0aW5ncyBvZiBVU0IgaW50ZXJmYWNlcy4KICBUaGlzIGlzIGluIG9yZGVyIHRvIGZpeCBpc3N1ZXMgd2l0aCBzb21lIFVTQiBzdGlja3MgdGltaW5nIG91dAogIGR1cmluZyBpbml0aWFsaXphdGlvbi4gU29tZSBjb2RlIHJlYWRhYmlsaXR5IGltcHJvdmVtZW50cy4KCiogUFBDNDQwIEREUiBzZXR1cDogU2V0IFNEUkFNMF9DRkcwW1BNVV09MCBmb3IgYmVzdCBwZXJmb3JtYW5jZQogIEFNQ0Mgc3VnZ2VzdGVkIHRvIHNldCB0aGUgUE1VIGJpdCB0byAwIGZvciBiZXN0IHBlcmZvcm1hY2Ugb24KICB0aGUgUFBDNDQwIEREUiBjb250cm9sbGVyLgogIFBsZWFzZSBzZWUgZG9jL1JFQURNRS40NDAtRERSLXBlcmZvcm1hbmNlIGZvciBkZXRhaWxzLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggSnVsIDIwMDYKCiogQU1DQyBiYW1ib28gKDQ0MEVQKSBVLUJvb3QgaW1hZ2UgcmVkdWNlZCB0byAzODRrYnl0ZQogIFBsZWFzZSBzZWUgZG9jL1JFQURNRS5iYW1ib28gZm9yIGRldGFpbHMuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNyBKdWwgMjAwNgoKKiBGaXggQ09ORklHX0NNRExJTkVfRURJVElORyBpbXBsZW1lbnRhdGlvbgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjcgSnVsIDIwMDYKCiogRml4IHByZWJvb3QgbWVzc2FnZSBvbiBUUU01MjAwIGFmdGVyIHN3aXRjaGluZyB0byBodXNoIHBhcnNlci4KCiogTUNDMjAwOiBzZXQgZGVmYXVsdCBjb25maWd1cmF0aW9uIHRvIGxvd19ib290IEREUiwKICBhbmQgc3VwcG9ydCBmb3IgY29uZmlndXJhYmxlIG9wdGlvbnMgaGlnaF9ib290IGFuZC9vciBTRFJBTS4KCiogQWRkIHN1cHBvcnQgZm9yIDI1NiBNQiBTRFJBTSBvbiBDUFU4NwogIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMjUgTm92IDIwMDUKCiogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIGNhbTUyMDAgYm9hcmQgKGJhc2VkIG9uIFRRTTUyMDBTKS4KCiogTW9yZSBjb2RlIGNsZWFudXAKCiogRGlzYWJsZWQga3ZtZTA4MCBib2FyZCBpbiBNQUtFQUxMIGJlY2F1c2Ugb2YgYnVpbGQgcHJvYmxlbXMuCgoqIENvZGUgY2xlYW51cAoKKiBVcGRhdGUgTmV0U3RhciBib2FyZAogIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAwMyBOb3YgMjAwNQoKKiBNYWtlIGNvZGUgYmV0dGVyIHJlYWRhYmxlLgogIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAxNCBTZXAgMjAwNQoKKiBFbmFibGUgaW5pdHJkIEFUQUcgZm9yIHhtMjUwIGJvYXJkLgogIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDUgU2VwIDIwMDUKCiogQWRkIHJlYWRsaW5lIGNtZGxpbmUtZWRpdGluZyBleHRlbnNpb24KICBQYXRjaCBieSBKaW5IdWEgTHVvLCAwMSBTZXAgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgZnJpZW5kbHktYXJtIFNCQy0yNDEwWCBib2FyZAogIFBhdGNoIGJ5IEppbkh1YSBMdW8sIDAxIFNlcCAyMDA1CgoqIEZpeCBtdWx0aS1wYXJ0IGltYWdlIHN1cHBvcnQgb24gaTM4NiBwbGF0Zm9ybS4KICBQYXRjaCBieSBEYXZpZCBVcGRlZ3JhZmYsIDE5IEF1ZyAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBLVk1FMDgwIGJvYXJkCiAgUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxOCBBdWcgMjAwNQoKKiBGaXggTUlQUyBMRSBidWlsZCBwcm9ibGVtCiAgUGF0Y2ggYnkgTWF0ZWogS3VwbGplbiwgMTAgQXVnIDIwMDUKCiogQ2hlY2sgYXJndW1lbnQgY291bnQgaW4gIm1paSIgY29tbWFuZC4KICBQcm9ibGVtIHBvaW50ZWQgb3V0IGJ5IEFuZHJldyBEeWVyLCAxMyBKdW4gMjAwNQoKKiBDbGVhbnVwIFRRTTUyMDAgYm9hcmQgY29uZmlndXJhdGlvbnM6CiAgLSBtYWtlIGhpZ2hib290IGNvbmZpZ3VyYXRpb25zIHVzZSBlbnZpcm9ubWVudCBhdCBoaWdoIGVuZCwgdG9vLAogICAgdG8gYXZvaWQgZmxhc2ggZnJhZ21lbnRhdGlvbgogIC0gYWx3YXlzIHVzZSByZWR1bmRhbmQgZW52aXJvbm1lbnQKICAtIGRvbid0IGVuYWJsZSB2aWRlbyBjb2RlIGZvciBtb2R1bGVzIHdpdGhvdXQgZ3JhcGhpY3MgY29udHJvbGxlcgogIC0gcHJvdmlkZSB1c2VmdWwgKHRob3VnaCBkaWZmZXJlbnQpIG10ZHBhcnRzIHNldHRpbmdzCiAgLSBnZXQgcmlkIG9mIENPTkZJR19DU19BVVRPQ09ORiB3aGljaCB3YXMgYWx3YXlzIHNldCBhbnl3YXkKCiogRXh0ZW5kIG1rY29uZmlnIHRvb2wgdG8gcHJpbnQgbW9yZSB1c2VmdWwgdGFyZ2V0IG5hbWUKCiogQWRkIHN1cHBvcnQgZm9yIGhpZ2gtYm9vdCBvbiBUUU01MjAwIGFuZCBUUU01MjAwUyBib2FyZHMuCiAgSGludDogdGhlIENQTEQgb24gdGhlIFRRTTUyMDAgbXVzdCBiZSBwcm9ncmFtbWVkIHdpdGggYSBzb2Z0d2FyZQogIHZlcnNpb24gc3VwcG9ydGluZyB0aGUgaGlnaCBib290IG9wdGlvbiEgVGhlIG5ldyBUUU01MjAwUyBpcwogIGFscmVhZHkgc3VwcG9ydGluZyB0aGlzIG9wdGlvbi4gT24gdGhlIFRRTTUyMDAgdGhpcyBvcHRpb24gd2lsbCBiZQogIHN1cHBvcnRlZCBpbiBjb25maWd1cmF0aW9ucyB3aXRoIE1QQzUyMDAgcmV2IEIgcHJvY2Vzc29ycy4KICBUbyBhY3R1YWxseSAiaGlnaCBib290Iiwgc2V0IGp1bXBlciBYMzAgb24gdGhlIFNUSzUyeHguCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTIgSnVsIDIwMDYKCiogQWRkIHN1cHBvcnQgZm9yIG5ldyBUUU01MjAwIHJldmlzaW9ucwogIC0gU3VwcG9ydCBmb3IgVFFNNTIwMFMgKHNob3J0IHZlcnNpb24gd2l0aG91dCBncmFwaGljIGNvbnRyb2xsZXIpCiAgLSBTdXBwb3J0IGZvciBtb2R1bGVzIHdpdGggJ04nIHR5cGUgUzI5R0wxMjhOIFNwYW5zaW9uIGZsYXNoZXMKICAgIChyZXF1aXJlcyBjaGFuZ2VzIHRvIGZsYXNoIGxheW91dCkKICAtIFN1cHBvcnQgZm9yIE1QQzUyMDBCIGNwdSAobW9zdGx5IHN1cHBvcnQgZm9yIHNlY29uZCBTRFJBTSBiYW5rKQogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IEp1bCAyMDA2CgoqIEZpeCBzdXBwb3J0IGZvciBQUy8yIGtleWJvYXJkIG9uIFRRTTg1eHggYm9hcmRzCiAgVGhlIFBTLzIga2V5b2JhcmQgZHJpdmVyIGZvciB0aGUgVFFNODV4eCBtb2R1bGVzIG9ubHkgc3VwcG9ydHMgdGhlCiAgaW50ZXJuYWwgRFVBUlQgb2YgdGhlIE1QQzg1eHggQ1BVLiBTaW5jZSB0aGUgTVBDODU2MCBkb2Vzbid0CiAgaW5jbHVkZSBhIERVQVJULCB0aGUgVFFNODU2MCBtb2R1bGVzIGNhbid0IGJlIHVzZWQgd2l0aCB0aGUgUFMvMgogIGtleWJvYXJkIGNvbnRyb2xsZXIgb24gdGhlIFNUSzg1eHggYm9hcmQuCiAgVGhlIFBTLzIga2V5Ym9hcmQgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggdGhlIG1vZHVsZXMgVFFNODU0MCwKICBUUU04NTQxIGFuZCBUUU04NTU1LCBidXQgaXQgb25seSBoYXMgYmVlbiB0ZXN0ZWQgb24gYSBUUU04NTQwLCB5ZXQuCiAgTWFrZSBzdXJlIHRoZSBQUy8yIGNvbnRyb2xsZXIgb24gdGhlIFNUSzg1eHggaXMgcHJvZ3JhbW1lZC4gSnVtcGVyCiAgc2V0dGluZ3M6IFg2NiAxLTIsIDktMTA7IFg2MSAyLTMKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyMSBKdW4gMjAwNgoKKiBBZGp1c3QgUlRDIGNlbnR1cnkgaGFuZGxpbmcgb24gU1RLNTJ4eCBib2FyZCB0byBtYXRjaCBMaW51eCBkcml2ZXIuCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTIgSnVuIDIwMDYKCiogQWRqdXN0IGZpbGVuYW1lcyBmb3IgVVNCIHVwZGF0ZSBpbWFnZXMgb24gVFJBQiBib2FyZC4KICBEdXJpbmcgYW4gYXV0b21hdGljIHVwZGF0ZSB2aWEgVVNCIHN0aWNrLCBVLUJvb3Qgc2VhcmNoZXMgZm9yCiAgaW1hZ2VzIHdpdGggdGhlIG5hbWUgImZpcm13YXJlLmltZyIgYW5kICJrZXJuZWwuaW1nIi4gVGhpcyBuYW1lcwogIGFyZSBub3cgY2hhbmdlZCB0byAiZmlybXdfMDEuaW1nIiBhbmQgImtlcm5sXzAxLmltZyIuIFRoaXMgaXMgZG9uZSwKICB0byBwcmV2ZW50IHVwZGF0ZXMgb2YgbmV3IGJvYXJkcyAod2l0aCB0aGUgbmV3IG1hY3JvbmljcyAiYyIgc3RlcAogIGZsYXNoZXMpIHdpdGggb2xkLCBpbmNvbXBhdGlibGUgZmlybXdhcmUgb3Iga2VybmVsIHZlcnNpb25zLgogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIxIEp1biAyMDA2CgoqIEJ1Z2ZpeCBpbiBWRkQgcm91dGluZSBvbiBUUkFCIGJvYXJkLgogIE1ha2Ugc3VyZSB1cHBlciBsZXh0IHBpeGVsIGNhbiBiZSBzZXQgdG8gYmx1ZSwgdG9vCiAgKHNvIGZhciBvbmx5IHJlZCB3YXMgcG9zc2libGUpLgogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE1IEZlYiAyMDA2CgoqIEVuYWJsZSBidWZmZXJlZCBmbGFzaCB3cml0ZXMgZm9yIFRCNTIwMCBib2FyZC4KCiogRml4IHNvbWUgYnVncyBpbiBUUkFCIGJvYXJkIGZsYXNoIGRyaXZlci4KICAtIGluY3JlYXNlIENGR19GTEFTSF9FUkFTRV9UT1VUIGZyb20gMiB0byAxNSBzZWNvbmRzCiAgLSB1c2UgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQgZm9yIHByb2dyYW1taW5nIGluc3RlYWQgb2YgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQKICAtIHJlbW92ZSAiVW5sb2NrIEJ5cGFzcyIgbW9kZSwgYmVjYXVzZSBtYWNyb25peCBmbGFzaGVzIGRvIG5vdCBzdXBwb3J0CiAgICB0aGlzIG1vZGUgb2ZmaWNpYWxseQogIC0gZml4IGZsYXNoIHJlc2V0IGNvbW1hbmQgZnJvbSAweDAwRkYgdG8gMHgwMEYwLiAweDAwRkYgaXMgb25seSBzcGVjaWZpZWQKICAgIGZvciBJbnRlbCBjb21wYXRpYmxlIGZsYXNoZXMsIG5vdCBmb3IgQU1EIGNvbXBhdGlibGUuCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTUgRmViIDIwMDYKCiogQWRkIGFkZGl0aW9uYWwgZXJyb3IgbWVzc2FnZXMgdG8gZmxhc2ggZHJpdmVyIG9uIFRSQUIgYm9hcmQKICAoZm9yIGVyYXNlIGVycm9ycyBhbmQgdGltZW91dCBlcnJvcnMpCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTQgRmViIDIwMDYKCiogQWRkIHN1cHBvcnQgZm9yIFRCNTIwMCBib2FyZAogIFRoZSBUQjUyMDAgKCJUaW55Ym94IikgaXMgYSBzbWFsbCBiYXNlYm9hcmQgZm9yIHRoZSBUUU01MjAwIG1vZHVsZQogIGludGVncmF0ZWQgaW4gYSBsaXR0bGUgYWx1bWluaXVtIGNhc2UuCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgOCBKdW4gMjAwNgoKKiBFbmFibGUgYnVmZmVyZWQgZmxhc2ggd3JpdGVzIGZvciBUUU01MjAwIGJvYXJkLgoKKiBGaXggcHJvYmxlbXMgd2l0aCBTYW5EaXNrIENvcnBvcmF0aW9uIENydXplciBNaWNybyBVU0IgbWVtb3J5IHN0aWNrLgoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODg1RCBib2FyZC4KICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyMCBNYXIgMjAwNgoKKiBGaXggRkVDIGluaXRpYWxpc2F0aW9uOiBBbGwgTUlJIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSB2aWEgRkVDMQogIHJlZ2lzdGVycywgYnV0IE1JSV9TUEVFRCB3YXMgY29uZmlndXJlZCBhY2NvcmRpbmcgdG8gRkVDIHVzZWQuIFNvCiAgaWYgb25seSBGRUMyIHdhcyB1c2VkLCB0aGlzIGNhdXNlZCB0aGUgcmVhbCBNSUlfU1BFRUQgcmVnaXN0ZXIgaW4KICBGRUMxIHRvIHN0YXkgdW5pbml0YWxpc2VkLCBsZXFhZGluZyB0byAibWlpX3NlbmQgU1RVQ0shIiBtZXNzYWdlcy4KICBGaXg6IGFsd2F5cyBjb25maWd1cmUgTUlJX1NQRUVEIG9uIEZFQzEgb25seS4KICBQYXRjaCBieSBNYXJrdXMgS2xvdHpidWVjaGVyLCAxMiBKdWwgMjAwNgoKKiBBZGQgc3VwcG9ydCBmb3IgU1BDMTkyMCBib2FyZC4KICBQYXRjaCBieSBNYXJrdXMgS2xvdHpidWVjaGVyLCAxMiBKdWwgMjAwNgoKKiBNQ0MyMDAgYm9hcmQ6IHN1cHBvcnQgY29uc29sZSBvbiBhbnkgb25lIG9mIHRoZSBRdWFkIFVBUlQgcG9ydHMuCgoqIEZpeCBlcnJvciBpbiBmbGFzaCBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIG9uIE1DQzIwMCBib2FyZC4KCiogTWFqb3IgUENNQ0lBIENsZWFudXAgdG8gbWFrZSBjb2RlIGJldHRlciByZWFkYWJsZSBhbmQgbWFpbnRhaW5hYmxlLgogIE5vdGVzOgogIC0gQm9hcmQtZGVwZW5kZW5kIGNvZGUgZm9yIFJQWExJVEUgYW5kIFJQWENMQVNTSUMtYmFzZWQgYm9hcmRzCiAgICBwbGFjZWQgdG8gdGhlIGRyaXZlcnMvcnB4X3BtY2lhLmMgZmlsZSB0byBhdm9pZCBkdXBsaWNhdGlvbi4KICAgIFNhbWUgZm9yIFRRTTh4eC1iYXNlZCBib2FyZHMgKGRyaXZlcnMvdHFtOHh4X3BtY2lhLmMpLgogIC0gZHJpdmVycy9pODIzNjUuYyBoYXMgYmVlbiBzcGxpdCBpbnRvIHR3byBwYXJ0cyBsb2NhdGVkIGF0CiAgICBib2FyZC9hdGMvdGkxMTN4LmMgYW5kIGJvYXJkL2NwYzQ1L3BkNjcyOTAuYyAoQVRDIGFuZCBDUEM0NSBhcmUKICAgIHRoZSBvbmx5IGJvYXJkcyB1c2luZyBDT05GSUdfODIzNjUpLgogIC0gQ2hhbmdlcyB3ZXJlIHRlc3RlZCBmb3IgY2xlYW4gYnVpbGQgYW5kICp2ZXJ5KiAqZmV3KiBib2FyZHMuCgoqIEZpeCB0aW1lciBwcm9ibGVtcyBvbiBBTUNDIHl1Y2NhIGJvYXJkLgogIFNldCBUaW1lciBDbG9jayBTZWxlY3QgdG8gdXNlIENQVSBjbG9jayBhcyBhIHRpbWVyIGlucHV0IHNvdXJjZS4KCiogQnJpbmcgeXVjY2EgY29uZmlnIG1vcmUgaW4gbGluZSB3aXRoIG90aGVyIEFNQ0MgYm9hcmRzLgoKKiBBZGQgQU1DQyBiYW1ib28gYm9hcmQgdG8gTUFLRUFMTCBidWlsZCBzY3JpcHQuCgoqIEZpeCBBTUNDIGJhbWJvbyBldmFsIGJvYXJkIGNvbXBpbGF0aW9uIGVycm9ycy4KCiogQWRkIHN5c3RlbSBtZW1vcnkgdG8gdGhlIFBDSSByZWdpb24gbGlzdCBmb3IgQU1DQyBQUEM0NHggQ1BVcy4KICBFbmFibGVkIGl0IGZvciBZdWNjYSBib2FyZC4KCiogQ2xlYW51cCBjb25maWcgZmlsZSBhbmQgYm9vdHVwIG91dHB1dCBmb3IgWXVjY2EgYm9hcmQuCgoqIEZpeCBDT05GSUdfNDQwX0dYIGRlZmluZSB1c2FnZS4KCiogUmVtb3ZlIGF1dG9nZW5lcmF0ZWQgYm1wX2xvZ28uaCBmaWxlLgoKKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyA0NDBTUGUgQ1BVIGJhc2VkIGV2YWwgYm9hcmQgKFl1Y2NhKS4KCiogQ2FsbCBzZXJpYWxfaW5pdGlhbGl6ZSgpIGJlZm9yZSBmaXJzdCBkZWJ1ZygpIGlzIHVzZWQuCgoqIENsZWFudXAgdHJhYiBib2FyZCBmb3IgR0NDLTQueAoKKiBWb2ljZUJsdWUgdXBkYXRlOiB1c2UgbmV3IE1URCBmbGFzaCBwYXJ0aXRpb25pbmcgbWV0aG9kcywgdXNlIG1vcmUKICByZWFzb25hYmxlIFRFWFRfQkFTRSwgdXBkYXRlIGRlZmF1bHQgZW52aXJvbm1lbnQgYW5kIGVuYWJsZSBrZXllZAogIGF1dG9ib290LgogIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAxNi4gQXVnIDIwMDUKCiogQWRkIGZvcmdvdHRlbiBjaGFuZ2VzIGZvciB0aGUgUExFQiAyIEJvYXJkLgogIFBhdGNoIGJ5IERhdmlkIFNub3dkb24sIDEzLiBBdWcgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3Igd3JQUE1DN3h4Lzc0eHggYm9hcmRzCiAgUGF0Y2ggYnkgUmljaGFyZCBEYW50ZXIsIDEyIEF1ZyAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBndGgyIGJvYXJkCiAgUGF0Y2ggYnkgVGhvbWFzIExhbmdlLCBBdWcgMTEgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgQ09ORklHX1NFUklBTF9NVUxUSSBvbiBNUEM1eHh4CiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgOCBKdW4gMjAwNgoKICBUaGlzIHBhdGNoIHN1cHBvcnRzIHR3byBzZXJpYWwgY29uc29sZXMgb24gYm9hcmRzIHdpdGgKICBhIE1QQzV4eHggQ1BVLiBUaGUgY29uc29sZSBjYW4gYmUgc3dpdGNoZWQgYXQgcnVudGltZQogIGJ5IHNldHRpbmcgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIHRvIHRoZSBkZXNpcmVkIHNlcmlhbAogIGludGVyZmFjZSAoc2VyaWFsMCBvciBzZXJpYWwxKS4gVGhlIFBTQ3MgdG8gYmUgdXNlZCBhcwogIGNvbnNvbGUgcG9ydCBhcmUgZGVmaW5kZWQgYnkgQ09ORklHX1BTQ19DT05TT0xFCiAgYW5kIENPTkZJR19QU0NfQ09OU09MRTIuCiAgU2VlIFJFQURNRS5zZXJpYWxfbXVsdGkgZm9yIGRldGFpbHMuCgoqIEJ1Z2ZpeCBpbiBJMkMgaW5pdGlhbGlzYXRpb24gb24gUzNDMjQwMC4KICBJZiB0aGUgYnVzIGlzIGJsb2NrZWQgYmVjYXVzZSBvZiBhIHByZXZpb3VzbHkgaW50ZXJydXB0ZWQKICB0cmFuc2ZlciwgdXAgdG8gZWxldmVuIGNsb2NrcyBhcmUgZ2VuZXJhdGVkIG9uIHRoZSBJMkNTQ0wKICBsaW5lIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2ZlciBhbmQgdG8gZnJlZSB0aGUgYnVzLgogIFdpdGggdGhpcyBmaXggcGluIEkyQ1NDTCAoUEc2KSBpcyByZWFsbHkgY29uZmlndXJlZCBhcyBHUElPCiAgc28gdGhlIGNsb2NrIHB1bHNlcyBhcmUgcmVhbGx5IGdlbmVyYXRlZC4KICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNCBBcHIgMjAwNgoKKiBGaXggRERSNiBlcnJhdGEgb24gVFFNODM0eCBib2FyZHMKICBQYXRjaCBieSBUaG9tYXMgV2FlaG5lciwgMDcgTWFyIDIwMDYKCiogUmVtb3ZlIG9ic29sZXRlIGZsYXNoIGRyaXZlciBib2FyZC90cW01MjAwL2ZsYXNoLmMKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMSBKYW4gMjAwNgoKKiBVcGRhdGUgY29uZmlndXJhdGlvbiBmb3IgQ01DLVBVMiBib2FyZAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IE5vdiAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBQUy8yIGtleWJvYXJkIG9uIFRRTTg1eHggYm9hcmQKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNyBOb3YgMjAwNQoKICBUZXN0ZWQgb24gYSBTVEs4NVhYIGJhc2Vib2FyZC4gTWFrZSBzdXJlIHRoZSBQUy8yIGNvbnRyb2xsZXIKICBoYXMgYmVlbiBwcm9ncmFtbWVkLiBKdW1wZXIgU2V0dGluZ3M6IFg2NiAxLTIsIDktMTA7IFg2MSAyLTMKCiogRml4IFRSQUIgY2hhbm5lbCBzd2l0Y2hpbmcgZGVsYXkgZm9yIHRyYWJfZmt0LmJpbiBzdGFuZGFsb25lIGFwcGxpa2F0aW9uCiAgSW4gdHNjMjAwMF9yZWFkX2NoYW5uZWwoKSB0aGUgZGVsYXkgYWZ0ZXIgc2V0dGluZyB0aGUgbXVsdGlwbGV4ZXIKICB0byBhIHRlbXBlcmF0dXJlIGNoYW5uZWwgaXMgaW5jcmVhc2VkIGZyb20gMSw1IG1zIHRvIDEwIG1zLiBUaGlzCiAgaXMgdG8gYWxsb3cgdGhlIG11bHRpcGxleGVyIGlucHV0cyB0byBzdGFiaWxpemUgYWZ0ZXIgaHVnZSBzdGVwcwogIG9mIHRoZSBpbnB1dCBzaWduYWwgbGV2ZWwuCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDggTm92IDIwMDUKCiogQWRqdXN0IFRRTTUyMDAgbWFrZSB0YXJnZXRzCiAgTWFrZSB0aGUgYXV0b21hdGljIENTIGNvbmZpZ3VyYXRpb24gdGhlIGRlZmF1bHQuCiAgVGhlIGRlZGljYXRlZCBjb25maWd1cmF0aW9ucyBDT05GSUdfVFFNNTIwMF9BQSwgQ09ORklHX1RRTTUyMDBfQUIKICBhbmQgQ09ORklHX1RRTTUyMDBfQUMgYXJlIHJlbW92ZWQuCiAgIlRRTTUyMDBfY29uZmlnIiBpcyBub3cgdGhlIGRlZmF1bHQgZm9yIFNUSzUyWFguMjAwIGJhc2UgYm9hcmRzLgogIE9uIGEgU1RLNTJYWC4xMDAgYmFzZSBib2FyZCAiVFFNNTIwMF9TVEsxMDBfY29uZmlnIiBtdXN0IGJlIHVzZWQuCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDcgTm92IDIwMDUKCiogRml4IHNldHRpbmcgb2YgZW52aXJvbm1lbnQgdmFyaWFibGUgInZlciIgb24gdHJhYiBib2FyZAogIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAidmVyIiBpcyBub3cgc2V0IGJlZm9yZQogIGRvX2F1dG9fdXBkYXRlKCkgaXMgY2FsbGVkLCBzbyB0aGF0ICJ2ZXIiIGNhbiBiZSB1c2VkCiAgaW4gVVNCIHVwZGF0ZSBzY3JpcHRzLgogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE9jdCAyMDA1CgoqIEZpeCB3cm9uZyB1c2FnZSBvZiB1ZGVsYXkoKSBpbiBsZWRfYmxpbmsoKSBvbiB0cmFiIGJvYXJkCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDUKCiogRml4IHVkZWxheSBidWcgaW4gdmZkLmMgZm9yIHRyYWIgYm9hcmQKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNQoKKiBEaXNhYmxlIEpGRlMyIHN1cHBvcnQgZm9yIHRyYWIgYm9hcmQKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNQoKKiBDaGFuZ2UgbXRkcGFydHMgZGVmaW5pdGlvbiBvbiB0cmFiIGJvYXJkIHRvIG1hdGNoIGN1cnJlbnQgZmxhc2ggbWFwCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDUKCiogRml4IG1lbW9yeSBpbml0IHByb2JsZW1zIG9uIE1DQzIwMCBib2FyZAoKKiBGaXggSXhFdGhEQi5oIHRvIGNvbXBpbGUgYWdhaW4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE0IEp1biAyMDA2CgoqIE1pbm9yIGNsZWFudXAgZm9yIFBDUzQ0MEVQIGJvYXJkCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBKdW4gMjAwNgoKKiBBZGQgTUNGNTI4MiBzdXBwb3J0ICh3aXRob3V0IHByZWxvYWRlcikKICByZWxvY2F0ZSBpY2hhY2hlX1N0YXRlIHRvIHJhbQogIHUtYm9vdCBjYW4gcnVuIGZyb20gaW50ZXJuYWwgZmxhc2gKICBBZGQgRUIrTUNGLUVWMTIzIGJvYXJkIHN1cHBvcnQuCiAgQWRkIG02OGsgQm9hcmRzIHRvIE1BS0VBTEwKICBQYXRjaCBmcm9tIEplbnMgU2NoYXJzaWcsIDA4IEF1ZyAyMDA1CgoqIE5pb3MgSUkgLSBBZGQgQWx0ZXJhIEVQMUMyMCwgRVAxUzEwIGFuZCBFUDFTNDAgYm9hcmRzCiAgUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwOCBKdW4gMjAwNgoKKiBOaW9zIElJIC0gQWRkIEVQQ1MgQ29udHJvbGxlciBib290cm9tIHdvcmstYXJvdW5kCiAgLVdoZW4gYm9vdGluZyBmcm9tIGFuIGVwY3MgY29udHJvbGxlciwgdGhlIGVwY3MgYm9vdHJvbSBtYXkgbGVhdmUgdGhlCiAgc2xhdmUgc2VsZWN0IGluIGFuIGFzc2VydGVkIHN0YXRlIGNhdXNpbmcgc29mdCByZXNldCBoYW5nLiBUaGlzCiAgcGF0Y2ggZW5zdXJlcyBzbGF2ZSBzZWxlY3QgaXMgbmVnYXRlZCBhdCByZXNldC4KICBQYXRjaCBieSBTY290dCBNY051dHQsIDA4IEp1biAyMDA2CgoqIFVwZGF0ZSBQSzFDMjAgYm9hcmQKICAtVXBkYXRlIGJhc2UgYWRkcmVzc2VzIGZvciBzdGFuZGFyZCBjb25maWd1cmF0aW9uCiAgLUVsaW1pbmF0ZSB1c2Ugb2YgQ0FDSEVfQllQQVNTIGluIGJvYXJkIGNvZGUKICBQYXRjaCBieSBTY290dCBNY051dHQsIDA4IEp1biAyMDA2CgoqIE5pb3MgSUkgLSBGaXggSS9PIE1hY3JvcyBhbmQgbWluaS1hcHAgc3R1YnMKICAtRml4IGFzbS9pby5oIG1hY3JvcwogIC1FbGltaW5hdGUgdXNlIG9mIENBQ0hFX0JZUEFTUyBpbiBjcHUgY29kZQogIC1FbGltaW5hdGUgYXNzZW1ibGVyIHdhcm5pbmdzCiAgLUZpeCBtaW5pLWFwcCBzdHVicyBhbmQgZm9yY2Ugbm8gc21hbGwgZGF0YQogIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDggSnVuIDIwMDYKCiogRml4IFUtQm9vdCBlbnZpcm9ubWVudCBzZWN0b3IgcHJvdGVjdGlvbiBvbiBNQ0MyMDAgYm9hcmQKCiogTWlub3IgY2xlYW51cCBmb3IgUENTNDQwRVAgYm9hcmQKCiogVXBkYXRlIFBDUzQ0MEVQIHBvcnQgdG8gZml0IGludG8gb25lIGZsYXNoIGRldmljZSAoaW5jbC4gZW52aXJvbm1lbnQpCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNiBKdW4gMjAwNgoKKiBBZGQgc3VwcG9ydCBmb3IgUENTNDQwRVAgYm9hcmQKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAyIEp1biAyMDA2CgoqIEZpeCBleGFtcGxlcy9NYWtlZmlsZTsgc29tZSBidWlsZCB0YXJnZXRzIHdlcmUgbG9zdAoKKiBGaXggd2F0Y2hkb2cgaGFuZGxpbmcgaW4gQ0ZJIGZsYXNoIGRyaXZlcgogIEp1c3QgdXNlIHVkZWxheSgpIHdoZW4gd2FpdGluZyBmb3Igc3RhdHVzIGNoYW5nZXMgd2hpY2ggd2lsbAogIGltcGxpY2l0ZWx5IHRyaWdnZXIgdGhlIHdhdGNoZG9nLgoKKiBGaXggUENJIHRvIG1lbW9yeSB3aW5kb3cgc2l6ZSBwcm9ibGVtcyBvbiBQTTgyeCBib2FyZHMKICBXZSB1c2UgdGhlICJhdXRvbWF0aWMiIG1vZGUgdGhhdCB3YXMgdXNlZCBmb3IgIHRoZSAgTVBDODI2NkFEUyAgYW5kCiAgTVBDODI3MiBib2FyZHMuIEV2ZW50dWFsbHkgdGhpcyBzaG91bGQgYmUgdXNlZCBvbiBhbGwgYm9hcmRzP10KICBQYXRjaCBieSBXb2xmZ2FuZyBHcmFuZGVnZ2VyLCAxNyBKYW4gMjAwNgoKKiBDb3JyZWN0IEdQSU8gc2V0dXAgKFVBUlQxL0lSUSdzKSBvbiB5b3NlbWl0ZSAmIHllbGxvd3N0b25lCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOSBNYXkgMjAwNgoKKiBVcGRhdGUgSW50ZWwgSVhQNHh4IHN1cHBvcnQKICAtIEFkZCBJWFA0eHggTlBFIGV0aGVybmV0IE1BQyBzdXBwb3J0CiAgLSBBZGQgc3VwcG9ydCBmb3IgSW50ZWwgSVhEUEc0MjUgYm9hcmQKICAtIEFkZCBzdXBwb3J0IGZvciBQcm9kcml2ZSBQRE5CMyBib2FyZAogIC0gQWRkIElSUSBzdXBwb3J0CiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMyBNYXkgMjAwNgoKKiBGaXggcHJvYmxlbSBpbiBQVlIgZGV0ZWN0aW9uIGZvciA0NDBHUgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggTWF5IDIwMDYKCiogRml4IGdjYyAzLjQueCBBRkxBR1Mgc2V0dGluZyBmb3IgbTY4ayBwbGF0Zm9ybS4KCiogRW5hYmxlIGF1dG9ib290IGZvciBNNTI3MUVWQiBib2FyZC4KCiogQ2hhbmdlZCBkZWZhdWx0IHJhbWRpc2sgYWRkciBpbiB5b3NlbWl0ZS95ZWxsb3dzdG9uZSBwb3J0cwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgTWF5IDIwMDYKCiogRml4IFBDTUNJQSBzdXBwb3J0IG9uIHZpcnRsYWIyCgoqIEFkZCBzdXBwb3J0IGZvciBWaXJ0TGFiMiBib2FyZAogIChuZWVkZWQgYmVjYXVzZSBvZiBkaWZmZXJlbmNlcyBpbiB0aGUgUENNQ0lBIGhhcmR3YXJlKS4KCiogTWlub3IgY2xlYW51cC4KCiogVXBkYXRlIHlvc2VtaXRlIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIGZsYXNoIHdyaXRlIGJ1ZmZlciBzdXBwb3J0CiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBNYXkgMjAwNgoKKiBGaXggY29tcGlsZSB3YXJuaW5ncyBpbiBjb21tb24veHl6TW9kZW0uYwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgTWF5IDIwMDYKCiogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgNDQwRVAgUmV2IEMgYW5kIDQ0MEdSIFJldiBCCiAgUGF0Y2ggYnkgSm9obiBPdGtlbiwgMDggTWF5IDIwMDYKCiogT01BUCA1OTEyL09TSzogdXBkYXRlIEVNSUZTIENTMSB0aW1pbmdzOgogIFByb2JsZW1zIGhhdmUgYmVlbiBzZWVuIGluIHRoZSBsaW51eCBrZXJuZWwncyBzbWM5MXggbmV0d29yayBkcml2ZXIKICBkdWUgdG8gaW1wcm9wZXIgYnVzIHRpbWluZ3MuICBUaGUgbGF0ZXN0IDIuNiBPTUFQIGtlcm5lbHMgY3VycmVudGx5CiAgaGF2ZSBhIHdvcmthcm91bmQsIGJ1dCB0aGlzIGZpeCBiZWxvbmdzIGluIHUtYm9vdC4KICBQYXRjaCBieSBLZXZpbiBIaWxtYW4sIDEzIE9jdCAyMDA1CgoqIEZpeCBSRUdfTVBVX0xPQURfVElNRVIgZGVmaW5pdGlvbiBpbiBtdWx0aXBsZSBPTUFQIHBvcnRzCiAgUGF0Y2ggYnkgSGlyb2tpIEthbWluYWdhLCAxMSBNYXIgMjAwNgoKKiBVcGRhdGUgb21hcDU5MTJvc2sgYm9hcmQgc3VwcG9ydAogIC0gRml4IE9NQVAgc3VwcG9ydCB0aGF0IG9tYXA1OTEyb3NrIGNvbXBpbGVzIGluIGN1cnJlbnQgc291cmNlIHRyZWUKICAtIFVwZGF0ZSB3aXRoIGNvZGUgZnJvbSAiaHR0cDovL29tYXAuc3BlY3RydW1kaWdpdGFsLmNvbS9vc2s1OTEyIgogICAgdG8gZml4IHByb2JsZW1zIHdpdGggRERSIGluaXRpYWxpemF0aW9uCiAgLSBGaXggdGltZXIgc2V0dXAKICAtIFVzZSBDRkkgZmxhc2ggZHJpdmVyIGFuZCBzdXBwb3J0IGNvbXBsZXRlIDMyTUIgb2Ygb25ib2FyZCBmbGFzaAogIC0gQWRkICJwcmludF9jcHVpbmZvKCkiIGFuZCAiY2hlY2tib2FyZCgpIiBmdW5jdGlvbnMgdG8gZGlzcGxheQogICAgQ1BVICh3aXRoIGZyZXF1ZW5jeSkgYW5kIEJvYXJkIGluZm9zCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBNYXkgMjAwNgoKKiBGaXggd2F0Y2hkb2cgaXNzdWVzIGZvciBDb2xkRmlyZSBib2FyZHMuCgoqIEFkZCBNNTI3MUVWQiBib2FyZCBzdXBwb3J0LgoKKiBNYWtlIFI1MjAwIHNwZWNpZmljIGxvdyBsZXZlbCBpbml0aWFsaXphdGlvbiBib2FyZCBjb25kaXRpb25hbC4KCiogVXBkYXRlIENQVSB0YXJnZXQgaWRlbnRpZmljYXRpb24gc3RyaW5ncyBmb3IgQ29sZEZpcmUgZmFtaWx5LgoKKiBVcGRhdGUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIE1DRjUyNzEuCgoqIEZpeCBzZXJpYWwgY29uc29sZSBzdXBwb3J0IGZvciBNQ0Y1MjcxLgoKKiBGaXhlcyBmb3IgZ2NjIDMuNCBiYXNlZCBtNjhrIHRvb2xjaGFpbiwKICBiYXNlZCBvbiBwYXRjaCBieSBKYXRlIFN1amphdmFuaWNoLgoKKiBGaXggbG93Ym9vdCBzdXBwb3J0IG9uIE1DQzIwMCBib2FyZAoKKiBNZXJnZWQgTVBDODM0OUFEUyBhbmQgTVBDODM0OUVNRFMgcG9ydHMgaW50byBNUEM4MzQ5RU1EUyBwb3J0OgogIC0gUmVtb3ZlZCBNUEM4MzQ5QURTIHBvcnQKICAtIEFkZGVkIFBDSSBzdXBwb3J0IHRvIE1QQzgzNDlBRFMKICAtIHJld29ya2VkIG1lbW9yeSBtYXAgdG8gYWxsb3cgbWFwcGluZyBvZiBhbGwgcmVnaW9ucyB3aXRoIEJBVHMKICBQYXRjaCBieSBLdW1hciBHYWxhLCAyMCBBcHIgMjAwNgoKKiBDb2RpbmcgU3R5bGUgY2xlYW51cAoKKiBXcml0ZSBSVEMgc2Vjb25kcyBmaXJzdCB0byBtYWludGFpbiBzZXR0aW5ncyBpbnRlZ3JpdHkgcGVyCiAgTWF4aW0vRGFsbGFzIERTMTMwNiBkYXRhIHNoZWV0LgogIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMDIgTWF5IDIwMDYKCiogU2NoZWR1bGVkIGZvciByZW1vdmFsOiBzdHJuaWNtcCgpIHdoaWNoIGlzIHVudXNlZAoKKiBVcGRhdGUgZm9yIEludGVsIE1vbmFoYW5zIGJvYXJkczoKICAtIHN1cHBvcnQgZm9yIG1hZ2ljIGtleSBkZXRlY3Rpb24gYW5kIGhhbmRsaW5nIG9uIGRlbHRhIGJvYXJkCiAgLSBOQU5EIHN1cHBvcnQgZm9yIHp5bG9uaXRlIGJvYXJkICsgc29tZSBtaW5vciBjbGVhbnVwCgoqIERlY2xhcmUgbG9hZF9zZXJpYWxfeW1vZGVtKCkgd2hlbiB1c2luZyBDRkdfQ01EX0xPQURCLgogIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMDEgTWF5IDIwMDYKCiogRml4ZWQgaGFuZGxpbmcgb2YgYmFkIGNoZWNrc3VtcyB3aXRoICJta2ltYWdlIC1sIgoKKiBBZGRlZCBzdXBwb3J0IGZvciBCQzM0NTAgYm9hcmQKICBQYXRjaCBieSBTdGVmYW4gU3Ryb2JsLCAyMSBPY3QgMjAwNQoKKiBVcGRhdGUgZm9yIE5DNjUwIGJvYXJkOgogIC0gU3VwcG9ydCByZXYxIGFuZCByZXYyIGhhcmR3YXJlCiAgLSBhZGFwdCB0byBuZXcgTkFORCBsYXllcgogIC0gYWRkIENQODUwIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gTkM2NTAKCiogTVBDNTIwMDogZW5hYmxlIHNub29waW5nIG9mIERNQSB0cmFuc2FjdGlvbnMgb24gWExCIGV2ZW4gaWYgbm8gUENJCiAgaXMgY29uZmlndXJlZDsgb3Rocndpc2UgRE1BIGFjY2Vzc2VzIGFyZW4ndCBjYWNoZSBjb2hlcmVudCB3aGljaAogIGNhdXNlcyBmb3IgZXhhbXBsZSBVU0IgdG8gZmFpbC4KCiogU29tZSBjb2RlIGNsZWFudXAKCiogRml4IGRiYXUxeDAwIGJvYXJkcyBicm9rZW4gYnkgZGJhdTE1NTAgcGF0Y2gKICBQTEw6cyB3ZXJlIG5vdCBzZXQgZm9yIGJvYXJkcyBvdGhlciB0aGFuIDE1NTAuCiAgRmxhc2ggQ0ZJIGNhdXNlZCBjYXJkIHRvIGhhbmcgZHVlIHRvIHVuZGVmaW5lZCBDRkdfRkxBU0hfQkFOS1NfTElTVC4KICBEZWZhdWx0IGJvb3QgaXMgbm93IGJvb3RwIGZvciBjYXJkcyBvdGhlciB0aGFuIDE1NTAuCiAgUGF0Y2ggYnkgVGhvbWFzIExhbmdlLCAxMCBBdWcgMjAwNQoKKiBGaXhlcyBjb21tb24vY21kX2ZsYXNoLmM6CiAgLSBmaXggc29tZSBjb21waWxlci9wYXJzZXIgZXJyb3IsIGlmIHVzaW5nIG02OGsgdG9vbCBjaGFpbgogIC0gb3B0aWNhbCBmaXggZm9yIHByb3RlY3Qgb24vb2ZmIGFsbCBtZXNzYWdlcywgaWYgdXNpbmcgbW9yZQogICAgdGhlbiBvbmUgYmFuawogIFBhdGNoIGJ5IEplbnMgU2NoYXJzaWcsIDI4IEp1bCAyMDA1CgoqIEZpeCBRdWFkIFVBUlQgbWFwcGluZyBvbiBNQ0MyMDAgYm9hcmQgZHVlIHRvIG5ldyBIVyByZXZpc2lvbgoKKiBGaXggSkZGUzIgc3VwcG9ydCBmb3IgbGVnYWN5IE5BTkQgZHJpdmVyLgoKKiBSZW1vdmUgZGVwZW5kZW5jaWVzIGJldHdlZW4gRG9DIGNvZGUgYW5kIG9sZCBsZWdhY3kgTkFORCBkcml2ZXIuCgoqIEZpeCBQTTgyOF9QQ0kgdGFyZ2V0LCBmb3Igd2hpY2ggUENJIHdhcyAqbm90KiBjb25maWd1cmVkIGluLgoKKiBGaXggTGl0ZTUyMDBCIHN1cHBvcnQ6IGluaXRpYWxpemUgU0RlbGF5IHJlZ2lzdGVyCiAgU2VlIEZyZWVzY2FsZSdzIEFOMzIyMSAiTVBDNTIwMEIgU0RSQU0gSW5pdGlhbGl6YXRpb24gYW5kCiAgQ29uZmlndXJhdGlvbiIsIDMuMy4xIFNEZWxheS0tTUJBUiArIDB4MDE5MAoKKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgoKICAtIEFkZCBJbnRlbCBsZWdhY3kgbG9jay91bmxvY2sgc3VwcG9ydCB0byBjb21tb24gQ0ZJIGRyaXZlcgoKICAgIE9uIHNvbWUgSW50ZWwgZmxhc2gncyAoZS5nLiBJbnRlbCBKMykgbGVnYWN5IHVubG9ja2luZyBpcwogICAgc3VwcG9ydGVkLCBtZWFuaW5nIHRoYXQgdW5sb2NraW5nIG9mIG9uZSBzZWN0b3Igd2lsbCB1bmxvY2sKICAgIGFsbCBzZWN0b3JzIG9mIHRoaXMgYmFuay4gVXNpbmcgdGhpcyBmZWF0dXJlLCB1bmxvY2tpbmcKICAgIG9mIGFsbCBzZWN0b3JzIHVwb24gc3RhcnR1cCAodmlhIGVudiB2YXIgInVubG9jaz15ZXMiKSB3aWxsCiAgICBnZXQgbXVjaCBmYXN0ZXIuCgogIC0gRml4ZWQgcHJvYmxlbSB3aXRoIG11bHRpcGxlIHJlYWRzIG9mIGVudnJvbm1lbnQgdmFyaWFibGUKICAgICJ1bmxvY2siIGFzIHBvaW50ZWQgb3V0IGJ5IFJlaW5oYXJkIEFybHQgJiBBbmRlcnMgTGFyc2VuLgoKICAtIFJlbW92ZWQgdW53YW50ZWQgbGluZWZlZWRzIGZyb20gInByb3RlY3QiIGNvbW1hbmQgd2hlbgogICAgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04gaXMgZW5hYmxlZC4KCiAgLSBDaGFuZ2VkIHAzcDQwMCBib2FyZCB0byB1c2UgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBBcHIgMjAwNgoKKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgogIC0gQ29ycmVjdGx5IGhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgQ0ZHX0haICE9IDEwMDAgKHNldmVyYWwKICAgIFhTY2FsZS1iYXNlZCBib2FyZHMpCiAgLSBGaXggdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gb2YgYnVmZmVyZWQgd3JpdGVzIChvZmYgYnkgYQogICAgZmFjdG9yIG9mIDEwMDApCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMzEgTWFyIDIwMDYKCiogVXBkYXRlcyB0byBjb21tb24gUFBDNHh4IG9uYm9hcmQgKEREUilTRFJBTSBpbml0IGNvZGUgKDQwNSBhbmQgNDQwKQoKICA0MDUgU0RSQU06IC0gVGhlIFNEUkFNIHBhcmFtZXRlcnMgY2FuIG5vdyBiZSBkZWZpbmVkIGluIHRoZSBib2FyZAoJICAgICAgIGNvbmZpZyBmaWxlIGFuZCB0aGUgNDA1IFNEUkFNIGNvbnRyb2xsZXIgdmFsdWVzIHdpbGwKCSAgICAgICBiZSBjYWxjdWxhdGVkIHVwb24gYm9vdHVwIChzZWUgUFBDaGFtZWxlb25FVkIpLgoJICAgICAgIFdoZW4gdGhvc2Ugc2V0dGluZ3MgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBib2FyZAoJICAgICAgIGNvbmZpZyBmaWxlLCB0aGUgcmVnaXN0ZXIgc2V0dXAgd2lsbCBiZSBhcyBpdCBpcyBub3csCgkgICAgICAgc28gdGhpcyBpbXBsZW1lbnRhdGlvbiBzaG91bGQgbm90IGJyZWFrIGFueSBjdXJyZW50CgkgICAgICAgZGVzaWduIHVzaW5nIHRoaXMgY29kZS4KCgkgICAgICAgVGhhbmtzIHRvIEFuZHJlYSBNYXJzb24gZnJvbSBEQVZFIGZvciB0aGlzIHBhdGNoLgoKICA0NDAgRERSOiAgIC0gQWRkZWQgZnVuY3Rpb24gc2RyYW1fdHIxX3NldCB0byBhdXRvIGNhbGN1bGF0ZSB0aGUKCSAgICAgICBUUjEgdmFsdWUgZm9yIHRoZSBERFIuCgkgICAgIC0gQWRkZWQgRUNDIHN1cHBvcnQgKHNlZSBwM3A0NDApLgoKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE3IE1hciAyMDA2CgoqIEZpeCBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUIGRlcGVuZGVuY3kgaW4gY3B1L2FybTkyMHQvc3RhcnQuUwogIFBhdGNoIGJ5IFBldGVyIE1lbnplYmFjaCwgMTMgT2N0IDIwMDUgW0ROWCMyMDA2MDQwMTQyMDAwNDczXQoKKiBBZGQgc3VwcG9ydCBmb3IgeW1vZGVtIHByb3RvY29sIGRvd25sb2FkCiAgUGF0Y2ggYnkgU3RlZmFubyBCYWJpYywgMjkgTWFyIDIwMDYKCiogTWVtb3J5IE1hcCBVcGRhdGUgZm9yIERlbHRhIGJvYXJkOiBVLUJvb3QgaXMgYXQgMHg4MDAwMDAwMC0weDg0MDAwMDAwCiAgTWVyZ2UgZnJvbSBNYXJrdXMgS2xvdHpi/GNoZXIncyByZXBvLCAwMSBBcHIgMjAwNgoKKiBHQ0MtNC54IGZpeGVzOiBjbGVhbiB1cCBnbG9iYWwgZGF0YSBwb2ludGVyIGluaXRpYWxpemF0aW9uIGZvciBhbGwKICBib2FyZHMKCiogVXBkYXRlIGZvciBEZWx0YSBib2FyZDoKICAtIHJlZHVuZGFudCBOQU5EIGVudmlyb25tZW50CiAgLSBtaXNjIE1vbmFoYW5zIGNsZWFudXBzIChyZW1vdmUgZGVhZCBjb2RlIGV0Yy4pCiAgLSBEQTkwMzAgSW5pdGlhbGl6YXRpb247IHNvbWUgbWluaW1hbCBjaGFuZ2VzIHRvIFBYQSBJMkMgZHJpdmVyIHRvCiAgICBtYWtlIGl0IHdvcmsgd2l0aCB0aGUgTW9uYWhhbnMuCiAgLSBNYWtlIE1vbmFoYW5zIGNsb2NrIGZyZXF1ZW5jeSBjb25maWd1cmFibGUgdXNpbmcKICAgIENGR19NT05BSEFOU19SVU5fTU9ERV9PU0NfUkFUSU8gYW5kCiAgICBDRkdfTU9OQUhBTlNfVFVSQk9fUlVOX01PREVfUkFUSU8uCiAgTWVyZ2UgZnJvbSBNYXJrdXMgS2xvdHpi/GNoZXIncyByZXBvLCAyNSBNYXIgMjAwNgoKKiBFbmFibGUgUXVhZCBVQVJUIG9tIE1DQzIwMCBib2FyZC4KCiogQ2xlYW51cCBNQ0MyMDAgYm9hcmQgY29uZmlndXJhdGlvbjsgb21pdCBub24tZXhpc3RlbnQgc3R1ZmYuCgoqIEFkZCBzdXBwb3J0IGZvciBNUEM4NTkvODY2IFJldi4gQS4wCgoqIEFkZCBjb21tYW5kIGZvciBoYW5kbGluZyBERFIgRUNDIHJlZ2lzdGVycyBvbiBNUEM4MzQ5RUUgTURTIGJvYXJkLgoKKiBGaXggRERSIEVDQyBiaXQgZGVmaW5pdGlvbnMgZm9yIE1QQzgzeHguCgoqIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIE1QQzgzNDlFIE1EUyBib2FyZC4KCiogQWRkIHN1cHBvcnQgZm9yIEVDQyBERFIgaW5pdGlhbGl6YXRpb24gb24gTVBDODN4eC4KCiogQWRkIERNQSBzdXBwb3J0IGZvciBNUEM4M3h4LgoKKiBBZGQgc3luYyBpbiBkb19yZXNldCgpIHJvdXRpbmUgZm9yIE1QQzgzeHggYWZ0ZXIgUlBSIHJlZ2lzdGVyCiAgd2FzIHdyaXR0ZW4gdG8uIEl0IGlzIG5lZWQgb24gc29tZSB0YXJnZXRzIHdoZW4gQkFUIHRyYW5zbGF0aW9uCiAgaXMgZW5hYmxlZC4KCiogQWRkIGJpdCBkZWZpbml0aW9ucyBmb3IgTVBDODN4eCBERFIgY29udHJvbGxlciByZWdpc3RlcnMuCgoqIEFkZCBEY2J6KCksIERjYmkoKSBhbmQgRGNiZigpIHJvdXRpbmVzIGZvciBNUEM4M3h4LgoKKiBDb3JyZWN0IHNoaWZ0IG9mZnNldHMgaW4gaWNhY2hlX3N0YXR1cyBhbmQgZGNhY2hlX3N0YXR1cyBmb3IgTVBDODN4eC4KCiogQWRkIHN1cHBvcnQgZm9yIERTMTM3NCBSVEMgY2hpcC4KCiogQWRkIHN1cHBvcnQgZm9yIExpdGU1MjAwQiBib2FyZC4KICBQYXRjaCBieSAgUGF0Y2ggYnkgSm9zZSBNYXJpYSAoVHhlbWEpIExvcGV6LCAxNiBKYW4gMjAwNgoKKiBBcHBseSBTb0MgY29uY2VwdCB0byBhcm05MjZlanMgQ1BVcywgaS5lLiBtb3ZlIHRoZSBTb0Mgc3BlY2lmaWMKICB0aW1lciBhbmQgY3B1X3Jlc2V0IGNvZGUgZnJvbSBjcHUvJChDUFUpIGludG8gdGhlIG5ldwogIGNwdS8kKENQVSkvJChTT0MpIGRpcmVjdG9yaWVzCiAgUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTMgTWFyIDIwMDYKCiogQ2hhbmdlIG1heCBzaXplIG9mIHVuY29tcHJlc3NlZCB1SW1hZ2UncyB0byA4TUJ5dGUgYW5kIGFkZAogIENGR19CT09UTV9MRU4gdG8gYWRqdXN0IHRoaXMgc2V0dGluZy4KCiAgQXMgbWVudGlvbmVkIGJ5IFJvYmluIEdldHogb24gMjAwNS0wNS0yNCB0aGUgc2l6ZSBvZiB1bmNvbXByZXNzZWQKICB1SW1hZ2VzIHdhcyByZXN0cmljdGVkIHRvIDRNQnl0ZXMuIFRoaXMgZGVmYXVsdCBzaXplIGlzIG5vdwogIGluY3JlYXNlZCB0byA4TWJ5dGVzIGFuZCBjYW4gYmUgb3ZlcnJpZGVkIGJ5IHNldHRpbmcgQ0ZHX0JPT1RNX0xFTgogIGluIHRoZSBib2FyZCBjb25maWcgZmlsZS4KCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBNYXIgMjAwNgoKKiBGaXggcHJvYmxlbSB3aXRoIHVwZGF0ZWQgUENJIGNvZGUgaW4gY3B1L3BwYzR4eC80MDVncF9wY2kuYwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgTWFyIDIwMDYKCiogY3B1L3BwYzR4eC9zdGFydC5TIDogZXhjZXB0aW9ucyBhcmUgZW5hYmxlZCBhZnRlciByZWxvY2F0aW9uCiAgUGF0Y2ggYnkgQ2VkcmljIFZpbmNlbnQsIDA2IEp1bCAyMDA1CgoqIGF1MXgwMF9ldGguYzogY2hlY2sgbWFsbG9jIHJldHVybiB2YWx1ZSBhbmQgYWJvcnQgaWYgaXQgZmFpbGVkCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI2IEp1bCAyMDA1CgoqIENoYW5nZSB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGluIHNvZnRfaTJjLmM6c2VuZF9hY2soKSB0byBrZWVwIGZyb20KICBpbmNvcnJlY3RseSBnZW5lcmF0aW5nIHN0YXJ0L3N0b3AgY29uZGl0aW9ucyBvbiB0aGUgYnVzLgogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAyNiBKdWwgMjAwNQoKKiBGaXggYnVnIGluIFtpZF1jYWNoZV9zdGF0dXMgY29tbWFuZHMgZm9yIE1QQzg1eHggcHJvY2Vzc29yczsKICBzaG91bGQgbG9vayBhdCBMU0Igb2YgTDFDU1JuIHJlZ2lzdGVycyB0byBkZXRlcm1pbmUgaWYgTDEgY2FjaGUgaXMKICBlbmFibGVkLCBub3QgdGhlIE1TQi4KICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxOSBKdWwgMjAwNQoKKiBGaXggYXJyYXkgb3ZlcmZsb3cgd2l0aCBmd19zZXRlbnYgb24gdW5pbml0aWFsaXNlZCBlbnZpcm9ubWVudAogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE1IEp1bCAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBFbWJlZGRlZFBsYW5ldCBFUDg4eCBib2FyZHMKICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMyBKdWwgMjAwNQoKKiBSZW1vdmUgYm9hcmQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBmcm9tIHRoZSBjb21tb24geGlsaW54CiAgZXRoZXJuZXQgYW5kIGlpYyBhZGFwdGVyIGNvZGUuCiAgUGF0Y2ggYnkgTWljaGFlbCBMaWJlc2tpbmQsIDEyIEp1bCAyMDA1CgoqIEFkZCBOYXQgU2VtaSBEUDgzODY1IFBIWSBzdXBwb3J0IHRvIE1QQzg1eHggVFNFQyBkcml2ZXIKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAwOCBKdWwgMjAwNQoKKiBBZGQgKHNvbWUpIGRlZmluaXRpb25zIGZvciB0aGUgTVBDODV4eCBsb2NhbCBidXMgY29udHJvbGxlcgogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDA4IEp1bCAyMDA1CgoqIEFkZCBDUE0yIEkvTyBwaW4gZnVuY3Rpb25zIGZvciBNUEM4NXh4IHByb2Nlc3NvcnMKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAwOCBKdWwgMjAwNQoKKiBGaXggY29tcGlsZSBwcm9ibGVtCgoqIEFkZGVkIFBDSSBzdXBwb3J0IGZvciBNUEM4MzQ5QURTIGJvYXJkCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSAxMSBKYW4gMjAwNgoKKiBFbmFibGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBvbiBNUEM4M3h4CiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTAgRmViIDIwMDYKCiogRGVjb3B1bGVkIHNldHRpbmcgb2YgT1IvQlIgYW5kIExCTEFXQkFSL0xCTEFXQVIgb24gTVBDODN4eAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDI1IEphbiAyMDA2CgoqIEZpeGVkIGRlZmluZXMgZm9yIE1QQzgzeHggU0lDUkwgcmVnaXN0ZXIgdG8gbWF0Y2ggY3VycmVudCBzcGVjcwogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDIzIEphbiAyMDA2CgoqIE9ubHkgZGlzYWJsZSB0aGUgTVBDODN4eCB3YXRjaGRvZyBpZiBpdHMgZW5hYmxlZCBvdXQgb2YgcmVzZXQuCiAgSWYgaXRzIGRpc2FibGVkIG91dCBvZiByZXNldCBTVyBjYW4gbGF0ZXIgZW5hYmxlIGl0IGlmIHNvIGRlc2lyZWQKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBbGxvdyBjb25maWcgb2YgR1BJTyBkaXJlY3Rpb24gJiBkYXRhIHJlZ2lzdGVycyBhdCBib290IG9uIDgzeHgKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBFbmFibGUgdGltZSBoYW5kbGluZyBvbiA4M3h4CiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogTWFrZSBTeXN0ZW0gSU8gQ29uZmlnIFJlZ2lzdGVycyBib2FyZCBjb25maWd1cmFibGUgb24gTVBDODN4eAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEZpeGVkIFBDSSBpbmRpcmVjdCBjb25maWcgb3BzIHRvIGhhbmRsZSBtdWx0aXBsZSBQQ0kgY29udHJvbGxlcnMKICBXZSBuZWVkIHRvIGFkanVzdCB0aGUgYnVzIG51bWJlciB3ZSBhcmUgdHJ5aW5nIHRvIGFjY2VzcyBiYXNlZAogIG9uIHdoaWNoIFBDSSBjb250cm9sbGVyIGl0cyBvbgogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDEyIEphbiAyMDA2CgoqIFJlcG9ydCBiYWNrIFBDSSBidXMgd2hlbiBkb2luZyB0YWJsZSBiYXNlZCBkZXZpY2UgY29uZmlnCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWRkZWQgc3VwcG9ydCBmb3IgUENJIHByZWZldGNoYWJsZSByZWdpb24gYW5kIEJBUnMKICBJZiBhIGhvc3QgY29udHJvbGxlciBzZXRzIHVwIGEgcmVnaW9uIGFzIHByZWZldGNoYWJsZSBhbmQKICBhIGRldmljZSdzIEJBUiBkZW5vdGVzIGl0IGFzIHByZWZldGNoYWJsZSwgYWxsb2NhdGUgdGhlCiAgQkFSIGludG8gdGhlIHByZWZldGNoIHJlZ2lvbi4KCiAgSWYgYSBCQVIgaXMgcHJlZmV0Y2hhYmxlIGFuZCBubyBwcmVmZXRjaGFibGUgcmVnaW9uIGhhcwogIGJlZW4gc2V0dXAgYnkgdGhlIGNvbnRyb2xsZXIgd2UgZmFsbCBiYWNrIHRvIGFsbG9jYXRpbmcKICB0aGUgQkFSIGludG8gdGhlIG5vcm1hbGx5IG1lbW9yeSByZWdpb24uCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWRkIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2VuZXJpYyBmbGF0IGRldmljZSB0cmVlIGZpeHVwcyBmb3IgbXBjODN4eAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFkZCBzdXBwb3J0IGZvciBwYXNzaW5nIGluaXRyZCBpbmZvcm1hdGlvbiB2aWEgZmxhdCBkZXZpY2UgdHJlZQogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFkZGVkIE9GX1NURE9VVF9QQVRIIGFuZCBPRl9TT0MKCiAgT0ZfU1RET1VUX1BBVEggc3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBkZXZpY2UgdGhlIGtlcm5lbCBjYW4gdXNlCiAgZm9yIGNvbnNvbGUgb3V0cHV0CgogIE9GX1NPQyBzcGVjaWZpZXMgdGhlIHByb3BlciBuYW1lIG9mIHRoZSBTT0Mgbm9kZSBpZiBvbmUgZXhpc3RzLgogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFsbG93IGJvYXJkIGNvZGUgdG8gZml4dXAgdGhlIGZsYXQgZGV2aWNlIHRyZWUgYmVmb3JlIGJvb3RpbmcgYSBrZXJuZWwKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBZGRlZCBDT05GSUdfIG9wdGlvbnMgZm9yIGJkX3QgYW5kIGVudiBpbiBmbGF0IGRldiB0cmVlCgoJQ09ORklHX09GX0hBU19CRF9UIHdpbGwgcHV0IGEgY29weSBvZiB0aGUgYmRfdAoJaW50byB0aGUgcmVzdWx0aW5nIGZsYXQgZGV2aWNlIHRyZWUuCgoJQ09ORklHX09GX0hBU19VQk9PVF9FTlYgd2lsbCBjb3B5IHRoZSBlbnZpcm9ubWVudAoJdmFyaWFibGVzIGZyb20gdS1ib290IGludG8gdGhlIGZsYXQgZGV2aWNlIHRyZWUKCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWRkIHN1cHBvcnQgZm9yIHRoZSBESENQIHZlbmRvciBvcHRpb25hbCBib290ZmlsZSAoIzY3KS4KICBJZ25vcmVzIHRoZSB2ZW5kb3IgVEZUUCBzZXJ2ZXIgbmFtZSBvcHRpb24gKCM2NikuCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMzAgSnVuIDIwMDUKCiogRml4IGEgSFcgdGltaW5nIGlzc3VlIG9uIDg1NDggQ0RTIGZvciBlVFNFQyAzIGluIFJHTUlJIG1vZGUKICBQYXRjaCBieSBBbmR5IEZsZW1pbmcsIDE0IEp1biAyMDA1CgoqIEZpeCBiYWQgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIExUWDk3MSBQSFkgb24gTVBDODV4eCBib2FyZHMuCiAgUGF0Y2ggYnkgR2VyaGFyZCBKYWVnZXIsIDIxIEp1biAyMDA1CgoqIEFkZCBuZXRjb25zb2xlIGFuZCBzb21lIG1vcmUgY29tbWFuZHMgdG8gUlBYbGl0ZV9EVyBib2FyZAogIFBhdGNoIGJ5IFNhbSBTb25nLCAxOSBKdW4gMjAwNQoKKiBGaXggYmFkIGRlY2xhcmF0aW9uIG9uIHBjaV9jZmdmdW5jX25vdGhpbmcKICBQYXRjaCBieSBTYW0gU29uZywgMTkgSnVuIDIwMDUKCiogQWRqdXN0ICJlY2hvIiBhcyBhIGRlZmF1bHQgY29tbWFuZAogIFBhdGNoIGJ5IFNhbSBTb25nLCAxOSBKdW4gMjAwNQoKKiBGaXggUENJREYgY2FsY3VsYXRpb24gaW4gY3B1L21wYzgyNjAvc3BlZWQuYyBmb3IgTVBDODI4MEVDCiAgUGF0Y2ggYnkgS29rSG93IFRlaCwgMTYgSnVuIDIwMDUKCiogQWRkIGNyYyBvZiBkYXRhIHRvIGpmZnMyIChpbiBqZmZzMl8xcGFzc19idWlsZF9saXN0cygpKS4KICBQYXRjaCBieSBSaWNrIEJyb25zb24sIDE1IEp1biAyMDA1CgoqIENvZGluZyBTdHlsZSBjbGVhbnVwCgoqIEF2b2lkIGRlcmVmZXJlbmNpbmcgTlVMTCBpbiBmaW5kX2NtZCgpIGlmIG5vIHZhbGlkIGNvbW1hbmRzIHdlcmUgZm91bmQKICBQYXRjaCBieSBBbmRyZXcgRHllciwgMTMgSnVuIDIwMDUKCiogQWRkIEFESSBCbGFja2ZpbiBzdXBwb3J0CiAgLSBhZGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgQmxhY2tmaW4gQkY1MzMgQ1BVCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEFESSBCRjUzMyBTdGFtcCB1Q2xpbnV4IGJvYXJkCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEFESSBCRjUzMyBFWktpdCBib2FyZAogIFBhdGNoZXMgYnkgUmljaGFyZCBLbGluZ2xlciwgMTEgSnVuIDIwMDUKCiogQWRkIGxvYWRzIG9mIG50b2hsKCkgaW4gaW1hZ2UgaGVhZGVyIGhhbmRsaW5nCiAgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTAgSnVuIDIwMDUKCiogU3dpdGNoIE1QQzg2eEFEUyBhbmQgTVBDODg1QURTIGJvYXJkcyB0byB1c2UgY3B1Y2xrIGVudmlyb25tZW50CiAgdmFyaWFibGUgdG8gc2V0IGNsb2NrCiAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDUgSnVuIDIwMDUKCiogUlBYbGl0ZSBjb25maWd1cmF0aW9uIGZpeGVzCiAgLSBVc2UgY29ycmVjdCBmbGFzaCBzZWN0b3Igc2l6ZQogIC0gVXNlIGNvcnJlY3QgbWVtb3J5IHRlc3QgZW5kIGFkZHJlc3MKICAtIEFkZCBzdXBwb3J0IGZvciBiemlwMiBjb21wcmVzc2lvbgogIC0gVmFyaW91cyBzbWFsbCBmaXhlcwogIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA1IEp1biAyMDA1CgoqIE1lbW9yeSBjb25maWd1cmF0aW9uIGNoYW5nZXMgZm9yIFpQQy4xOTAwIGJvYXJkCiAgLSBGaXggU0RSQU0gdGltaW5nIG9uIGJvdGggbG9jYWwgYnVzIGFuZCA2MHggYnVzCiAgLSBBZGQgc3VwcG9ydCBmb3Igc2Vjb25kIGZsYXNoIGJhbmsgKFNJTU0pCiAgLSBDaGFuZ2UgYm9vdCBmbGFzaCBiYXNlCiAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDUgSnVuIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIEFkZGVyIGJvYXJkcyB3aXRoIDE2TUIgU0RSQU07CiAgYWRkIHN1cHBvcnQgZm9yIHNlY29uZCBGRUMgb24gQWRkZXI4N3ggYm9hcmQuCiAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDUgSnVuIDIwMDUKCiogRml4IGNvbmRpdGlvbmFsIGZvciBpbmNsdWRpbmcga3M4Njk1ZXRoIGRyaXZlcgogIFBhdGNoIGJ5IEdyZWcgVW5nZXJlciwgMDQgSnVuIDIwMDUKCiogRml4IE1ha2VmaWxlOiBpbmNsdWRlIGNvbmZpZy5tayBvbmx5IGFmdGVyIENST1NTX0NPTVBJTEUgaXMgZGVmaW5lZAogIFBhdGNoIGJ5IEZyaWVkcmljaCBMb2JlbnN0b2NrLCAwMiBKdW4gMjAwNQoKKiBGaXggY29tbWVudCBpbiBjb21tb24vc29mdF9pMmMuYwogIFBhdGNoZXMgYnkgUGV0ZXIgS29yc2dhYXJkL1RvbHVuYXkgT3JrdW4sIDI2IE1heSAyMDA1CgoqIENsZWFudXAgY29tcGlsZXIgd2FybmluZ3MuCiAgUGF0Y2ggYnkgR3JlZyBVbmdlcmVyLCAyMSBNYXkgMjAwNQoKKiBXb3JkIGFsaWdubWVudCBmaXhlcyBmb3Igd29yZCBhbGlnbmVkIE5TMTY1NTAgVUFSVAogIFBhdGNoIGJ5IEplYW4tUGF1bCBTYW1hbiwgMDEgTWFyIDIwMDUKCiAgRml4ZXMgYnVnIHdpdGggVUFSVCB0aGF0IG9ubHkgc3VwcG9ydHMgd29yZCBhbGlnbmVkIGFjY2VzczogcmVtb3ZlZAogICJfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7IiBmb3IgIihDRkdfTlMxNjU1MF9SRUdfU0laRSA9PSA0KSIgc29tZQogIChicm9rZW4hKSB2ZXJzaW9ucyBvZiBHQ0MgZ2VuZXJhdGUgYnl0ZSBhY2Nlc3NlcyB3aGVuIGVuY291bnRlcmluZwogIHRoZSBwYWNrZWQgYXR0cmlidXRlIHJlZ2FyZGxlc3MgaWYgdGhlIHN0cnVjdCBpcyBhbHJlYWR5IGNvcnJlY3RseQogIGFsaWduZWQgZm9yIGEgcGxhdGZvcm0uIFBlcmlwaGVyYWxzIHRoYXQgY2FuIG9ubHkgaGFuZGxlIHdvcmQKICBhbGlnbmVkIGFjY2VzcyB3b24ndCB3b3JrIHByb3Blcmx5IHdoZW4gYWNjZXNzZWQgd2l0aCBieXRlIGFjY2Vzcy4KICBUaGUgc3RydWN0IE5TMTY1NTAgaXMgYWxyZWFkeSB3b3JkIGFsaWduZWQgZm9yIFJFR19TSVpFID0gNCwgc28KICB0aGVyZSBpcyBubyBuZWVkIHRvIHBhY2tlZCB0aGUgc3RydWN0IGluIHRoYXQgY2FzZS4KCiogRml4IGJlaGF2aW91ciBpZiBnYXRld2F5aXAgaXMgbm90IHNldAogIFBhdGNoIGJ5IFJvYmluIEdpbGtzLCAyMyBEZWMgMjAwNAoKKiBGaXggY2xlYW51cCBmb3IgbmV0c3RhcnQgYm9hcmQuCiAgUmVtb3ZlIGJ1aWxkIHJlc3VsdHMgZnJvbSByZXBvc2l0b3J5CgoqIFNvbWUgY29kZSBjbGVhbnVwIGZvciBHQ0MgNC54CgoqIEZpeGVzIHRvIHN1cHBvcnQgZW52aXJvbm1lbnQgaW4gTkFORCBmbGFzaDsKICBlbmFibGUgTkFORCBmbGFzaCBiYXNlZCBlbnZpcm9ubWVudCBmb3IgZGVsdGEgYm9hcmQuCgoqIEFkZCBzdXBwb3J0IGZvciBJbnRlbCBNb25haGFucyBDUFUgb24gWnlsb25pdGUgYW5kIERlbHRhIGJvYXJkcwogIChUaGlzIGlzIFdvcmsgaW4gUHJvZ3Jlc3MhKQoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODI2MC1BSSBib2FyZHMuCgoqIE1pbm9yIGNvZGUgY2xlYW51cAoKKiBNZXJnZSB0aGUgbmV3IE5BTkQgY29kZSAodGVzdGluZy1OQU5EIGJyYWNoKTsgc2VlIGRvYy9SRUFETUUubmFuZAogIFJld3JpdGUgb2YgTkFORCBjb2RlIGJhc2VkIG9uIHdoYXQgaXMgaW4gMi42LjEyIExpbnV4IGtlcm5lbAogIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyOSBKdW4gMjAwNQoKKiBBZGQgbG93Ym9vdCB0YXJnZXQgdG8gbWNjMjAwIGJvYXJkCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA0IE1hciAyMDA2CgoqIEZpeCBwcm9ibGVtIHdpdGggZmxhc2hfZ2V0X3NpemUoKSBmcm9tIENGSSBkcml2ZXIgdXBkYXRlCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxIE1hciAyMDA2CgoqIE1ha2UgQ0ZHX05PX0ZMQVNIIHdvcmsgb24gQVJNIHN5c3RlbXMKICBQYXRjaCBieSBNYXJrdXMgS2xvdHpidWVjaGVyLCAyNyBGZWIgMjAwNgoKKiBVcGRhdGUgbWNjMjAwIGNvbmZpZzogRGlzYWJsZSBQQ0kgYW5kIERvQywgdXNlIDEzMyBNSHogSVBCIGNsb2NrLAogIHVzZSBodXNoIHNoZWxsLgoKKiBDb252ZXJ0IG1jYzIwMCB0byB1c2UgY29tbW9uIENGSSBmbGFzaCBkcml2ZXIKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI4IEZlYiAyMDA2CgoqIEFkZCBlbnYtdmFyaWFibGUgInVubG9jayIgdG8gaGFuZGxlIGluaXRpYWwgc3RhdGUgb2Ygc2VjdG9ycwogIChsb2NrZWQvdW5sb2NrZWQpLgoKICBPbmx5IHRoZSBVLUJvb3QgaW1hZ2UgYW5kIGl0J3MgZW52aXJvbm1lbnQgaXMgcHJvdGVjdGVkLAogIGFsbCBvdGhlciBzZWN0b3JzIGFyZSB1bnByb3RlY3RlZCAodW5sb2NrZWQpIGlmIGZsYXNoCiAgaGFyZHdhcmUgcHJvdGVjdGlvbiBpcyB1c2VkIChDRkdfRkxBU0hfUFJPVEVDVElPTikgYW5kCiAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICJ1bmxvY2siIGlzIHNldCB0byAieWVzIi4KCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOCBGZWIgMjAwNgoKKiBVcGRhdGUgZHJpdmVycy9jZmlfZmxhc2guYzoKICAtIGZpbmRfc2VjdG9yKCkgY2FsbGVkIGluIGJvdGggdmVyc2lvbnMgb2YgZmxhc2hfd3JpdGVfY2Zpd29yZCgpCiAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAyN3RoIEZlYiAyMDA2CgoqIENGSSBzdXBwb3J0IGZvciBhIHg4L3gxNiBBTUQvU3BhbnNpb24gZmxhc2ggY29uZmlndXJlZCBpbiB4OCBtb2RlCiAgUGF0Y2ggYnkgSm9zZSBNYXJpYSBMb3BleiwgMTYgSmFuIDIwMDYKCiogQWRkIHN1cHBvcnQgZm9yIEFNRC9TcGFuc2lvbiBGbGFzaGVzIGluIGZsYXNoX3dyaXRlX2NmaWJ1ZmZlcgogIFBhdGNoIGJ5IEFsZXggQmFzdG9zIGFuZCBUaG9tYXMgU2NoYWVmZXIsIDIwMDUtMDgtMjkKCiogQ2hhbmdlcy9maXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKICBXZSAqc2hvdWxkKiBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGVycm9yIGJpdHMgaWYgdGhlIHByZXZpb3VzIGNhbGwKICByZXR1cm5lZCBFUlJfT0sgKE90aGVyd2lzZSB3ZSB3aWxsIGhhdmUgb3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgaW4KICBmbGFzaF9zdGF0dXNfY2hlY2soKSBhbHJlYWR5LikgIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIG9ubHkgY2hlY2sgZm9yCiAgZXJyb3IgYml0cyBpZiBmbGFzaF9zdGF0dXNfY2hlY2soKSByZXR1cm5zIEVSUl9USU1FT1VULgogIFBhdGNoIGJ5IE1hcmN1cyBIYWxsLCAyMyBBdWcgMjAwNQoKKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgogIC0gQWRkIENGR19GTEFTSF9QUk9URUNUX0NMRUFSIG9uIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKICAtIFByb2hpYml0IGJ1ZmZlciB3cml0ZSB3aGVuIGJ1ZmZlcl9zaXplIGlzIDEgb24gZHJpdmVycy9jZmlfZmxhc2guYwogIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMTkgQXVnIDIwMDUKCiogRml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgLSBGaXggd3JvbmcgdGltZW91dCB2YWx1ZSB1c2FnZSBpbiBmbGFzaF9zdGF0dXNfY2hlY2soKQogIC0gUm91bmQgd3JpdGVfdG91dCB1cCB3aGVuIGNvbnZlcnRpbmcgdG8gbXNlYyBpbiBmbGFzaF9nZXRfc2l6ZSgpCiAgLSBSZW1vdmUgY2xlYXJpbmcgZmxhc2ggc3RhdHVzIGF0IHRoZSBlbmQgb2YgZmxhc2hfd3JpdGVfY2ZpYnVmZmVyKCkKICAgIHdoaWNoIHNldHMgSW50ZWwgMjhGNjQwSjMgZmxhc2ggYmFjayB0byBjb21tYW5kIG1vZGUgb24gQ1NCNDcyCiAgUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMDIgSnVseSAyMDA1CgoqIEFkZCBiYXNpYyBzdXBwb3J0IGZvciB0aGUgU01NQUNPNCBCb2FyZCBmcm9tIFBhbkRhQ29tLgogIFBhdGNoIGJ5IEhlaWtvIFNjaG9jaGVyLCAyMCBGZWIgMjAwNgoKKiBBZGQgR0lUIHZlcnNpb24gaW5mb3JtYXRpb24gKGNvbW1pZCBJRCkgdG8gdW50YWdnZWQgVS1Cb290IHZlcnNpb25zCgogIEFzIGRvbmUgaW4gdGhlIGxpbnV4IGtlcm5lbCwgdGhlIFUtQm9vdCB2ZXJzaW9uIChVX0JPT1RfVkVSU0lPTikKICBvZiBhbGwgdW5yZWxlYXNlZCAodW50YWdnZWQpIFUtQm9vdCBpbWFnZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5CiAgZXh0ZW5kZWQgdXBvbiBjb21waWxldGltZSB3aXRoIGEgcGFydCBvZiB0aGUgR0lUIGNvbW1pdCBJRCBhbmQKICBwb3NzaWJseSB3aXRoICJkaXJ0eSIgaWYgdW5jb21taXRlZCBjaGFuZ2VzIGFyZSBkZXRlY3RlZC4KCiAgSGVyZSBhbiBleGFtcGxlIGZvciB0aGUgcmVzdWx0aW5nIHZlcnNpb246CiAgIlUtQm9vdCAxLjEuNC1nMzQ1N2FjMTgtZGlydHkiCgogIFRoZSB2ZXJzaW9uIGlzIG5vdyBtYWludGFpbmVkIGluIHRoZSB0b3BsZXZlbCBNYWtlZmlsZSBhbmQgdGhlCiAgdmVyc2lvbiBoZWFkZXJzIGFyZSBhdXRvZ2VuZXJhdGVkLgoKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDkgRmViIDIwMDYKCiogVXBkYXRlIGRlZmF1bHQgZW52aXJvbm1lbnQgZm9yIElOS0E0eDAwIGJvYXJkLgoKKiBDb252ZXJ0IENQQ0k3NTAgdG8gdXNlIGNvbW1vbiBDRkkgZmxhc2ggZHJpdmVyCiAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgOCBGZWIgMjAwNgoKKiBWYXJpb3VzIGNoYW5nZXMgdG8gZXNkIEhINDA1IGJvYXJkIHNwZWNpZmljIGZpbGVzCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDA3IEZlYiAyMDA2CgoqIENsZWFudXAgVS1Cb290IGJvb3QgbWVzc2FnZXMgb24gQVJNLgoKICBUbyBtYXRjaCB0aGUgVS1Cb290IHVzZXIgaW50ZXJmYWNlIG9uIEFSTSBwbGF0Zm9ybXMgdG8gdGhlIFUtQm9vdAogIHN0YW5kYXJkIChhcyBvbiBQUEMgcGxhdGZvcm1zKSwgc29tZSBtZXNzYWdlcyB3aXRoIGRlYnVnIGNoYXJhY3RlcgogIGFyZSByZW1vdmVkIGZyb20gdGhlIGRlZmF1bHQgVS1Cb290IGJ1aWxkLgogIEVuYWJsZSBERUJVRyBmb3IgbGliX2FybS9ib2FyZC5jIHRvIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlcy4KICBOZXcgQ09ORklHX0RJU1BMQVlfQ1BVSU5GTyBhbmQgQ09ORklHX0RJU1BMQVlfQk9BUkRJTkZPIG9wdGlvbnMuCiAgUGF0Y2gJIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgSmFuIDIwMDYKCiogRml4IHZhcmlvdXMgY29tcGlsZXIgd2FybmluZ3Mgb24gcHBjNHh4IGJ1aWxkcyAoRUxESyA0LjApCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBKYW4gMjAwNgoKKiBBZGQgVkdBIHN1cHBvcnQgKENUNjkwMDApIHRvIENQQ0k3NTAgYm9hcmQuCiAgSW5zZXJ0IG1pc3NpbmcgX19sZTMyX3RvX2NwdSgpIGZvciBmaWxlc2l6ZSBpbiBleHQyZnNfcmVhZF9maWxlKCkuCiAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgMzAgRGVjIDIwMDUKCiogUE1DNDA1IGFuZCBDUENJNDA1OiBNb3ZlZCBjb25maWd1cmF0aW9uIG9mIHBjaSByZXNvdXJjZXMKICBpbnRvIGNvbmZpZyBmaWxlLgogIFBNQzQwNSBhbmQgQ1BDSTJEUDogQWRkZWQgZmlybXdhcmUgZG93bmxvYWQgYW5kIGJvb3RpbmcgdmlhIHBjaS4KICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjAgRGVjIDIwMDUKCiogQWRkIENvbGRGaXJlIHRhcmdldHMgdG8gTUFLRUFMTCBzY3JpcHQKICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMjYgSmFuIDIwMDYKCiogQWRkIHN1cHBvcnQgZm9yIHI1MjAwIGJvYXJkCiAgUGF0Y2ggYnkgWmFjaGFyeSBMYW5kYXUsIDI2IEphbiAyMDA2CgoqIEFkZCBzdXBwb3J0IGZvciBGcmVlc2NhbGUgTTUyNzEgcHJvY2Vzc29yCiAgUGF0Y2ggYnkgWmFjaGFyeSBMYW5kYXUsIDI2IEphbiAyMDA2CgoqIEZpeCAyOEYyNTZKM0Egc3VwcG9ydCBvbiBQTTUyMCBib2FyZAogICh3aXRob3V0IGJhbmstc3dpdGNoaW5nIG9ubHkgMzIgTUIgY2FuIGJlIGFjY2Vzc2VkKQoKKiBGaXggbWtpbWFnZSBidWcgd2l0aCBtdWx0aWZpbGUgaW1hZ2VzIGNyZWF0ZWQgb24gNjQgYml0IHN5c3RlbXMuCgoqIEFkZCBzdXBwb3J0IGZvciAyOEYyNTZKM0EgZmxhc2ggKD0+IDY0IE1CKSBvbiBQTTUyMCBib2FyZAoKKiBGaXggY29tcGlsZXIgcHJvYmxlbSB3aXRoIGF0OTFybTkyMDBkayBib2FyZC4KICBQYXRjaCBieSBFdWdlbiBCaWd6LCAxOSBEZWMgMjAwNQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjQ6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQ2hhbmdlcyB0byBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlIDQ0MEVQL0dSIGV2YWwgYm9hcmRzOgogIC0gQ2hhbmdlZCBHUElPIHNldHVwIHRvIGVuYWJsZSBhbm90aGVyIGFkZHJlc3MgbGluZSBpbiBvcmRlciB0bwogICAgYWRkcmVzcyA2NE0gb2YgRkxBU0guCiAgLSBBZGRlZCBmdW5jdGlvbiBzZHJhbV90cjFfc2V0IHRvIGF1dG8gY2FsY3VsYXRlIHRoZSB0cjEgdmFsdWUgZm9yCiAgICB0aGUgRERSLgogIFBhdGNoIGJ5IFN0ZXZlbiBCbGFrZXNsZWUsIDEyIERlYyAyMDA1CgoqIE1QQzUyMDA6ICBTZXQgUENJIHJldHJ5IGNvdW50ZXIgdG8gMCA9IGluZmluaXRlIHJldHJ5OwogIFRoZSBkZWZhdWx0IG9mIDI1NSBpcyB0b28gc2hvcnQgZm9yIHNsb3cgZGV2aWNlcy4KICBQYXRjaCBieSBNYXJ0aW4gTnlrb2R5bSwgMTIgRGVjIDIwMDUKCiogQ2hhbmdlIHBvcnQgY29uZmlndXJhdGlvbiBmb3IgTzJETlQgKENPREVDMSBvbiBQU0MxKS4KCiogRml4IHJlZ2lzdGVyIGZvciBQQ0kgYXN5bmMgbW9kZSBvbiBQUEM0NDBFUAogIFBhdGNoIGJ5IFlvdW5nY2h1bCBCYW5nLCAwOCBEZWMgMjAwNQoKKiBGaXggVS1Cb290IGxpbmtpbmcgcHJvYmxlbXMgKGFkZCAuZWhfZnJhbWUgc2VnbWVudCB0byBsaW5rZXIgc2NyaXB0KQogIFRoaXMgc2VnbWVudCBtYXkgYmUgcmVxdWlyZWQgYnkgc29tZSBsaWJnY2MuYSBmdW5jdGlvbnMKICAobGlrZSBfdWRpdmRpMykuCgoqIEZpeCBEUFJBTSBvZmZzZXQvc2l6ZSBmb3IgTVBDODU0MS84NTU1LgogIFNpbXBsaWZ5IFRRTTg1eHggTWFrZWZpbGUgaGFuZGxpbmcuCgoqIEZpeCBkYXRhIG92ZXJmbG93ICh0eXBvPykgaW4gcnRjL2RzMTMwMi5jCgoqIEZpeCBVLUJvb3QgY29tcGlsYXRpb24gZm9yIE1JUFMgYm9hcmRzIHVzaW5nIEVMREsgNC4wCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NTQxLzg1NTUgYm9hcmRzLCBUUU04NXh4IHN1cHBvcnQgcmV3b3JrZWQ6CiAgLSBTdXBwb3J0IGZvciBUUU04NTQxLzg1NTUgYm9hcmRzIGFkZGVkLgogIC0gQ29tcGxldGUgcmV3b3JrIG9mIFRRTTg1NDAvODU2MCBzdXBwb3J0LgogIC0gQ29tbW9uIFRRTTg1eHggY29kZSBub3cgc3VwcG9ydHMgYWxsIGN1cnJlbnQgVFFNODV4eCBwbGF0Zm9ybXMKICAgIChUUU04NTQwLzg1NDEvODU1NS84NTYwKS4KICAtIEREUiBTRFJBTSBzaXplIGRldGVjdGlvbiBhZGRlZC4KICAtIENBUyBsYXRlbmN5IGRlZmF1bHQgdmFsdWVzIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzZXR0aW5nICJzZXJpYWwjIgogICAgdG8gZS5nLiAiQUJDMDAwMSBjYXNsPTI1IiAtPiBDQVMgbGF0ZW5jeSAyLjUgd2lsbCBiZSB1c2VkLgogICAgSWYgcHJvYmxlbXMgYXJlIGRldGVjdGVkIHdpdGggdGhpcyBub24gZGVmYXVsdCBDQVMgbGF0ZW5jeSwKICAgIHRoZSBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KICAtIEZsYXNoIHNpemUgZGV0ZWN0aW9uIGFkZGVkLgogIC0gTW92ZWQgRkNDIGV0aGVybmV0IGRyaXZlciBpbml0aWFsaXphdGlvbiBiZWhpbmQgVFNFQyBkcml2ZXIgaW5pdAogICAgLT4gVFNFQyBpcyBmaXJzdCBkZXZpY2UuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMCBOb3YgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyA0NDBTUCwgYWRkIHN1cHBvcnQgZm9yIEFNQ0MgTHVhbiA0NDBTUCBldmFsIGJvYXJkLgogIFBhdGNoIGJ5IEpvaG4gT3RrZW4sIDIzIE5vdiAyMDA1CgoqIENoYW5nZWQgUFBDNDR4IHN0YXJ0dXAgbWVzc2FnZSAoY3B1IGluZm8sIHNwZWVkLi4uKSB0byBjb21tb24gc3R5bGU6CiAgT24gUFBDNDR4IHBsYXRmb3JtcywgdGhlIHN0YXJ0dXAgbWVzc2FnZSBnZW5lcmF0ZWQgaW4gImNwdS5jIiBvbmx5CiAgY29tcHJpc2VkIHRoZSBwcGMgdHlwZSBhbmQgcmV2aXNpb24gYnV0IG5vdCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCiAgbGlrZSBzcGVlZCBldGMuIFRob3NlIHNwZWVkIGluZm9zIHdoZXJlIHByaW50ZWQgaW4gdGhlIGJvYXJkIHNwZWNpZmljCiAgY29kZS4gVGhpcyBuZXcgaW1wbGVtZW50YXRpb24gbm93IHByaW50cyBhbGwgQ1BVIGluZm9zIGluIHRoZSBjb21tb24KICBjcHUgc3BlY2lmaWMgY29kZS4gTm8gYm9hcmQgc3BlY2lmaWMgY29kZSBpcyBuZWVkZWQgYW55bW9yZSBhbmQKICB0aGVyZWZvcmUgcmVtb3ZlZCBmcm9tIGFsbCBjdXJyZW50IDQ0eCBpbXBsZW1lbnRhdGlvbnMuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNyBOb3YgMjAwNQoKKiBBZGp1c3QgVFFNODM0eCBQSFkgYWRkcmVzc2VzIGZvciBsYXRlc3QgaGFyZHdhcmUgcmV2aXNpb24uCgoqIEluY3JlYXNlIG1hbGxvYyBhcmVuYSBvbiBUUU01MjAwIGJvYXJkIHRvIDI1NiBrQi4KICBXaXRoIDY0IGtiIHVuaWZvcm0gZmxhc2ggc2VjdG9yIHNpemUgdGhlIG9sZCB2YWx1ZSBvZiAxMjgga0Igd2FzCiAgdG9vIHNtYWxsLgoKKiBGaXggbWlpcGh5IGdsb2JhbCBkYXRhIGluaXRpYWxpemF0aW9uIChwcm9ibGVtIG9uIDR4eCBib2FyZHMgd2hlbgogIG5vIGV0aGFkZHIgaXMgYXNzaWduZWQpLiBJbml0aWFsaXphdGlvbiBtb3ZlZCBmcm9tCiAgbWlpcGh5X3JlZ2lzdGVyKCkgdG8gZXRoX2luaXRpYWxpemUoKS4KCiAgQmFzZWQgb24gaW5pdGlhbCBwYXRjaCBmb3IgNHh4IHBsYXRmb3JtIGJ5IE1hdHRoaWFzIEZ1Y2hzLgoKKiBSZW1vdmUgdW5ubmVjZXNzYXJ5ICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPiBmcm9tIGluY2x1ZGUvYXNtLSovdS1ib290LmgKCiogQWxsb3cgdXNlIG9mIGluY2x1ZGUvaW1hZ2UuaCBhbmQgaW5jbHVkZS9hc20tKi91LWJvb3QuaCBpbiBwcm9wcmlldGFyeSBjb2RlLgogIFRoZSBDT1BZSU5HIGZpbGUgd2FzIGV4dGVuZGVkIHRvIG1ha2UgY2xlYXIgdGhhdCB0aGVzZSBmaWxlcyBjYW4gYmUKICB1c2VkIGluIG5vbi1HUEwgY29kZSwgdG9vLgogIEFsc28sIGEgY29ycmVzcG9uZGluZyBub3RlIHdhcyBwbGFjZWQgaW4gdGhlIGhlYWRlcnMgb2YgdGhlIGFmZmVjdGVkIGZpbGVzLgoKKiBBZGQgc3VwcG9ydCBmb3IgUHJvZHJpdmUgUDNQNDQwIGJvYXJkOgogIC0gQWRkZWQgb25ib2FyZCBQUEM0NDAgRERSIGF1dG9kZXRlY3Rpb24gaW4gY3B1L3BwYy9zZHJhbS5jCiAgLSBDRkdfRkxBU0hfUVVJRVRfVEVTVCBhZGRlZCB0byB1c2UgdGhlIGNvbW1vbiBDRkkgZHJpdmVyCiAgICBmb3IgYmFuayBhdXRvZGV0ZWN0aW9uCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMiBOb3YgMjAwNQoKKiBDaGFuZ2UgYWxsICckKC4uLiknIHZhcmlhYmxlIHJlZmVyZW5jZXMgaW50byAnJHsuLi59JwogIHdoaWNoIG1ha2VzIHRoZSBlbnZpcm9ubWVudCBjb21wYXRpYmxlIHdpdGggdGhlIGh1c2ggc2hlbGwuCiAgV0FSTklORzogU3VwcG9ydCBmb3IgdGhlIG9sZCAnJCguLi4pJyBzeW50YXggd2lsbCBiZQogIGRpc2NvbnRpbnVlZCBpbiBhIGxhdGVyIHZlcnNpb24uCgoqIE1pbm9yIGNoYW5nZXMgdG8gaW5pdCBmbGFncyBpbiBUUU04MzR4IFBDSS4KCiogRml4IEJhbWJvbyBERFIgU0RSQU0gaW5pdGlhbGl6YXRpb24gKHByb2JsZW0gd2l0aCBvbmJvYXJkIFNEUkFNKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgTm92IDIwMDUKCiogTmV3IFBQQyA0MDVFUCBib2FyZCBhZGRlZDogQ01TNzAwCiAgQWRkZWQgQ09ORklHX05FVF9NVUxUSSBmb3IgVk9NNDA1IGJvYXJkLgogIEFkZGVkIHJlc2V0X3BoeSgpIGZvciBWT000MDUgYm9hcmQuCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDA5IE5vdiAyMDA1CgoqIFVwZGF0ZWQgUENJIG1hcHBpbmcgZm9yIGVzZCBDUENJMkRQIGJvYXJkLgogIEFkZCBzdXBwb3J0IGZvciBlcnJvciBMRUQuCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDA3IE5vdiAyMDA1CgoqIEZpeCBNUEM4NXh4IFBDSSBzdXBwb3J0IChwY2lfcmVnaXN0ZXJfaG9zZSgpIGJlZm9yZSBwY2kgY29uZmlnIGFjY2VzcykKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IE5vdiAyMDA1CgoqIENvcnJlY3QgUFBDIFRpbWViYXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIChTUFJOX1RCUkwuLi4pCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBOb3YgMjAwNQoKKiBBZGp1c3QgYmQtPmJpX2ZsYXNoc3RhcnQgb24gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZSB0byBjb3JyZWN0IHNpemUKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA1IE5vdiAyMDA1CgoqIEFkZGl0aW9uYWwgZml4IGZvciBleHRlcm5hbCBJUlEgY29uZmlnIG9uIFllbGxvd3N0b25lICYgWW9zZW1pdGUKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAzIE5vdiAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBPY290ZWEgcGFzcyAzIHdpdGggNDQwR1ggUmV2LiBGCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBOb3YgMjAwNQoKKiBGaXggZXh0ZXJuYWwgSVJRIGNvbmZpZ3VyYXRpb24gb24gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggT2N0IDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIFBIWXMuCiAgVGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgYm9hcmRzOgoJY21jcHUyCSAgICAoYXQ5MXJtOTIwMC9ldGhlci5jKQoJUFBDaGFtZWxlb24gKHBwYzR4eC80eHhfZW5ldC5jKQoJeXVrb24JICAgIChtcGM4MjIwL2ZlYy5jKQoJdWMxMDAJICAgIChtcGM4eHgvZmVjLmMpCgl0cW04MzR4CSAgICAobXBjODM0eC90c2VjLmMpIHdpdGggRUVQUk8xMDAKCWxpdGU1MjAwICAgIChtcGM1eHh4L2ZlYy5jKSB3aXRoIEVFUFJPMTAwIGNhcmQgKGRyaXZlcnMvZWVwcm8xMDAuYykKICBNYWluIGNoYW5nZXMgaW5jbHVkZToKICBjb21tb24vbWlpcGh5dXRpbC5jCiAgLSBtaWlwaHlfcmVnaXN0ZXIgcm91dGluZSB3YXMgYWRkZWQgdG8gYWxsb3cgbXVsdGlwbGUgUEhZcyB0byBiZSByZWdpc3RlcmVkCiAgLSBtaWlwaHlfcmVhZCBhbmQgbWlpcGh5X3dyaXRlIGFyZSBub3cgZGVmaW5lZCBpbiB0aGlzIGZpbGUsIGFuZAogICAgcmVxdWlyZSBhZGRpdGlvbmFsIGFyZ3VtZW50IChjaGFyICpkZXZuYW1lKQogIC0gb3RoZXIgbWlpcGh5Xyogcm91dGluZXMgYWxzbyByZXF1aXJlIGFkZGl0aW9uYWwgZGV2aWNlIG5hbWUgYXJndW1lbnQKICAuLi9saWJfaTM4Ni9ib2FyZC5jCiAgLi4vbGliX3BwYy9ib2FyZC5jCiAgQ2FsbGluZyByZXNldF9waHkoKSB3YXMgbW92ZWQgdG8gYmUgZXhlY3V0ZWQgKmFmdGVyKiBldGhfaW5pdGlhbGl6ZSgpLgogIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIG5vdyBzb21lIG9mIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgcmVzZXRfcGh5KCkKICBtYXkgbmVlZCB0byB1c2UgbWlpcGh5X3Jlc2V0KCkgd2hpY2ggaXMgbm90IGFsbG93ZWQgYmVmb3JlIGV0aF9pbml0aWFsaXplKCkKICBhcyBldGhfaW5pdGlhbGl6ZSByZWdpc3RlcnMgYWxsIHJlcXVpcmVkIG1paXBoeV8qIHJvdXRpbmVzLgogIFRlc3RlZCBvbiBJUDg2MCBhbmQgUEhZIGluaXRpYWxpemVzIHByb3Blcmx5IGFmdGVyIHRoaXMgY2hhbmdlLgoKKiBDb3JyZWN0IGluY2x1ZGVzIGZvciBmbGF0IHRyZWUgYnVpbGRlci4KCiogRml4IGNvbmZsaWN0aW5nIHR5cGVzIChmbGFzaF93cml0ZSgpKSBpbiB0cmFiIGF1dG9fdXBkYXRlLmMuCgoqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgdGhlIFRRTTgzNHggYm9hcmQuCgoqIEFkZCBtaXNzaW5nIDR4eCBib2FyZCB0byBNQUtFQUxMCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQoKKiBGaXggY29uZmxpY3RpbmcgdHlwZXMgKGZsYXNoX3dyaXRlKCkpIGluIGVzZCBhdXRvX3VwZGF0ZS5jCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQoKKiBGaXggcHJvYmxlbSB3aXRoIHNsZWVwIGluIE5ldENvbnNvbGUgKHVzZSBnZXRfdGltZXIoKSkKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE9jdCAyMDA1CgoqIEFkZCBOZXRDb25zb2xlIFN1cHBvcnQgZm9yIEFNQ0MgZXZhbCBib2FyZHMKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE9jdCAyMDA1CgoqIEZpeCBOZXRDb25zb2xlIHN1cHBvcnQgb24gNHh4IChvbmx5IHByaW50IGV0aCBsaW5rIG9uIDFzdCB0cmFuc2ZlcikKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IE9jdCAyMDA1CgoqIEFkZCBmYXQgJiBleHQyIHN1cHBvcnQgdG8gQU1DQyA0NDBFUCBib2FyZHMgWW9zZW1pdGUgJiBCYW1ib28uCiAgRml4IGlkZW50YXRpb24gb24gZXh0MmxzIGhlbHAgZW50cnkuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNCBPY3QgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODM0eCBib2FyZHMuCiAgQ2xlYW51cC4KCiogQ2xlYW51cCBmb3IgR0NDLTQueAoKKiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgT3BlbiBGaXJtd2FyZSBGbGF0IFRyZWUgYW5kIHVzYWdlLgogIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxMyBPY3QgMjAwNQoKKiBBZGQgbWlzc2luZyBmaWxlcyBmb3IgUGFudGVsaXMgQW50b25pb3UncyBwYXRjaAogIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwNCBTZXAgMjAwNQoKKiBGaXggcHJvYmxlbSBpbiBwcGM0eHggZXRoLWRyaXZlciB3aXRob3V0IGV0aGFkZHIgKG9ubHkgd2l0aG91dAogIENPTkZJR19ORVRfTVVMVEkgc2V0KQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgT2N0IDIwMDUKCiogRml4IGd6aXAgYm1wIHN1cHBvcnQgKHRlc3QgaWYgbWFsbG9jIGZhaWxzLCB3YXJuaW5nIHdoZW4gdHJ1bmNhdGVkKS4KICBJbmNyZWFzZSBDRkdfVklERU9fTE9HT19NQVhfU0laRSBvbiBISDQwNSBib2FyZC4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IE9jdCAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBPRiBmbGF0IHRyZWUgZm9yIHRoZSBTVFh0YyBib2FyZC4KICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDQgU2VwIDIwMDUKCiogU3VwcG9ydCBwYXNzaW5nIG9mIE9GIGZsYXQgdHJlZXMgdG8gdGhlIGtlcm5lbC4KICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDQgU2VwIDIwMDUKCiogQ2xlYW51cAoKKiBBZGQgc3VwcG9ydCBmb3IgTmV0U2lsaWNvbiBOUzc1MjAgcHJvY2Vzc29yLgogIFBhdGNoIGJ5IEFydCBTaGlwa293c2tpLCAxMiBNYXkgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgQVAxMDAwIGJvYXJkLgogIFBhdGNoIGJ5IEphbWVzIE1hY0F1bGF5LCAwNyBPY3QgMjAwNQoKKiBFbGltaW5hdGUgaGFyZC1jb2RlZCBhZGRyZXNzIG9mIEV0aGVybmV0IHRyYW5zZmVyIGJ1ZmZlciBvbiBhdDkxcm05MjAwCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDcgT2N0IDIwMDUKCiAgVGhlIEF0bWVsIGVycmF0YSAjMTEgc3RhdGVzIHRoYXQgdGhlIHRyYW5zZmVyIGJ1ZmZlciBkZXNjcmlwdG9yCiAgdGFibGUgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMTYtd29yZCBib3VuZGFyeS4gQXMgaXQgdHVybmVkIG91dCwgdGhpcwogIGlzIGluc3VmZmljaWVudCAtIGl0IHNlZW1zIHRoZSB0YWJsZSBtdXN0IGJlIGFsaWduZWQgb24gYSBib3VuZGFyeQogIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSB0YWJsZSBpdHNlbGYgKGluIExpbnV4IHRoaXMgaXMgbm90IGFuCiAgaXNzdWUgLSB0aGUgdGFibGUgaXMgYWxpZ25lZCBvbiBhIFBBR0VfU0laRSAoNDA5NikgYm91bmRhcnkpLgoKKiBGaXhlZCBjb21waWxhdGlvbiBmb3IgQVJNIHdoZW4gdXNpbmcgYSAoc3RhbmRhcmQpIGhhcmQtRlAgdG9vbGNoYWluCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDcgT2N0IDIwMDUKCiogQ2xlYW51cCB3YXJuaW5ncyBmb3IgY3B1L2FybTcyMHQgJiBjcHUvYXJtMTEzNiBmaWxlcy4KICBzZWQgdGhlIGxpbmtlciBzY3JpcHRzLCByYXRoZXIgdGhhbiBwcmUtcHJvY2VzcyB0aGVtLgogIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMDcgT2N0IDIwMDUKCiogVXBkYXRlIG1ha2UgdGFyZ2V0IGZvciBBUk0gc3VwcG9ydGVkIGJvYXJkcy4KICBVc2UgbG93bGV2ZWxfaW5pdCgpIGluc3RlYWQgb2YgcGxhdGZvcm1zZXR1cCgpIFtyZW5hbWVdLgogIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMDYgT2N0IDIwMDUKCiogRml4IGJvb3RpbmcgZnJvbSBzZXJpYWwgZGF0YWZsYXNoIG9uIEFUOTFSTTkyMDAKICBQYXRjaCBieSBQZXRlciBNZW56ZWJhY2gsIDI5IEF1ZyAyMDA1CgoqIEFkZCBKRkZTMiBzdXBwb3J0IGZvciBUUkFCIGJvYXJkCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjUgQXVnIDIwMDUKCiogUmVtb3ZlIHVubmVjZXNzYXJ5IGRlcGVuZGVuY3kgb2YgbmV0Y29uc29sZSBvbiBDT05GSUdfTkVUX01VTFRJCiAgUGF0Y2ggYnkgTWFyY3VzIEhhbGwsIDI0IEF1ZyAyMDA1CgoqIEZpeCB0aGUgbWFjaGluZS1pZCBvZiB0aGUgQ29nZW50IGNzYjYzNyBib2FyZAogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA1IE9jdCAyMDA1CgoqIENvbXBsZXRlIHN1cHBvcnQgZm9yIHRoZSBLd2lrQnl0ZSBLQjkyMHggYm9hcmRzCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDUgT2N0IDIwMDUKCiogU2V0IHRoZSBBVDkxUk05MjAwIGNsb2NrIHRvIGFzeW5jaHJvbm91cyBtb2RlCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDMgTWF5IDIwMDUKCiogU2V0IHRoZSBBVDkxUk05MjAwIGNsb2NrIHRvIHN5bmNocm9ub3VzIG1vZGUKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IGNzYjYzNwogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI5IEFwciAyMDA1CgoqIEZpeCBkbTkxNjEuYyBpbml0aWFsaXphdGlvbgogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI5IEFwciAyMDA1CgoqIEZpeCBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDAyIE1hciAyMDA1CiAgKDhlMmJlNTFkZThkZDAzYzFjZTRkMDZjYmIxOGFkMDYxMzNkNDdjZDUpCgoqIE1vdmUgZG05MTYxLmMgYW5kIGx4dDk3Mi5jIGludG8gY3B1L2FybTkyMHQvYXQ5MXJtOTIwMAogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI5IEFwciAyMDA1CgoqIEZpeCBkZXZpY2UgcGFydGl0aW9uIGludGlhbGl6YXRpb24gZm9yIFN5c3RlbUFDRSBkaXNrcy4KICBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAyOCBBcHIgMjAwNQoKKiBBZGRlZCBzdXBwb3J0IGZvciBLd2lrQnl0ZSBLQjkyMHggYm9hcmRzIChiYXNlZCBvbiBBVDkxUk05MjAwKQogIFBhdGNoIGJ5IE1hdHQgPz8gPGtiOTIwMF9kZXZAa3dpa2J5dGUuY29tPiwgMjcgQXByIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIFMyOUdMMDY0TS1SMyBmbGFzaCBjaGlwIG9uIHhzZW5naW5lIGJvYXJkCiAgUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDE4IEFwciAyMDA1CgoqIEU1MDAgdXBkYXRlOiByZXBvaW50IElWUFIgdG8gUkFNIHdoZW4gY29kZSBpcyByZWxvY2F0ZWQKICBQYXRjaCBieSBLeWxvIEdpbnNiZXJnLCAxMyBBcHIgMjAwNQoKKiBGaXggbG9vcCBlbmQgdGVzdCBpbiBsaWJfZ2VuZXJpYy9zdHJpbmcuYzpzdHJzd2FiKCkKICBQYXRjaCBieSBBbmRyZXcgRHllciwgT2N0b2JlciAxMCwgMjAwNQogIFNpZ25lZC1vZmYtYnk6IEFuZHJldyBEeWVyIDxhbWR5ZXJAZ21haWwuY29tPgoKKiBDbGVhbnVwCgoqIFVwZGF0ZSBBUk0gSW50ZWdyYXRvciBib2FyZHM6CiAgQ29ycmVjdCBhZGRlc3NpbmcgZXJyb3JzIGluIHBsYXRmb3JtIGZpbGVzLgogIFNwbGl0IG9mZiBjb21tb24gY29yZSBtb2R1bGUgZGF0YSBmcm9tIEludGVncmF0b3IgaGVhZGVyIGZpbGVzIHRvCiAgaW5jbHVkZS9hcm1jb3JlbW9kdWxlLmguCiAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAwNCBPY3QgMjAwNQoKKiBNYWtlIHN1cmUgb25seSBzdXBwb3J0ZWQgY29tcGlsZXIgb3B0aW9ucyBhcmUgdXNlZAogIEltcG9ydCAiY2Mtb3B0aW9uIiBzaGVsbCBmdW5jdGlvbiBmcm9tIGtlcm5lbCBhbmQKICB1c2UgaXQgdG8gZ2V0IHRoZSBjb3JyZWN0IEFSTSBHQ0Mgb3B0aW9ucyBmb3IgaW5kaXZpZHVhbCBDUFVzCiAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAzMCBKdW4gMjAwNQoKKiBGaXggNDQwR1IgdG8gcHJpbnQgY29ycmVjdCBjcHUgcmV2aXNpb24KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA0IE9jdCAyMDA1CgoqIENoYW5nZSBib2FyZCBtZXNzYWdlIG9uIEFNQ0MgWW9zZW1pdGUgJiBZZWxsb3dzdG9uZSB0byBjb21tb24gc3R5bGUKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAzIE9jdCAyMDA1CgoqIEZpeCBjb21waWxlciB3YXJuaW5nCgoqIEZpeCBGRUMgUEhZIGFkZHJlc3NlcyBmb3IgVFFNODV4eCBib2FyZHMKCiogRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcHJvYmxlbSBpbiBodXNoIHNoZWxsCiAgUGF0Y2ggYnkgTGFycyBSb3N0b2NrLCAyNiBTZXAgMjAwNQoKKiBVbmRvIGNoYW5nZSBvZiBmNmUyMGZjNmNhLi4uIHRvIGluY2x1ZGUvY29uZmlncy90cmFiLmgKICAoTXVzdCBoYXZlIGJlZW4gYW4gYWNjaWRlbnQ/KQoKKiBBZGQgc3VwcG9ydCBmb3IgQVQ5MVJNOTIwMCBPSENJIENvbnRyb2xsZXIuCiAgUGF0Y2ggYnkgRXJpYyBCZW5hcmQsIDA3IEFwciAyMDA1CgoqIFVwZGF0ZSBBUk0gbWFjaC10eXBlcy5oCiAgUGF0Y2ggYnkgRXJpYyBCZW5hcmQsIDA3IEFwciAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBNUDJVU0IgYm9hcmQuCiAgUGF0Y2ggYnkgRXJpYyBCZW5hcmQsIDA3IEFwciAyMDA1CgoqIEFkZCBib2FyZCBzdXBwb3J0IGZvciBhcm1hZGlsbG8gSFQxMDcwCiAgUGF0Y2ggYnkgUm93ZWwgQXRpZW56YSwgMDYgQXByIDIwMDUKCiogU2Vjb25kIEV0aGVybmV0IGFkZHJlc3MgZW5hYmxlZCBmb3IgTVBDODg1QURTIGFuZCBNUEM4MjcyQURTLgogIFBhdGNoIGJ5IFZpdGFseSBCb3JkdWcsIDMwIE1hciAyMDA1CgoqIEFkZCBpb3BzZXQgY29tbWFuZCBvbiBtcGM4eHgKICBQYXRjaCBieSBEYW5pZWwgRWlzZW5odXQsIDI1IE1hciAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBNSUkgaW4gZWVwcm8xMDAgZHJpdmVyLgogIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMjEgTWFyIDIwMDUKCiogRml4ZXMgdG8gdGhlIEx1YmJvY2sgKFBYQSAyNXgpIHN1cHBvcnQ6CiAgLSBSZXNvbHZlIHRoZSBGSVhNRSB3aXRoIHJlc3BlY3QgdG8gc2F2aW5nIHRoZSB1LWJvb3QgZW52aXJvbm1lbnQuCiAgLSBNYWtlIHRoZSBkZWZhdWx0IGxvYWQgYWRkcmVzcyBsYW5kIGluIHJlYWwgbWVtb3J5LgogIC0gRml4IGxhbjkxYzk2IFNNQ197aW4sb3V0fXtiLHcsbH0oKSBtYWNyb3MKICBQYXRjaCBieSBEYXZpZCBCcm93bmVsbCwgMTAgTWFyIDIwMDUKCiogQWRkIEJhcmNvIFN0cmVhbWluZyBWaWRlbyBDYXJkIChTVkMpIGFuZCBTYW1wbGUgQ29tcHJlc3MgTmV0d29yayAoU0NOKSBib2FyZAogIFBhdGNoIGJ5IE1hcmMgTGVlbWFuLCAwNCBNYXIgMjAwNQoKKiBPTUFQMjQyeCBINCBib2FyZCB1cGRhdGUKICAtIGZpeCBmb3IgRVMyIGRpZmZlcmVuY2VzLgogIC0gc3dpdGNoIHRvIHVzaW5nIHRoZSBjZmlfZmxhc2ggZHJpdmVyLgogIC0gZml4IFNSQU0gYnVpbGQgYWRkcmVzcy4KICAtIGZpeCBmb3IgR1AgZGV2aWNlIG9wZXJhdGlvbi4KICAtIHVubG9jayBTUkFNIGZvciBHUCBkZXZpY2VzLgogIC0gZGlzcGxheSBtb3JlIGRldmljZSBpbmZvcm1hdGlvbi4KICAtIGZpeCBwb3RlbnRpYWwgZGVhZGxvY2sgaW4gb21hcDI0eHhfaTJjIGRyaXZlci4KICAtIGZpeCBETEwgbG9hZCB2YWx1ZXMgdG8gbWF0Y2ggZHBsbG91dCoxIG9wZXJhdGlvbi4KICAtIGZpeCAybmQgY2hpcCBzZWxlY3QgaW5pdCBmb3IgY29tYm8gRERSIGRldmljZS4KICAtIGFkZCBzdXBwb3J0IGZvciBDRkkgSW50ZWwgMjhGMjU2TDE4IG9uIEg0IGJvYXJkLgogIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDAzIE1hciAyMDA1CgoqIEZpeCBmb3JtYXRpbmcgaW4gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9BVDkxUk05MjAwLmgKICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwMiBNYXIgMjAwNQoKKiBGaXggdHlwbyBpbiBldGguYwogIFBhdGNoIGJ5IEFyYSBBdmFuZXN5YW4sIDI0IEZlYiAyMDA1CgoqIFJlbW92ZSB1bm5lZWRlZCAjaW5jbHVkZSA8bWFsbG9jLmg+CiAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDIyIEZlYiAyMDA1CgoqIEFkZCBjcmFtZnMgc3VwcG9ydCBmb3IgbTY4awogIFBhdGNoIGJ5IFphY2hhcnkgTGFuZGF1LCAyMSBGZWIgMjAwNQoKKiBVcGRhdGUgZXA4MjYwOiBGaXggZmxhc2ggdGltZW91dHM7IGltcHJvdmUgY2xvY2sgcmVzb2x1dGlvbiBmb3IgZmFzdGVyIFVBUlRzCiAgUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDIxIEZlYiAyMDA1CgoqIEZpeCBhdTF4MDBfc2VyaWFsIGJhdWQgcmF0ZSBjYWxjdWxhdGlvbjoKICByZW1vdmUgaGFyZGNvZGVkIGNwdSBjbG9jayBkaXZpc29yIGFuZCB1c2UgcmVnaXN0ZXIgaW5zdGVhZDsKICByb3VuZCB1cCBpbnN0ZWFkIG9mIHRydW5jYXRlCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDE1IEZlYiAyMDA1CgoqIEFkZCBYaWxpbnggU3BhcnRhbjMgZmFtaWx5IEZQR0Egc3VwcG9ydAogIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAxNCBGZWIgMjAwNQoKKiBGaXggZHJpdmVycy9jZmlfZmxhc2guYzogdXNlIGluZm8tPnJlc2V0X2NtZCBpbnN0ZWFkIG9mIEZMQVNIX0NNRF9SRVNFVAogIFBhdGNoIGJ5IFphY2hhcnkgTGFuZGF1LCAxMSBGZWIgMjAwNQoKKiBGaXggVk9INDA1IFN1cHBvcnQKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjUgU2VwIDIwMDUKCiogQWRkZWQgc3VwcG9ydCBmb3IgUENJIGJyaWRnZSBvbiBNUEM4MjcyQURTCiAgUGF0Y2ggYnkgVml0YWx5IEJvcmR1ZywgRmViIDA5IDIwMDUKCiogVXBkYXRlIG11bHRpY29yZSBDTTlYWCBzdXBwb3J0IGZvciBJbnRlZ3JhdG9yIEFQIHRvIGFsbG93IGJvb3RpbmcgZnJvbSBmbGFzaAogIFBhdGNoIGJ5IEplYW4tUGF1bCBTYW1hbiwgOCBGZWIgMjAwNQoKKiBGaXggc3Ryc3dhYigpIHRvIHJlbGlhYmx5IGZpbmQgZW5kIG9mIHN0cmluZwogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAwOCBGZWIgMjAwNQoKKiBGaXggdHlwb3MgaW4gaW5jbHVkZS9wcGM0NDAuaAogIFBhdGNoIGJ5IEFuZHJldyBFIE1pbGVza2ksIDA0IEZlYiAyMDA1CgoqIEFkZCBWaWJyZW4gKHdhcyBBY2NlbGVudCkgUFhBMjU1IElEUCBTdXBwb3J0CiAgUGF0Y2ggYnkgQ2xpZmYgQnJha2UsIDA0IEZlYiAyMDA1CgoqIEZpeCB0b29scy9ibXBfbG9nby5jIHVzaW5nIGluY29ycmVjdCBvZmZzZXQgdG8gcGl4ZWwgZGF0YQogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAzMSBKYW4gMjAwNQoKKiBBZGQgQVJNOTQ2RSBjcHUgYW5kIGNvcmUgbW9kdWxlIHRhcmdldHM7IHJlbWFwIG1lbW9yeSB0byAweDAwMDAwMDAwCiAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAyIEZlYiAyMDA1CgoqIEZpeCBlcnJvciBoYW5kbGluZyBpbiB0b29scy9lbnYvZndfZW52LmMKICBQYXRjaCBieSBBcmEgQXZhbmVzeWFuLCAwMSBGZWIgMjAwNQoKKiBGaXggTUdUNTEwMCBQU0MgYmF1ZHJhdGUgY2FsY3VsYXRpb24KICBQYXRjaCBieSBTZWJhc3RpYW4gU2NoYXUsIDI3IEphbiAyMDA1CgoqIE9NQVAyNDJ4IGZpeCBmb3IgR1AgZGV2aWNlIGJvb3RpbmcKICAtIEFkZCBTUkFNIHVubG9jayBmb3IgR1AgZGV2aWNlcy4KICAtIENoYW5nZSBERFIgRExMIHVubG9jayB2YWx1ZSB0byBhbGxvdyBEUExMb3V0KjEgb3BlcmF0aW9uLgogIFBhdGNoZXMgYnkgUmljaGFyZCBXb29kcnVmZiwgMjEgSmFuIDIwMDU6CgoqIEFkZCBzdXBwb3J0IGZvciBBTUQncyBQYjF4MDAgZXZhbCBib2FyZDsKICBhZGQgTUlJIHJvdXRpbmVzIHRvIHRoZSBhdTF4MDAgZXRoZXJuZXQgZHJpdmVyOwogIGFkZCBVU0Igb2hjaSBkcml2ZXIgKHdvcmsgaW4gcHJvZ3Jlc3MpCiAgUGF0Y2ggYnkgVGhvbWFzIFNhaWxlciwgMjAgSmFuIDIwMDUKCiogVXBkYXRlIG9tYXA1OTEyb3NrIGJvYXJkCiAgVXNlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgaW5zdGVhZCBvZiBwcml2YXRlIGZsYXNoIGRyaXZlcjsKICBSZW1vdmUgaGFyZGNvZGVkIHBlcnNvbmFsaXplZCBzZXR0aW5ncyBmcm9tIG9tYXA1OTEyb3NrLmg7CiAgRml4IHNwYWNpbmcgd2l0aCAoUk8pIG1hcmtzIGluICdmbGluZm8nIG91dHB1dC4KICBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAxNCBKYW4gMjAwNQoKKiBGaXggd2FybmluZ3MgZm9yIFBDSSBjb2RlIG9uIGl4cAogIFBhdGNoIGJ5IEpvZSA8bGd4dWVAeWFob28uY29tPiwgMTMgSmFuIDIwMDUKCiogdmlydGV4MiBmaXggZm9yIGJvZ3VzIGRvd25sb2FkIGVycm9yIG1lc3NhZ2VzCiAgVGhlIHZpcnRleDIgRlBHQSBkb3dubG9hZCBjb2RlIHdhdGNoZXMgZm9yIGluaXQgZ29pbmcgYWN0aXZlIGR1cmluZwogIGEgZG93bmxvYWQgb2YgY29uZmlnIGRhdGEgYXMgYW4gZXJyb3IgY29uZGl0aW9uLiBpbml0IGFsc28gZ29lcwogIGFjdGl2ZSBhZnRlciBhIGNvbmZpZ3VyYXRpb24gaXMgZmluaXNoZWQgaW4gY29uY2VydCB3aXRoIHRoZSBkb25lCiAgc2lnbmFsLiBTbyBmYXIsIHRoZSBjb2RlIGRvZXMgbm90IGNoZWNrIGZvciBkb25lIGFjdGl2ZSB1bnRpbCBhbGwKICBvZiB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGlzIHNlbnQuIElmIGNvbmZpZ3VyYXRpb24gZGF0YSBoYXMgYSBmZXcKICBleHRyYSBwYWQgYnl0ZXMgYXQgdGhlIGVuZCwgdGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvciBtZXNzYWdlIGV2ZW4KICB0aG91Z2ggdGhlIGRvd25sb2FkIGhhZCBzdWNlZWRlZC4KICBOT1RFOiB2aXJ0ZXgyIHNsYXZlIHNlcmlhbCBhbmQgc3BhcnRhbjIgdmVyc2lvbnMgbWF5IHN0aWxsIGhhdmUgdGhlCiAgc2FtZSBwcm9ibGVtLgogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxMiBKYW4gMjAwNQoKKiBPcHRpbWl6ZSBmbGFzaF9tYWtlX2NtZCBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jIGZvciBsaXR0bGUgZW5kaWFuCiAgRml4ICJXQVJOSU5HOiBmbGFzaF9tYWtlX2NtZDogdW5zdXBwcG9ydGVkIExpdHRsZUVuZGlhbiBtb2RlIgogIG1lc3NhZ2Ugd2hlbiBwcm9iaW5nIGZvciBub25leGlzdGVudCBmbGFzaCBpbiBsaXR0bGUgZW5kaWFuIG1vZGUuCiAgQXMgYSBzaWRlIGVmZmVjdCBtb3JlIGVmZmljaWVudCBhbmQgc21hbGxlciBjb2RlIGlzIGdlbmVyYXRlZCwKICB3aGljaCBpcyBhbHdheXMgYSBHb29kIFRoaW5nIChUTSkuCiAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDI0IFNlcCAyMDA1CgoqIFVwZGF0ZSBmb3IgVEZUUCB1c2luZyBhIGZpeGVkIFVEUCBwb3J0CiAgVXNlIHRoZSBhcHByb3ZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcy4gQWRkZWQgInRmdHBkc3RwIiB0bwogIGFsbG93IHBvcnRzIG90aGVyIHRoYW4gNjkgcGVyIFRvbHVuYXkgT3JrdW4ncyByZWNvbW1lbmRhdGlvbi4KICBQYXRjaCBieSBKZXJyeSBWYW4gQmFyZW4sIDEyIEphbiAyMDA1CgoqIEFsbG93IHRvIGZvcmNlIFRGVFAgdG8gdXNlIGEgZml4ZWQgVURQIHBvcnQKICAoQWRkIGEgY29uZmlndXJhdGlvbiBvcHRpb24gQ09ORklHX1RGVFBfUE9SVCBhbmQgb3B0aW9uYWwgZW52CiAgdmFyaWFibGUgdGZ0cHBvcnQpCiAgUGF0Y2ggYnkgSmVycnkgVmFuIEJhcmVuLCAxMCBKYW4gMjAwNQoKKiBGaXggZXRoZXJuZXQgdGltZW91dHMgb24gZGJhdTE1NTAgYW5kIG90aGVyIGF1MXgwMCBzeXN0ZW1zCiAgUGF0Y2ggYnkgTGVpZiBMaW5kaG9sbSwgMjkgRGVjIDIwMDQKCiogQ2xlYW51cDogZml4IGJyb2tlbiBidWlsZHMKCiogRml4IFBIWSBhZGRyZXNzIGFyZ3VtZW50IHBhc3Npbmcgd2l0aCBtaWkgaW5mbyBjb21tYW5kCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI4IERlYyAyMDA0CgoqIENsZWFudXAgKFBQQzR4eCBpcyBBTUNDIG5vdykKCiogZXNkIENQQ0kyRFAgYm9hcmQgYWRkZWQKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjIgU2VwIDIwMDUKCiogZXNkIFBNQzQwNSBib2FyZCB1cGRhdGVkCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDIyIFNlcCAyMDA1CgoqIEFkZCBTTTUwMSBzdXBwb3J0IHRvIEhINDA1IGJvYXJkLgogIEFkZCBzdXBwb3J0IGZvciBnemlwIGNvbXByZXNzZWQgYm1wJ3MgKENPTkZJR19WSURFT19CTVBfR1pJUCkuCiAgQWRkIHN1cHBvcnQgZm9yIGVlcHJvbSB3cml0ZS1lbmFibGUgKENGR19FRVBST01fV1JFTikuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMiBTZXAgMjAwNQoKKiBGaXggYXV0b25lZ290aWF0aW9uIGluIHRzZWMgZXRoZXJuZXQgZHJpdmVyCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMSBTZXAgMjAwNQoKKiBGaXggYnVnIGluIGF1dG9fdXBkYXRlICh0cmFiIGJvYXJkKQogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE2IFNlcCAyMDA1CgoqIEZpeCBjb21wdXRhdGlvbiBvZiBmcmFtZWJ1ZmZlciBwYWxldHRlIGZvciA4YnBwIExDRCBiaXRtYXBzCiAgUGF0Y2ggYnkgRnJhbmNlc2NvIE1hbmRyYWNjaSwgMTYgU2VwIDIwMDUKCiogVXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIElOS0E0eDAgYm9hcmQKCiogVXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIFBNODU0IGJvYXJkCiAgQmFzZWQgb24gcGF0Y2ggYnkgUi4gTG9lZmZsLCAyMCBKdWwgMjAwNQoKKiBBZGQgUENJIHN1cHBvcnQgdG8gVFFNODU0MCBhbmQgVFFNODU2MCBib2FyZHMKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IFNlcCAyMDA1CgoqIFVwZGF0ZSBBTUNDIFlvc2VtaXRlIHRvIGdldCBhIGNvbnNpc3RlbnQgc2V0dXAgZm9yIGFsbCBBTUNDIGV2YWwKICBib2FyZHMgKGJhdWRyYXRlLCBlbnZpcm9ubWVudC4uLikuIEZsYXNoIGRyaXZlciBmaXhlZC4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IFNlcCAyMDA1CgoqIEZpeCBwcm9ibGVtIGluIDQ0MEdQIGV0aGVybmV0IGRyaXZlciAoZWJvbnkpLiBBZGQgc3VwcG9ydCBmb3IgMm5kCiAgZXRoZXJuZXQgcG9ydCBvbiBlYm9ueS4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDcgU2VwIDIwMDUKCiogQWRkZWQgc3VwcG9ydCBmb3IgbXRkZGV2bnVtIGFuZCBtdGRkZXZuYW1lIHZhcmlhYmxlcyAobXRkcGFydHMgY29tbWFuZCkKCiogQ2hhbmdlIGRlZmF1bHQgY29uc29sZSBiYXVkIHJhdGUgZm9yIHN0eHh0YyBib2FyZAoKKiBBZGQgSTJDIHN1cHBvcnQgdG8gVFFNODU0MCBhbmQgVFFNODU2MCBib2FyZHMgKEVFUFJPTSwgUlRDLCBMTTc1LURUVCkuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMSBBdWcgMjAwNQoKKiBGaXggZGVmYXVsdCBjb21tYW5kIHNldCAoZG9uJ3QgaW5jbHVkZSBDRkdfQ01EX0RJU1BMQVkgY29tbWFuZCkKICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDIgU2VwIDIwMDUKCiogQ2xlYW51cAoKKiBFbmFibGUgU003MTIgZHJpdmVyIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQuCgoqIEZpeCBwcm9ibGVtcyB3aXRoIGxkIHZlcnNpb24gMi4xNiAoZG90IG91dHNpZGUgc2VjdGlvbnMgcHJvYmxlbSkKICBQb2ludGVkIG91dCBieSBHZXJoYXJkIEphZWdlciwgMzEgQXVnIDIwMDU7CiAgY2YuIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9iaW51dGlscy8yMDA1LTA4L21zZzAwNDEyLmh0bWwKCiogUHJlcGFyZSBVLUJvb3QgZm9yIGdjYy00Lng6IGZpeCBnbG9iYWwgZGF0YSBwb2ludGVyIGluaXRpYWxpemF0aW9uCgoqIEFkanVzdCBDUzMgdGltaW5ncyBvbiBITUkxMDAxIGJvYXJkIGZvciBkb3QgbWF0cml4IGRpc3BsYXkgdW5kZXIgTGludXgKCiogQWRkIGtleWJvYXJkIGFuZCBkb3QgbWF0cml4IGRpc3BsYXkgc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZC4KCiogUHJlcGFyZSBVLUJvb3QgZm9yIGdjYy00LngKCiogRml4ZWQgQmFtYm9vIHBvcnQgdG8gZW5hYmxlIHJ1bm5pbmcgd2l0aG91dCBERFItRElNTQogIChCYW1ib28gaGFzIGFsc28gNjRNQiBvbmJvYXJkIEREUikKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI0IEF1ZyAyMDA1CgoqIE1lcmdlZCA0MDVncF9lbmV0LmMgYW5kIDQ0MGd4X2VuZXQuYyB0byBnZW5lcmljIDR4eF9lbmV0LmMKICBub3cgaGFuZGxpbmcgYWxsIDR4eCBjcHUncwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgQXVnIDIwMDUKCiogRml4IG1ha2UgZGVwZW5kZW5jaWVzIGZvciBhdDkxcm05MjAwIGFuZCBrczg2OTUgY3B1cwogIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIzIEF1ZyAyMDA1CgoqIEFkZCBKRkZTMiBzdXBwb3J0IGZvciBUUU01MjAwIGJvYXJkCgoqIEFkZCBlc2QgY3BjaTUyMDAgYW5kIHBmNTIwMCBib2FyZHMKICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCAyMiBBdWcgMjAwNQoKKiBGaXggc3lzY2xvY2sgZm9yIFRRTTg1NDAgYW5kIFRRTTg1NjAgYm9hcmRzCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjUgSnVsIDIwMDUKCiogSW5pdGlhbGl6ZSBzZXJpYWwjIGFuZCBldGhhZGRyIGZyb20gbWFudWZhY3R1cmVyIGRhdGEgaW4gRUVQUk9NIG9uIENNQy1QVTIKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOCBKdW4gMjAwNQoKKiBBZGQgbmV3IGJvYXJkIHNwZWNpZmljIGNvbW1hbmRzIGZvciBUUU01MjAwL1NUSzUyWFgKICAtIFNvdW5kIGNvbW1hbmRzIChiZWVwLCB3YXYsIHNvdW5kKQogIC0gVGVzdCBjb21tYW5kcyAobGVkLCBjYW4sIGJhY2tsaWdodCwgcnMyMzIpCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDIgTWF5IDIwMDUKCiogQ2hhbmdlIG1haW4gY2xvY2sgb24gQ01DLVBVMiBib2FyZCBmcm9tIDIwNyBNSHogdG8gMTc5IE1IegogIGJlY2F1c2Ugb2YgYSBidWcgaW4gdGhlIEFUOTFSTTkyMDAgQ1BVIFBMTAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIyIEFwciAyMDA1CgoqIEFkZCBhdXRvbWF0aWMgSFcgZGV0ZWN0aW9uIGZvciBhbm90aGVyIENNQ19QVTIgdmFyaWFudAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIwIEFwciAyMDA1CgoqIFJlbW92ZSBDT05GSUdfQVQ5MVJNOTIwMERLIGluIENNQy1QVTIgY29uZmlndXJhdGlvbgogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE5IEFwciAyMDA1CgoqIEZpeCBpbml0aWFsaXphdGlvbiBwcm9ibGVtIG9uIFRRTTUyMDAgd2l0aG91dCBTTTUwMQogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA4IEFwciAyMDA1CgoqIEFkZCBSVEMgc3VwcG9ydCBmb3IgU1RLNTJYWC4yMDAKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNyBBcHIgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgSUZNIG8yZG50IGJvYXJkCgoqIEVuYWJsZSBQQ0kgb24gaG1pMTAwMSBib2FyZAoKKiBGaXggcmV0dXJuIHZhbHVlcyBvZiB0aGUgamZmczIgY29tbWFuZHMgbHMvZnNsb2FkL2ZzaW5mbywKICBzbyB3ZSBjYW4gdXNlIHRoZW0gdG8sIGUuZy4sIGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBmaWxlIHdpdGgKICAiaWYgbHMgZm9vOyB0aGVuIHRoaXM7IGVsc2UgdGhhdDsgZmkiIGluIHRoZSBodXNoIHNoZWxsCiAgUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTYgQXVndXN0IDIwMDUKCiogQ29kaW5nIHN0eWxlIGNsZWFudXAKCiogQWRkIHN1cHBvcnQgZm9yIFNpbGljb24gVHVybmtleSBlWHByZXNzIFhUYyAobXBjODd4Lzg4eCkgYm9hcmQuCiAgUGF0Y2ggYnkgRGFuIE1hbGVrIGFuZCBQYW50ZWxpcyBBbnRvbmlvdSwgMTUgQXVnIDIwMDUKCiogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIG1hbGxvYyBpbiA0NDBneF9lbmV0LmMKICBQYXRjaCBieSBUcmF2aXMgQi4gU2F3eWVyLCAxOCBKdWwgMjAwNQoKKiBBZGQgU2FuZGJ1cnN0IE1ldHJvYm94IGFuZCBTYW5kYnVyc3QgS2FyZWYgYm9hcmQgc3VwcG9ydCBwYWNrYWdlcy4KICBTZWNvbmQgc2VyaWFsIHBvcnQgb24gNDQwR1ggbm93IGRlZmluZWQgYXMgYSBzeXN0ZW0gZGV2aWNlLgogIEFkZCAnU2hvcnQgRXRjaCcgY29kZSBmb3IgQ2ljYWRhIFBIWSB3aXRoaW4gNDQwZ3hfZW5ldC5jCiAgUGF0Y2ggYnkgVHJhdmlzIEIuIFNhd3llciwgMTIgSnVsIDIwMDUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4zOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIE1pbm9yIGNvZGUgY2xlYW51cAoKKiBBZGQgZm9yZ290dGVuIG5ldyBmaWxzIGZyb20gbGF0ZXN0IFZvaWNlQmx1ZSB1cGRhdGUKCiogTWFrZSBib290cmV0cnkgZmVhdHVyZSB3b3JrIHdpdGggaHVzaCBzaGVsbC4KICBDYXZlYXQ6IHRoaXMgY3VycmVudGx5ICpyZXF1aXJlcyogQ09ORklHX1JFU0VUX1RPX1JFVFJZIHRvIGJlIHNldCwgdG9vLgogIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDE5IEp1bCAyMDA1CgoqIFVwZGF0ZSBIeW1vZCBCb2FyZCBEYXRhYmFzZSBQSFAgY29kZSBpbiAidG9vbHMiIGRpcmVjdG9yeQogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDAxIEp1bCAyMDA1CgoqIE1ha2UgInRyIiBjb21tYW5kIHVzZSBQT1NJWCBjb21wbGlhbnQ7IGV4cG9ydCBIT1NUT1MgbWFrZSB2YXJpYWJsZQogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDMwIEp1biAyMDA1CgoqIEZpeCBNdXJyYXkgSmVuc2VuJ3MgbWFpbCBhZGRyZXNzLgogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDMwIEp1biAyMDA1CgoqIFByZXNlcnZlIFBIWV9CTUNSIGR1cmluZyBhIHNvZnQgcmVzZXQuCiAgUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMjQgSnVuIDIwMDUKCiogVm9pY2VCbHVlIHVwZGF0ZTogZWVwcm9tIHRvb2wgY2FuIGFsc28gc3RvcmUgZmlybXdhcmUgdmVyc2lvbiBub3cuCiAgZWVwcm9tLmJpbiBpcyBydW5hYmxlIGJ5IGp1bXBpbmcgYXQgbG9hZCBhZGRyZXNzLgogIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyMyBNYXkgMjAwNQoKKiBNb3ZlIHRoZSBBVDkxUk05MjAwREsgdG8gdGhlIEFSTSBTeXN0ZW1zIGxpc3QuCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjYgQXByIDIwMDUKCiogRWxpbWluYXRlIGNhbGxzIG9mIEFSTSBsaWJnY2MuYSBoZWxwZXIgZnVuY3Rpb25zIF9kaXZzaTMgYW5kIF9tb2RzaTMKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyNiBBcHIgMjAwNQoKKiBtZWFzdXJlX2djbGsoKSBpcyBuZWVkZWQgd2hlbiBERUJVRyBpcyBlbmFibGVkCiAgUGF0Y2ggYnkgQnJ5YW4gTydEb25vZ2h1ZSwgMjUgQXByIDIwMDUKCiogQWRkIFVQRC1DaGVja3N1bSBjb2RlLCBmaXggcHJvYmxlbSBpbiBuZXQuYyAocmV0dXJuIGluc3RlYWQgb2YgYnJlYWspCiAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgMTIgQXVnIDIwMDUKCiogZXNkIFBDSTQwNSBib2FyZCB1cGRhdGVkCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI4IEp1bCAyMDA1CgoqIGVzZCBXVUg0MDUgYW5kIERVNDA1IGJvYXJkIHVwZGF0ZWQKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjcgSnVsIDIwMDUKCiogRml4IHByb2JsZW0gaW4gY21kX25hbmQuYyAob25seSB3aGVuIGRlZmluZWQgQ0ZHX05BTkRfU0tJUF9CQURfRE9UX0kpCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDQgTWF5IDIwMDUKCiogVXBkYXRlIEFNQ0MgWW9zZW1pdGUgdG8gZ2V0IGEgY29uc2lzdGVudCBzZXR1cCBmb3IgYWxsIEFNQ0MgZXZhbAogIGJvYXJkcyAoYmF1ZHJhdGUsIGVudmlyb25tZW50Li4uKS4gRmxhc2ggZHJpdmVyIGZpeGVkLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgQXVnIDIwMDUKCiogQ2hhbmdlZCBBTUNDIEJ1YmluZ2EgKDQwNUVQKSBjb25maWd1cmF0aW9uIHRvIHN1cHBvcnQgMm5kIGV0aCBwb3J0CiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBBdWcgMjAwNQoKKiBBZGQgTkFORCBGTEFTSCBzdXBwb3J0IGZvciBBTUNDIEJhbWJvbyA0NDBFUCBldmFsIGJvYXJkCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBBdWcgMjAwNQoKKiBBZGQgY29uZmlndXJhdGlvbiBmb3IgSUZNIEFFViBGSUZPIGJvYXJkLgogIE1pbm9yIGNvZGluZyBzdHlsZSBjbGVhbnVwLgoKKiBBZGQgY29uZmlndXJhdGlvbiBmb3IgSUZNIFNQSSBldmFsIGJvYXJkCgoqIEZpeCBDb21wYWN0Rmxhc2ggcHJvYmxlbSBvbiBITUkxMDAxIGJvYXJkCgoqIE1ha2UgbmV3ICJtdGRwYXJ0cyIgY29kZSBidWlsZCB3aXRoIG9sZGVyIGNvbXBpbGVycwogIFBhdGNoIGJ5IEFuZHJlYSBTY2lhbiwgMDkgQXVnIDIwMDUKCiogQ2hhbmdlZCBDT05GSUdfNDQwX0dYLCBDT05GSUdfNDQwX0VQIGFuZCBDT05GSUdfNDQwX0dSIG9wdGlvbnMgdG8KICBDT05GSUdfNDRHWCwgQ09ORklHXzQ0MEVQIGFuZCBDT05GSUdfNDQwR1IgZm9yIGEgY29uc2lzdGVudCBkZXNpZ24KICB3aXRoIHRoZSA0MDUgZGVmaW5lcyBhbmQgdGhlIGxpbnV4IGtlcm5lbCBkZWZpbmVzLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDggQXVnIDIwMDUKCiogRml4IGNvbXBpbGVyIHdhcm5pbmdzIHdpdGggb2xkZXIgR0NDIHZlcnNpb25zCgoqIEFkZCBjb21tb24gKHdpdGggTGludXgpIE1URCBwYXJ0aXRpb24gc2NoZW1lIGFuZCAibXRkcGFydHMiIGNvbW1hbmQKCiAgT2xkLCBvYnNvbGV0ZSBhbmQgZHVwbGljYXRlZCBjb2RlIHdhcyBjbGVhbmVkIHVwIGFuZCByZXBsYWNlIGJ5IHRoZQogIG5ldyBwYXJ0aXRpb25pbmcgbWV0aG9kLiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGFwcHJvYWNoZXMgbm93OgoKICBUaGUgZmlyc3Qgb25lIGlzIHRvIGRlZmluZSBhIHNpbmdsZSwgc3RhdGljIHBhcnRpdGlvbjoKCiAgI3VuZGVmIENPTkZJR19KRkZTMl9DTURMSU5FCiAgI2RlZmluZSBDT05GSUdfSkZGUzJfREVWCQkgIm5vcjAiCiAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCSAweEZGRkZGRkZGCS8qIHVzZSB3aG9sZSBkZXZpY2UgKi8KICAjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUJIDB4MDAxMDAwMDAJLyogdXNlIDFNQiAqLwogICNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfT0ZGU0VUCSAweDAwMDAwMDAwCgogIFRoZSBzZWNvbmQgbWV0aG9kIHVzZXMgdGhlIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kIGR5bmFtaWMKICBwYXJ0aXRpb25pbmc6CgogIC8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCiAgI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQogICNkZWZpbmUgTVRESURTX0RFRkFVTFQJICJub3IxPXp1bWEtMSxub3IyPXp1bWEtMiIKICAjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJICJtdGRwYXJ0cz16dW1hLTE6LShqZmZzMiksenVtYS0yOi0odXNlcikiCgogIENvbW1hbmQgbGluZSBvZiBjb3Vyc2UgcHJvZHVjZXMgYmlnZ2VyIGltYWdlcywgYW5kIG1heSBiZSBpbmFwcHJvcHJpYXRlCiAgZm9yIHNvbWUgdGFyZ2V0cywgc28gYnkgZGVmYXVsdCBpdCdzIG9mZi4KCiogRml4IGJ1aWxkIHByb2JsZW1zIGZvciBQTTg1NiBCb2FyZAoKKiBGaXggc2lnbiBleHRlbnNpb24gYnVnIGluICdmcGdhIGxvYWRiJyBjb21tYW5kOwogIG1ha2UgJ2ZwZ2EgbG9hZGInIGFsd2F5cyBwcmludCB0aGUgZmlsZSBoZWFkZXIgaW5mbwogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxMSBKYW4gMjAwNQoKKiBGaXggZXJyb3JzIHRoYXQgb2NjdXIgd2hlbiBhY2Nlc3NpbmcgU3lzdGVtQUNFIENGCiAgUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDA5IEphbiAyMDA1CgoqIERvY3VtZW50IHN3aXRjaGluZyBiZXR3ZWVuIFUtQm9vdCBhbmQgUGxhbmV0Q29yZSBvbiBSUFhsaXRlCiAgYnkgU2FtIFNvbmcsIDI0IERlYyAyMDA0CgoqIEZpeCBQb3dlclFVSUNDIElJIG1hc2sgZGV0ZWN0aW9uLgogIFBhdGNoIGJ5IEV1Z2VuZSBTdXJvdmVnaW4sIDIwIERlYyAyMDA0CgoqIEFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTklPUyBESzFDMjAgYm9hcmQKICBQYXRjaCBieSBTaGxvbW8gS3V0LCAxMyBEZWMgMjAwNAoKKiBBZGQgc3VwcG9ydCBmb3IgZXA4MjQ4IGJvYXJkCiAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTIgRGVjIDIwMDQKCiAgTWlub3IgY29kZSBjbGVhbnVwLgoKKiBGaXggYmF1ZHJhdGUgc2V0dGluZyBmb3IgS0dEQiBvbiBNUEM4MjYwCiAgUGF0Y2ggYnkgSG9KaW4sIDExIERlYyAyMDA0CgoqIEZpeCAnbWlpIGhlbHAnIHRleHQgZm9ybWF0dGluZwogIFBhdGNoIGJ5IENvcnkgVHVzYXIsIDEwIERlYyAyMDA0CgoqIEZpeCByZXR1cm4gY29kZSBvZiBORlMgY29tbWFuZAogIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAxMSBEZWMgMjAwNAoKKiBGaXggdHlwbwoKKiBGaXggY29tcGlsZXIgd2FybmluZ3MgaW4gY3B1L3BwYzR4eC91c2JkZXYuYwogIFBhdGNoIGJ5IFN0ZXZlbiBCbGFrZXNsZWUsIDA0IEF1ZyAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBBTUNDIEJhbWJvbyBQUEM0NDBFUCBldmFsIGJvYXJkCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNCBBdWcgMjAwNQoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIKICBGaXggc3R5bGUgaXNzdWVzIHByaW1hcmlseSBpbiA4NXh4IGFuZCA4M3h4IGJvYXJkcy4KICAgIC0gQysrIGNvbW1lbnRzCiAgICAtIFRyYWlsaW5nIHdoaXRlIHNwYWNlCiAgICAtIEluZGVudGF0aW9uIG5vdCBieSBUQUIKICAgIC0gRXhjZXNzaXZlIGFtb3VudCBvZiBlbXB0eSBsaW5lcwogICAgLSBUcmFpbGluZyBlbXB0eSBsaW5lcwoKKiBQYXRjaCBieSBSb24gQWxkZXIsIDExIEp1bCAyMDA1CiAgICBBZGQgWGlhbmdodWEgWGlhbyBhbmQgTHVuc2hlbmcgV2FuZydzIHN1cHBvcnQgZm9yIHRoZQogICAgR0RBIE1QQzg1NDAgRVZBTCBib2FyZC4KCiogUGF0Y2ggYnkgRXJhbiBMaWJlcnR5CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgTVBDODM0OUFEUyBib2FyZC4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAyNSBKdWwgMjAwNQogIE1vdmUgdGhlIFRTRUMgZHJpdmVyIG91dCBvZiBjcHUvbXBjODV4eCBhcyBpdCB3aWxsIGJlIHNoYXJlZAogIGJ5IHRoZSB1cGNvbWluZyBtcGM4M3h4IGZhbWlseSBhcyB3ZWxsLgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDA1IE1heSAyMDA1CiAgSW1wbGVtZW50ZWQgc3VwcG9ydCBmb3IgTVBDODU0OENEUyBib2FyZC4KICBBZGRlZCBERFIgSUkgc3VwcG9ydCBiYXNlZCBvbiBTUEQgdmFsdWVzIGZvciBNUEM4NXh4IGJvYXJkcy4KICBUaGlzIHJvbGwtdXAgcGF0Y2ggYWxzbyBpbmNsdWRlcyBidWdmaWVzIGZvciB0aGUgcHJldmlvdXNseQogIHB1Ymxpc2hlZCBwYXRjaGVzOgogICAgRERSSUkgQ1BPLCBwcmUgZVRTRUMsIDg1NDggTEJJVSwgQW5keSdzIFRTRUMsIGVUU0VDIDMmNCBJL08KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxMCBGZWIgMjAwNQogIEFkZCBjb25maWcgb3B0aW9uIENPTkZJR19IQVNfRkVDIGNhbGxpbmcgb3V0IDg1NDAgRkVDIGZlYXR1cmVzLgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIEt1bWFyIEdhbGEsIDA4IEZlYiAyMDA1CiAgRm9yIE1QQzg1eHhDRFM6CiAgICBBZGRzIFJlbGF4ZWQgVGltaW5nIFRSTFggYml0IHRvIEZMQVNIIE9SeCByZWdzIHRvIGFsbG93CiAgICBmb3IgZmFzdGVyIGZsYXNoIHBhcnRzLgogICAgQWRkIGRvY3VtZW50YXRpb24gZm9yIEJSL09SIGZvciBGTEFTSC4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyIDA4IEZlYiAyMDA1CiAgRGV0ZXJtaW5lIEwyIENhY2hlIHNpemUgZHluYW1pY2FsbHkgb24gODVYWCBib2FyZHMuCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgS3VtYXIgR2FsYSAwOCBGZWIgMjAwNQogIC0gQ29udmVydCB0aGUgQ1BNMiBiYXNlZCBmdW5jdGlvbmFsaXR5IHRvIHVzZSBuZXcgQ09ORklHX0NQTTIKICAgIG9wdGlvbiByYXRoZXIgdGhhbiBhIG15cmlhZCBvZiBDT05GSUdfTVBDODU2MC1saWtlIHZhcmlhbnRzLgogICAgQXBwbGllcyB0byBNUEM4NXh4IGFuZCBNUEM4MjYwIGJvYXJkcywgaW5jbHVkZXMgc3R4Z3AzIGFuZCBzYmM4NTYwLgogICAgRWxpbWluYXRlcyB0aGUgQ09ORklHX01QQzg1NjAgb3B0aW9uIGVudGlyZWx5LiAgRGlzdHJpYnV0ZXMgdGhlCiAgICBuZXcgQ09ORklHX0NQTTIgb3B0aW9uIHRvIGVhY2ggODI2MCBib2FyZC4KCiogQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODU2IGJvYXJkCiAgUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAwMyBBdWcgMjAwNQoKKiBNaW5vciBmaXhlcyB0byBQTTg1NCBib2FyZAogIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDMgQXVnIDIwMDUKCiogQWRqdXN0IGNvbmZpZ3VyYXRpb24gb2YgWEVOSUFYIGJvYXJkCiAgKGNoaXAgc2VsZWN0IGFuZCBHUElPIHJlcXVpcmVkIGZvciBVU0Igb3BlcmF0aW9uKQoKKiBGaXggdHlwb3MgaW4gY3B1Lzg1eHgvc3RhcnQuUyB3aGljaCBjYXVzZWQgRGF0YVRMQiBleGNlcHRpb24gdG8gYmUKICByb3V0ZWQgdG8gdGhlIFdhdGNoZG9nIGhhbmRsZXIKICBQYXRjaCBieSBFdWdlbmUgU3Vyb3ZlZ2luLCAxOCBKdW4gMjAwNQoKKiAocmUpZW5hYmxlZCBzY3NpIGNvbW1hbmRzIGRvX3Njc2koKSBhbmQgZG9fc2NzaWJvb3QoKQogIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNiBEZWMgMjAwNAoKKiBGaXggZW5kaWFuZXNzIHByb2JsZW0gaW4gVEZUUCAvIE5GUyBkZWZhdWx0IGZpbGVuYW1lcwogIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAwNiBEZWMgMjAwNAoKKiBJZ25vcmUgYnJvYWRjYXN0IHN0YXR1cyBiaXQgaW4gcmVjZWl2ZWQgZnJhbWVzIGluIDgyNjAgRkNDIGV0aGVybmV0CiAgbG9vcGJhY2sgdGVzdCBjb2RlCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMTggSnVsIDIwMDUKCiogRml4IHR5cG8gaW4gbWtjb25maWcgc2NyaXB0ICh1c2VkID09IGluc3RlYWQgb2YgPSkKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxOCBKdWwgMjAwNQoKKiBDbGVhbnVwIGJ1aWxkIHByb2JsZW1zIG9uIDY0IGJpdCBidWlsZCBob3N0cwoKKiBVcGRhdGUgTUFJTlRBSU5FUlMgZmlsZQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAxIEF1ZyAyMDA1OgogIC0gTWFqb3IgY2xlYW51cCBmb3IgQU1DQyBldmFsIGJvYXJkcyBXYWxudXQsIEJ1YmluZ2EsIEVib255LCBPY290ZWEKICAgIChmb3JtZXIgSUJNIGV2YWwgYm9hcmQpLiBQbGVhc2Ugc2VlICJkb2MvUkVBRE1FLkFNQ0MtZXZhbC1ib2FyZHMtY2xlYW51cCIKICAgIGZvciBkZXRhaWxzLgogIC0gU3ljYW1vcmUgKFBQQzQwNUdQcikgZXZhbCBib2FyZCBhZGRlZCAoV2FsbnV0IHBvcnQgaXMgZXh0ZW5kZWQKICAgIHRvIHJ1biBvbiBib3RoIDQwNUdQIGFuZCA0MDVHUHIgZXZhbCBib2FyZHMpLgoKKiBQYXRjaCBieSBTdGV2ZW4gQmxha2VzbGVlLCAyNyBKdWwgMjAwNToKICAtIEFkZCBzdXBwb3J0IGZvciBBTUNDIFBQQzQ0MEVQL0dSLgogIC0gQWRkIHN1cHBvcnQgZm9yIEFNQ0MgWW9zZW1pdGUgUFBDNDQwRVAgZXZhbCBib2FyZC4KICAtIEFkZCBzdXBwb3J0IGZvciBBTUNDIFllbGxvd3N0b25lIFBQQzQ0MEdSIGV2YWwgYm9hcmQuCgoqIE1pbm9yIGZpeGVzIGZvciBQUENoYW1lbGVvbiBCb2FyZDoKICAtIGZpeCBhbGlnbm1lbnQgb2YgTkFORCBzaXplCiAgLSBtYWtlIGNvZGUgZG8gd2hhdCB0aGUgY29tbWVudCBzYXlzCgoqIEltcGxlbWVudCBoL3cgc2VjdG9yIHByb3RlY3Rpb24gc3RhdHVzIHN5bmNocm9uaXphdGlvbiBhdCBib290LgogIFRoZSBjb2RlIGlzIHByb3ZpZGVkIGZvciwgYW5kIHdhcyB0ZXN0ZWQgb24sIHRoZSBZdWtvbi9BbGFza2EKICBhbmQgUE01MjAgYm9hcmRzIG9ubHkuCgogIEEgYnVnIGluIGZsYXNoX3JlYWxfcHJvdGVjdCgpIGZvciB0aGUgWXVrb24gYm9hcmQgd2FzIGZpeGVkIGJ5CiAgYWRkaW5nIGEgZnVuY3Rpb24gdGhhdCB0ZWxscyBpZiB0d28gYmFua3MgYXJlIG9uIG9uZSBmbGFzaCBjaGlwLgoKKiBGaXggc3lzbW9uIFBPU1QgcHJvYmxlbTogY2hlY2sgSTJDIGVycm9yIGNvZGVzCiAgVGhpcyBmaXhlcyBhIHByb2JsZW0gb2YgZGlzcGxheWluZyBib2d1cyB2b2x0YWdlcyB3aGVuIHRoZSB2b2x0YWdlcwogIGFyZSBzbyBsb3cgdGhhdCB0aGUgSTJDIGRldmljZXMgc3RhcnQgZmFpbGluZyB3aGlsZSB0aGUgcmVzdCBvZiB0aGUKICBzeXN0ZW0ga2VlcHMgcnVubmluZy4KCiogUGF0Y2ggYnkgQ2VkcmljIFZpbmNlbnQsIDYgSnVsIDIwMDU6CiAgRml4IENGR19DTURfU0VUR0VURENSIGhhbmRsaW5nIGluICJjb21tb24vY21kX2Rjci5jIgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDIwIEp1bCAyMDA1OgogIEFkZCBtaXNzaW5nIFBDSSBJTyBwb3J0IGRlZmluaXRpb25zLgoKKiBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQuCgoqIEFkanVzdCBwcmludGVkIGJvYXJkIElEIGZvciBMV01PTiBib2FyZC4KCiogRml4IGxvdy1sZXZlbCBPSENJIHRyYW5zZmVycyBmb3IgQVJNOTIwdCBhbmQgTVBDNXh4eAoKKiBBZGQgbmV3IGFyZ3VtZW50IGZvcm1hdCBmb3IgZmxhc2ggY29tbWFuZHMgdG8gYWxsb3cgZm9yIHVzYWdlIGxpa2UKICAiZXJhc2UgJChhZGRyKSArJChmaWxlc2l6ZSkiLCBpLiBlLiBhIHNpemUgYXJndW1lbnQgY2FuIGJlIHVzZWQgYW5kCiAgVS1Cb290IHdpbGwgYXV0b21hdGljaWFsbHkgZmluZCB0aGUgZW5kIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNlY3Rvci4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA1IEp1bCAyMDA1OgogIFVwZGF0ZSB1YzEwMCBib2FyZCBQSFkgc2V0dXAKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxIEp1bCAyMDA1OgogIEZpeCBQSFkgYWRkcmVzcyBmb3IgQ0FUY2VudGVyIGJvYXJkIChub3cgY29ycmVjdCEpCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMzAgSnVuIDIwMDU6CiAgRml4IFBIWSBhZGRyZXNzZXMgZm9yIFBQQ2hhbWVsZW9uIGFuZCBDQVRjZW50ZXIgYm9hcmRzCiAgQ2hhbmdlIE1BSU5UQUlORVIgZm9yIG1vc3QgZXNkIGJvYXJkcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAzMCBKdW4gMjAwNToKICBGaXggTENEIGxvZ28gZm9yIGx3bW9uIGJvYXJkIHdoaWNoIGdvdCBsb3N0IGluIHRoZSBtZXJnZSBvZiA4eHggYW5kIFBYQSBMQ0QgY29kZQoKKiBGaXggYmF1ZHJhdGUgY2FsY3VsYXRpb24gcHJvYmxlbSBvbiBNUEM1MjAwIHN5c3RlbXMKCiogQWRkIEVFUFJPTSBhbmQgUlRDIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjAgSnVuIDIwMDU6CiAgRml4IGluaXRpYWxpemF0aW9uIG9mIGxvdyBhY3RpdmUgR1BJTyBwaW5zIG9uIGlua2E0eDAgYm9hcmQKCiogRW5hYmxlIHJlZHVuZGFudCBlbnZpcm9ubWVudCwgZGlzYWJsZSBIVyBmbGFzaCBwcm90ZWN0aW9uIG9mCiAgSE1JMTAwMSBib2FyZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxMCBKdW4gMjAwNToKICBJbml0aWFsaXplIGFsbG9jYXRlZCBkZXYgYW5kIHByaXZhdGUgaHcgc3RydWN0dXJlcwogIGFmdGVyIHRoZWlyIHJlc3BlY3RpdmUgYWxsb2NhdGlvbiBpbiA0NDBneF9lbmV0LmMKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTAgSnVuIDIwMDU6CiAgRml4IGJ5dGVvcmRlciBwcm9ibGVtcyB3aXRoIHNlY29uZCBhcmd1bWVudCBvZiAiYm9vdG0iIHdpdGgKICBzdGFuZGFsb25lIGltYWdlczsKCiogQWRkIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQKCiogRGlzYWJsZSAiZGF0ZSIgYW5kICJzbnRwIiBjb21tYW5kcyBvbiBUUU04NjZNCgoqIEZpeCB3YXRjaGRvZyByZXNldCBwcm9ibGVtcyBvbiBMV01PTiBib2FyZAoKKiBQYXRjaCBieSBKdWVyZ2VuIFNlbGVudCwgMTcgTWF5IDIwMDU6CiAgQWRkIHN1cHBvcnQgZm9yIEZ1bmt3ZXJrIFZvVlBOIGdhdGV3YXkgbW9kdWxlLgoKKiBDbGVhbnVwIGRlYnVnIGNvZGUgZm9yIE1QQzgyMjAgRkVDIGRyaXZlcgoKKiBFeHRlbmQgYnVyc3QgbW9kZSBSQU0gdGVzdCBwcm9ncmFtIHRvIHRha2UgYSBsb29wIGNvdW50CiAgKDAgPSBpbmZpbml0ZSkKCiogVXNlIENPTkZJR19EUklWRVJfS1M4Njk1RVRIIHRvIGVuYWJsZSBLUzg2OTUgZXRoZXJuZXQgZHJpdmVyIG9uCiAgdGhvc2UgYm9hcmRzIHRoYXQgdXNlIGl0LgoKKiBQYXRjaGVzIGJ5IEdyZWcgVW5nZXJlciwgMTkgTWF5IDIwMDU6CiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEtTODY5NVAgKEFSTSA5MjIgYmFzZWQpIENQVQogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBPcGVuR2VhciBDTTQwMDgsIENNNDExNiBhbmQgQ000MTQ4IGJvYXJkcwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxOSBNYXkgMjAwNToKICBBZGQgc3VwcG9ydCBmb3IgQ09ORklHX1NFUklBTF9UQUcgb24gQVJNIGJvYXJkcwoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIFNvcmNlcnkgYm9hcmQuCiAgQ29kZSBjbGVhbnVwIChlc3BlY2lhbGx5IFNvcmNlcnkgLyBBbGFza2EgLyBZdWtvbiBzZXJpYWwgZHJpdmVyKS4KCiogRml4IGNvbXBpbGUgcHJvYmxlbXMgY2F1c2VkIGJ5IG5ldyBidXJzdCBtb2RlIFNEUkFNIHRlc3Q7CiAgbWFrZSBwb3J0IHBpbnMgdG8gdHJpZ2dlciBsb2dpYyBhbmFseXplciBjb25maWd1cmFibGUKCiogRml4IHRpbWVyIGhhbmRsaW5nIG9uIE1QQzg1eHggc3lzdGVtcwoKKiBGaXggZGVidWcgY29kZSBpbiBvbWFwNTkxMm9zayBmbGFzaCBkcml2ZXIKCiogQWRkIHN1cHBvcnQgZm9yIE1QQzgyNDcgYmFzZWQgIklEUzgyNDciIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgMiB4IFRTRUMgaW50ZXJmYWNlcyBvbiB0aGUgVFFNODU0MCBib2FyZC4KCiogT24gTFdNT04gd2UgbXVzdCB1c2UgdGhlIHdhdGNoZG9nIHRvIHJlc2V0IHRoZSBib2FyZCBhcyB0aGUgQ1BVCiAgZ2VuZXJlYXRlZCBIUkVTRVQgcHVsc2UgaXMgdG9vIHNob3J0IHRvIHJlc2V0IHRoZSBleHRlcm5hbAogIGNpcmN1aXRyeS4KCiogQWRkIHRlc3QgdG9vbCB0byBleGVyY2lzZSBTRFJBTSBhY2Nlc3NlcyBpbiBidXJzdCBtb2RlCiAgKGFzIHN0YW5kYWxvbmUgcHJvZ3JhbSwgTVBDOHh4L1Bvd2VyUEMgb25seSkKCiogSW5jcmVhc2UgQ0ZHX01PTklUT1JfTEVOIGZvciBSYXR0bGVyIGJvYXJkIHRvIG1hdGNoIGFjdHVhbCBjb2RlCiAgc2l6ZS4KCiogTWFqb3IgdXBhdGUgb2YgSkZGUzIgY29kZTsgbm93IGluIHN5bmMgd2l0aCBzbmFwc2hvdCBvZiBNVEQgQ1ZTIG9mCiAgTWFyY2ggMTMsIDIwMDUpOyBuZXcgY29uZmlndXJhdGlvbiBvcHRpb24gQ09ORklHX0pGRlMyX0xaT19MWkFSSQogIGFkZGVkIHRvIHN1cHBvcnQgTFpPIGFuZCBMWkFSSSBjb21wcmVzc2lvbiBtb2RlcyAodW5kZWZpbmVkIGJ5CiAgZGVmYXVsdCkuCgoqIEZpeCBwcm9ibGVtIHdpdGggc3ltYm9saWMgbGlua3MgaW4gSkZGUzIgY29kZS4KCiogVXNlIGxpbmtlciBBU1NFUlQgc3RhdGVtZW50IHRvIHByZXZlbnQgdW5kZXRlY3RlZCBvdmVybGFwcGluZyBvZgogIHNlY3Rpb25zIG9uIFBQQ2hhbWVsZW9uIGJvYXJkOyBvdGhlciBib2FyZHMgbWlnaHQgdXNlIHRoaXMsIHRvby4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMyBNYXkgMjAwNToKICBVcGRhdGUgZm9yIFAzRzQKICBGaXggcHJvYmxlbXMgaW4gY21kX3VuaXZlcnNlLmMKCiogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDAzIE1heSAyMDA1OgogIEFkZGVkIG1pc3NpbmcgdmFyaWFibGUgZGVjbGFyYXRpb24gaW4gY21kX25hbmQuYwogIE1vZGlmaWVkIENGR19QQ0lfUFRNMU1TIGluIGNvbmZpZ3MvUExVNDA1LmggdG8gbWFwIDEyOE1CIHJhbQoKKiBGaXggSU5LQTR4MDogdXNlIENTMSBhcyBncGlvX3drdXBfNiBvdXRwdXQKCiogRml4IGJ1ZyBpbiB0aGUgU0RSQU0gaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgY2FubWIsIEljZUN1YmUgYW5kCiAgUE01MjAgYm9hcmRzLgogIEZpeCBQSFkgYWRkcmVzcyBmb3IgY2FubWIgYm9hcmQuCgoqIENsZWFudXAgc2VyaWFsIGNvbnNvbGUgYmF1ZHJhdGUgY2FsY3VsYXRpb24gb24gQVQ5MVJNOTIwMDsKICBnZXQgcmlkIG9mIG9ic29sZXRlIENGR19BVDkxQ19CUkdSX0RJVklTT1IgZGVmaW5pdGlvbgoKKiBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMTggQXByIDIwMDU6CiAgTWFrZSBQQ0kgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VzIG9uIFBNQzQwNSBhbmQgQ1BDSTQwNSBib2FyZHMKICBjb25maWd1cmFibGUgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlcwoKKiBBdXRvLXNpemUgUkFNIG9uIGNhbm1iIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgY2FubWIgYm9hcmQKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBBcHIgMjAwNToKICBVcGRhdGUgZm9yIGVzZCBhcGM0MDUKCiogRml4ZXMgZm9yIFRRTTg1NjAgYm9hcmQ6CiAgLSBmaXggY2xvY2sgcmF0ZXMKICAtIHJlbW92ZSBkZWJ1ZyBtZXNzYWdlcwogIC0gZml4IGZsYXNoIHNlY3RvciBwcm90ZWN0aW9uCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA3IEFwciAyMDA1OgogIEFkZCBpMmNfcmVnX3dyaXRlKCkgYW5kIGkyY19yZWdfd3JpdGUoKSBmb3IgYXQ5MXJtOTIwMCBJMkMKCiogUGF0Y2hlcyBieSBTdGV2ZW4gU2Nob2x6LCAwNyBBcHIgMjAwNToKICBGaXggY29tcGlsZXIgd2FybmluZyBpbiBhbHRlcmEuYwogIEZpeCB3YXJuaW5nIGluIGNwdS9hcm05MjB0L2F0OTFybTkyMDAvaTJjLmMKCiogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDA2IEFwciAyMDA1OgogIEZpeCB2b2ljZWJsdWUgY29uZmlndXJhdGlvbi4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNiBBcHIgMjAwNToKICBVcGRhdGVzIGZvciBPQ09URUEgYm9hcmQ6CiAgLSBDaGFuZ2VkIFUtQm9vdCBzaXplIGZyb20gNTEya0J5dGUgdG8gMjU2a0J5dGUKICAtIEZpeGVkIGZsYXNoIGRyaXZlciB0byBzdXBwb3J0IGJvb3QgZnJvbSBzb2xkZXJlZCB1c2VyIGZsYXNoCiAgLSBBZGRlZCBSRUFETUUgZm9yIHN3aXRjaCBmcm9tIFBJQlMgZmlybXdhcmUgdG8gVS1Cb290CgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA1IEFwciAyMDA1OgogIC0gQ2hhbmdlIHRpbWVyIGZyZXF1ZW5jeSBmb3IgcHBjIDQ0MCBmcm9tIDEwIG1zIHRvIDEgbXMuCiAgICBQcm9ibGVtIGZvdW5kIGJ5IEFuZHJldyBXb3puaWFrLgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNiBBcHIgMjAwNToKICAtIGNyZWF0aW5nIFNvQyBzdWJkaXIgZm9yIEF0bWVsIEFUOTFSTTkyMDAgY3B1L2FybTkyMHQvYXQ5MXJtOTIwMAogIC0gbW92aW5nIGNvZGUgb3V0IG9mIGNwdS9hdDkxcm05MjAwIGludG8gY3B1L2FybTkyMHQvYXQ5MXJtOTIwMAoKKiBQYXRjaGVzIGJ5IFJvYmVydCBXaGFsZXksIDI5IE5vdiAyMDA0OgogIC0gdXBkYXRlIHRoZSBweGEtcmVncy5oIGZpbGUgZm9yIFBYQTI3eCBjaGlwcwogIC0gYWRkIFBYQTI3eCBiYXNlZCBBRFNWSVggYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciBNTUMgb24gUFhBMjd4IHByb2Nlc3NvcnMKCiogUGF0Y2ggYnkgQW5kcmV3IEUuIE1pbGVza2ksIDI4IE5vdiAyMDA0OgogIEZpeCBQUEM0eHggU1BEIFNEUkFNIGRldGVjdGlvbiBidWcKCiogUGF0Y2ggYnkgSGlyb3NoaSBJdG8sIDI2IE5vdiAyMDA0OgogIEZpeCBsb2dpYyBvZiAidGVzdCAteiIgYW5kICJ0ZXN0IC1uIiBjb21tYW5kcwoKKiBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMDUgQXByIDIwMDU6CiAgQWRkIHN1cHBvcnQgZm9yIFZvaWNlQmx1ZSBib2FyZC4KCiogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDA1IEFwciAyMDA1OgogIEZpeCBuZXRib290X2NvbW1vbigpIHByb3RvdHlwZXMuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA1IEFwciAyMDA1OgogIFVzZSBpLk1YIHdhdGNoZG9nIHRpbWVyIGZvciByZXNldF9jcHUoKQoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNSBBcHIgMjAwNToKICBNb3ZlIHJlc2V0X2NwdSgpIG91dCBvZiBjcHUvYXJtOTIwdC9zdGFydC5TIGludG8gdGhlIFNvQyBzcGVjaWZpYwogIHN1YmRpcmVjdG9yaWVzIGNwdS9hcm05MjB0L2lteC8gYW5kIGNwdS9hcm05MjB0L3MzYzI0eDAvCiAgKG5vdyBpbiBpbnRlcnVwdHMuYykKCiogQWRkIHN1cHBvcnQgZm9yIE1QQzgyMjAgYmFzZWQgInNvcmNlcnkiIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODU2MCBib2FyZC4KCiogQWRkIEZFQyBzdXBwb3J0IGZvciBUUU04NTQwIGJvYXJkLgogIEludGVyZmFjZXMgYXJlIG5hbWVkIGFzIGZvbGxvd3M6ICJFTkVUMSIgLSBUU0VDMiwgIkVORVQyIiAtIEZFQwoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNCBBcHIgMjAwNToKICBVcGRhdGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBDTUNfUFUyIGJvYXJkLgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBBcHIgMjAwNToKICAtIHJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBDT05GSUdfSU5JVF9DUklUSUNBTCBmb3IgQVJNIGJhc2VkIGJvYXJkcwogIC0gaW50cm9kdWNlIHR3byBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIGluc3RlYWQ6CiAgICBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUIGFuZCBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBBcHIgMjAwNToKICBNYWtlIHN1cmUgdGhhdCBNRElPIGNsb2NrIGRvZXMgbm90IGV4Y2VlZCAyLjUgTUh6IG9uIEFUOTEKCiogRml4IHRpbWVyIGNvZGUgZm9yIEFSTSBzeXN0ZW1zOiBtYWtlIHN1cmUgdGhhdCB1ZGVsYXkoKSBkb2VzIG5vdAogIHJlc2V0IHRpbWVycyBzbyBpdCdzIHNhdmUgdG8gdXNlIHVkZWxheSgpIGluIHRpbWVvdXQgY29kZS4KCiogUGF0Y2ggYnkgTWF0aGlhcyBL/HN0ZXIsIDIzIE5vdiAyMDA0OgogIGFkZCB1ZGVsYXkgc3VwcG9ydCBmb3IgdGhlIG1jZjUyODIgY3B1CgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE2IE5vdmVtYmVyIDIwMDQ6CiAgZml4IGluY29ycmVjdCBvbmJvYXJkIFhpbGlueCBDUExEIGJhc2UgYWRkcmVzcwoKKiBQYXRjaCBieSBKZXJyeSBWYW4gQmFyZW4sIDA4IE5vdiAyMDA0OgogIC0gQWRkIGxvdy1ib290IG9wdGlvbiBmb3IgTVBDODI2MEFEUyBib2FyZCAoaWYgbG93Ym9vdCBpcyBzZWxlY3RlZCwKICAgIHRoZSBqdW1wZXIgZm9yIHRoZSBIUkNXIHNvdXJjZSBzaG91bGQgc2VsZWN0IGZsYXNoLiBJZiBsb3dib290IGlzCiAgICBub3Qgc2VsZWN0ZWQsIHRoZSBqdW1wZXIgZm9yIHRoZSBIUkNXIHNvdXJjZSBzaG91bGQgc2VsZWN0IHRoZQogICAgQkNTUi4KICAtIGNoYW5nZSBkZWZhdWx0IGxvYWQgYmFzZSBhZGRyZXNzIHRvIDB4MDA0MDAwMDAKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDggTm92IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIEFuYWxvZ3VlICYgTWljcm8gUmF0dGxlciBib2FyZHMuCiAgVGVzdGVkIG9uIFJhdHRsZXI4MjQ4LgoKKiBQYXRjaCBieSBBbmRyZSBSZW5hdWQsIDA4IE5vdiAyMDA0OgogIEZpeCB3YXRjaGRvZyBzdXBwb3J0IGluIGNvbW1vbi9sY2QuYwoKKiBQYXRjaCBieSBNYXJjIExlZW1hbiwgMDUgTm92IDIwMDM6CiAgRW5hYmxlIGFsbCA0IFBDTUJSVyBidWZmZXJzIGZvciB0aGUgTVBDODI0NSBwcm9jZXNzb3Igc2luY2UgdGhlIENQVQogIGJ1ZyBvbmx5IGFmZmVjdHMgdGhlIFhQQzgyNDUgcHJvY2Vzc29ycwoKKiBQYXRjaGVzIGJ5IEpvc2VmIFdhZ25lciwgMjkgT2N0IDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgQ1BVODcgYm9hcmQKICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTg1NCBib2FyZAoKKiBQYXRjaCBieSBKaWFuIFpoYW5nLCAwMiBOb3YgMjAwNDoKICBBZGQgMTYtYml0IE5BTkQgc3VwcG9ydAoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDAxIE5vdiAyMDA0OgogIEFkZCBtaXNzaW5nIE5JT1MvTklPUzIgc3VwcG9ydCBmb3IgImltaW5mbyIgY29tbWFuZAoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyOSBPY3QgMjAwNDoKICBBZGQgbWlzc2luZyBOSU9TL05JT1MyIHN1cHBvcnQgZm9yICJta2ltYWdlIiB0b29sLgoKKiBQYXRjaCBieSBEYXZpZCBBZGFpciwgMjcgT2N0IDIwMDQ6CiAgQWRkIG1pc3NpbmcgNDQwR1ggU0RSQU0gQ29udHJvbGxlciByZXNldAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBPY3QgMjAwNDoKICBEZWNsYXJlIHJlc2V0X2NwdSgpIGluIGluY2x1ZGUvY29tbW9uLmggaW5zdGVhZCBsb2NhbGx5CgoqIFBhdGNoIGJ5IFl1c2RpIFNhbnRvc28sIDIyIE9jdCAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIEhJRERFTl9EUkFHT04gYm9hcmQKICAtIGZpeCBlbmRpYW5lc3MgcHJvYmxlbSBpbiBkcml2ZXIvcnRsMTgzOS5jCgoqIFBhdGNoIGJ5IEFsbGVuIEN1cnRpcywgMjEgT2N0IDIwMDQ6CiAgc3VwcG9ydCBtdWx0aXBsZSBzZXJpYWwgcG9ydHMKCiogUGF0Y2ggYnkgUmljaGFyZCBLbGluZ2xlciwgMDMgQXByIDIwMDU6CiAgQWRkIGNhbGwgdG8gZXRoX2hhbHQoKSBpbiBuZXQvbmV0LmMgd2hlbiBjYWxsZWQgZnVuY3Rpb25zIGZhaWwKICBhZnRlciBldGhfaW5pdCgpIGhhcyBiZWVuIGNhbGxlZC4KCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDMgQXByaWwgMjAwNToKICAtIFVwZGF0ZSBSRUFETUUuTmV0Y29uc29sZQogIC0gVXBkYXRlIFJFQURNRQoKKiBQcmVwYXJlIGZvciBTb0MgcmV3b3JrIG9mIEFSTSBjb2RlOgogIC0gcmVuYW1lIENPTkZJR19CT09UQklORlVOQyBpbnRvICBDT05GSUdfSU5JVF9DUklUSUNBTAogIC0gcmVuYW1lIG1lbXNldHVwIGludG8gbG93bGV2ZWxfaW5pdCAoZnVuY3Rpb24gbmFtZSBhbmQgc291cmNlIGZpbGVzKQogIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDAzIEFwciAyMDA1OgogIC0gY3JlYXRlIFNvQyBzcGVjaWZpYyBkaXJlY3RvcmllcyBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXggYW5kCiAgICBpbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNHgwCgoqIEZpeCBwcm9ibGVtcyB3aXRoIFNOVFAgc3VwcG9ydDsKICBlbmFibGUgU05UUCBzdXBwb3J0IGluIHNvbWUgYm9hcmRzLgoKKiBQYXRjaGVzIGJ5IE1hcnRpbiBLcmF1c2UsIDAxIEFwciAyMDA1OgogIC0gRml4IGZsYXNoIGVyYXNlIHRpbWVvdXQgb24gQ01DX1BVMgogIC0gQWRkIGF1dG9tYXRpYyBIVyBkZXRlY3Rpb24gZm9yIENNQ19QVTIgYW5kIENNQ19CQVNJQwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMyBNYXJjaCAyMDA1OgogIGZpeCBjYWNoZSBlbmFibGluZyBmb3IgQVQ5MVJNOTIwMAoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAzMCBNYXIgMjAwNToKICBhZGQgU05UUCBzdXBwb3J0IGFuZCBleHBhbmQgdGltZSBzZXJ2ZXIgYW5kIHRpbWUgb2Zmc2V0IGZpZWxkcyBvZgogIERIQ1Agc3VwcG9ydC4gU2VlIGRvYy9SRUFETUUuU05UUAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMyBEZWMgMjAwNDoKICBGaXggYnVnIGluIGF0OTFybTkyMCBldGhlcm5ldCBkcml2ZXIKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTMgRGVjIDIwMDQ6CiAgUmVtb3ZlIGR1cGxpY2F0ZWQgY29kZSBieSBtZXJnaW5nIG1lbXNldHVwLlMgZmlsZXMgZm9yCiAgYXQ5MXJtOTIwMCBib2FyZHMgaW50byBvbmUgY3B1L2F0OTFybTkyMDAvbG93bGV2ZWwuUwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAzMSBNYXIgMjAwNToKICBDbGVhbnVwIGR1cGxpY2F0ZSBkZWZpbml0aW9uIG9mIG92ZXJ3cml0ZV9jb25zb2xlKCkKCiogVXBkYXRlIFRRTTUyMDAgY29uZmlndXJhdGlvbjsKICBwcmVwYXJlIGZvciBSZXYuIDIwMCBzdGFydGVyIGtpdCBib2FyZHMKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMSBPY3QgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTmlvcy1JSSBFUENTIENvbnRyb2xsZXIgY29yZS4KCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMCBPY3QgMjAwNDoKICBOaW9zLUlJIGNsZWFudXBzOgogIC0gQWRkIHN5c2lkIGNvbW1hbmQgKE5pb3MtSUkgb25seSkuCiAgLSBMb2NhdGUgZGVmYXVsdCBleGNlcHRpb24gdHJhbXBvbGluZSBhdCBwcm9wZXIgb2Zmc2V0LgogIC0gSW1wbGVtZW50IEkvTyByb3V0aW5lcyAocmVhZGIsIHdyaXRlYiwgZXRjKQogIC0gSW1wbGVtZW50IGRvX2Jvb3RtX2xpbnV4CgoqIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMjIgTWFyIDIwMDU6CiAgLSB1c2UgVFFNNTIwMF9hdXRvIGFzIE1BS0VBTEwgdGFyZ2V0IGZvciBUUU01MjAwIHN5c3RlbXMKICAtIGFkZCBzdXBwb3J0IGZvciBTTTUwMSBncmFwaGljcyBjb250cm9sbGVyCiAgLSBhZGQgc3VwcG9ydCBmb3IgZ3JhcGhpYyBjb25zb2xlIG9uIFRRTTUyMDAKICAtIGFkZCBzdXBwb3J0IGZvciBUUU01MjAwIFJldiAyMDAKICAtIGNsZWFudXAsIGZpeCB0eXBvIGluIGluY2x1ZGUvY29uZmlncy9UUU01MjAwLmgKCiogUGF0Y2ggYnkgTWFuZnJlZCBCYXJhbCwgMTcgTWFyIDIwMDU6CiAgRml4IHR5cG8KCiogRml4IFJUQyBjb25maWd1cmF0aW9uIGZvciBQUENoYW1lbGVvbiBib2FyZAoKKiBDbGVhbnVwLCBmaXggdHlwbyBpbiBpbmNsdWRlL2NvbmZpZ3MvVFFNNTIwMC5oCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgTWFyIDIwMDU6CiAgVXBkYXRlIGZvciBlc2QgYXV0b191cGRhdGUgYW5kIGhoNDA1IGJvYXJkCgoqIEFkYXB0IGZvciBVLUJvb3QgaW1hZ2Ugc2l6ZSAobmV3IGZlYXR1cmVzIGVuYWJsZWQpIG9uIFRRTTUyMDAKCiogVXBkYXRlIGNvZGUgZm9yIFRRTTg1NDAgYm9hcmQgKGFuZCA4NXh4IGluIGdlbmVyYWwpOgogIC0gQ2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBFdGhlcm5ldCBkcml2ZXI6IE1PVE8gRU5FVCAtPiBFTkVUCiAgLSBSZWZvcm1hdCBib290IG1lc3NhZ2VzCiAgLSBFbmFibGUgcmVkdW5kYW50IGVudmlyb25tZW50CiAgLSBSZXBsYWNlIHRoZSAtTzIgb3B0aW1pemF0aW9uIGZsYWcgd2l0aCAtbW5vLXN0cmluZwoKKiBQYXRjaCBieSBEYXZpZCBCcm93bmVsbCwgMTAgTWFyIDIwMDU6CiAgUmVzdG9yZSBjb3B5cmlnaHQgc3RhdGVtZW50cyBpbiBPSENJIGRyaXZlcnMuCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NTQwIGJvYXJkCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDE0IE1hciAyMDA1OgogIE5DNjUwOiBjaGFuZ2VkIE5BTkQgZmxhc2ggYWRkcmVzc2luZyB0byB1c2luZyBVUE1CCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTQgTWFyIDIwMDU6CiAgVXBkYXRlIGZvciBlc2Qgdm9oNDA1IGZwZ2EgaW1hZ2UKCiogSU5LQTR4MDogQWxsb3cgaW5pdGlhbGl6YXRpb24gb2YgTENEIGJhY2tsaWdodCBkaW1taW5nIGZyb20KICAiYnJpZ2h0bmVzcyIgZW52aXJvbm1lbnQgdmFyaWFibGUuCgoqIEFkZCBwb3J0IGluaXRpYWxpemF0aW9uIGZvciBkaWdpdGFsIEkvTyBvbiBJTktBNHgwCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDEgTWFyIDIwMDU6CiAgVXBkYXRlIGZvciBlc2QgYm9hcmRzIGRwNDA1IGFuZCBodWI0MDUKCiogRml4IGdldF9wYXJ0aXRpb25faW5mbygpIHBhcmFtZXRlciBlcnJvciBpbiBhbGwgb3RoZXIgY2FsbHMKICAoY29tbW9uL2NtZF9pZGUuYywgY29tbW9uL2NtZF9yZWlzZXIuYywgY29tbW9uL2NtZF9zY3NpLmMpLgoKKiBFbmFibGUgVVNCIGFuZCBJREUgc3VwcG9ydCBmb3IgSU5LQTR4MCBib2FyZAoKKiBQYXRjaCBieSBBbmRyZXcgRHllciwgMjggRmViIDIwMDU6CiAgZml4IGV4dDJsb2FkIHBhc3NpbmcgYW4gaW5jb3JyZWN0IHBvaW50ZXIgdG8gZ2V0X3BhcnRpdGlvbl9pbmZvKCkKICByZXN1bHRpbmcgaW4gbG9hZCBmYWlsdXJlIGZvciBkZXZpY2VzIG90aGVyIHRoYW4gMAoKKiBBZGQgc3VwcG9ydCBmb3IgU1JBTSBhbmQgMiB4IFF1YWQgVUFSVHMgb24gSU5LQTR4MCBib2FyZAoKKiBDbGVhbnVwIFVTQiBhbmQgcGFydGl0aW9uIGRlZmluZXMKCiogQWRkIHN1cHBvcnQgZm9yIGV4dDIgZmlsZXN5c3RlbXMgYW5kIGltYWdlIHRpbWVzdGFtcHMgdG8gVFFNNTIwMCBib2FyZAoKKiBBZGQgcmVzZXQgY29kZSBmb3IgQ29yYWwtUCBvbiBJTktBNHgwIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI4IEp1biAyMDA0OgogIFVwZGF0ZSBmb3IgVFJBQiBib2FyZC4KCiogRml4IHNvbWUgbWlzc2luZyAidm9sYXRpbGUicyBpbiBNUEM1eHh4IEZFQyBkcml2ZXIKCiogRml4IGNpcnJ1cyB2b2x0YWdlIGRldGVjdGlvbiAoZm9yIENQQzQ1KQoKKiBGaXggYnl0ZW9yZGVyIHByb2JsZW0gaW4gdXNiYm9vdCBhbmQgc2NzaWJvb3QgY29tbWFuZHMuCgoqIFBhdGNoIGJ5IENhanVzIEhhaG4sIDA0IEZlYiAyMDA1OgogIC0gZG9uJ3QgaW5zaXN0IG9uIGxlYWRpbmcgJy8nIGZvciBmaWxlbmFtZSBpbiBleHQybG9hZAogIC0gc2V0IGRlZmF1bHQgcGFydGl0aW9uIHRvIHVzZWZ1bCB2YWx1ZSAoMSkgaW4gZXh0MmxvYWQKCiogUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDA4IEphbiAyMDA1OgogIGZpeCB3cm9uZyByZXR1cm4gY29kZXMgaW4gZXh0MiBjb2RlCgoqIFJlbW92ZWQgJy0tbm8td2Fybi1taXNtYXRjaCcgb3B0aW9uIGZyb20gTWFrZWZpbGUuIFRoaXMgb3B0aW9uCiAgbWFrZXMgJ2xkJyB0byBvdmVybG9vayBiaW5hcnkgb2JqZWN0cyBjb21wYXRpYmlsaXR5LgoKKiBNb3ZlZCAkKFBMQVRGT1JNX0xJQlMpIGZyb20gdGhlIGxpYnJhcnkgZ3JvdXAgKC0tc3RhcnQtZ3JvdXAgLi4uCiAgLS1lbmQtZ3JvdXApIG91dHNpZGUgb2YgdGhlIGdyb3VwLiBUaGlzIHdpbGwgbWFrZSAnbGQnIHRvIGRvCiAgX211bHRpcGxlXyBzZWFyY2ggaW4gdGhlIGxpYnJhcnkgZ3JvdXAgd2hlbiByZXNvbHZpbmcgc3ltYm9sCiAgcmVmZXJlbmNlcyBhbmQgZG8gb25seSBhIF9zaW5nbGVfIHNlYWNoIGluIGxpYmdjYy5hIGFmdGVyIHRoZSBncm91cAogIHNlYXJjaC4KCiogRml4IHN0YWJpbGl0eSBwcm9ibGVtcyBvbiBDUEM0NSBib2FyZCBhZ2Fpbi4KCiogTWFrZSBpbWFnZSBkZXRlY3Rpb24gZm9yIGRpc2tib290IC8gdXNiYm9vdCAvIHNjc2lib290IG1vcmUgcm9idXN0CiAgKGFsc28gY2hlY2sgaGVhZGVyIGNoZWNrc3VtKQoKKiBVcGRhdGUgQ1BDNDUgYm9hcmQgY29uZmlndXJhdGlvbi4KCiogQWRkIFVTQiBhbmQgUENJIHN1cHBvcnQgZm9yIElOS0E0eDAgYm9hcmQKCiogRml4IElERSBzdGFiaWxpdHkgcHJvYmxlbXMgb24gQ1BDNDUgYm9hcmQgKG5lZWRzIDIgeCBFSUVJTykuCgoqIENvZGUgY2xlYW51cAoKKiBQYXRjaCBieSBSb2JpbiBHZXR6LCAxMyBPY3QgMjAwNDoKICBBZGQgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbiB0byBjaGFuZ2UgU01DOTFDMTExIE1BQyBhZGRyZXNzZXMsCiAgc2VlIGV4YW1wbGVzL1JFQURNRS5zbWM5MTExMV9lZXByb20KCiogUGF0Y2ggYnkgWGlhb2dlbmcgKFNoYXduKSBKaW4sIDEyIE9jdCAyMDA0OgogIEZpeCBGbGFzaCBzdXBwb3J0IGZvciBBUk0gSW50ZWdyYXRvciBDUC4KCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTAgSmFuIDIwMDU6CiAgVXBkYXRlIHN1cHBvcnQgZm9yIE9NQVAyNDIwIChBUk0xMSkgYW5kIEg0IGJvYXJkOgogIG8gY2xlYW4gdXAgYW5kIGFkZCBuZXcgdHlwZXMgdG8gSDQgbWVtb3J5IHByb2JlIGNvZGUuCiAgbyBmaXggdG8gd29yayB3aXRoIGludGVybmFsIGJvb3QuCiAgbyBhZGRlZCBQUkNNIGNvbmZpZyBJSUkgb3BlcmF0aW9uLgogIG8gZml4IG1hcmdpbmFsIGZsYXNoIHRpbWluZ3MuCiAgbyBhZGQgcmV2aXNvbiBBVEFHIHVzYWdlLgogIG8gZW5hYmxlIHZvbHRhZ2Ugc2NhbGluZyBhdCBwb3dlciBjaGlwLgogIG8gZml4IGNvbXBpbGUgZXJyb3IgZm9yIGkyYy4KCiogRml4IG5ldHdvcmsgcHJvYmxlbSAoZXJyb3Igd2hlbiByZWNlaXZpbmcgbXVsdGlwbGUgQVJQIHBhY2tldHMpCgoqIFBhdGNoIGJ5IERhbmllbCBQb2lyb3QsIDEyIE9jdCAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBXaW5kIFJpdmVyIHNiYzQwNSBib2FyZAoKKiBQYXRjaCBieSBSYWluZXIgQnJlc3RhbiwgMTIgT2N0IDIwMDQ6CiAgTWFrZSBleGFtcGxlcy9NYWtlZmlsZSBtb3JlIHJvYnVzdAoKKiBQYXRjaCBieSBTYW0gU29uZywgMTEgT2N0b2JlciAyMDA0OgogIC0gQWRkIFJFU0VUL1BSRUJPT1QvQVVUT0JPT1Qgc3VwcG9ydCBmb3IgUlBYbGl0ZV9EVyBib2FyZAogIC0gQWRqdXN0IENQVTpCVVMgZnJlcXVlbmN5IHJhdGlvIDE6MSB3aGVuIGNvcmUgZnJlcXVlbmN5CiAgICBsZXNzIHRoYW4gNTBNSHoKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDEwIE9jdCAyMDA0OgogIEZpeCBhIHBhcmFtZXRlciBlcnJvciBpbiBydW5fY29tbWFuZCgpIGluIG1haW4uYwoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAwMSBPY3QgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIFRJIE9NQVAyNDIwIHByb2Nlc3NvciBhbmQgaXRzIEg0IHJlZmVyZW5jZQogIGJvYXJkCgoqIFBhdGNoIGJ5IENocmlzdGlhbiBQZWxsZWdyaW4sIDI0IFNlcCAyMDA0OgogIEFkZGVkIHN1cHBvcnQgZm9yIE5FMjAwMCBjb21wYXRpYmxlIChEUDgzOTAsIERQODM5MDIpIE5JQ3MuCgoqIFBhdGNoIGJ5IExlaWYgTGluZGhvbG0sIDIzIFNlcCAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciB0aGUgQU1EIGRiMTU1MCBib2FyZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxNSBTZXAgMjAwNDoKICBBZGQgQ09ORklHX1NFUklBTF9NVUxUSSBzdXBwb3J0IGZvciBwcGM0eHgsCiAgdXBkYXRlIFJFQURNRS5zZXJpYWxfbXVsdGkKCiogUGF0Y2hlcyBieSBEYXZpZCBTbm93ZG9uLCAwNyBTZXAgMjAwNDoKICAtIGFkZCB1LWJvb3QuaGV4IHRhcmdldCBpbiB0aGUgdG9wIGxldmVsIE1ha2VmaWxlCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIFVOU1cvTklDVEEgUExFQiAyIGJvYXJkIChwbGViMikKICAtIHVzZSAtbXR1bmU9eHNjYWxlIGFuZCAtbWFyY2g9YXJtdjUgb3B0aW9ucyBmb3IgUFhBCgoqIFBhdGNoIGJ5IEZsb3JpYW4gU2NobG90ZSwgMDggU2VwIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFNlblRlYy1DT0JSQTUyNzItYm9hcmQgKENvbGRGaXJlKS4KCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAwNyBTZXAgMjAwNDoKICBtcGM4MjR4OiBzZXQgUENJIGxhdGVuY3kgdGltZXIgdG8gYSBzYW5lIHZhbHVlCiAgKGlzIDAgYWZ0ZXIgcmVzZXQpLgoKKiBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMDMgU2VwIDIwMDQ6CiAgQWRkIGJpdHN0cmVhbSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgZnBnYSBjb21tYW5kIChYaWxpbnggb25seSkuCgoqIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAwMyBTZXAgMjAwNDoKICBBZGQgWGlsaW54IFNwYXJ0YW4yRSBmYW1pbHkgRlBHQSBzdXBwb3J0CgoqIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAwMiBTZXAgMjAwNDoKICBBZGQgQWRkZWQgc3VwcG9ydCBmb3IgSDIgcmV2aXNpb24gb2YgdGhlIEVQODI2MCBib2FyZC4KICBGaXhlZCBmb3JtYXR0aW5nIGZvciBzb21lIG9mIHRoZSBFUDgyNjAgcmVsYXRlZCBzb3VyY2UgZmlsZXMuCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMDIgU2VwIDIwMDQ6CiAgUmVzZXQgbW9uaXRvciBzaXplIGJhY2sgdG8gMjU2IHNvIGVudmlyb25tZW50IGNhbiBiZSB3cml0dGVuCiAgdG8gZmxhc2ggb24gTVBDODV4eCBBRFMgYW5kIENEUyByZWxlYXNlcy4KCiogUGF0Y2ggYnkgUGFvbG8gQnJvZ2dpbmksIDAyIFNlcCAyMDA0OgogIE1ha2UgQlNTIGNsZWFyaW5nIG9uIEFSTSBzeXN0ZW1zIG1vcmUgcm9idXN0CgoqIFBhdGNoIGJ5IFl1ZSBIdSBhbmQgSm9lLCAwMSBTZXAgMjAwNDoKICAtIGFkZCBQQ0kgc3VwcG9ydCBmb3IgaXhwNDI1OwogIC0gYWRkIEVFUFJPMTAwIHN1cHBvciB0Zm9yIGl4ZHA0MjUgYm9hcmQuCgoqIEZpeCBwcm9ibGVtIHdpdGggcHJvdGVjdGVkIHNlY3RvciBkZXRlY3Rpb24gaW4gZHJpdmVyL2NmaV9mbGFzaC5jCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBDb2RlIGNsZWFudXAsIG1vc3RseSBmb3IgR0NDLTMuMy54CgoqIENsZWFudXAgY29uZnVzaW5nIHVzZSBvZiBDT05GSUdfRVRIKkFERFIgLSB1c3QgaGlzIG9ubHkgdG8KICBwcmUtZGVmaW5lIGEgTUFDIGFkZHJlc3M7IHVzZSBDT05GSUdfSEFTX0VUSCogdG8gZW5hYmxlIHN1cHBvcnQgZm9yCiAgYWRkaXRpb25hbCBldGhlcm5ldCBhZGRyZXNzZXMuCgoqIENsZWFudXAgZHJpdmVycy9pODIzNjUuYyAtIGF2b2lkIGR1cGxpY2F0aW9uIG9mIGNvZGUKCiogRml4IGJvZ3VzICJjYW5ub3Qgc3BhbiBhY3Jvc3MgYmFua3MiIGZsYXNoIGVycm9yIG1lc3NhZ2UKCiogQ29kZSBjbGVhbnVwCgoqIEFkZCBzdXBwb3J0IGZvciBDb21wYWN0Rmxhc2ggZm9yIHRoZSBDUEM0NSBCb2FyZC4KCiogRml4IHByb2JsZW1zIHdpdGggQ01DX1BVMiBmbGFzaCBkcml2ZXIuCgoqIENsZWFudXA6CiAgLSBhdm9pZCB0cmlncmFwaCB3YXJuaW5nIGluIGZzL2V4dDIvZXh0MmZzLmMKICAtIHJlbmFtZSBVQzEwMCAtPiB1YzEwMAoKKiBBZGQgc3VwcG9ydCBmb3IgVUMxMDAgYm9hcmQKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBEZXogMjAwNDoKICAtIGV4dDJmcyBzdXBwb3J0IGFkZGVkCiAgLSBUdW5kcmEgdW5pdmVyc2Ugc3VwcG9ydCBhZGRlZAogIC0gQ29sZEZpcmUgTUNGNTI0OSBzdXBwb3J0IGFkZGVkIChubyBwcmVsb2FkZXIgbmVlZGVkISkKICAtIE1DRjUyNDkgYm9hcmQgVEFTUkVHIGFkZGVkCiAgLSBQUEMgYm9hcmRzIGFkZGVkOiBBUEM0MDUsIENQQ0k0MDVEVCwgQ1BDSTc1MCwgRzIwMDAsIEhINDA1LAogICAgVk9NNDA1LCBXVUg0MDUKICAtIHNvbWUgZXNkIGJvYXJkcyB1cGRhdGVkCiAgLSBtZW1vcnkgY29tbWFuZHMgIm1kYyIgYW5kICJtd2MiIGFkZGVkIGZvciBjeWNsaWMgcmVhZC93cml0ZQogICAgKENPTkZJR19NWF9DWUNMSUMsIHNlZSBSRUFETUUgZm9yIGZ1cnRoZXIgZGVzY3JpcHRpb24pCgoqIEFkZCBzdXBwb3J0IGZvciBJTktBNFgwIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEyIERlYyAyMDA0OgogIEZpeCB0eXBvIGluIEFUOTEgbWVtb3J5IHNldHVwLgoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciAiU1RLNTJ4eCIgYm9hcmQgKGluY2x1ZGluZyBQUy8yIG11bHRpcGxleGVyKQogIC0gYWRkIGhhcmR3YXJlIGRldGVjdGlvbiBmb3IgVFFNNTIwMAoKKiBDbGVhbiB1cCBDTUMgUFUyIGZsYXNoIGRyaXZlcgoKKiBVcGRhdGUgTUFJTlRBSU5FUlMgZmlsZQoKKiBGaXggYnVnIGluIE1QQzgyMyBMQ0QgZHJpdmVyCgoqIEZpeCB1ZGVsYXkoKSBvbiBBVDkxUk05MjAwIGZvciBkZWxheXMgPCAxIG1zLgoKKiBFbmFibGUgbG9uZyBoZWxwIG9uIENNQyBQVTIgYm9hcmQ7CiAgZml4IHJlc2V0IGlzc3VlOwogIGluY3JlYXNlIENQVSBzcGVlZCBmcm9tIDE3OSB0byAyMDcgTUh6LgoKKiBGaXggc21jOTExMTEgZXRoZXJuZXQgZHJpdmVyIGZvciBYYWVuaWF4IGJvYXJkIChuZWVkIHRvIGhhbmRsZQogIHVuYWxpZ25lZCB0YWlsIHBhcnQgc3BlY2lhbGx5KS4KCiogVXBkYXRlIGZvciBBVDkxUk05MjAwREsgYW5kIENNQ19QVTIgYm9hcmRzOgogIC0gRW5hYmxlIGJvb3RpbmcgZGlyZWN0bHkgZnJvbSBmbGFzaAogIC0gZml4IENNQ19QVTIgZmxhc2ggZHJpdmVyCgoqIEZpeCBta2ltYWdlIHVzYWdlIG1lc3NhZ2UKCiogTWFwIFNSQU0gb24gTkM2NTAgYm9hcmQKCiogV29yayBhcm91bmQgZm9yIEV0aGVybmV0IHByb2JsZW1zIG9uIFhhZW5pYXggYm9hcmQKCiogUGF0Y2ggYnkgVHNpQ2h1bmcgTGlldywgMjMgU2VwIDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgTVBDODIyMCBDUFUKICAtIEFkZCBzdXBwb3J0IGZvciBBbGFza2EgYW5kIFl1a29uIGJvYXJkcwoKKiBGaXggY29uZmlndXJhdGlvbiBmb3IgRVJJQyBib2FyZCAobmVlZHMgbW9yZSByb29tKQoKKiBBZGp1c3QgTUlQUyBjb21waWxlciBvcHRpb25zIGF0IHJ1bi10aW1lIGRlcGVuZGluZyBvbiB0b29scyB2ZXJzaW9uCiAgKCItbWFyY2g9NGtjIC1tdHVuZT00a2MgLVdhLC1taXBzX2FsbG93X2JyYW5jaF90b191bmRlZmluZWQiIGZvciBuZXcsCiAgIi1tY3B1PTRrYyIgZm9yIG9sZCB0b29scykKCiogQWRkIHBhc3Npbmcgb2YgdGhlIGNvbW1hbmQgbGluZSBhbmQgbWVtb3J5IHNpemUgaW5mb3JtYXRpb24gdG8gIHRoZQogIGtlcm5lbCBvbiB4YWVuaWF4IGJvYXJkLgoKKiBFbmFibGUgTkFORCBmbGFzaCBzdXBwb3J0IGZvciBOQzY1MCBib2FyZC4KCiogUGF0Y2ggYnkgVGhvbWFzIExhbmdlIDA3IE9jdCAyMDA0OgogIFVwZGF0ZWQgUkVBRE1FIGZvciBEQkF1MXgwMCBib2FyZHMgdG8gbWF0Y2ggY3VycmVudCBzdGF0dXMKCiogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDI4IFNlcHQgMjAwNDoKICBGaXggRmxhc2ggc3VwcG9ydCBmb3IgVmVyc2F0aWxlLgoKKiBQYXRjaCBieSBSb2dlciBCbG9mZWxkLCAxNiBTZXAgMjAwNDoKICBGaXggdGltZW91dCBmb3IgREhDUCBjb21tYW5kIHJldHJ5CgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNCBTZXAgMjAwNDoKICBGaXggZWFybHkgc2VyaWFsIGhhbmcgd2hlbiBDT05GSUdfU0VSSUFMX01VTFRJIGlzIGRlZmluZWQuCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNCBTZXAgMjAwNDoKICBLaWNrIHdhdGNoZG9nIHdoZW4gYnotZGVjb21wcmVzc2luZwoKKiBGaXggQ0ZHX0haIHByb2JsZW1zIG9uIEFUOTFSTTkyMDAgc3lzdGVtcwogIFtSZW1lbWJlcjogQ0ZHX0haIHNob3VsZCBiZSAxMDAwIG9uIEFMTCBzeXN0ZW1zIV0KCiogUGF0Y2ggYnkgR3JpZGlzaCBTaGxvbWksIDMwIEF1ZyAyMDA0OgogIC0gQWRkIHN1cHBvcnQgdG8gcmV2QSB2ZXJzaW9uIG9mIFBRMjcgYW5kIFBRMjdFLgogIC0gUmV2ZXJ0ZWQgTVBDODI2MEFEUyBiYXVkcmF0ZSBiYWNrIHRvIG9yaWdpbmFsIDExNTIwMAoKKiBQYXRjaCBieSBIb2ppbiwgMTcgU2VwIDIwMDQ6CiAgRml4IHR5cG8gaW4gY2ZpX2ZsYXNoLmMKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDkgU2VwdGVtYmVyIDIwMDQ6CiAgbXRlc3QncyBkYXRhIGxpbmUgdGVzdCAod2l0aCBDRkdfQUxUX01FTVRFU1Qgc2V0KSByZXR1cm5lZCBhIHdyb25nCiAgZXJyb3IgbWVzc2FnZQoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAzMSBBdWd1c3QgMjAwNDoKICBBZGRlZCBvcHRpb24gQ0ZHX1hMQl9QSVBFTElOSU5HIHRvIGVuYWJsZSBYTEIgcGlwZWxpbmluZy4gVGhpcwogIGltcHJvdmVzIEZUUCBwZXJmb3JtYW5jZSBmb3IgTVBDNTIwMCBzeXN0ZW1zLiBFbmFibGVkIGZvciBJY2VDdWJlCiAgYnkgZGVmYXVsdC4KCiogUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMzAgQXVnIDIwMDQ6CiAgLSBJbXByb3ZlIHBsYXRmb3JtLlMgY29kZSBmb3Igb21hcDE1MTBpbm4gdGhhdCBkZXRlY3RzIHdoZXRoZXIgY29kZQogICAgaXMgcnVubmluZyBmcm9tIFNEUkFNIG9yIG5vdC4gUGF0Y2ggYWxsb3dzIFNEUkFNIHRvIGJlIGNvbmZpZ3VyZWQKICAgIGlmIGNvZGUgaXMgcnVubmluZyBvdXQgb2YgU1JBTSBhdCAweDIwMDAwMDAwLgoKKiBQYXRjaCBieSBGcmVkZXJpY2sgS2xhdHQsIDMwIEF1ZyAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgV2luZCBSaXZlciBTQkM4NTQwL1NCQzg1NjAgYm9hcmRzCgoqIENvbmZpZ3VyZSBTWDEgYm9hcmQgdG8gdXNlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKCiogUGF0Y2hlcyBieSBNaWNoYWVsIEJlbmR6aWNrLCAzMCBBdWcgMjAwNDoKICAtIENvbmZpZ3VyZSBvbWFwMTUxMGlubiBib2FyZCB0byB1c2UgZHJpdmVycy9jZmlfZmxhc2guYwogIC0gTWFrZSBkcml2ZXJzL2NmaV9mbGFzaC5jIHByb3RlY3QgZW52aXJvbm1lbnQgYW5kIHJlZHVuZGFudAogICAgZW52aXJvbm1lbnQuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIzIEp1biAyMDA0OgogIC0gQWRkIHNjcmlwdCAodG9vbHMvaW1nMmJyZWMuc2gpIHRvIHByb2dyYW1tIFUtQm9vdCBpbnRvCiAgICAoU3luY2gpRmxhc2ggdXNpbmcgdGhlIEJvb3RzdHJhcCBNb2RlIG9mIHRoZSBNQzkzMjhNWDEvTAoKKiBQYXRjaGVzIGJ5IFNjb3R0IE1jTnV0dCwgMjQgQXVnIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5pb3MtSUkgcHJvY2Vzc29ycy4KICAtIEFkZCBzdXBwb3J0IGZvciBQc3llbnQgUENJLTU0NDEgYm9hcmQuCiAgLSBBZGQgc3VwcG9ydCBmb3IgUHN5ZW50IFBLMUMyMCBib2FyZC4KCiogUGF0Y2hlcyBieSBKb24gTG9lbGlnZXIsIDI0IEF1ZyAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBNUEM4NTQxIGFuZCBNUEM4NTU1IENEUyBib2FyZHMKICAtIENsZWFudXAgZXRoP2FkZHIgaGFuZGxpbmc6IG1ha2UgZGVwZW5kZW50IG9uIENPTkZJR19FVEg/QUREUgogIC0gQ29udmVydCBNUEM4NXh4QURTIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgogIC0gRml4IFBDSSB3aW5kb3cgb24gTVBDODV4eDsgcmVtb3ZlIHVubmVlZGVkIFBDSSBpbml0aWFsaXphdGlvbgogICAgZnJvbSBib2FyZF9lYXJseV9pbml0X2YoKQogIC0gUHJvdmlkZSBTVyB3b3JrYXJvdW5kIGZvciBQQ0kgaW5pdGlhbGl6YXRpb24gb24gODV4eCBDRFMKCiogUGF0Y2hlcyBieSBHZW9yZ2UgRy4gRGF2aXMsIDI0IEF1ZyAyMDA0OgogIC0gRW5hYmxlIHJhbWRpc2svaW5pdHJkIHRhZ2dlZCBwYXJhbSBzdXBwb3J0IGZvciBvbWFwMTYxMGgyX2NvbmZpZwogIC0gUmVtb3ZlIHN0YXRpYyBuZXR3b3JrIHNldHVwIGRlZmF1bHRzIGZyb20gbXgxYWRzX2NvbmZpZwogIC0gdXBkYXRlIEFSTSBib2FyZHMgdG8gdXNlIGNvbnN0YW50cyBmcm9tIG1hY2gtdHlwZXMuaAoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMDQgT2N0IDIwMDQ6CiAgLSBmaXggSTJDIG9uIGF0OTFybTkyMDAKICAtIGFkZCBzdXBwb3J0IGZvciBSaWNvaCBSUzVDMzcyQSBSVEMKCiogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDAxIE9jdCAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIENNQyBQVTIgYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciBJMkMgb24gYXQ5MXJtOTIwMAoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMjggU2VwIDIwMDQ6CiAgZml4IGJhdWRyYXRlIGhhbmRsaW5nIG9uIGF0OTFybTkyMDAKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjIgQXVnIDIwMDQ6CiAgLSByZW1vdmUgWlBDLjE5MDAgYm9hcmQtc3BlY2lmaWMgZmxhc2ggZHJpdmVyOwogICAgc3dpdGNoIHRoZSBwb3J0IHRvIGdlbmVyaWMgQ0ZJIGRyaXZlcjsKICAtIHBvcnQgY2xlYW4tdXAKCiogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6CiAgQWRkIGNhbGNfZmJzaXplKCkgZnVuY3Rpb24gdXNlZCB3aXRoIFZJREVPTEZCX1RBRyBvbiBUUkFCCgoqIENsZWFuIHVwIHRvb2xzL2JtcF9sb2dvLmMgdG8gbm90IGFkZCB0cmFpbGluZyB3aGl0ZSBzcGFjZQoKKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAyMSBBdWcgMjAwNDoKICAtIEdyb3VwIGNvbW1vbiBmcmFtZWJ1ZmZlciBmdW5jdGlvbnMgaW4gY29tbW9uL2xjZC5jCiAgLSBHcm91cCBjb21tb24gZnJhbWVidWZmZXIgbWFjcm9zIGFuZCAjZGVmaW5lcyBpbiBpbmNsdWRlL2xjZC5oCiAgLSBQcm92aWRlIGNhbGNfZmJzaXplKCkgZm9yIHZpZGVvIEFUQUcKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDIxIEF1Z3VzdCAyMDA0OgogIC0gRml4IGEgdHlwbyBpbiBSRUFETUUKICAtIEFsaWduICIoUk8pIiBvdXRwdXQgZm9yICJmbGluZm8iIGFmdGVyICJwcm90ZWN0IG9uIgogIC0gQWRkIFJFU0VUIHN1cHBvcnQgZm9yIFJQWGxpdGVfRFcgYm9hcmQ7IGFkanVzdCBDUFU6QlVTIGZyZXF1ZW5jeQogICAgcmF0aW8gMToxIHdoZW4gY29yZSBmcmVxdWVuY3kgbGVzcyB0aGFuIDUwTUh6CgoqIFBhdGNoZXMgYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6CiAgLSBmaXggc29tZSAidXNlIG9mIGxhYmVsIGF0IGVuZCBvZiBjb21wb3VuZCBzdGF0ZW1lbnQiIHdhcm5pbmdzCiAgLSBEZWZpbmUgdHlwZSBvZiBMQ0QgcGFuZWwgb24gbHViYm9jayBib2FyZCBpZiBDT05GSUdfTENEIGlzIHVzZWQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTYgQXVnIDIwMDQ6CiAgLSBJbnRyb2R1Y2luZyB0aGUgY29uY2VwdCBvZiBTb0NzICIuL2NwdS8kKENQVSkvJChTT0MpIgogIC0gY3JlYXRpbmcgc3ViZGlycyBmb3IgU29DcyAuL2NwdS9hcm05MjB0L2lteCBhbmQgLi9jcHUvYXJtOTIwdC9zM2MyNHgwCiAgLSBtb3ZpbmcgU29DIHNwZWNpZmljIGNvZGUgb3V0IG9mIGNwdS9hcm05MjB0LyBpbnRvIGNwdS9hcm05MjB0LyQoU09DKS8KICAtIG1vdmluZyBkcml2ZXJzL3MzYzI0eDBfaTJjLmMgYW5kIGRyaXZlcnMvc2VyaWFsX2lteC5jIG91dCBvZiBkcml2ZXJzLwogICAgaW50byBjcHUvYXJtOTIwdC8kKFNPQykvCgoqIFBhdGNoZXMgYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6CiAgLSBBZGRlZCBzdXBwb3J0IGZvciBib3RoIDggYW5kIDE2IGJpdCBtb2RlIGFjY2VzcyB0byBTeXN0ZW0gQUNFIENGCiAgICB0aHJvdWdoIE1QVS4KICAtIEZpeGVkIG1pc3NpbmcgU3lzdGVtIEFDRSBDRiBkZXZpY2UgZHVyaW5nIGdldCBGQVQgcGFydGl0aW9uIGluZm8KICAgIGluIGZhdF9yZWdpc3Rlcl9kZXZpY2UgZnVuY3Rpb24uCiAgLSBFbmFibGVkIFN5c3RlbSBBQ0UgQ0Ygc3VwcG9ydCBvbiBNTDMwMC4KCiogUGF0Y2ggYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6CiAgU3luY2ggZGVmaW5lcyBmb3Igc2F2ZWVudiBhbmQgZG9fc2F2ZWVudiBmdW5jdGlvbnMgc28gdGhleSBnZXQKICBjb21waWxlZCB1bmRlciB0aGUgc2FtZSBzdGF0ZW1lbnQuCgoqIFBhdGNoIGJ5IFNlYW4gQ2hhbmcsIDA5IEF1ZyAyMDA0OgogIC0gQWRkZWQgSTJDIHN1cHBvcnQgZm9yIE1MMzAwLgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgTUwzMDAgdG8gcmVhZCBvdXQgaXRzIGVudmlyb25tZW50IGluZm9ybWF0aW9uCiAgICBzdG9yZWQgb24gdGhlIEVFUFJPTS4KICAtIEFkZGVkIHN1cHBvcnQgdG8gdXNlIGJvYXJkIHNwZWNpZmljIHBhcmFtZXRlcnMgYXMgcGFydCBvZgogICAgVS1Cb290J3MgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCiAgLSBVcGRhdGVkIE1MRCBmaWxlcyB0byBzdXBwb3J0IGNvbmZpZ3VyYXRpb24gZm9yIG5ldyBmZWF0dXJlcwogICAgYWJvdmUuCgoqIFBhdGNoZXMgYnkgVHJhdmlzIFNhd3llciwgMDUgQXVnIDIwMDQ6CiAgLSBSZW1vdmUgaW5jb3JyZWN0IGJyaWRnZSBzZXR0aW5ncyBmb3IgZXRoIGdyb3VwIDYKICAtIEFkZCBjYWxsIHRvIHNldHVwIGJyaWRnZSBpbiBwcGNfNDQweF9ldGhfaW5pdGlhbGl6ZQogIC0gRml4IHBwY180NDB4X2V0aF9pbml0IHRvIHJlc2V0IHRoZSBwaHkgb25seSBpZiBpdHMgdGhlCiAgICBmaXJzdCB0aW1lIHRocm91Z2gsIG90aGVyd2lzZSwganVzdCBjaGVjayB0aGUgcGh5IGZvciB0aGUKICAgIGF1dG9uZWdvdGlhdGVkIHNwZWVkL2R1cGxleC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgbmV0Y29uc29sZQogIC0gb25seSBwcmludCB0aGUgc3BlZWQvZHVwbGV4IHRoZSBmaXJzdCB0aW1lIHRoZSBwaHkgaXMgcmVzZXQuCgoqIFBhdGNoIGJ5IFNobG9tbyBLdXQsIDI5IE1hciAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBNS1MgSW5zdHJ1bWVudHMgIlF1YW50dW0iIGJvYXJkCgoqIEZpeCBidWlsZCBwcm9ibGVtIHdpdGggQ29nZW50IGJvYXJkczsKICBhdm9pZCB1c2luZyA8YXNtL2J5dGVvcmRlci5oPiB3aGVuIHVzaW5nIHRoZSBob3N0IGNvbXBpbGVyCgoqIFBhdGNoIGJ5IEdhbmFwYXRoaSBDLCAwNCBBdWcgMjAwNDoKICBGaXggTkZTIHRpbWVvdXQgaXNzdWUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTkgSnVsIDIwMDQ6CiAgLSBGaXggaG9zdCB0b29scyBidWlsZGluZyBpbiBDeWd3aW4gZW52aXJvbm1lbnQKICAtIEZpeCBoZWFkZXIgZmlsZXMgc2VhcmNoIG9yZGVyIGZvciBob3N0IHRvb2xzCgoqIFBhdGNoIGJ5IFRvbSBBcm1pc3RlYWQsIDE5IEp1bCAyMDA0OgogIEZpeCBrZ2RiLlMgc3VwcG9ydCBmb3IgNzR4eF83NXggY3B1CgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTUgSnVsIDIwMDQ6CiAgRml4IE1QQzg1eHggSTJDIGRyaXZlcgoKKiBGaXggcHJvYmxlbXMgd2l0aCBDRFJPTSBkcml2ZSBhcyBzbGF2ZSBkZXZpY2Ugb24gTGl0ZTUyMDAgSURFIGJ1cy4KCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTUgSnVseSAyMDA0CiAgU2V0IHRoZSBQQ0kgY2xhc3MgY29kZSBmb3IgSlNFIGJvYXJkIGFzIHBhcnQgb2YgUENJIGludGVyZmFjZSBzZXR1cAoKKiBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAxNSBKdWwgMjAwNDoKICBGaXggcHJvYmxlbSB3aXRoIHdyaXRlcyB3aXRoIG9kZCBzaXplcyBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jIHdoZW4KICBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSBpcyBzZXQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTMgSnVsIDIwMDQ6CiAgQWxsb3cgY2xvY2sgc2V0dGluZyBvbiBNUEM4NjYvTVBDODg1IHNlcmllcyBjaGlwcyBhY2NvcmRpbmcgdG8KICBlbnZpcm9ubWVudCB2YXJpYWJsZSBgY3B1Y2xrJwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMCBBcHIgMjAwNDoKICBSZW1vdmUgdW5uZWNlc3NhcnkgcmVkZWZpbmUgb2YgQ1BNX0RBVEFPTkxZX1NJWkUgZm9yIE1QQzgyNngKCiogUGF0Y2ggYnkgVmluY2VudCBEdWJleSwgMjQgU2VwIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHhhZW5pYXggYm9hcmQKCiogQWRkIGNvbW1lbnQgYWJvdXQgbm9uLUdQTCBjaGFyYWN0ZXIgb2Ygc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgdG8KICBDT1BZSU5HIGZpbGUKCiogRml4IEZFQyBldGhlcm5ldCBwcm9ibGVtIG9uIE5TQ1UgYm9hcmQuCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAwOSBTZXAgMjAwNDoKICBhbGxvdyB0byB1c2UgVVNBUlQxIGFzIGNvbnNvbGUgcG9ydCBvbiBhdDkxcm05MjAwZGsgYm9hcmRzCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgU2VwIDIwMDQ6CiAgVXBkYXRlIEFSNDA1IGJvYXJkLgoKKiBGaXggU3lzQ2xrIGhhbmRsaW5nIGZvciBQUENoYW1lbGVvbiBhbmQgQ0FUY2VudGVyIGJvYXJkcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAwOCBTZXAgMjAwNDoKICBVcGRhdGUgZXRhZ3MgYnVpbGQgdGFyZ2V0CgoqIEltcHJvdmUgTmV0Q29uc29sZSBzdXBwb3J0OiBhZGQgc3VwcG9ydCBmb3IgYnJvYWRjYXN0IGRlc3RpbmF0aW9uCiAgYWRkcmVzcyBhbmQgYnVmZmVyZWQgaW5wdXQuCgoqIENsZWFudXAgY29tcGlsZXIgd2FybmluZ3MgZm9yIEdDQyAzLjMueCBhbmQgbGF0ZXIKCiogRml4IHByb2JsZW0gaW4gY21kX2pmZnMyLmMgaW50cm9kdWNlZCBieSBDRkdfSkZGU19TSU5HTEVfUEFSVCBwYXRjaAoKKiBBZGQgc3VwcG9ydCBmb3IgSURTICJOQzY1MCIgYm9hcmQKCiogQWRkIGF1dG9tYXRpYyB1cGRhdGUgc3VwcG9ydCBmb3IgTFdNT04gYm9hcmQKCiogQ2xlYXIgQmxvY2sgTG9jay1CaXRzIHdoZW4gZXJhc2luZyBmbGFzaCBvbiBMV01PTiBib2FyZC4KCiogRml4IHJldHVybiBjb2RlIG9mICJmYXRsb2FkIiBjb21tYW5kCgoqIEVuYWJsZSBNU0RPUy9WRkFUIGZpbGVzeXN0ZW0gc3VwcG9ydCBmb3IgTFdNT04gYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDMgQXVnIDIwMDQ6CiAgY2hhbmdlIHRpbWluZyBmb3IgU001MDEgZ3JhcGhpY3MgY29udHJvbGxlciBvbiBUUU01MjAwIG1vZHVsZQoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAxMyBKdWx5IDIwMDQ6CiAgLSBUb3RhbDUyMDAgTENEIG5vdyBydW4gaW4gbGl0dGxlIGVuZGlhbiBtb2RlLiBFbmRpYW5lc3MgY29udmVyc2lvbgogICAgaXMgZG9uZSBpbiBoYXJkd2FyZS4KICAtIFJlbW92ZWQgbGFzdCByZWZlcmVuY2UgdG8gImNvbnNvbGUiIGVudmlyb25tZW50IHZhcmlhYmxlLgoKKiBQYXRjaGVzIGJ5IExhcnMgTXVuY2gsIDEyIEp1bCAyMDA0OgogIC0gbW92ZSBhdDQ1LmMgdG8gYm9hcmQvYXQ5MXJtOTIwMGRrLyBzaW5jZSB0aGlzIGlzIGF0OTFybTkyMDBkawogICAgYm9hcmQgc3BlY2lmaWMKICAtIHNwbGl0IG91dCB0aGUgTFhUOTcxQSBQSFkgZnJvbSBuc185NzUwX2V0aC5oCiAgLSBzcGxpdCB0aGUgZG05MTYxIHBoeSBwYXJ0IG91dCBvZiBhdDkxcm05MjAwX2V0aGVyLmMKCiogUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTIgSnVsIDIwMDQ6CiAgUmVwbGFjZWQgaGFyZGNvZGVkIFBMMDExIGNsb2NrIGZyZXF1ZW5jeSB3aXRoIGNvbmZpZyB2YXJpYWJsZS4KICBGaXhlZCB3cm9uZyBDT05GSUdfQ01EX0RGTCBkb2MuCgoqIFBhdGNoIGJ5IFRob21hcyBWaWVod2VnZXIsIDA5IEp1biAyMDA0OgogIG1ha2UgaXQgcG9zc2libGUgdG8gcmVtb3ZlIGNocGFydCB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIHBhcnRpdGlvbgoKKiBBZGQgc3VwcG9ydCBmb3IgY29uc29sZSBvdmVyIFVEUCAoY29tcGF0aWJsZSB0byBJbmdvIE1vbG5hcidzCiAgbmV0Y29uc29sZSBwYXRjaCB1bmRlciBMaW51eCkKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNiBKdWwgMjAwNDoKICAtIHN1cHBvcnQgbGFyZ2VyIEREUiBtZW1vcmllcyB1cCB0byAyRyBvbiB0aGUgUEM4NTQwLzg1NjBBRFMgYW5kCiAgICBTVFhHUDMgYm9hcmRzCiAgLSBNYWRlIE1QQzg1NDAvODU2MEFEUyBiZSAzM01oeiBQQ0kgYnkgZGVmYXVsdC4KICAtIFJlbW92ZWQgbW9sZHkgQ09ORklHX1JBTV9BU19GTEFTSCwgQ0ZHX0ZMQVNIX1BPUlRfV0lEVEhfMTYKICAgIGFuZCBDT05GSUdfTDJfSU5JVF9SQU0gb3B0aW9ucy4KICAtIFJlZmFjdG9yIExvY2FsIEJ1cyBpbml0aWFsaXphdGlvbiBvdXQgb2YgU0RSQU0gc2V0dXAuCiAgLSBSZS1pbXBsZW1lbnQgbmV3IHZlcnNpb24gb2YgTEJDMTEvRERSMTEgZXJyYXRhIHdvcmthcm91bmRzLgogIC0gTW92ZWQgYm9hcmQgc3BlY2lmaWMgUENJIGluaXQgcGFydHMgb3V0IG9mIENQVSBkaXJlY3RvcnkuCiAgLSBBZGRlZCBUTEIgZW50cnkgZm9yIFBDSS0xIElPIE1lbW9yeQogIC0gVXBkYXRlZCBSRUFETUUubXBjODV4eGFkcwoKKiBQYXRjaCBieSBTYXNjaGEgSGF1ZXIsIDI4IEp1bjoKICAtIGFkZCBnZW5lcmljIHN1cHBvcnQgZm9yIE1vdG9yb2xhIGkuTVggYXJjaGl0ZWN0dXJlCiAgLSBhZGQgc3VwcG9ydCBmb3IgbXgxYWRzLCBteDFmczIgYW5kIHNjYjkzMjggYm9hcmRzCgoqIFBhdGNoZXMgYnkgTWFyYyBMZWVtYW4sIDIzIEp1bCAyMDA0OgogIC0gQWRkIGRlZmluZSBmb3IgdGhlIFBDSS9NZW1vcnkgQnVmZmVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKICAtIGNvcnJlY3RlZCBjb21tZW50cyBpbiBjcHUvbXBjODI0eC9jcHVfaW5pdC5jCgoqIEFkZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzZXJpYWwgaW50ZXJmYWNlcwogIChmb3IgZXhhbXBsZSB0byBhbGxvdyBtb2RlbSBkaWFsLWluIC8gZGlhbC1vdXQpCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgSnVsIDIwMDQ6CiAgY3B1L3BwYzR4eC9zZHJhbS5jIHJld3JpdHRlbiBub3cgdXNpbmcgZ2V0X3JhbV9zaXplKCkKCiogRml4IE5TQ1UgY29uZmlnOyBhZGQgZXRoZXJuZXQgd2FrZXVwIGNvZGUuCgoqIEFkZCBsaW5rIGZvciBwcmVsb2FkZXIgZm9yIE1vdG9yb2xhIENvbGRGaXJlIHRvIFJFQURNRS5tNjhrCgoqIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDEyIEp1bCAyMDA0OgogIGZpeCBvdXRwdXQgZm9ybWF0dGluZyBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDAyIEp1bCAyMDA0OgogIEZpeCBsb3dib290IChhZ2Fpbikgb24gTVBDNXh4eAoKKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAwNyBKdWwgMjAwNDoKICByZWxvY2F0ZSBleGNlcHRpb24gdmVjdG9ycyBvbiBhcm03MjB0IGlmIG5lZWRlZAoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDA2IEp1bCAyMDA0OgogIC0gdXBkYXRlIG1hY2gtdHlwZXMuaCB0byBsYXRlc3QgYXJtLmxpbnV4Lm9yZy51ayBtYXN0ZXIgbGlzdAogIC0gU2V0IGNvcnJlY3QgT01BUDE2MTAgYmlfYXJjaF9udW1iZXIgZm9yIGJ1aWxkIHRhcmdldAoKKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAwNiBKdWwgMjAwNDoKICBldmI0NTEwOiBhZGQgc3VwcG9ydCBmb3IgdGltZXIgaW50ZXJydXB0OyBjbGVhbnVwCgoqIFBhdGNoIGJ5IERhbiBQb2lyb3QsIDA2IEp1bCAyMDA0OgogIEZpeCBzYmM4MjYwIGVudmlyb25tZW50IHZhcmlhYmxlcwoKKiBDbGVhbnVwIHJlZHVuZGFuZCAiY29uc29sZSIgZW52aXJvbm1lbnQgdmFyaWFibGUKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDUgSnVsIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBUb3RhbDUxMDAncyBhbmQgVG90YWw1MjAwJ3MgTENEIHNjcmVlbgoKKiBQYXRjaGVzIGJ5IERhbiBFaXNlbmh1dCwgMDEgSnVsIDIwMDQ6CiAgLSBSRUFETUUgZml4ZXMuCiAgLSBNb3ZlIGRvYzIwMDAuaCBpbmNsdWRlIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZyBvbiBzb21lIGJvYXJkcwoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwMSBKdWwgMjAwNDoKICBBZGRlZCBzdXBwb3J0IGZvciBUb3RhbDUxMDAgYW5kIFRvdGFsNTIwMCAoUmV2LjEgYW5kIFJldi4yKQogIE1HVDUxMDAgYW5kIE1QQzUyMDAgYmFzZWQgRnJlZXNjYWxlIHBsYXRmb3Jtcy4KCiogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDAxIEp1bCAyMDA0OgogIEFkZCBpbml0aWFsaXphdGlvbiBmb3IgSW50ZWdyYXRvciBhbmQgdmVyc2F0aWxlIGJvYXJkIGZpbGVzLgoKKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAwMSBKdW4gMjAwNDoKICBGaXggVkZEIEZCIGFsbG9jYXRpb24sIGFkZCBMQ0QgRkIgYWxsb2NhdGlvbiBvbiBBUk0KCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMzAgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFRRTTUyMDAgYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjkgSnVuIDIwMDQ6CiAgQWRkIGxvb3B3IGNvbW1hbmQ6IGluZmluaXRlIHdyaXRlIGxvb3Agb24gYWRkcmVzcyByYW5nZQoKKiBQYXRjaGVzIGJ5IFlhc3VzaGkgU2hvamksIDI5IEp1biAyMDA0OgogIC0gYWRkIGVtcHR5IGluY2x1ZGUvYXNtLW1pY3JvYmxhemUvcHJvY2Vzc29yLmgKICAtIGFkZCB0byBDUkVESVRTIGFuZCBNQUlOVEFJTkVSUwogIC0gYWRkIGdkIGluaXRpYWxpemF0aW9uCiAgLSBhZGQgTWljcm9CbGF6ZSBhbmQgU1VaQUtVIGJvYXJkIHRvIE1BS0VBTEwgc2NyaXB0CiAgLSBhZGQgcmVzZXQgc3VwcG9ydCBmb3IgU1VaQUtVCiAgLSBhZGQgZmx1c2hfY2FjaGUoKSBmb3IgTWljcm9CbGF6ZQogIC0gYWRkIENGR19GTEFTSF9TSVpFIHRvIGluY2x1ZGUvY29uZmlncy9zdXpha3UuaCBzaW5jZSB3ZSBoYXZlIGZpeGVkCiAgICBzaXplIGZsYXNoIG1lbW9yeSBvbiBTVVpBS1UKCiogUGF0Y2ggYnkgUHJha2FzaCBLdW1hciwgMjcgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBQWEEyNTAgYmFzZWQgSW50cmluc3ljIENlcmYgYm9hcmQuCgoqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDI3IEp1biAyMDA0OgogIGZpeCBjb21tZW50IGluIGluY2x1ZGUvY29tbW9uLmgKCiogUmVuYW1lIFNCQzg1NjAgaW50byBzYmM4NTYwIGZvciBjb25zaXN0ZW5jeQoKKiBQYXRjaCBieSBEYW5pZWwgUG9pcm90LCAyNCBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgV2luZCBSaXZlcidzIHNiYzgyNDAgYm9hcmQKCiogUGF0Y2hlcyBieSBZYXN1c2hpIFNob2ppLCAyNiBKdW4gMjAwNDoKICAtIGRyaXZlcnMvc2VyaWFsX3h1YXJ0bGl0ZS5jOiBmaXggInJldHVybiAwIiBpbiB2b2lkIGZ1bmN0aW9uCiAgLSBhZGQgbWljcm9ibGF6ZSBzdXBwb3J0IHRvIG1raW1hZ2UgdG9vbAoKKiBQYXRjaCBieSBGcmVkIEtsYXR0LCAyNSBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgV2luZFJpdmVyJ3Mgc2JjODU2MCBib2FyZAoKKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAyNCBKdW4gMjAwNAogIFNtYWxsIEJ1Z3MgZml4ZXMgZm9yICJhdDkxcm05MjAwZGsiIGJvYXJkOgogIC0gVGltaW5nIG1vZGlmaWNhdGlvbnMgZm9yIFNQSSBEYXRhRmxhc2ggYWNjZXNzCiAgLSBGaXggTkFORCBmbGFzaCBkZXRlY3Rpb24gYnVnCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDI0IEp1biAyMDA0OgogIEFkZCBTdXBwb3J0IGZvciBGbGFzaCBBVDQ5QlY2NDE2IGZvciBBVDkxUk05MjAwREsgYm9hcmQKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNyBKdW5lIDIwMDQ6CiAgQ29tcGxldGlvbiBvZiB0aGUgODU0MEFEUy84NTYwQURTIHVwZGF0ZXM6CiAgRml4IHNvbWUgUENJIGFuZCBSYXBpZCBJL08gbWVtb3J5IG1hcHMsCiAgSW5pdGlhbGl6ZSBib3RoIFRTRUMgMSBhbmQgMiwKICBJbml0aWFsaXplIFNEUkFNCiAgVXBkYXRlIE1BSU5UQUlORVIgZm9yIDg1eHggYm9hcmRzIGFuZCBSRUFETUUubXBjODV4eGFkcwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNiBKdW4gMjAwNDoKICBSZW1vdmUgb2Jzb2xldGUgQWRkZXJJSSBwb3J0IHdoaWNoIHdhcyBzdXBlcnNlZGVkIGJ5IHVuaWZpZWQKICBBZGRlcklJL0FkZGVyODd4IHBvcnQKCiogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDE2IEp1biAyMDA0OgogIEZpeCBnY2MtMy4zLjMgd2FybmluZ3MgZm9yIHNtYzkxMTExLmMKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMiBKdWwgMjAwNDoKICAtIEZpeCBidWcgaW4gNDA1IGV0aGVybmV0IGRyaXZlcjsgYWxsb2NhdGVkIGRhdGEgbm90IGNsZWFyZWQhCiAgLSBGaXggcHJvYmxlbSBpbiA0MDUgaTJjIGRyaXZlcjsgZG9uJ3QgdHJ5IHRvIHByaW50IHdpdGhvdXQgY29uc29sZSEKCiogUGF0Y2ggYnkgUGF1bCBSdWhsYW5kLCAxMSBKdW4gMjAwNDoKICBSZW1vdmUgZGVidWcgY29kZSBmcm9tICdib2FyZC9scGQ3YTQweC9mbGFzaC5jJwoKKiBQYXRjaCBieSBBbmRyZWEgTWFyc29uLCAxMSBKdW4gMjAwNDoKICBVcGRhdGUgZm9yIFBQQ2hhbWVsZW9uIGJvYXJkOgogIC0gc3VwcG9ydCBmb3IgU3lzQ2xrIEAgMjVNSHoKICAtIHN1cHBvcnQgZm9yIFNpbGljb24gTW90aW9uIFNNNzEyIFZHQSBjb250cm9sbGVyCiAgLSBzb21lIGNsZWFuIHVwcwoKKiBQYXRjaGVzIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDEwIEp1biAyMDA0OgogIC0gZml4IHByb2JsZW1zIHdpdGggZXhhbXBsZXMvc3R1YnMuYyBmb3IgR0NDID49IDMuNAogIC0gZml4IHByb2JsZW1zIHdpdGggZ2QgaW5pdGlhbGl6YXRpb24KCiogUGF0Y2ggYnkgQ3VydCBCcnVuZSwgMTcgTWF5IDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgU2Ftc3VuZyBTM0M0NTEwQiBDUFUgKEFSTTd0ZG1pIGJhc2VkIFNvQykKICAtIEFkZCBzdXBwb3J0IGZvciBFU1BELUluYy4gRVZCNDUxMCBCb2FyZAoKKiBQYXRjaCBieSBNYXJjIExlZW1hbiwgMTEgTWF5IDIwMDQ6CiAgRml4IGZvciBNUEM4MjQ1IC0gcmVhZGluZyBQUEMgTWVtb3J5IGZyb20gYW5vdGhlciBkZXZpY2Ugd2l0aCB0aGUKICBQUEMgYXMgUENJIHRhcmdldCBkZXZpY2UgY29ycnVwdHMgZGF0YSBkdWUgdG8gaW50ZXJlbmFsIGhhcmR3YXJlCiAgYnVmZmVyaW5nLgoKKiBGaXggImNscyIgY29tbWFuZCB3aGVuIHVzZWQgd2l0aCBzcGxhc2ggc2NyZWVuCgoqIEluY3JlYXNlIE5GUyBkb3dubG9hZCB0aW1lb3V0IChub3cgMSBtaW4gLSAxMCBzZWMgaXMgdG8gc2hvcnQgZm9yIGEKICBzbG93IGRvd25sb2FkIG9mIGEgYmlnIGltYWdlKQoKKiBBZGQgImNscyIgZnVuY3Rpb24gdG8gTVBDODIzIExDRCBkcml2ZXIgc28gd2UgY2FuIHJlaW5pdGlhbGl6ZSB0aGUKICBkaXNwbGF5IGV2ZW4gYWZ0ZXIgc2hvd2luZyBhIGJpdG1hcAoKKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDA0IEp1biAyMDA0OgogIC0gRERSIFJhbSBzdXBwb3J0IGZvciBQTTUyMCAoTVBDNTIwMCkKICAtIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBmbGFzaCB0eXBlcyAoUE01MjApCiAgLSBVU0IgLyBJREUgLyBDRi1DYXJkIC8gRGlza09uQ2hpcCBzdXBwb3J0IGZvciBQTTUyMAogIC0gOCBiaXQgYm9vdCByb20gc3VwcG9ydCBmb3IgUE01MjAvQ0U1MjAKICAtIEFkZCBhdXRvIFNEUkFNIG1vZHVsZSBkZXRlY3Rpb24gZm9yIE1pY3JvU3lzIENQQzQ1IGJvYXJkIChNUEM4MjQ1KQogIC0gSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgQ1BDNDUKICAtIHN1cHBvcnQgb2YgbmV3IGZsYXNoIHR5cGUgKDI4RjE2MEMzVCkgZm9yIENQQzQ1CgoqIEZpeCBmbGFzaCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBMaW51eCBmb3IgUFBDaGFtZWxlb24gYm9hcmQKCiogUmVtb3ZlIGV0aF9pbml0KCkgZnJvbSBsaWJfYXJtL2JvYXJkLmM7IGl0J3MgZG9uZSBpbiBuZXQubmV0LmMuCgoqIFBhdGNoIGJ5IFBhdWwgUnVobGFuZCwgMTAgSnVuIDIwMDQ6CiAgZml4IHN1cHBvcnQgZm9yIExvZ2ljIFNESy1MSDdBNDA0IGJvYXJkIGFuZCBjbGVhbiB1cCB0aGUKICBMSDdBNDA0IHJlZ2lzdGVyIG1hY3Jvcy4KCiogUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrLCAxMCBKdW4gMjAwNDoKICBNb2RpZnkgY29kZSB0byBzZWxlY3QgY29ycmVjdCBzZXJpYWwgY2xvY2sgb24gU2FuZHBvaW50ODI0NQoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEwIEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBJbnRlbCBLMyBzdHJhdGEgZmxhc2guCgoqIFBhdGNoIGJ5IFRob21hcyBCcmFuZCwgMTAgSnVuIDIwMDQ6CiAgRml4ICJsb2FkcyIgY29tbWFuZCBvbiBESzFTMTAgYm9hcmQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDkgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIDhNQiBmbGFzaCBTSU1NIGFuZCBKRkZTMiBmaWxlIHN5c3RlbSBvbgogIE1vdG9yb2xhIEZBRFMgYm9hcmQgYW5kIGl0cyBkZXJpdmF0aXZlcyAoTVBDODZ4QURTLCBNUEM4ODVBRFMpLgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwOSBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQW5hbG9ndWUmTWljcm8gQWRkZXI4N3ggYW5kIHRoZSBvbGRlciBBZGRlcklJIGJvYXJkLgoKKiBQYXRjaCBieSBNaW5nLUxlbiBXdSwgMDkgSnVuIDIwMDQ6CiAgQWRkIHN1cHBwb3J0IGZvciBNQzkzMjggKERhcmdvbmJhbGwpIENQVSBhbmQgTW90b3JvbGEgTVgxQURTIGJvYXJkCgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAwOSBKdW4gMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkCiAgLSBVcGRhdGUgRkxBU0ggZHJpdmVyIGZvciA0KkFNMjlETDMyM0RCOTBWSQogIC0gQWRkIG9wdGlvbiBjb25maWd1cmF0aW9uIG9mIENGR19FTlZfSVNfSU5fTlZSQU0gb24gUlBYbGl0ZV9EVyBib2FyZAoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwOCBKdW5lIDIwMDQ6CiAgLSBNYWtlIE1QQzUyMDAgYm9hcmRzIGV2YWx1YXRlIHRoZSBTVlIgdG8gcHJpbnQgcHJvY2Vzc29yIG5hbWUgYW5kCiAgICB2ZXJzaW9uIGluIGNoZWNrY3B1KCkgKGNwdS9tcGM1eHh4L2NwdS5jKS4KCiogUGF0Y2ggYnkgS2FpLVV3ZSBCbG9lbSwgMDYgTWF5IDIwMDQ6CiAgRml4IGVuZGlhbmVzcyBwcm9ibGVtIGluIGNyYW1mcyBjb2RlCgoqIFBhdGNoIGJ5IFRvbSBBcm1pc3RlYWQsIDA0IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBNQVg2OTAwIFJUQwoKKiBQYXRjaGVzIGJ5IExhZGlzbGF2IE1pY2hsLCAwMyBKdW4gMjAwNDoKICAtIGZpeCBjZmlfZmxhc2guYyBvbiBMRSBzeXN0ZW1zCiAgLSBsZXQgJ21ha2UgbXJwcm9wZXInIGRlbGV0ZSB1LWJvb3QuaW1nIGFzIHdlbGwKICAtIHR1cm4gcHJpbnRmIGludG8gZGVidWcgaW4gY2ZpX2ZsYXNoLmMKCiogUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDI4IE1heSAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBFeHlzIFhTRW5naW5lIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE1heSAyMDA0OgogIEZpeCBhIE1QQzV4eHggSTJDIHRpbWluZyBpc3N1ZSBpbiBpMmNfcHJvYmUoKS4KCiogUGF0Y2ggYnkgTGVpZiBMaW5kaG9sbSwgMjcgTWF5IDIwMDQ6CiAgRml4IGJvYXJkX2luaXRfZigpIGZvciBkYmF1MXgwMCBib2FyZC4KCiogUGF0Y2ggYnkgSW1yZSBEZWFrLCAyNiBNYXkgMjAwNDoKICBPbiBPTUFQMTYxMCBwbGF0Zm9ybXMgY2hlY2sgaWYgYm9vdGluZyBmcm9tIFJBTShDUzApIG9yIGZsYXNoKENTMykuCiAgU2V0IGZsYXNoIGJhc2UgYWNjb3JkaW5nbHksIGFuZCBkZWNpZGUgd2hldGhlciB0byBkbyBvciBza2lwIGJvYXJkCiAgc3BlY2lmaWMgc2V0dXAgc3RlcHMuCgoqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAyNiBNYXkgMjAwNDoKICBBZGQgbWlzc2luZyBkZWZpbmUgaW4gaW5jbHVkZS9hc20tbTY4ay9nbG9iYWxfZGF0YS5oCgoqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAyNSBNYXkgMjAwNDoKICBBZGQgbWlzc2luZyBmdW5jdGlvbnMgZ2V0X3RpY2tzKCkgYW5kIGdldF90YmNsaygpIGluIGxpYl9tNjhrL3RpbWUuYwoKKiBQYXRjaCBieSBQYXVsIFJ1aGxhbmQsIDI0IE1heSAyMDA0OgogIGZpeCBTRFJBTSBpbml0aWFsaXphdGlvbiBmb3IgTFBEN0E0MDAgYm9hcmQuCgoqIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDIwIE1heSAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBlbnZpcm9ubWVudCBpbiBOQU5EIGZsYXNoCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIwIE1heSAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBJbnRlcnBoYXNlIGlTUEFOIGJvYXJkcy4KCiogUGF0Y2hlcyBieSBQYXVsIFJ1aGxhbmQsIDE3IE1heSAyMDA0OgogIC0gQWRkIEkvTyBmdW5jdGlvbnMgdG8gdGhlIHNtYzkxMTExIGV0aGVybmV0IGRyaXZlciB0byBzdXBwb3J0IHRoZQogICAgTG9naWMgTFBEN0E0MHggYm9hcmRzLgogIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBMb2dpYyBab29tIExIN0E0MHggYmFzZWQgU0RLIGJvYXJkKHMpLAogICAgc3BlY2lmaWNhbGx5IHRoZSBMUEQ3QTQwMC4KCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE1IE1heSAyMDA0OgogIC0gY2FsbCBNQUMgYWRkcmVzcyByZWFkaW5nIGNvZGUgYWxzbyBmb3IgU01TQzkxQzExMTsKICAtIG1ha2UgU01TQzkxQzExMSB0aW1lb3V0IGNvbmZpZ3VyYWJsZSwgcmVtb3ZlIGR1cGxpY2F0ZSBjb2RlCiAgLSBmaXggZ2V0X3RpbWVyKCkgZm9yIFBYQQogIC0gdXBkYXRlIGRvYy9SRUFETUUuSkZGUzIKICAtIHVzZSAiYm9vdGZpbGUiIGVudiB2YXJpYWJsZSBhbHNvIGZvciBqZmZzMgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNCBNYXkgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IENTQjQ3MiBib2FyZCAoOE1CIEZsYXNoIFJldikKCiogUGF0Y2ggYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTQgTWF5IDIwMDQ6CiAgLSBmbGFzaC5oOiBtb3JlIGZsYXNoIHR5cGVzIGFkZGVkCiAgLSBpbW1hcF84MjYwLmg6IHNvbWUgYml0cyBhZGRlZCAodXNlZnVsIGZvciBSTUlJKQogIC0gY21kX2NvbmluZm8uYzogdHlwbyBjb3JyZWN0ZWQsIHByaW50ZiAtPiBwdXRzCiAgLSByZWR1Y2VkIHNpemUgYnkgcmVwbGFjaW5nIHNwYWNlcyB3aXRoIHRhYgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEzIE1heSAyMDA0OgogIEFkZCAnaW1nZXh0cmFjdCcgY29tbWFuZDogZXh0cmFjdCBvbmUgcGFydCBvZiBhIG11bHRpIGZpbGUgaW1hZ2UuCgoqIFBhdGNoZXMgYnkgSm9uIExvZWxpZ2VyLCAxMSBNYXkgMjAwNDoKICBEeW5hbWljYWxseSBoYW5kbGUgUkVWMSBhbmQgUkVWMiBNUEM4NXh4IHBhcnRzLgogICAgKEpvbiBMb2VsaWdlciwgMTAtTWF5LTIwMDQpLgogIE5ldyBjb25zaXN0ZW50IG1lbW9yeSBtYXAgYW5kIExvY2FsIEFjY2VzcyBXaW5kb3cgYWNyb3NzIE1QQzg1eHggbGluZS4KICBOZXcgQ0NTUkJBUiBhdCAweEUwMDBfMDAwMCBub3cuCiAgQWRkIFJBUElEIEkvTyBtZW1vcnkgbWFwLgogIE5ldyBtZW1vcnkgbWFwIGluIFJFQURNRS5NUEM4NXh4YWRzCiAgICAoS3VtYXIgR2FsYSwgMTAtTWF5LTIwMDQpCiAgQmV0dGVyIGJvYXJkIGFuZCBDUFUgaWRlbnRpZmljYXRpb24gb24gTVBDODV4eCBib2FyZHMgYXQgYm9vdC4KICAgIChKb24gTG9lbGlnZXIsIDEwLU1heS0yMDA0KQogIFNEUkFNIGNsb2NrIGNvbnRyb2wgZml4ZXMgb24gTVBDODU0MEFEUyAmIE1QQzg1NjAgYm9hcmRzLgogIFNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBNUEM4NTQwQURTICYgTVBDODU2MEFEUyBjbGVhbmVkIHVwLgogICAgKEppbSBSb2JlcnRzb24sIDEwLU1heS0yMDA0KQogIFJld3JpdGUgb2YgdGhlIE1QQzg1eHggVGhyZWUgU3BlZWQgRXRoZXJuZXQgQ29udHJvbGxlciAoVFNFQykgZHJpdmVyLgogIFN1cHBvcnRzIG11bHRpcGxlIFBIWXMuCiAgICAoQW5keSBGbGVtaW5nLCAxMC1NYXktMjAwNCkKICBTb21lIFJFQURNRS5NUEM4NXh4YWRzIHVwZGF0ZXMuCiAgICAoS3VtYXIgR2FsYSwgMTAtTWF5LTIwMDQpCiAgQ29weXJpZ2h0IHVwZGF0ZXMgZm9yICJGcmVlc2NhbGUiCiAgICAoQW5keSBGbGVtaW5nLCAxMC1NYXktMjAwNCkKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTEgTWF5IDIwMDQ6CiAgQWRkIGZsYXNoIHN1cHBvcnQgZm9yIFNUIE0yOVcwNDBCCiAgUmVkdWNlIEpTRSBzcGVjaWZpYyBmbGFzaC5jIHRvIHJlbW92ZSBkZWFkIGNvZGUuCgoqIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAwNCBNYXkgMjAwNDoKICBGaXggY2xlYXJfYnNzIGNvZGUgZm9yIEFSTSBzeXN0ZW1zIChhbGwgZXhjZXB0IHMzYzQ0YjAgd2hpY2gKICBkb2Vzbid0IGNsZWFyIEJTUyBhdCBhbGw/KQoKKiBGaXggInBpbmciIHByb2JsZW0gb24gSU5DLUlQIGJvYXJkLiBTdHJhbmdlIHByb2JsZW06CiAgU29tZXRpbWVzIHRoZSBzdG9yZSB3b3JkIGluc3RydWN0aW9uIGhhbmdzIHdoaWxlIHdyaXRpbmcgdG8gb25lIG9mCiAgdGhlIFN3aXRjaCByZWdpc3RlcnMsIGJ1dCBvbmx5IGlmIHRoZSBuZXh0IGluc3RydWN0aW9uIGlzIDE2LWJ5dGUKICBhbGlnbmVkLiBNb3ZpbmcgdGhlIGluc3RydWN0aW9uIGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzb21laG93CiAgbWFrZXMgdGhlIHByb2JsZW0gZ28gYXdheS4KCiogUGF0Y2ggYnkgUmlzaGkgQmhhdHRhY2hhcnlhLCAwOCBNYXkgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgVEkgT01BUDU5MTIgT1NLIEJvYXJkCgoqIFBhdGNoIGJ5IFNhbSBTb25nIE1heSwgMDcgTWF5IDIwMDQ6CiAgRml4IHR5cG8gb2YgVVBNIHRhYmxlIGZvciBybXUgYm9hcmQKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA1IE1heSAyMDA0OgogIC0gSW50cmFjb20gYm9hcmQgdXBkYXRlLgogIC0gQWRkIENvZGVjIFBPU1QuCgoqIEFkZCBzdXBwb3J0IGZvciB0aGUgc2Vjb25kIEV0aGVybmV0IGludGVyZmFjZSBmb3IgdGhlICdQUENoYW1lbGVvbicKICBib2FyZC4KCiogUGF0Y2ggYnkgRGF2ZSBQZXZlcmxleSwgMzAgQXByIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE9NQVA3MzAgUGVyc2V1czIgRGV2ZWxvcG1lbnQgYm9hcmQKCiogUGF0Y2ggYnkgQWxhbiBKLiBMdXNlLCAyOSBBcHIgMjAwNDoKICBGaXggZmxhc2ggY2hpcC1zZWxlY3QgKE9SMCkgb3B0aW9uIHJlZ2lzdGVyIHNldHRpbmcgb24gRkFEUyBib2FyZHMuCgoqIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMjkgQXByIDIwMDQ6CiAgUmVwb3J0IE1JSSBuZXR3b3JrIHNwZWVkIGFuZCBkdXBsZXggc2V0dGluZyBwcm9wZXJseSB3aGVuCiAgYXV0by1uZWdvdGlhdGUgaXMgbm90IGVuYWJsZWQuCgoqIFBhdGNoIGJ5IEphcnJldHQgUmVkZCwgMjkgQXByIDIwMDQ6CiAgRml4IGhhbmcgb24gcmVzZXQgb24gT2NvdGVhIGJvYXJkIGR1ZSB0byBmbGFzaCBpbiB3cm9uZyBtb2RlLgoKKiBQYXRjaCBieSBEYXZlIFBldmVybGV5LCAyOSBBcHIgMjAwNDoKICBhZGQgTUFDIGFkZHJlc3MgZGV0ZWN0aW9uIHRvIHNtYzkxMTExIGRyaXZlcgoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDI4IEFwciAyMDA0OgogIGZpeCB0eXBvIGluIGxpYl9hcm0vYm9hcmQuYwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAyMCBBcHIgMjAwNDoKICAtIFJFQURNRSB1cGRhdGU6IGFkZCBDT05GSUdfQ1NCMjcyIGFuZCBjc2IyNzJfY29uZmlnCiAgLSBhZGQgZGVzY3JpcHRpb25zIGZvciBzb21lIE1JSS9QSFkgb3B0aW9ucywgQ09ORklHX0kyQ0ZBU1QsIGFuZAogICAgaTJjZmFzdCBlbnZpcm9ubWVudCB2YXJpYWJsZQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxOSBBcHIgMjAwNDoKICAtIFJlbmFtZSBEVUVUX0FEUyB0byBNUEM4ODVBRFMKICAtIFJlbmFtZSBDT05GSUdfRFVFVCB0byBDT05GSUdfTVBDODg1X0ZBTUlMWQogIC0gUmVuYW1lIENPTkZJR184NjZfZXRfYWwgdG8gQ09ORklHX01QQzg2Nl9GQU1JTFkKICAtIENsZWFuIHVwIEZBRFMgZmFtaWx5IHBvcnQgdG8gdXNlIHRoZSBuZXcgZGVmaW5lcwoKKiBGaXggUENJIHN1cHBvcnQgb24gQ1BDNDUgYm9hcmQKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyNSBBcHIgMjAwNDoKICBBZGQgTmlvcyBHREIvSlRBRyBDb25zb2xlIHN1cHBvcnQ6CiAgLSBBZGQgc3R1YnMgdG8gc3VwcG9ydCBnZGIgdmlhIEpUQUcuCiAgLSBBZGQgc3VwcG9ydCBmb3IgY29uc29sZSBvdmVyIEpUQUcuCiAgLSBNaW5vciBjbGVhbnVwLgoKKiBBZGQgc3VwcG9ydCBmb3IgQ0FUY2VudGVyIGJvYXJkIChiYXNlZCBvbiBQUENoYW1lbGVvbiBNRSBtb2R1bGUpCgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDEyIE1heSAyMDA0OgogIFVzaW5nIGV4dGVybmFsIHdhdGNoZG9nIGZvciBLVVA0IGJvYXJkcyBpbiBtcGM4eHgvY3B1LmM7CiAgbG9hZF9zZXJudW1fZXRoYWRkcigpIGZvciBLVVA0IGJvYXJkcyBpbiBsaWJfcHBjL2JvYXJkLmM7CiAgdmFyaW91cyBjaGFuZ2VzIHRvIEtVUDQgYm9hcmQgc3BlY2lmaWMgZmlsZXMKCiogRml4IG1pbm9yIG5ldHdvcmsgcHJvYmxlbSBvbiBNUEM1MjAwOiBuZWVkIHNvbWUgZGVsYXkgYmV0d2VlbgogIHJlc2V0dGluZyB0aGUgUEhZIGFuZCBzZW5kaW5nIHRoZSBmaXJzdCBwYWNrZXQuIEltcGxlbWVudGVkIGluIGEKICAibmF0dXJhbCIgd2F5IGJ5IGludm9raW5nIHRoZSBQSFkgcmVzZXQgYW5kIGluaXRpYWxpemF0aW9uIGNvZGUKICBvbmx5IG9uY2UgYWZ0ZXIgcG93ZXIgb24gdnMuIGVhY2ggdGltZSB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAuCgoqIEFkZCBzb21lIGxpbWl0ZWQgc3VwcG9ydCBmb3IgbG93LXNwZWVkIGRldmljZXMgdG8gU0w4MTEgVVNCIGNvbnRyb2xsZXIKICAoYXQgbGVhc3QgInVzYiByZXNldCIgbm93IHBhc3NlcyBzdWNjZXNzZnVsbHkgYW5kICJ1c2IgaW5mbyIgZGlzcGxheXMKICBjb3JyZWN0IGluZm9ybWF0aW9uKQoKKiBDaGFuZ2UgaW5pdCBzZXF1ZW5jZSBmb3IgbXVsdGlwbGUgbmV0d29yayBpbnRlcmZhY2VzOiBpbml0aWFsaXplCiAgb24tY2hpcCBpbnRlcmZhY2VzIGJlZm9yZSBleHRlcm5hbCBjYXJkcy4KCiogRml4IG1lbW9yeSBsZWFrIGluIHRoZSBOQU5ELXNwZWNpZmljIEpGRlMyIGNvZGUKCiogRml4IFNMODExIFVTQiBjb250cm9sbGVyIHdoZW4gYXR0YWNoZWQgdG8gYSBVU0IgaHViCgoqIEZpeCBjb25maWcgb3B0aW9uIHNwZWxsaW5nIGluIFBNNTIwIGNvbmZpZyBmaWxlCgoqIEZpeCBQSFkgZGlzY292ZXJ5IHByb2JsZW0gaW4gY3B1L21wYzh4eC9mZWMuYyAoaW50cm9kdWNlZCBieQogIHBhdGNoZXMgYnkgUGFudGVsaXMgQW50b25pb3UsIDMwIE1hciAyMDA0KQoKKiBGaXggbWlub3IgTkFORCBKRkZTMiByZWxhdGVkIGlzc3VlCgoqIEZpeGVzIGZvciBTTDgxMSBVU0IgY29udHJvbGxlcjoKICAtIGltcGxlbWVudCB3b3JrYXJvdW5kIGZvciBicm9rZW4gbWVtb3J5IHN0aWNrCiAgLSBpbXByb3ZlIGVycm9yIGhhbmRsaW5nCgoqIEluY3JlYXNlIHBhY2tldCBzZW5kIHRpbWVvdXQgdG8gMSBtcyBpbiBjcHUvbXBjOHh4L3NjYy5jIHRvIGJldHRlcgogIGNvcGUgd2l0aCBjb25nZXN0ZWQgbmV0d29ya3MuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyMyBBcHIgMjAwNDoKICBGaXggVlNDL0NJUyA4MjAxIHBoeSBkZXNjcmFtYmxlciBpbnRlcm9wZXJhYmlsaXR5IHRpbWluZyBkdWUgdG8KICBlcnJhdGEgZnJvbSBWaXRlc3NlIFNlbWljb25kdWN0b3IuCgoqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAyMiBBcHIgMjAwNDoKICBGaXggZXRoZXJuZXQgY29uZmlndXJhdGlvbiBmb3IgInZlcnNhdGlsZSIgYm9hcmQKCiogUGF0Y2ggYnkgS3NoaXRpaiBHdXB0YSwgMjEgQXByIDIwMDQ6CiAgUmVtb3ZlIGJ1c3kgbG9vcCBhbmQgdXNlIE1QVSB0aW1lciBmciB1c2xlZXAoKSBvbiBPTUFQMTUxMC8xNjEwIGJvYXJkcwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNCBGZWIgMjAwNDoKICBGaXggYSBidWcgaW4gQVQ5MVJNOTIwMCBldGhlcm5ldCBkcml2ZXI6CiAgVGhlIE1JSSBpbnRlcmZhY2UgaXMgbm93IGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIFBIWS4KCiogUGF0Y2ggYnkgSm9obiBLZXJsLCAxOSBBcHIgMjAwNDoKICBVc2UgVS1ib290J3MgbWlpcGh5LmggZm9yIFBIWSByZWdpc3RlciBuYW1lcywgcmF0aGVyIHRoYW4KICBpbnRyb2R1Y2luZyBhIG5ldyBoZWFkZXIgZmlsZS4KCiogVXBkYXRlIHBjaV9pZHMuaCBmcm9tIGxpbnV4LTIuNC4yNgoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAxOSBBcHIgMjAwNDoKICBGaXggcHJvYmxlbSBjYXVzZSBieSBWTEFOIGZ1bmN0aW9uIG9uIGxpdHRsZSBlbmRpYW4gYXJjaGl0ZWN0dXJlCiAgd2l0aG91dCBWTEFOIGVudmlyb25tZW50CgoqIENsZWFuIHVwIHRoZSBUUU04eHhfWVlNSHogY29uZmlndXJhdGlvbnM7IGFsbG93IHRvIHVzZSB0aGUgc2FtZQogIGJpbmFyeSBpbWFnZSBmb3IgYWxsIGNsb2NrIGZyZXF1ZW5jaWVzLiBJbXBsZW1lbnQgcnVuLXRpbWUKICBvcHRpbWl6YXRpb24gb2YgZmxhc2ggYWNjZXNzIHRpbWluZyBiYXNlZCBvbiB0aGUgYWN0dWFsIGJ1cwogIGZyZXF1ZW5jeS4KCiogTW9kaWZ5IEtVUDRYIGJvYXJkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIFNMODExIGRyaXZlciBmb3IgVVNCIG1lbW9yeQogIHN0aWNrcyAoaW5jbHVkaW5nIEZBVCAvIFZGQVQgZmlsZXN5c3RlbSBzdXBwb3J0KQoKKiBBZGQgU0w4MTEgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkcml2ZXIgZm9yIFVTQgoKKiBBZGQgQ0ZHX0kyQ19FRVBST01fQUREUl9PVkVSRkxPVyBkZXNyaXB0aW9uIHRvIFJFQURNRQoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTkgQXByIDIwMDQ6CiAgQWxsb3cgdG8gdXNlIHNoZWxsIHN0eWxlIHN5bnRheCAoaS4gZS4gJHt2YXJ9ICkgd2l0aCBzdGFuZGFyZCBwYXJzZXIuCiAgTWlub3IgcGF0Y2hlcyBmb3IgSW50cmFjb20gYm9hcmRzLgoKKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbCwgMTkgQXByIDIwMDQ6CiAgY2xlYW51cCBzdXBwb3J0IGZvciBDRi9JREUgb24gUENNQ0lBIGZvciBQWEEyNVgKCiogVGVtcG9yYXJpbHkgZGlzYWJsZWQgSm9obiBLZXJsJ3MgZXh0ZW5kZWQgTUlJIGNvbW1hbmQgY29kZSBiZWNhdXNlCiAgIm1paXZhbHMuaCIgaXMgbWlzc2luZwoKKiBQYXRjaGVzIGJ5IE1hcmsgSm9uYXMsIDEzIEFwciAyMDA0OgogIC0gUmVtb3ZlIENTMCBjaGlwIHNlbGVjdCB0aW1pbmcgc2V0dGluZyBmcm9tIGNwdS9tcGM1eHh4L3N0YXJ0LlMKICAtIEFkZCBzeW5jIGluc3RydWN0aW9ucyB0byBJY2VDdWJlIFNEUkFNIGluaXQgY29kZQogIC0gTW92ZSBTRFJBTSBjaGlwIGNvbnN0YW50cyBpbnRvIHNlcGVyYXRlIGluY2x1ZGUgZmlsZXMKICAtIFVuaWZ5IEREUiBhbmQgU0RSIGluaXRpYWxpemF0aW9uIGNvZGUKICAtIFVuaWZ5IGFsbCBJY2VDdWJlIChMaXRlNXh4eCkgdGFyZ2V0IG5hbWVzCgoqIFBhdGNoIGJ5IEpvaG4gS2VybCwgMTYgQXByIDIwMDQ6CiAgRW5hYmxlIHJhbmdlcyBpbiBtaWkgY29tbWFuZCwgZS5nLiBtaWkgcmVhZCAwLTFmIDAgb3IKICBtaWkgcmVhZCA0LTcgMTgtMWEuICBBbHNvIGFkZCBtaWkgZHVtcCBzdWJjb21tYW5kIGZvcgogIHByZXR0eS1wcmludGluZyBzdGFuZGFyZCByZWdzIDAtNS4KCiogUGF0Y2ggYnkgIFN0ZXBoZW4gV2lsbGlhbXMsIDE2IEFwcmlsIDIwMDQ6CiAgZml4IHR5cG8gaW4gSlNFLmg7IHVwZGF0ZSBNQUlOVEFJTkVSUwoKKiBQYXRjaCBieSBNYXR0aGV3IFMuIE1jQ2xpbnRvY2ssIDE0IEFwciAyMDA0OgogIGZpeCBpbml0ZHJhbSBmdW5jdGlvbiBmb3IgdXR4ODI0NSBib2FyZAoKKiBQYXRjaCBieSBNYXJrdXMgUGlldHJlaywgMTQgQXByIDIwMDQ6CiAgdXNlIEFUQUdfSU5JVFJEMiBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWQgQVRBR19JTklUUkQgdGFnCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAxOCBBcHIgMjAwNDoKICBwcm92aWRlIHRoZSBJREUgUmVzZXQgRnVuY3Rpb24gZm9yIEVNSyA1MjAwIGJvYXJkcwoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAxMiBBcHIgMjAwNDoKICBmaXggcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3tieXRlLHdvcmR9X3ZpYV9kd29yZCBwcm9ibGVtcwoKKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDEyIEFwciAyMDA0OgogIFVwZGF0ZSBtYXggUkFNIHNpemUgZm9yIGRlYnJpcyBib2FyZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOCBBcHIgMjAwNDoKICBBZGQgVExCIGVudHJ5IGZvciBzZWNvbmQgRElNTSBzbG90IG9uIG9jb3RlYQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOCBBcHIgMjAwNDoKICBhZGQgUlRMODE2OSBuZXR3b3JrIGRyaXZlcgoKKiBQYXRjaCBieSBEYW4gTWFsZWssIDA3IEFwciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIFJQQy9TVHggR1AzLCBNb3Rvcm9sYSA4NTYwIGJvYXJkCiAgLSBVcGRhdGUgODV4eCBUU0VDIGRyaXZlciBzbyBpdCBzZWFyY2hlcyBNSUkgZm9yIGZpcnN0IGF2YWlsYWJsZSBQSFkKICAgIGFuZCB1c2VzIHRoYXQgb25lLgogIC0gQWRkIGZ1bmN0aW9ucyB0byBzdXBwb3J0IGNvbnNvbGUgTUlJIGNvbW1hbmRzLgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAwNyBBcHIgMjAwNDoKICBNb3ZlIGluaXRpYWxpemF0aW9uIG9mIGJpX2lpY19mYXN0W10KICBmcm9tIGJvYXJkX2luaXRfZigpIHRvIGJvYXJkX2luaXRfcigpCgoqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDA3IEFwciAyMDA0OgogIENsZWFudXAgbWljcm9ibGF6ZSBwb3J0CgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMDcgQXByIDIwMDQ6CiAgQWRkIGF1dG8gU0RSQU0gbW9kdWxlIGRldGVjdGlvbiBmb3IgRGVicmlzIGJvYXJkCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAwNiBBcHIgMjAwNDoKICAtIEZpeCBzb21lIFBDSSBwcm9ibGVtcyBvbiB0aGUgTVBDODI2NkFEUyBib2FyZAogIC0gRml4IHRoZSBsb2NhdGlvbiBvZiBzb21lIFBDSSBlbnRyaWVzIGluIHRoZSBpbW1hcCBzdHJ1Y3R1cmUKCiogUGF0Y2ggYnkgWWFzdXNoaSBTaG9qaSwgMDcgQXByIDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgbWljcm9ibGF6ZSBwcm9jZXNzb3JzCiAgLSBhZGQgc3VwcG9ydCBmb3IgQXRtYXJrVGVjaG5vICJzdXpha3UiIGJvYXJkCgoqIENvbmZpZ3VyZSBQUENoYW1lbGVvbiBib2FyZCB0byB1c2UgcmVkdW5kYW5kIGVudmlyb25tZW50IGluIGZsYXNoCgoqIENvbmZpZ3VyZSBQUENoYW1lbGVvbiBib2FyZCB0byB1c2UgSkZGUzIgTkFORCBzdXBwb3J0LgoKKiBBZGRlZCBzdXBwb3J0IGZvciBKRkZTMiBmaWxlc3lzdGVtIChyZWFkLW9ubHkpIG9uIHRvcCBvZiBOQU5EIGZsYXNoCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxNiBBcHIgMjAwNDoKICBMQkE0OCBmaXhlcwoKKiBQYXRjaGVzIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNiBBcHIgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciBhIG5ldyB2ZXJzaW9uIG9mIGFuIEludHJhY29tIGJvYXJkIGFuZCBmaXgKICAgIHZhcmlvdXMgb3RoZXIgdGhpbmdzIG9uIG90aGVycy4KICAtIGFkZCB2ZXJpZnkgc3VwcG9ydCB0byB0aGUgY3JjMzIgY29tbWFuZCAoZGVmaW5lCiAgICBDT05GSUdfQ1JDMzJfVkVSSUZZIHRvIGVuYWJsZSBpdCkKICAtIGZpeCBGRUMgZHJpdmVyIGZvciBNUEM4eHggc3lzdGVtczoKICAgIDEuIGZpeCBjb21waWxhdGlvbiBwcm9ibGVtcyBmb3IgYm9hcmRzIHRoYXQgdXNlIGR5bmFtaWMKICAgICAgIGFsbG9jYXRpb24gb2YgRFBSQU0KICAgIDIuIHNodXQgZG93biBGRUMgYWZ0ZXIgbmV0d29yayB0cmFuc2ZlcnMKICAtIEhVU0ggcGFyc2VyIGZpeGVzOgogICAgMS4gQSBuZXcgdGVzdCBjb21tYW5kIHdhcyBhZGRlZC4gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZgogICAgICAgdGhlIG9uZSBpbiB0aGUgYm91cm5lIHNoZWxsLgogICAgMi4gQSBuZXcgZXhpdCBjb21tYW5kIHdhcyBhZGRlZCB3aGljaCB0ZXJtaW5hdGVzIHRoZSBjdXJyZW50CiAgICAgICBleGVjdXRpbmcgc2NyaXB0LgogICAgMy4gRml4ZWQgaGFuZGluZyBvZiAkPyAoZXhpdCBjb2RlIG9mIGxhc3QgZXhlY3V0ZWQgY29tbWFuZCkKICAtIEZpeCBzb21lIGNvbXBpbGUgcHJvYmxlbXM7CiAgICBhZGQgIm9uY2UiIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBuZXRyZXRyeSB2YXJpYWJsZQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDAyIEFwciAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBBc3NhYmV0IGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDAxIEFwciAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBQaWN0dXJlIEVsZW1lbnRzIEpTRSBib2FyZAoKKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbCwgMDEgQXByIDIwMDQ6CiAgQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0IGZvciBQWEEgc3lzdGVtcy4KCiogUGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMzAgTWFyIDIwMDQ6CiAgLSBhZGQgYXV0by1jb21wbGV0ZSBzdXBwb3J0IHRvIHRoZSBVLUJvb3QgQ0xJCiAgLSBhZGQgc3VwcG9ydCBmb3IgTkVUVEEgYW5kIE5FVFBIT05FIGJvYXJkczsgZml4IE5FVFZJQSBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBFcHNvbiAxNTZ4IHNlcmllcyBvZiBncmFwaGljYWwgZGlzcGxheXMKICAgIChUaGVzZSBkaXNwbGF5cyBhcmUgc2VyaWFsIGFuZCBub3Qgc3VpdGFibGUgZm9yIHVzaW5nIGEgbm9ybWFsCiAgICBmcmFtZWJ1ZmZlciBjb25zb2xlIG9uIHRoZW0pCiAgLSBhZGQgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkIGluIG9yZGVyIHRvIFBPU1QgYW55IERTUHMgaW4gYSBib2FyZAogIC0gaW1wcm92ZSBhbmQgZml4IHZhcmlvdXMgdGhpbmdzIGluIHRoZSBNUEM4eHggRkVDIGRyaXZlcjoKICAgIDEuIFRoZSBuZXcgODd4IGFuZCA4OHggc2VyaWVzIG9mIHByb2Nlc3NvcnMgaGF2ZSB0d28gRkVDcywKICAgICAgIGFuZCB0aGUgbmV3IGRyaXZlciBzdXBwb3J0cyB0aGVtIGJvdGguCiAgICAyLiBBbm90aGVyIGNoYW5nZSBpbiB0aGUgODd4Lzg4eCBzZXJpZXMgaXMgc3VwcG9ydCBmb3IKICAgICAgIHRoZSBSTUlJIChSZWR1Y2VkIE1JSSkgaW50ZXJmYWNlLiBIb3dldmVyIG51bWVyb3VzCiAgICAgICBjaGFuZ2VzIGFyZSBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIHNpbmNlIHRoZSBQSFlzCiAgICAgICBhcmUgY29ubmVjdGVkIHRvIHRoZSBzYW1lIGxpbmVzLiBUaGF0IG1lYW5zIHRoYXQKICAgICAgIHlvdSBoYXZlIHRvIGFkZHJlc3MgdGhlbSBjb3JyZWN0bHkgb3ZlciB0aGUgTUlJCiAgICAgICBpbnRlcmZhY2UuCiAgICAzLiBXZSBub3cgY29ycmVjdGx5IG1hdGNoIHRoZSBNSUkvUk1JSSBpbnRlcmZhY2UKICAgICAgIGNvbmZpZ3VyYXRpb24gdG8gd2hhdCB0aGUgUEhZIHJlcG9ydHMuCiAgLSBGaXggcHJvYmxlbSB3aGVuIHJlYWRpbmd0aGUgTUlJIHN0YXR1cyByZWdpc3Rlci4gRHVlIHRvIHRoZQogICAgaW50ZXJuYWwgZGVzaWduIG9mIG1hbnkgUEhZcyB5b3UgaGF2ZSB0byByZWFkIHRoZSByZWdpc3RlcgogICAgdHdpY2UuIFRoZSBwcm9ibGVtIGlzIG1vcmUgYXBwYXJlbnQgaW4gMTBNYml0IG1vZGUuCiAgLSBhZGQgbmV3IG1vZGUgIi5qZmZzMnMiIGZvciByZWFkaW5nIGZyb20gYSBOQU5EIGRldmljZTogaXQganVzdAogICAgc2tpcHMgb3ZlciBiYWQgYmxvY2tzLgogIC0gYWRkIG5ldHdvcmtpbmcgc3VwcG9ydCBmb3IgVkxBTnMgKDgwMi4xcSksIGFuZCBDRFAgKENpc2NvCiAgICBEaXNjb3ZlcnkgUHJvdG9jb2wpCiAgLSBzb21lIG1pbm9yIHBhdGNoZXMgLyBjbGVhbnVwCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDI4IE1hciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIE1QQzgyNzIgZmFtaWx5IGluY2x1ZGluZyBNUEM4MjQ3LzgyNDgvODI3MS84MjcyCiAgLSBBZGQgc3VwcG9ydCBmb3IgTVBDODI3MkFEUyBldmFsdWF0aW9uIGJvYXJkIChhbm90aGVyIGZsYXZvdXIgb2YgTVBDODI2MEFEUykKICAtIENoYW5nZSBjb25maWd1cmF0aW9uIG1ldGhvZCBmb3IgTVBDODI2MEFEUyBmYW1pbHkKCiogYWRkIHN0YXJ0dXAgY29kZSB0byBjbGVhciB0aGUgQlNTIG9mIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zCgoqIEZpeCBpZiAvIGVsaWYgaGFuZGxpbmcgYnVnIGluIEhVU0ggc2hlbGwKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXM6IFJlbW92ZSBjb25maWcudG1wIGZpbGVzIG9ubHkgd2hlbgogIHVuY29uZmlndXJpbmcgdGhlIGJvYXJkCgoqIEFkYXB0IFJNVSBib2FyZCBmb3IgYmlnZ2VyIGZsYXNoIG1lbW9yeQoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAxMyBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgS1VQNFggQm9hcmQKCiogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDIxIE1hciAyMDA0CiAgQWRkIFJlaXNlcmZzIHN1cHBvcnQKCiogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjAgTWFyIDIwMDQKICAtIEFkZCBhdXRvLXJlbGVhc2UgZm9yIFNNU0MgTEFOOTFjMTExIGRyaXZlcgogIC0gQWRkIHNhdmUvcmVzdG9yZSBvZiBQVFIgYW5kIFBOUiByZWdzIGFzIHN1Z2dlc3RlZCBpbiBkYXRhc2hlZXQKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTkgTWFyY2ggMjAwNAogIEluY3JlYXNlIHNwZWVkIG9mIHNlY3RvciByZWFkcyBmcm9tIFN5c3RlbUFDRSwKICBzaG9ydGVuIHBvbGwgdGltZW91dCBhbmQgcmVtb3ZlIGEgdXNlbGVzcyByZXNldAoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxOSBNYXIgMjAwNDoKICBNYWtlIEdpZ0UgUEhZIDEwMDBNYnBzIFNwZWVkL0R1cGxleCBkZXRlY3Rpb24gY29uZGl0aW9uYWwKICAoQ09ORklHX1BIWV9HSUdFKQoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDE4IE1hciAyMDA0OgogIHByZXZlbnQgbWFjaGluZSBjaGVja3MgZHVyaW5nIGEgUENJIHNjYW4KCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CiAgRml4IHN0cmluZyBjbGVhbmluZyBpbiBJREUgaWRlbnRpZmljYXRpb24KCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CiAgLSBVbmlmeSB2aWRlbyBtb2RlIGhhbmRsaW5nIGZvciBDaGlwcyAmIFRlY2hub2xvZ2llcyA2OTAwMCBWaWRlbwogICAgY2hpcCBhbmQgU2lsaWNvbiBNb3Rpb24gU01JIDcxMi83MTAvODEwIFZpZGVvIGNoaXAKICAtIEFkZCBzZWxlY3Rpb24gb2YgdGhlIHZpZGVvIG91dHB1dCAoQ1JUIG9yIExDRCkgdmlhICd2aWRlb291dCcKICAgIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0aGUgU2lsaWNvbiBNb3Rpb24KICAtIFJFQURNRSB1cGRhdGUKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CiAgaW5jbHVkZS9jb21tb24uaCB0eXBvIGZpeAoKKiBQYXRjaGVzIGJ5IFRvbHVuYXkgT3JrdW4sIDE3IE1hciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIGJkLT5iaV9paWNfZmFzdFtdIGluaXRpYWxpemF0aW9uIHZpYSBlbnZpcm9ubWVudAogICAgdmFyaWFibGUgImkyY2Zhc3QiIChDT05GSUdfSTJDRkFTVCkKICAtIEFkZCAiaTJjZmFzdCIgdS1ib290IGVudmlyb25tZW50IHZhcmlhYmxlIHN1cHBvcnQgZm9yIGNzYjI3MgoKKiBQYXRjaCBieSBDYXJsIFJpZWNoZXJzLCAxNyBNYXIgMjAwNDoKICBJZ25vcmUgJ1wwJyBjaGFyYWN0ZXJzIGluIGNvbnNvbGUgaW5wdXQgZm9yIHVzZSB3aXRoIHRlbG5ldCBhbmQKICB0ZWxjbyBwYWRzLgoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDE3IE1hciAyMDA0OgogIHR5cG8gZml4IGZvciBzdHJzd2FiIHByb3RvdHlwZSAjaWZkZWYKCiogUGF0Y2hlcyBieSBUaG9tYXMgVmllaHdlZ2VyLCAxNiBNYXIgMjAwNDoKICAtIHNob3cgUENJIGNsb2NrIGZyZXF1ZW5jeSBvbiBNUEM4MjYwIHN5c3RlbXMKICAtIGFkZCBGQ0NfUFNNUl9STUlJIGZsYWcgZm9yIEhpUDcgcHJvY2Vzc29ycwogIC0gaW4gZG9famZmczJfZnNsb2FkKCksIHRha2UgbG9hZCBhZGRyZXNzIGZyb20gbG9hZF9hZGRyIGlmIG5vdCBzZXQKICAgIGV4cGxpY2l0LCB1cGRhdGUgbG9hZF9hZGRyIG90aGVyd2lzZQogIC0gcmVwbGFjZWQgcHJpbnRmIGJ5IHB1dGMvcHV0cyB3aGVuIG5vIGZvcm1hdHRpbmcgaXMgbmVlZGVkCiAgICAoc21hbGxlciBjb2RlIHNpemUsIGZhc3RlciBleGVjdXRpb24pCgoqIFBhdGNoIGJ5IFBoaWxsaXBwZSBSb2JpbiwgMTYgTWFyIDIwMDQ6CiAgYXZvaWQgZGVyZWZlcmVuY2luZyBOVUxMIHBvaW50ZXIgaW4gbGliX2FybS9hcm1saW51eC5jCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE1IE1hciAyMDA0OgogIEZpeCBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gZG9jdW1lbnRhdGlvbgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNSBNYXIgMjAwNDoKICBJbml0aWFsaXplIGJpX29wYmZyZXEgdG8gcmVhbCBPUEIgZnJlcXVlbmN5IHZpYSBnZXRfT1BCX2ZyZXEoKQoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxNSBNYXIgMjAwNDoKICBVcGRhdGUgQ1JFRElUUyAmIE1BSU5UQUlORVJTIGZpbGVzIGZvciBQUEM0NDBHWCAmIE9jb3RlYSBwb3J0CgoqIEFkZCBzdGFydC11cCBkZWxheSB0byBtYWtlIHN1cmUgcG93ZXIgaGFzIHN0YWJpbGl6ZWQgYmVmb3JlCiAgYXR0ZW1wdGluZyB0byBzd2l0Y2ggb24gVVNCIG9uIFNYMSBib2FyZC4KCiogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAxOCBNYXIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBYTTI1MCBib2FyZCAoUFhBMjU1KQogIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODI4IGJvYXJkIChNUEM4MjgwKQogIC0gQWRkIHN1cHBvcnQgZm9yIDMyIE1CIEZsYXNoIG9uIFBNODI1LzgyNgogIC0gbmV3IFNEUkFNIHJlZnJlc2ggcmF0ZSBmb3IgUE04MjUvUE04MjYKICAtIGFkZGVkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNNTIwIChNUEM1MjAwKQogIC0gcmVwbGFjZWQgUXVlcnkgYnkgSWRlbnRpZnkgY29tbWFuZCBpbiBDUFU4Ni9mbGFzaC5jCiAgICB0byBzdXBwb3J0IDI4RjE2MEYzQgoKKiBGaXggd3JhcCBhcm91bmQgcHJvYmxlbSB3aXRoIHVkZWxheSgpIG9uIEFSTTkyMFQKCiogQWRkIHN1cHBvcnQgZm9yIE1hY3Jvbml4IGZsYXNoIG9uIFRSQUIgYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTUgTWFyIDIwMDQ6CiAgRml4IGJ1ZmZlciBvdmVyZmxvdyBpbiBJREUgaWRlbnRpZmljYXRpb24KCiogRml4IHBvd2VyLW9mZiBvZiBMQ0QgZm9yIG91dC1vZi1iYW5kIHRlbXBlcmF0dXJlcyBvbiBMV01PTiBib2FyZAoKKiBSZW1vdmUgcmVkdW5kYW5kICNkZWZpbmUgaW4gSWNlQ3ViZS5oCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI3IEZlYiAyMDA0OgogIC0gQWRkaW5nIGdldF90aWNrcygpIGFuZCBnZXRfdGJjbGsoKSBmb3IgQVQ5MVJNOTIwMAogIC0gTWFueSB3aGl0ZSBzcGFjZSBmaXhlcyBpbiBjcHUvYXQ5MXJtOTIwMC9pbnRlcnJ1cHRzLmMKCiogUGF0Y2hlcyBieSBTdGV2ZW4gU2Nob2x6LCAyMCBGZWIgMjAwNDoKICBzb21lIGNsZWFudXAgaW4gQVQ5MVJNOTIwMCByZWxhdGVkIGNvZGUKCiogUGF0Y2hlcyBieSBUcmF2aXMgU2F3eWVyLCAxMiBNYXIgMjAwNDoKICAtIEZpeCBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnQgZm9yIDQ0MEdYCiAgLSBBZGQgR2lnYWJpdCBFdGhlcm5ldCBTdXBwb3J0IHRvIE1JSSBQSFkgdXRpbGl0aWVzCgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMTIgTWFyIDIwMDQ6CiAgRml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgLSBCZXR0ZXIgc3VwcG9ydCBmb3IgeDgveDE2IGltcGxlbWVudGF0aW9ucwogIC0gQWRkZWQgZmFpbHVyZSBmb3IgQU1EIGNoaXBzIGF0dGVtcHRpbmcgdG8gdXNlIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCiAgLSBBZGRlZCBkZWZpbmVzIGZvciBBTUQgY29tbWFuZCBhbmQgYWRkcmVzcyBjb25zdGFudHMKCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxMiBNYXIgMjAwNDoKICBGaXggZ2V0X2RlbnRmcm9tZGlyKCkgdG8gY29ycmVjdGx5IGhhbmRsZSBkZWxldGVkIGRlbnRyaWVzCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTEgTWFyIDIwMDQ6CiAgUmVtb3ZlIGhhcmQgY29kZWQgbmV0d29yayBzZXR0aW5ncyBpbiBUSSBPTUFQMTYxMCBIMgogIGRlZmF1bHQgYm9hcmQgY29uZmlnCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTEgTWFyIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIEFEUyBHcmFwaGljc0NsaWVudCsgYm9hcmQuCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDExIE1hciAyMDA0OgogIC0gYWRkIGJpdG1hcCBjb21tYW5kIGFuZCBzcGxhc2ggc2NyZWVuIHN1cHBvcnQgaW4gY2ZiIGNvbnNvbGUKICAtIGFkZCBbb3B0aW9uYWxdIG9yaWdpbiBpbiB0aGUgYml0bWFwIGRpc3BsYXkgY29tbWFuZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxMSBNYXIgMjAwNDoKICBGaXggb2NvdGVhIGJvYXJkIGVhcmx5IGluaXQgaW50ZXJydXB0IHNldHVwLgoKKiBQYXRjaCBieSBUaG9tYXMgVmllaHdlZ2VyLCAxMSBNYXIgMjAwNDoKICBSZW1vdmUgcmVkdW5kYW5kIGNvZGU7IGFkZCAgUENJLXNwZWNpZmljIGJpdHMgdG8gaW5jbHVkZS9tcGM4MjYwLmgKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAwOSBNYXIgMjAwNAogIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBTU1YgQUROUC9FU0MxIChOaW9zIFNvZnRjb3JlKQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDkgTWFyIDIwMDQ6CiAgZml4IHJlY2VudCBidWlsZCBmYWlsdXJlIGZvciBTQTExMDAgdGFyZ2V0CgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IE1hciAyMDA0OgogIFN1cHBvcnQgbmF0aXZlIGludGVycnVwdCBtb2RlIGZvciB0aGUgSUJNNDQwR1guCiAgUHJldmlvdXNseSBpdCB3YXMgcnVubmluZyBpbiA0NDBHUCBjb21wYXRpYmlsaXR5IG1vZGUuCgoqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAwOSBNYXIgMjAwNDoKICBBZGRlZCBBUk0gSW50ZWdyYXRvciBBUCwgQ1AgYW5kIFZlcnNhdGlsZSBQQjkyNkVKLVMgUmVmZXJlbmNlCiAgUGxhdGZvcm0gc3VwcG9ydC4KCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggTWFyIDIwMDQ6CiAgRG9uJ3Qgb3ZlcndyaXRlIHNlcnZlciBJUCBhZGRyZXNzIG9yIGJvb3QgZmlsZSBuYW1lCiAgd2hlbiB0aGUgYm9vdCBzZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCA1IE1hciAyMDA0OgogIFJlbW92ZWQgY29tcGlsZSB0aW1lIHJlc3RyaWN0aW9uIG9uIENGR19JMkNfU1BFRUQgZm9yIERTMTMzOCBSVEMKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgNSBNYXIgMjAwNDoKICBGaXggZWFybHkgYm9hcmQgaW5pdGlhbGl6YXRpb24gZm9yIENvZ2VudCBDU0IyNzIgYm9hcmQKCiogUGF0Y2ggYnkgRWQgT2tlcnNvbiwgMyBNYXIgMjAwNDoKICBmaXggQ0ZJIGZsYXNoIHdyaXRlcyBmb3IgbGl0dGxlIGVuZGlhbiBzeXN0ZW1zCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAwMSBNYXIgMjAwNDoKICBnZW5lcmFsaXplIFVTQiBhbmQgSURFIHN1cHBvcnQgZm9yIE1QQzUyMDAgd2l0aCBhY2NvcmRpbmcKICBjaGFuZ2VzIHRvIEljZUN1YmUuaCBhbmQgVE9QNTIwMC5oCiAgYWRkIEFtMjlMVjI1NiAyNTYgTUJpdCBGTEFTSCBzdXBwb3J0IGZvciBUT1A1MjAwIGJvYXJkcwogIGFkZCBpbmZvIGFib3V0IFVTQiBhbmQgSURFIHRvIFJFQURNRQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCA0IE1hciAyMDA0OgogIEZpeCBwcm9ibGVtcyB3aXRoIEdDQyAzLjMueCB3aGljaCBjaGFuZ2VkIGhhbmRsaW5nIG9mIGdsb2JhbAogIHZhcmlhYmxlcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8gKG5vdyBpbiAuYnNzIGluc3RlYWQgb2YKICAuZGF0YSBhcyBiZWZvcmUpLgoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDAyIE1hciAyMDA0OgogIGFkZCBzdHJzd2FiKCkgdG8gZml4IElERSBMQkEgY2FwYWNpdHksIGZpcm13YXJlIGFuZCBtb2RlbCBudW1iZXJzCiAgb24gbGl0dGxlIGVuZGlhbiBtYWNoaW5lcwoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwMiBNYXIgMjAwNDoKICAtIFJlbW92ZSBnZXRfdGlja3MoKSBmcm9tIE5GUyBjb2RlCiAgLSBBZGQgdmVyaWZpY2F0aW9uIG9mIFJQQyB0cmFuc2FjdGlvbiBJRAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwMiBNYXIgMjAwNDoKICBjbGVhbnVwIGZvciBJREUgYW5kIFVTQiBkcml2ZXJzIGZvciBNUEM1MjAwCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDAxIE1hciAyMDA0OgogIE9jb3RlYToKICAtIEFkZCBJQk0gUFBDNDQwR1ggUmVmIFBsYXRmb3JtIHN1cHBvcnQgKE9jb3RlYSkKICAgIE9yaWdpbmFsIGNvZGUgYnkgUGF1bCBSZXlub2xkcyA8UGF1bFJleW5vbGRzQGxoc29sdXRpb25zLmNvbT4KICAgIEFkYXB0ZWQgdG8gVS1Cb290IGFuZCA0NDBHWCBwb3J0CiAgNDQwZ3hfZW5ldC5jOgogIC0gQWRkIGdyYWNpb3VzIGhhbmRsaW5nIG9mIGFsbCBFdGhlcm5ldCBQaW4gU2VsZWN0aW9ucyBmb3IgNDQwR1gKICAtIEFkZCBSR01JSSBzZWxlY3Rpb24gZm9yIENpY2FkYSBDSVM4MjAxIEdpZ2FiaXQgUEhZCiAgcHBjNDQwLmg6CiAgLSBBZGQgbmVlZGVkIGJpdCBkZWZpbml0aW9ucwogIC0gRml4IGZvcm1hdHRpbmcKCiogUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMSBNYXIgMjAwNDoKICBBZGQgUFBDNDQwR1ggcHJiZHYwIGRpdmlkZXIgdG8gZml4IG1lbW9yeSBjbG9jayBjYWxjdWxhdGlvbi4KCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyNyBGZWIgMjAwNAogIC0gYXZvaWQgcHJvYmxlbXMgZm9yIHRhcmdldHMgd2l0aG91dCBORlMgZG93bmxvYWQgc3VwcG9ydAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMjcgRmViIDIwMDQ6CiAgLSBBZGRlZCBMQkE0OCBzdXBwb3J0IChDT05GSUdfTEJBNDggJiBDRkdfNjRCSVRfTEJBKQogIC0gQWRkZWQgc3VwcG9ydCBmb3IgNjRiaXQgcHJpbnRpbmcgaW4gdnNwcmludGYgKENGR182NEJJVF9WU1BSSU5URikKICAtIEFkZGVkIHN1cHBvcnQgZm9yIDY0Yml0IHN0cnRvdWwgKENGR182NEJJVF9TVFJUT1VMKQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNyBGZWIgMjAwNDoKICBGaXggcmFycGJvb3Q6IGFkZCBhdXRvbG9hZCBieSBORlMKCiogUGF0Y2ggYnkgRGFuIEVpc2VuaHV0LCAyNiBGZWIgMjAwNDoKICBmaXggZmxhc2hfd3JpdGUgcmV0dXJuIHZhbHVlIGluIHNhdmVlbnYKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAxMSBEZWMgMjAwMwogIGV4cGFuZCBjb25maWcubWsgdG8gYXZvaWQgdHJpZ3JhcGggd2FybmluZ3Mgb24gTklPUwoKKiBSZW5hbWUgIkJNUzIwMDMiIGJvYXJkIGludG8gIkhNSTEwIgoKKiBTWDEgcGF0Y2hlczogdXNlICJzZXJpYWwjIiBmb3IgVVNCIHNlcmlhbCAjOyB1c2UgcmVkdW5kYW5kIGVudmlyb25tZW50CiAgc3RvcmFnZTsgYXV0by1zZXQgY29uc29sZSBvbiBVU0IgcG9ydCAodXNpbmcgcHJlYm9vdCBjb21tYW5kKQoKKiBBZGQgc3VwcG9ydCBmb3IgU1gxIG1vYmlsZSBwaG9uZTsgYWRkIHN1cHBvcnQgZm9yIFVTQi1iYXNlZCBjb25zb2xlCiAgKGVuYWJsZSB3aXRoICJzZXRlbnYgc3Rkb3V0IHVzYnR0eTsgc2V0ZW52IHN0ZGluIHVzYnR0eSIpCgoqIEZpeCBMT1dCT09UIGNvbmZpZ3VyYXRpb24gZm9yIE1QQzUyMDAgd2l0aCBERFIgbWVtb3J5CgoqIEZpeCBTRFJBTSB0aW1pbmdzIGZvciBMSVRFNTIwMCAvIEljZUN1YmUgYm9hcmQKCiogSGFuZGxlIEF1dGktTURJWCAvIGNvbm5lY3Rpb24gc3RhdHVzIGZvciBJTkNBLUlQCgoqIEZpeCBVU0IgcHJvYmxlbXMgd2hlbiBhdHRlbXB0aW5nIHRvIHJlYWQgMCBieXRlcwoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyNiBGZWIgMjAwNDoKICBGaXggYnJva2VuIGNvbXBpbGUgZm9yIFhQRURJVEUxSyB0YXJnZXQuCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjYgRmViIDIwMDQ6CiAgQnVnIGZpeCBmb3IgTkZTIGNvZGUgb24gTklPUyB0YXJnZXRzCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDI2IEZlYiAyMDA0OgogIEJyZWFrIHVwIFN5c3RlbUFDRSByZWFkcyBvZiBsYXJnZSBibG9jayBjb3VudHMKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjYgRmViIDIwMDQKICBhZGQgSURFIHN1cHBvcnQgZm9yIE1QQzUyMDAKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjYgRmViIDIwMDQ6CiAgYWRkIGF1dG9sb2FkIHZpYSBORlMKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcwogIFVzZSBvZiBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gaW4gYm9hcmQuYyBjb25zaXN0ZW50IHdpdGggdXNlcwogIGVsc2V3aGVyZSBpbiB0aGUgc291cmNlLgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBGZWIgMjAwNDoKICAtIFRpbWVvdXRzIGluIEZQR0EgY29kZSBzaG91bGQgYmUgYmFzZWQgb24gQ0ZHX0haCiAgLSBNaW5vciBjbGVhbnVwIGluIGNvZGUgZm9yIEFsdGVyYSBGUEdBIEFDRVgxSwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBGZWIgMjAwNDoKICBDaGFuZ2VkICJEaXJlY3RvcnkgSGllcmFyY2h5IiBzZWN0aW9uIGluIFJFQURNRQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNSBGZWIgMjAwNDoKICBSZWR1Y2UgY29weSBjb3VudCBpbiBuZnNfcmVhZF9yZXBseSgpIG9mIE5GUyBjb2RlCgoqIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAyNCBGZWIgMjAwNDoKICBOUzk3NTAgRGV2Qm9hcmQgYWRkZWQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjQgRmViIDIwMDQKICBhZGQgVVNCIHN1cHBvcnQgZm9yIE1QQzUyMDAKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjQgRmViIDIwMDQ6CiAgLSBmaXggTUlJIGNvbW1hbmRzIHRvIHVzZSB2YWx1ZXMgZnJvbSBsYXN0IGNvbW1hbmQKCiogUGF0Y2ggYnkgVG9yc3RlbiBEZW1rZSwgMjQgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBlWGFsaW9uIHBsYXRmb3JtIChTUFNXLTgyNDAsIEYtMzAsIEYtMzAwKQoKKiBQYXRjaCBieSBSYWh1bCBTaGFuYmhhZywgMTkgRmViIDIwMDQ6CiAgRml4ZXMgZm9yIGZvciBPTUFQMTYxMCBib2FyZDoKICAtIHNoaWZ0IHNvbWUgSVJRIHNwZWNpZmljIGNvZGUgdG8gcGxhdGZvcm0uUyBmaWxlCiAgLSByZW1vdmUgZHVwbGljYXRld2F0Y2hkb2cgcmVzZXQgY29kZSBmcm9tIHN0YXJ0LlMKCiogTWFrZSBBdXRvLU1ESVggU3VwcG9ydCBjb25maWd1cmFibGUgb24gSU5DQS1JUCBib2FyZAoKKiBGaXggbGljZW5zZSBmb3IgbWtpbWFnZSB0b29sCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI0IEZlYiAyMDA0OgogIFVwZGF0ZSBOZXRCb290RmlsZVhmZXJTaXplIGluIE5GUyBjb2RlCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjQgRmViIDIwMDQ6CiAgZml4IHBhY2tldCBsZW5ndGggaW4gTkZTIGNvZGUKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5LCAyMiBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTkZTIGZvciBmaWxlIGRvd25sb2FkCgoqIFBhdGNoIGJ5IEFuZHJlYSBTY2lhbiwgMTcgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFMzQzQ0QjAgcHJvY2Vzc29yIGFuZCBEQVZFIEIyIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIEZlYiAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIE1JSSBjb21tYW5kcyBvbiBBVDkxUk05MjAwIGJvYXJkcwogIC0gc29tZSBjbGVhbnVwIGluIEFUOTFSTTkyMDAgZXRoZXJuZXQgY29kZQoKKiBQYXRjaCBieSBQZXRlciBSeXNlciwgMjAgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggTUwzMDAgcGxhdGZvcm0KCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAxNyBGZWIgMjAwNDoKICBGaXggd2F0Y2hkb2cgc3VwcG9ydCBmb3IgTklPUwoKKiBQYXRjaCBieSBKb3NoIEZyeW1hbiwgMTYgRmViIDIwMDQ6CiAgRml4IGJ5dGUtc3dhcHBpbmcgZm9yIGNmaV9mbGFzaC5jIGZvciBkaWZmZXJlbnQgYnVzIHdpZHRocwoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTQgSmViIDIwMDQ6CiAgUmVtb3ZlIGR1cGxpY2F0ZSAiRlBHQSBTdXBwb3J0IiBub3RlcyBmcm9tIHRoZSBSRUFETUUgZmlsZQoKKiBQYXRjaGVzIGJ5IFJlaW5oYXJkIE1leWVyLCAxNCBGZWIgMjAwNDoKICAtIHVwZGF0ZSBib2FyZC9lbWsgdHJlZTsgdXNlIGNvbW1vbiBmbGFzaCBkcml2ZXIKICAtIENvcnJlY3RlZCB0ZXN0ZWQgYml0cyBpbiBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbiBpbiBjcHUvbXBjNXh4eC90cmFwcy5jCiAgICBbYWRhcHRlZCBmb3Igb3RoZXIgUFBDIENQVXMgLS0gd2RdCiAgLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgTTQ4VDA4IG9uIHRoZSBFVkFMNTIwMCBib2FyZCBpbiBydGMvbWs0OHQ1OS5jCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxMyBGZWIgMjAwNDoKICBDYWxsIHNob3dfYm9vdF9wcm9ncmVzcygpIHdoZW5ldmVyIFBPU1QgIkZBSUxFRCIgaXMgcHJpbnRlZC4KCiogUGF0Y2ggYnkgTmlzaGFudCBLYW1hdCwgMTMgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFRJIE9NQVAxNjEwIEgyIEJvYXJkCiAgRml4ZXMgZm9yIGNwdS9hcm05MjZlanMvaW50ZXJydXB0LmMKCShiYXNlZCBvbiBSaWNoYXJkIFdvb2RydWZmJ3MgcGF0Y2ggZm9yIGFybTkyNSwgMTYgT2N0IDAzKQogIEZpeCBmb3IgYSB0aW1lciBidWcgaW4gT01BUDE2MTAgSW5ub3ZhdG9yCiAgQWRkIHN1cHBvcnQgZm9yIENTMCAoUk9NKS9DUzMgKEZsYXNoKSBib290IGluIE9NQVAxNjEwIElubm92YXRvciBhbmQgSDIKCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDEyIEZlYiAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIE5JT1MgdGltZXIgd2l0aCB2YXJpYWJsZSBwZXJpb2QgcHJlbG9hZCBjb3VudGVyIHZhbHVlCiAgLSBwcmVwYXJlIFBPU1QgZnJhbWV3b3JrIHN1cHBvcnQgZm9yIE5JT1MgdGFyZ2V0cwoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTEgRmViIDIwMDQ6CiAgYWRkIFBPU1Qgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNSBib2FyZAoKKiBQYXRjaCBieSBMYXVyZW50IE1vaGluLCAxMCBGZWIgMjAwNDoKICBGaXggYnVmZmVyIG92ZXJmbG93IGluIGNvbW1vbi91c2IuYwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxMCBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IENTQjI3MiBib2FyZAoKKiBQYXRjaCBieSBUaG9tYXMgRWxzdGUsIDEwIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBORVQrNTAgQ1BVIGFuZCBNb2RORVQ1MCBib2FyZAoKKiBQYXRjaCBieSBTYW0gU29uZywgMTAgRmViIDIwMDQ6CiAgRml4IHR5cG9zIGluIGNmaV9mbGFzaC5jCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTAgRmViIDIwMDQKICBGaXhlZCBsb25nIGRpciBlbnRyeSBzbG90IGlkIGNhbGN1bGF0aW9uIGluIGdldF92ZmF0bmFtZQoKKiBQYXRjaCBieSBSb2JpbiBHaWxrcywgMTAgRmViIDIwMDQ6CiAgYWRkICJpdGVzdCIgY29tbWFuZCAob3BlcmF0b3JzOiAtZXEsIC1uZSwgLWx0LCAtZ3QsIC1sZSwgLWdlLCA9PSwKICAhPSwgPD4sIDwsID4sIDw9LCA+PSkKCiogRml4IHByb2JsZW0gd2l0aCBzaWRlIGVmZmVjdHMgaW4gbWFjcm9zIGluIGluY2x1ZGUvdXNiLmgKCiogUGF0Y2ggYnkgRGF2aWQgQmVuc29uLCAxMyBOb3YgMjAwMzoKICBidWcgODQxMzU4IC0gZml4IFRGVFAgZG93bmxvYWQgc2l6ZSBsaW1pdAoKKiBGaXhpbmcgYnVnIDg1MDc2ODoKICBpbXByb3BlciBmbHVzaF9jYWNoZSgpIGluIGxvYWRfc2VyaWFsKCkKCiogRml4aW5nIGJ1ZyA4MzQ5NDM6CiAgTVBDODU0MCAtIG1pc3Npbmcgdm9sYXRpbGUgZGVjbGFyYXRpb25zCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDA5IEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBYaWxpbnggU3lzdGVtQUNFIGNoaXA6CiAgLSBOZXcgZmlsZXMgY29tbW9uL2NtZF9hY2UuYyBhbmQgaW5jbHVkZS9zeXN0ZW1hY2UuaAogIC0gSG9vayBzeXN0ZW1hY2Ugc3VwcG9ydCBpbnRvIGNtZF9mYXQgYW5kIHRoZSBwYXJ0aXRpb24gbWFuYWdlcgoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBGZWIgMjAwNDoKICBBZGQgYmlfb3BiZnJlcSAmIGJpX2lpY19mYXN0IHRvIDQ0MEdYIGJkX2luZm8gYXMgbmVlZGVkIGZvciBMaW51eAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBGZWIgMjAwNDoKICBvIDQ0MEdYOgogICAgLSBGaXggUENJIEluZGlyZWN0IGFjY2VzcyBmb3IgdHlwZSAxIGNvbmZpZyBjeWNsZXMgd2l0aCBwcGM0NDAuCiAgICAtIEFkZCBwaHltb2RlIGZvciA0NDAgZW5ldAogICAgLSBmaXggcGNpIHByZSBpbml0CiAgbyBYUGVkaXRlMUs6CiAgICAtIENoYW5nZSBib2FyZF9wcmVfaW5pdCB0byBib2FyZF9lYXJseV9pbml0X2YKICAgIC0gQWRkIHVzZXIgZmxhc2ggdG8gYnVzIGNvbnRyb2xsZXIgc2V0dXAKICAgIC0gRml4IHBjaSBwcmUgaW5pdAogICAgLSBGaXggaXNfcGNpX2hvc3QgdG8gY2hlY2sgR1BJTyBmb3IgbW9uYXJjaCBiaXQKICAgIC0gRm9yY2UgeHBlZGl0ZTFrIHRvIHBjaSBjb252ZW50aW9uYWwgbW9kZSAodmlhICNkZWZpbmUgb3B0aW9uKQoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDQgRmViIDIwMDQ6CiAgLSBoYW5kbGUgdGhlIG1hY2hpbmUgY2hlY2sgdGhhdCBpcyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBQQ0kgc2NhbnMKICAgIG9uIDgyeHggcHJvY2Vzc29ycy4KICAtIGRlZmluZSB0aGUgcmVnaXN0ZXJzIHVzZWQgaW4gdGhlIElNTVIgYnkgdGhlIFBDSSBzdWJzeXN0ZW0uCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDAzIEZlYiAyMDA0OgogIGNwdS9tcGM1eHh4L3N0YXJ0LlM6IGNvcHkgTUJBUiBpbnRvIFNQUjMxMQoKKiBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMDMgRmViIDIwMDQ6CiAgRml4IGNvcHkgJiBwYXN0ZSBlcnJvciBpbiBjcHUvbXBjODI2MC9wY2kuYwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMjQgSmFuIDIwMDQ6CiAgRml4IHR5cG8gaW4gY3B1L21wYzV4eHgvcGNpX21wYzUyMDAuYwoKKiBBZGQgQXV0by1NRElYIHN1cHBvcnQgZm9yIElOQ0EtSVAKCiogU29tZSBjb2RlIGNsZWFudXAKCiogUGF0Y2ggYnkgSm9zZWYgQmF1bWdhcnRuZXIsIDEwIEZlYiAyMDA0OgogIEZpeGVzIGZvciBDb2xkRmlyZSBwb3J0CgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMTEgRmViIDIwMDQ6CiAgRml4IENGSSBmbGFzaCBkcml2ZXIgcHJvYmxlbXMKCiogTWFrZSBzdXJlIHRvIHVzZSBhIGJ1cyBjbG9jayBkaXZpZGVyIG9mIDIgb25seSB3aGVuIHJ1bm5pbmcgVFFNOHh4TQogIG1vZHVsZXMgYXQgQ1BVIGNsb2NrIGZyZXF1ZW5jaWVzIGFib3ZlIDY2IE1Iei4KCiogT3B0aW1pemUgZmxhc2ggcHJvZ3JhbW1pbmcgc3BlZWQgZm9yIExXTU9OIChieSBhbm90aGVyIDEwMCUgOi0pCgoqIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDMgRmViIDIwMDQ6CiAgLSBDaGFuZ2VkIHRoZSBpbmNvcnJlY3QgRkFUMTJCVUZTSVpFCiAgLSBkYXRhX2JlZ2luIGluIGZzZGF0YSBjYW4gYmUgbmVnYXRpdmUuIENoYW5nZWQgaXQgdG8gYmUgc2hvcnQuCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAzMCBKYW4gMjAwNDoKICAxOiAtIGJvYXJkL2FsdGVyYS9jb21tb24vZmxhc2guYzpmbGFzaF9lcmFzZSgpOgogICAgICAgbyBhbGxvdyBpbnRlcnJ1cHRzIGJlZm9yIGdldF90aW1lcigpIGNhbGwKICAgICAgIG8gY2hlY2stdXAgZWFjaCBlcmFzZWQgc2VjdG9yIGFuZCBhdm9pZCB1bmV4cGVjdGVkIHRpbWVvdXRzCiAgICAgLSBib2FyZC9hbHRlcmEvZGsxYzIwL2RrMXMxMC5jOmJvYXJkX2Vhcmx5X2luaXRfZigpOgogICAgICAgbyBlbmNsb3NlIHNldmVuc2VnX3NldCgpIGluIGNwcCBjb25kaXRpb24KICAgICAtIHJlbW92ZSB0aGUgQVNNSSBjb25maWd1cmF0aW9uIGZvciBESzFTMTBfc3RhbmRhcmRfMzIgKG5ldmVyIHByZXNlbnQpCiAgICAgLSBmaXggc29tZSB0eXBlZCBpbiBtaXN0YWtlcyBpbiB0aGUgTklPUyBkb2N1bWVudGF0aW9uCiAgMjogLSBzcGxpdCBESzFDMjAgY29uZmlndXJhdGlvbiBpbnRvIHNldmVyYWwgaGVhZGVyIGZpbGVzOgogICAgICAgbyB0d28gbmV3IGZpbGVzIGZvciBlYWNoIE5JT1MgQ1BVIGRlc2NyaXB0aW9uCiAgICAgICBvIFUtQm9vdCByZWxhdGVkIHBhcnQgaXMgcmVtYWluaW5nIGluIERLMUMyMC5oCiAgMzogLSBzcGxpdCBESzFTMTAgY29uZmlndXJhdGlvbiBpbnRvIHNldmVyYWwgaGVhZGVyIGZpbGVzOgogICAgICAgbyB0d28gbmV3IGZpbGVzIGZvciBlYWNoIE5JT1MgQ1BVIGRlc2NyaXB0aW9uCiAgICAgICBvIFUtQm9vdCByZWxhdGVkIHBhcnQgaXMgcmVtYWluaW5nIGluIERLMVMxMC5oCiAgNDogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE1pY3JvdHJvbml4IExpbnV4IERldmVsb3BtZW50IEtpdAogICAgICAgTklPUyBDUFUgY29uZmlndXJhdGlvbiBhdCB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAogICAgICAgU3RyYXRpeCBFZGl0aW9uIChESy0xUzEwKQogIDU6IC0gQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBBbHRlcmEgTmlvcyBEZXZlbG9wbWVudCBLaXQsCiAgICAgICBTdHJhdGl4IEVkaXRpb24gKERLLTFTMTApCiAgNjogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE5pb3MgU2VyaWFsIFBlcmlwaGFyZWwgSW50ZXJmYWNlIChTUEkpCiAgICAgICAobWFzdGVyIG9ubHkpCiAgNzogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIGNvbW1vbiBVLUJvb3QgU1BJIGZyYW1ld29yayBhdAogICAgICAgUlRDIGRyaXZlciBEUzEzMDYKCiogUGF0Y2ggYnkgUmFodWwgU2hhbmJoYWcsIDI4IEphbiAyMDA0OgogIEZpeCBmbGFzaCBwcm90ZWN0aW9uL2xvY2tpbmcgaGFuZGxpbmcgZm9yIE9NQVAxNjEwIGlubm92YXRvciBib2FyZC4KCiogUGF0Y2ggYnkgUm9sZiBQZXVrZXJ0LCAyOCBKYW4gMjAwNDoKICBmaXggZmxhc2ggd3JpdGUgcHJvYmxlbXMgb24gQ1NCMjI2IGJvYXJkICh3cml0ZSB3aXRoIDMyIGJpdCBidXMgd2lkdGgpCgoqIFBhdGNoZXMgYnkgTWFyayBKb25hcywgMTYgSmFuIDIwMDQ6CiAgLSBmaXggcm91bmRpbmcgZXJyb3Igd2hlbiBjYWxjdWxhdGluZyBiYXVkcmF0ZXMgZm9yIE1QQzUyMDAgUFNDcwogIC0gbWFrZSBzdXJlIENGR19SQU1CT09UIGFuZCBDRkdfTE9XQk9PVCBhcmUgbm90IGVuYWJsZWQgYXQgdGhlIHNhbWUKICAgIHRpbWUgd2hpY2ggaXMgbm90IHN1cHBvcnRlZAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyNiBKYW4gMjAwNDoKICBBbGxvdyBiemlwMiBjb21wcmVzc2lvbiBmb3Igc21hbGwgbWVtb3J5IGZvb3RwcmludCBib2FyZHMKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCAyMSBKYW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQ0ZJIGZsYXNoIGRyaXZlciBmb3IgYm90aCB0aGUgSW50ZWwgYW5kIHRoZSBBTUQKICBjb21tYW5kIHNldHMuCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDIwIEphbiAyMDA0OgogIEZpeCBwY2kgYnJpZGdlIGF1dG8gZW51bWVyYXRpb24gb2Ygc2libGluZyBwMnAgYnJpZGdlcy4KCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTIgSmFuIDIwMDQ6CiAgQWRkIHNvbWUgZGVsYXlzIGFzIG5lZWRlZCBmb3IgSW50ZWwgTFhUOTcxQSBQSFkgc3VwcG9ydAoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMDkgSmFuIDIwMDQ6CiAgLSBhdm9pZCB3YXJuaW5nOiB1bnVzZWQgdmFyaWFibGUgYHBpb3AnIGluIGJvYXJkL2FsdGVyYS9jb21tb24vc2V2ZW5zZWcuYwogIC0gbWFrZSBESzFDMjAgYm9hcmQgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIEFTTUkgY29uZm9ybSB0bwogICAgZG9jdW1lbnRhdGlvbgoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwOSBKYW4gMjAwNDoKCiAgQVJNIG1lbW9yeSBsYXlvdXQgZml4ZXM6IHRoZSBhYm9ydC1zdGFjayBpcyBub3cgc2V0IHVwIGluIHRoZQogIGNvcnJlY3QgUkFNIGFyZWEsIGFuZCB0aGUgQlNTIGlzIHplcm9lZCBvdXQgYXMgaXQgc2hvdWxkIGJlLgoKICBGdXJ0aGVybW9yZSwgdGhlIG1hZ2ljIHZhcmlhYmxlcyAnYXJtYm9vdF9lbmQnIGFuZCAnYXJtYm9vdF9lbmRfZGF0YScKICBvZiB0aGUgbGlua2VyIHNjcmlwdHMgYXJlIHJlcGxhY2VkIGJ5ICdfX2Jzc19zdGFydCcgYW5kICdfZW5kJywKICByZXNwLiwgd2hpY2ggaXMgYSBmdXJ0aGVyIHN0ZXAgdG8gZWxpbWluYXRlIHVubmVjZXNzYXJ5IGRpZmZlcmVuY2VzCiAgYmV0d2VlbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIENQVSBhcmNoaXRlY3R1cmVzLgoKKiBQYXRjaCBieSBsaWFuZyBhIGxlaSwgOSBKYW4gMjAwNDoKICBGaXggSW50ZWwgMjhGMTI4SjMgSUQgaW4gaW5jbHVkZS9mbGFzaC5oCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA5IEphbiAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBUQjAyMjkgYm9hcmQgKE5FQyBWUjQxMzEgTUlQUyBwcm9jZXNzb3IpCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTIgRGVjIDIwMDM6CiAgY2hhbmdlZCBleHRlcm4gX19pbmxpbmVfXyBpbnRvIHN0YXRpYyBfX2lubGluZV9fIGluCiAgaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDMwIERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBJQk0gUFBDNDQwR1guIE11bHRpcGxlIEVNQUMgRXRoZXJuZXQgZGV2aWNlcywKICBzZWxlY3QgTURJIHBvcnQgYmFzZWQgb24gZW5hYmxlZCBFTUFDIGRldmljZS4KICBBZGQgc3VwcG9ydCBmb3IgWEVTIEluYyA8aHR0cDovL3d3dy54ZXMtaW5jLmNvbT4gWFBlZGl0ZTEwMDAgNDQwR1gKICBiYXNlIFByUE1DIGJvYXJkLgoKKiBQYXRjaCBieSBXb2x0ZXIgS2FtcGh1aXMsIDE1IERlYyAyMDAzOgogIG1hZGUgQ09ORklHX1NJTEVOVF9DT05TT0xFIHVzYWJsZSBvbiBhbGwgYXJjaGl0ZWN0dXJlcwoKKiBEaXNhYmxlIGRhdGUgY29tbWFuZCBvbiBUUU04NjZNIC0gdGhlcmUgaXMgbm8gUlRDIG9uIE1QQzg2NgoKKiBGaXggdmFyaWFibGUgQ1BVIGNsb2NrIGZvciBNUEM4NTkvODY2IHN5c3RlbXMgZm9yIGxvdyBDUFUgY2xvY2tzCgoqIEltcGxlbWVudCBhZGFwdGl2ZSBTRFJBTSB0aW1pbmcgY29uZmlndXJhdGlvbiBiYXNlZCBvbiBhY3R1YWwgQ1BVCiAgY2xvY2sgZnJlcXVlbmN5IGZvciBJTkNBLUlQOyBmaXggcHJvYmxlbSB3aXRoIGJvYXJkIGhhbmdpbmcgd2hlbgogIHN3aXRjaGluZyBmcm9tIDE1ME1IeiB0byAxMDBNSHoKCiogQWRkIFBDTUNJQSBDUyBzdXBwb3J0IGZvciBCTVMyMDAzIGJvYXJkCgoqIEFkZCB2YXJpYWJsZSBDUFUgY2xvY2sgZm9yIE1QQzg1OS84NjYgc3lzdGVtcyAoc28gZmFyIG9ubHkgVFFNODY2TSk6CiAgc2VlIGRvYy9SRUFETUUuTVBDODY2IGZvciBkZXRhaWxzOwogIGltcGxlbWVudCB3b3JrYXJvdW5kIGZvciAiU0lVNCIgYW5kICJTSVU5IiBzaWxpY29uIGJ1Z3Mgb24gTVBDODY2OwogIGNhbGN1bGF0ZSBDUFUgY2xvY2sgZnJlcXVlbmN5IGZyb20gUExMIHJlZ2lzdGVyIHZhbHVlcy4KCiogQWRkIHN1cHBvcnQgZm9yIDEyOCBNQiBSQU0gb24gVFFNOHh4TC9NIG1vZHVsZXMKCiogRml4IFBTLzIga2V5Ym9hcmQgcHJvYmxlbSBjYXVzZWQgYnkgc3RhdGljYWxseSBpbml0aWFsaXplZCB2YXJpYWJsZQogIHBvaW50aW5nIHRvIGEgbG9jYXRpb24gaW4gZmxhc2gKCiogRml4IElOQ0EtSVAgY2xvY2sgY2FsY3VsYXRpb246IDQwMC8zID0gMTMzLjMgTUh6LCBub3QgMTMwLgoKKiBUaGUgUFMvMiBtdXggb24gdGhlIEJNUzIwMDMgYm9hcmQgbmVlZHMgNDUwIG1zIGFmdGVyIHBvd2VyIG9uCiAgYmVmb3JlIHdlIGNhbiBhY2Nlc3MgaXQ7IGFkZCBkZWxheSBpbiBjYXNlIHdlIGFyZSBmYXN0ZXIgKHdpdGggbm8KICBDRiBjYXJkIGluc2VydGVkKQoKKiBDbGVhbnVwIG9mIHNvbWUgaW5pdCBmdW5jdGlvbnMKCiogTWFrZSBzdXJlIFNDQyBFdGhlcm5ldCBpcyBhbHdheXMgc3RvcHBlZCBieSB0aGUgdGltZSB3ZSBib290IExpbnV4CiAgdG8gYXZvaWQgTGludXggY3Jhc2hlcyBieSBlYXJseSBwYWNrZXRzIGNvbWluZyBpbi4KCiogQWNjZWxlcmF0ZSBmbGFzaCBhY2Nlc3NlcyBvbiBMV01PTiBib2FyZCBieSB1c2luZyBidWZmZXJlZCB3cml0ZXMKCiogRml4IHR5cG8gaW4gTWFrZWZpbGU7CiAgZml4IHByb2JsZW0gd2l0aCBQQVJUTlVNIGRldGVjdGlvbgoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMDkgSmFuIDIwMDQ6CiAgLSBhZGQgUlRDIHN1cHBvcnQgZm9yIE1QQzUyMDAgYmFzZWQgYm9hcmRzIChyZXF1aXJlcyBSVENfWFRBTCkKCiogQWRkIHN1cHBvcnQgZm9yIElERSBMRUQgb24gQk1TMjAwMyBib2FyZAogIChleGNsdXNpdmUgd2l0aCBzdGF0dXMgTEVEISkKCiogQWRkIHN1cHBvcnQgZm9yIFBTLzIga2V5Ym9hcmQgKHVzZWQgd2l0aCBQUy8yIG11bHRpcGxleG9yIG9uCiAgQk1TMjAwMyBib2FyZCkKCiogUGF0Y2hlcyBieSBSZWluaGFyZCBNZXllciwgNCBKYW4gMjAwNCArIDcgSmFuIDIwMDQ6CiAgQWRkIGNvbW1vbiBmaWxlcyBmb3IgImVtayIgYm9hcmRzCgoqIEFkZCBhIGNvbW1vbiBnZXRfcmFtX3NpemUoKSBmdW5jdGlvbiBhbmQgbW9kaWZ5IHRoZSB0aGUKICBib2FyZC1zcGVjaWZpYyBmaWxlcyB0byBpbnZva2UgdGhhdCBjb21tb24gaW1wbGVtZW50YXRpb24uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjAuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBTZXQgZGVmYXVsdCBjbG9jayBmb3IgSU5DQS1JUCB0byAxNTAgTUh6CgoqIE1ha2UgQk1TMjAwMyB1c2UgYSBzZXBhcmF0ZSBjb25maWcgZmlsZSB0byBhdm9pZCAjaWZkZWYgbWVzczsKICBhZGQgSTJDIHN1cHBvcnQ7IGFkZCBzdXBwb3J0IGZvciBEUzEzMzcgUlRDCgoqIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCAgZm9yIEJNUzIwMDMgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIHN0YXR1cyBMRUQgb24gQk1TMjAwMyBib2FyZAoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDAyIEphbiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgTmlvcyBBY3RpdmUgU2VyaWFsIE1lbW9yeSBJbnRlcmZhY2UgKEFTTUkpCiAgb24gQ3ljbG9uZSBkZXZpY2VzCgoqIFBhdGNoIGJ5IEFuZHJlYSBNYXJzb24sIDE2IERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciB0aGUgUFBDaGFtZWxlb24gTUUgYW5kIEhJIG1vZHVsZXMKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjIgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIERVRVQgQURTIGJvYXJkIChNUEM4N3gvODh4KQoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDE1IERlYyAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBjcmFtZnMgKHVzZXMgSkZGUzIgY29tbWFuZCBpbnRlcmZhY2UpCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAxMSBEZWMgMjAwMzoKICAtIG1vcmUgZG9jdW1lbnRhdGlvbiBmb3IgTklPUyBwb3J0CiAgLSBuZXcgc3RydWN0IG5pb3NfcGlvX3QsIHN0cnVjdCBuaW9zX3NwaV90CiAgLSBSZWNvbmZpZ3VyYXRpb24gZm9yIE5JT1MgRGV2ZWxvcG1lbnQgS2l0IERLMUMyMDoKICAgIG8gbW92ZSBib2FyZCByZWxhdGVkIGNvZGUgZnJvbSBib2FyZC9kazFjMjAKICAgICAgdG8gYm9hcmQvYWx0ZXJhL2RrMWMyMAogICAgbyBjcmVhdGUgYSBuZXcgY29tbW9uIHNvdXJjZSBwYXRoIGJvYXJkL2FsdGVyYS9jb21tb24KICAgICAgYW5kIG1vdmUgZ2VuZXJpYyBmbGFzaCBhY2Nlc3Mgc3R1ZmYgaW50byBpdAogICAgbyBjaGFuZ2UvZXhwYW5kIGNvbmZpZ3VyYXRpb24gZmlsZSBESzFDMjAuaAogIC0gQWRkIHN1cHBvcnQgZm9yIE5JT1MgRGV2ZWxvcG1lbnQgS2l0IERLMVMxMAogIC0gQWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgTklPUyBzeXN0ZW1zCiAgLSBBZGQgZHVhbCA3LXNlZ21lbnQgTEVEIHN1cHBvcnQgZm9yIEFsdGVyYSBOSU9TIERldktpdHMKCiogUGF0Y2ggYnkgUm9uZW4gU2hpdHJpdCwgMTAgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIERCNjQzNjAgLyBEQjY0NDYwIGRldmVsb3BtZW50IGJvYXJkcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxMCBEZWMgMjAwMzoKICBmaXggZGVwZW5kZW5jeSBwcm9ibGVtIGluIGV4YW1wbGVzL01ha2VmaWxlCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCA4IERlYyAyMDAzCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIFBBVEkgYm9hcmQgKE1QQzU1NSkKICAtIGFkZCBTUEkgc3VwcG9ydCBmb3IgdGhlIE1QQzV4eAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwOCBEZWMgMjAwMzoKICBhZGQgY29uZmlndXJhdGlvbiBvcHRpb25zIENPTkZJR19TRVJJQUxfVEFHIGFuZCBDT05GSUdfUkVWSVNJT05fVEFHCiAgdG8gcGFzcyBBVEFHX1NFUklBTCBhbmQgQVRBR19SRVZJU0lPTiwgcmVzcC4sIHRvIHRoZSBBUk0gdGFyZ2V0OwogIGNsZWFudXAgc29tZSByZWR1bmRhbmQgI2RlZmluZXMKCiogUGF0Y2ggYnkgQW5kcukgU2Nod2FyeiwgOCBEZWMgMjAwMzoKICBmaXhlcyBmb3IgRGF2aWNvbSBETTkxMDJBIEV0aGVybmV0IENoaXAgKCNkZWZpbmUgQ09ORklHX1RVTElQX0ZJWF9EQVZJQ09NKToKICAtIFRYIGFuZCBSWCBkZXNrcmlwdG9ycyBtdXN0IGJlIHF1YWQtd29yZCBhbGlnbmVkCiAgLSBkb2VzIG5vdCB3b3JrIHdpdGggb25seSBvbmUgVFggZGVza3JpcHRvcgogIC0gc3RhbmRhcmQgcmVzZXQgbWV0aG9kIGRvZXMgbm90IHdvcmsKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggRGVjIDIwMDM6CiAgYWRkIFJUTDgxMzkgZXRoZXJuZXQgZHJpdmVyCgoqIFBhdGNoZXMgYnkgRWQgT2tlcnNvbiwgMDcgRGVjIDIwMDM6CiAgLSBmaXggZXRoZXJuZXQgZm9yIHRoZSBBVTF4MDAgcHJvY2Vzc29ycyBpbiBsaXR0bGUtZW5kaWFuIG1vZGUuCiAgLSBleHRlbmQgbWVtc2V0dXAuUyBmb3IgdGhlIEFVMXgwMCBwcm9jZXNzb3JzIGluIEJFIGFuZCBMRSBtb2RlcwoKKiBNaW5vciBjb2RlIGNsZWFudXAgKGNvZGluZyBzdHlsZSkKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDMwIERlYyAyMDAzOgogIC0gY3B1L21wYzV4eHgvZmVjLmM6IGFkZGVkIENPTkZJR19QSFlfQUREUiwgYWRkZWQgQ09ORklHX1BIWV9UWVBFLAogIC0gYWRkZWQgQ09ORklHX1BIWV9BRERSIHRvIGluY2x1ZGUvY29uZmlncy9JY2VDdWJlLmgsCiAgLSB0dXJuZWQgZGVidWcgcHJpbnQgb2YgUEhZIHJlZ2lzdGVycyBpbnRvIGEgZnVuY3Rpb24gKGNhbGxlZCBpbiB0d28gcGxhY2VzKQogIC0gYWRkZWQgc3VwcG9ydCBmb3IgRU1LIE1QQzUyMDAgYmFzZWQgbW9kdWxlcwoKKiBGaXggTVBDOHh4IFBMUFJDUl9NRkRfU0hJRlQgdHlwbwoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODY2TSBtb2R1bGVzCgoqIEZpeGVzIGZvciBUUU04NTVNIHdpdGggNCBNQiBmbGFzaCAoQW0yOURMMTYzID0gX25vXyBtaXJyb3IgYml0IGZsYXNoKQoKKiBGaXggYSBmZXcgY29tcGlsZXIgd2FybmluZ3MKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDI4IERlYyAyMDAzOgogIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIFRPUDUyMDAgYm9hcmQKCiogTWFrZSBDUFUgY2xvY2sgb24gSUNBLUlQIGJvYXJkIGNvbnRyb2xsYWJsZSBieSBhICJjcHVjbGsiCiAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hpY2ggY2FuIHNldCB0byAiMTAwIiwgIjEzMyIsIG9yICIxNTAiLiBUaGUKICBDUFUgY2xvY2sgd2lsbCBiZSBjb25maWd1cmVkIGFjY29yZGluZ2x5IHVwb24gbmV4dCByZWJvb3QuIE90aGVyCiAgdmFsdWVzIGFyZSBpZ25vcmVkLiBJbiBjYXNlIG9mIGFuIGludmFsaWQgb3IgdW5kZWZpbmVkICJjcHVjbGsiCiAgdmFsdWUsIHRoZSBjb21waWxlLXRpbWUgZGVmYXVsdCBDUFUgY2xvY2sgc3BlZWQgd2lsbCBiZSB1c2VkLgoKKiBFbmFibGUgUXVhZC1VQVJUIG9uIEJNUzIwMDMgYm9hcmQgKGluaXRpYWxpemUgdGhlIFBDTUNJQSBtZW1vcnkKICB3aW5kb3cgdGhhdCBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgVUFSVCByZWdpc3RlcnMgYnkgdGhlIExpbnV4IGRyaXZlcikKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDIwIERlYyAyMDAzOgogIEZpeCBjbG9jayBjYWxjdWxhdGlvbiBmb3IgdGhlIE1QQzUyMDAgZm9yIGhpZ2hlciBjbG9jayBmcmVxdWVuY2llcwogIChhYm92ZSAyKiozMiAvIDEwID0gNDI5LjUgTUh6KS4KCiogRml4IENPTkZJR19QTExfUENJX1RPX01FTV9NVUxUSVBMSUVSIGRpdmlkZXIgZXJyb3IgaW4gU1A4MjQwIGNvbmZpZ3VyYXRpb24KCiogRml4IEljZUN1YmUgQ0xLSU4gY29uZmlndXJhdGlvbiAoaXQncyAzMy4wMDAwMDBNSHopCgoqIEFkZCBuZXcgY29uZmlndXJhdGlvbiBmb3IgSWNlQ3ViZSBib2FyZCB3aXRoIEREUiBtZW1vcnkKCiogVXBkYXRlIFRSQUIgbWVtb3J5IGNvbmZpZ3VyYXRpb25zCgoqIEFkZCBKRkZTMiBzdXBwb3J0IGZvciBJTkNBLUlQIGJvYXJkCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAwOSBEZWMgMjAwMzoKICAtIEJVQklOR0E0MDVFUDogY2hhbmdlZCBmbGFzaCBkcml2ZXIgdG8gcHJvdGVjdCB0b3Agc2VjdG9yIGNvbnRhaW5pbmcKICAgIGZpcnN0IGluc3RydWN0aW9uLgogIC0gQlVCSU5HQTQwNUVQOiBjb25maWd1cmVkICJlZXByb20iIGNvbW1hbmQgdG8gYWNjZXNzIGJvb3QgY29uZmlnIEVFUFJPTS4KICAtIEJVQklOR0E0MDVFUDogZml4ZWQgUExMIGluaXQgKGluaXQgY2hpcCBzZWxlY3RzIGJlZm9yZSBGUEdBL05WUkFNIGFjY2VzcykuCiAgLSA0MDVFUDogZml4ZWQgU1BELWJhc2VkIFNEUkFNIGluaXQgKG9ubHkgdXNlIGJhbmtzIDAgYW5kIDEpLgogIC0gNDA1RVA6IGFkZGVkL2ZpeGVkIHN1cHBvcnQgZm9yICJyZWdpbmZvIiBjb21tYW5kLgogIC0gNHh4OiByZW1vdmVkIHNwdXJpb3VzIE1JSSBlcnJvciBtZXNzYWdlcyBvbiAibWlpIGluZm8iIGNvbW1hbmQuCgoqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDI4IE5vdiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBDb2xkRmlyZSBDUFUKICBhZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgTTUyNzJDMyBhbmQgTTUyODJFVkIgYm9hcmRzCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI0IE5vdiAyMDAzOgogIC0gYWRkIGEgcmV0dXJuIHZhbHVlIGZvciB0aGUgZnBnYSBjb21tYW5kCiAgLSBhZGQgaWRlX3ByZWluaXQoKSBmdW5jdGlvbiBjYWxsZWQgaW4gaWRlX2luaXQgaWYgQ09ORklHX0lERV9QUkVJTklUCiAgICBpcyBkZWZpbmVkLiBJZiBpZGVfcHJlaW5pdCBmYWlscywgaWRlX2luaXQgaXMgYWJvcnRlZC4KICAtIGZpeCBhbiBlbmRpYW5lc3MgcHJvYmxlbSBpbiBmYXQuaAoKKiBQYXRjaCBieSBXb2x0ZXIgS2FtcGh1aXMsIDA1IERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBTTk1DJ3MgUVM4NTAvUVM4MjMvUVM4NjBUIGJvYXJkcwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAzIERlYyAyMDAzOgogICJyZXZpdmUiIFUtQm9vdCBzdXBwb3J0IGZvciBvbGQgTW90b3JvbGEgTVBDODYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IENhbShpbG8/KSwgMDMgRGVjIDIwMDM6CiAgbWFrZSBleGFtcGxlcyBidWlsZCBldmVuIHdpdGggYnJva2VuIE1vbnRhdmlzdGEgb2JqY29weQoKKiBQYXRjaCBieSBQYXZlbCBCYXJ0dXNlaywgMjcgTm92IDIwMDM6CiAgZml4IGNvbnZlcnNpb24gcHJvYmxlbSB3aXRoICJib290cmV0cnkiIGV2aXJvbm1lbnQgdmFyaWFibGUKCiogUGF0Y2ggYnkgQW5kcmUgU2Nod2FyeiwgMjQgTm92IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIG12Ymx1ZSAobXZCbHVlTFlOWCBhbmQgbXZCbHVlQk9YKSBib2FyZHMKCiogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDIxIE5vdiAyMDAzOgogIHNldCBaTUlJIGJyaWRnZSBzcGVlZCBvbiA0NDAKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTcgTm92IDIwMDM6CiAgRml4IG1pc21hdGNoZWQgI2lmZGVmIC8gI2VuZGlmIGluIGluY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9oYXJkd2FyZS5oCgoqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAxNCBOb3YgMjAwMzoKICAtIGJvYXJkL21wbC9jb21tb24vY29tbW9uX3V0aWwuYwogICAgKiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgQlpJUDIgY29tcHJlc3NlZCBpbWFnZXMKICAgICogdmFyaW91cyBjbGVhbnVwcyAocHJpbnRmIC0+IHB1dHMsIC4uLikKICAtIGJvYXJkL21wbC9jb21tb24vZmxhc2guYwogICAgKiByZXBvcnQgY29ycmVjdCBlcnJvcnMgdG8gdXBwZXIgbGF5ZXJzCiAgICAqIGNoZWNrIHRoZSBlcmFzZSBmYWlsIGFuZCBWUFAgbG93IGJpdHMgaW4gc3RhdHVzIHJlZwogIC0gYm9hcmQvbXBsL3ZjbWE5L2NtZF92Y21hOS5jCiAgLSBib2FyZC9tcGwvdmNtYTkvZmxhc2guYwogICAgKiB2YXJpb3VzIGNsZWFudXBzIChwcmludGYgLT4gcHV0cywgLi4uKQogIC0gY29tbW9uL2NtZF91c2IuYwogICAgKiBmaXggdHlwbyBpbiBjb21tZW50CiAgLSBjcHUvYXJtOTIwdC91c2Jfb2hjaS5jCiAgICAqIHN1cHBvcnQgZm9yIFMzQzI0MTAgaXMgbWlzc2luZyBpbiAjaWYgbGluZQogIC0gZHJpdmVycy9jczg5MDAuYwogICAgKiByZWluaXQgc29tZSByZWdpc3RlcnMgaW4gY2FzZSBvZiBlcnJvciAoY2FibGUgbWlzc2luZywgLi4uKQogIC0gZnMvZmF0L2ZhdC5jCiAgICAqIHN1cHBvcnQgZm9yIFVTQi9NTUMgZGV2aWNlcyBpcyBtaXNzaW5nIGluICNpZiBsaW5lCiAgLSBpbmNsdWRlL2NvbmZpZ3MvTUlQNDA1LmgKICAtIGluY2x1ZGUvY29uZmlncy9QSVA0MDUuaAogICAgKiBlbmFibGUgQlpJUDIgc3VwcG9ydAogICAgKiBlbmxhcmdlIG1hbGxvYyBzcGFjZSB0byAxTWlCIGJlY2F1c2Ugb2YgQlpJUDIgc3VwcG9ydAogIC0gaW5jbHVkZS9jb25maWdzL1ZDTUE5LmgKICAgICogZW5hYmxlIEJaSVAyIHN1cHBvcnQKICAgICogZW5sYXJnZSBtYWxsb2Mgc3BhY2UgdG8gMU1pQiBiZWNhdXNlIG9mIEJaSVAyIHN1cHBvcnQKICAgICogZW5hYmxlIFVTQiBzdXBwb3J0CiAgLSBsaWJfYXJtL2FybWxpbnV4LmMKICAgICogY2hhbmdlIGNhbGxpbmcgY29udmVudGlvbiBvZiBBUk0gTGludXgga2VybmVsIGFzCiAgICAgIGRlc2NyaWJlZCBvbiBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL2Jvb3RpbmcucGhwCgoqIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTQgTm92IDIwMDM6CiAgU3BsaXQgZGJhdTF4MDAgaW50byBkYmF1MTAwMCwgZGJhdTExMDAgYW5kIGRiYXUxNTAwIGNvbmZpZ3MgdG8KICBzdXBwb3J0IGFsbCB0aGVzZSBBTUQgYm9hcmRzLgoKKiBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIDE0IE5vdiAyMDAzOgogIFdvcmthcm91bmQgZm9yIG1pcHMgYXUxeDAwIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3NlcyAodGhlIGF1MXgwMAogIHVzZXMgYSAzNiBiaXQgYnVzIGludGVybmFsbHkgYW5kIGNhbm5vdCBhY2Nlc3MgcGh5c2ljYWwgbWVtb3J5CiAgZGlyZWN0bHkuIFVzZSB0aGUgdW5jYWNoZWQgU0RSQU0gYWRkcmVzcyBpbnN0ZWFkIG9mIHRoZSBwaHlzaWNhbAogIG9uZS4pCgoqIFBhdGNoIGJ5IFh1ZSBMaWdvbmcgKEpvZSksIDEzIE5vdiAyMDAzOgogIGFkZCBSZWFsdGVrIDgwMTkgZXRoZXJuZXQgZHJpdmVyCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEzIE5vdiAyMDAzOgogIE1QQzgyNnhBRFMvUFEyRkFEUyAgY2xlYW51cAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxMiBOb3YgMjAwMzoKICBVcGRhdGUgUkVBRE1FIHRvIG1hcmsgdGhlIFBPUlRJTyBjb21tYW5kcyBub24tc3RhbmRhcmQKCiogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaehyZSwgMTIgTm92IDIwMDM6CiAgdXBkYXRlIGZvciBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIGRldmVsb3BtZW50IGtpdDoKICAtIHN1cHBvcnQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBEYXRhRmxhc2gKICAtIEF0bWVsIERhdGFGbGFzaCBBVDQ1REIxMjgyIHN1cHBvcnQKCiogUGF0Y2ggYnkgSmVmZiBDYXJyLCAxMSBOb3YgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgbmV3IHZlcnNpb24gb2YgODI3MCBwcm9jZXNzb3JzCgoqIFBhdGNoZXMgYnkgR2VvcmdlIEcuIERhdmlzLCAwNSBOb3YgMjAwMzoKICAtIG9ubHkgcGFzcyB0aGUgQVJNIGxpbnV4IGluaXRyZCB0YWcgdG8gdGhlIGtlcm5lbCB3aGVuIGFuIGluaXRyZAogICAgaXMgYWN0dWFsbHkgcHJlc2VudAogIC0gdXBkYXRlIG9tYXAxNTEwaW5uIGNvbmZpZ3VyYXRpb24gZmlsZQoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMyBOb3YgMjAwMzoKICAtIG1vcmUgZW5kaWFuZXNzIGZpeGVzIGZvciBMQU45MUMxMTEgZHJpdmVyCiAgLSBDRkdfSFogY29uZmlndXJhdGlvbiBwYXRjaCBmb3IgTklPUyBDeWNsb25lIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjggT2N0IDIwMDM6CiAgZml4IFBIWV9JTlRfUkVHIHZzLiBQSFlfTUFTS19SRUcgYnVnIGluIGRyaXZlcnMvc21jOTExMTEuYwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMCBPY3QgMjAwMzoKICAtIG1ha2UgIm1paSBpbmZvIDxhZGRyPiIgc2hvdyBpbmZvciBmb3IgUEhZIGF0ICJhZGRyIiBvbmx5CiAgLSBFbmRpYW4gZml4IGZvciBtaWlwaHlfaW5mbygpCgoqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMTkgU2VwIDIwMDM6CiAgTW92ZSBtb3N0IG9mIHRoZSB0aW1lciBpbnRlcnJ1cHQgcmVsYXRlZCBQUEMgY29kZSB0byBwcGNfbGliL2ludGVycnVwdHMuYwoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxNyBTZXAgMjAwMzoKICBCcmluZyBBUk0gbWVtb3J5IGxheW91dCBpbiBzeW5jIHdpdGggdGhlIGRvY3VtZW50YXRpb246CiAgc3RhY2sgYW5kIG1hbGxvYy1oZWFwIGFyZSBub3cgbG9jYXRlZCBfYmVsb3dfIHRoZSBVLUJvb3QgY29kZQoKKiBBY2NlbGVyYXRlIGJvb3Rpbmcgb24gVFJBQiBib2FyZDogcmVhZCBhbmQgY2hlY2sgIGF1dG91cGRhdGUJaW1hZ2UKICBoZWFkZXJzIGZpcnN0IGluc3RlYWQgb2YgYWx3YXlzIHJlYWRpbmcgdGhlIHdob2xlIGltYWdlcy4KCiogRml4IHR5cGUgaW4gTVBDNVhYWCBjb2RlIChwb2ludGVkIG91dCBieSBWaWN0b3IgV3JlbikKCiogRW5hYmxlZCBwYXNzd29yZCBjaGVjayBvbiBSTVUgYm9hcmQKCiogRml4IGNvbmZpZ3VyYXRpb24gcHJvYmxlbSB3aXRoIEljZUN1YmUgaW4gTE9XQk9PVCBjb25maWd1cmF0aW9uOgogIGVudnJpb25tZW50IGdvdCBlbWJlZGRlZCwgY29ycnVwdGluZyB0aGUgaW1hZ2UgbGF5b3V0LgoKKiBGaXggTkVDIGRpc3BsYXkgbmFtZXMgKGl0J3MgNjQ0MCBbZm9yIDY0MHg0ODBdLCBub3QgNjY0MCkuCgoqIEFkZGVkIEJNUzIwMDMgYm9hcmQKICBhZGQgc3VwcG9ydCBmb3IgTkVDIE5MNjQ0OEJDMzMtNTQuIDEwLjQiLCA2NDB4NDgwIFRGVCBkaXNwbGF5CgoqIEZpeCBmbGFzaCBkcml2ZXIgZm9yIFRSQUIgYm9hcmQgKG11c3QgdXNlIFVubG9jayBCeXBhc3MgUmVzZXQKICBjb21tYW5kIHRvIGV4aXQgVW5sb2NrIEJ5cGFzcyBNb2RlKTsgYWRqdXN0IHRpbWluZ3MgZm9yIGZsYXNoLCBTUkFNCiAgYW5kIENQTEQKCiogVXNlICItZlBJQyIgaW5zdGVhZCBvZiAiLW1yZWxvY2F0YWJsZSIgdG8gcHJldmVudCBwcm9ibGVtcyB3aXRoCiAgcmVjZW50IHRvb2xzCgoqIEFkZCBjaGVja3N1bSB2ZXJpZmljYXRpb24gdG8gJ2ltbHMnIGNvbW1hbmQKCiogQWRkIGJkX2luZm8gZmllbGRzIG5lZWRlZCBmb3IgNHh4IExpbnV4IEkyQyBkcml2ZXIKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgNCBOb3YuIDIwMDM6CiAgRml4IGVycm9yIGluIGNtZF92ZmQuYyAoVFJBQiBib2FyZDogInZmZCAvMSIgc2hvd3Mgbm93IG9ubHkgb25lIEJpdG1hcCkKCiogUHJpbnQgdXNlZCBuZXR3b3JrIGludGVyZmFjZSB3aGVuIENPTkZJR19ORVRfTVVMVEkgaXMgc2V0CgoqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDI4IE9jdCAyMDAzOgogIEFkZCBsb3cgYm9vdCBzdXBwb3J0IGZvciBNUEM1MjAwCgoqIEZpeCBwcm9ibGVtIHdpdGggZHVhbCBQQ01DSUEgc3VwcG9ydCAoTlNDVSkKCiogRml4IE1QQzUyMDAgSTJDIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjAuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBGaXggcGFyYW1ldGVyIHBhc3NpbmcgdG8gc3RhbmRhbG9uZSBpbWFnZXMgd2l0aCBib290bSBjb21tYW5kCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAzMCBPY3QgMjAwMzoKICBGaXggYnVpbGQgZXJyb3JzIGZvciBpeGRwNDI1IGJvYXJkCgoqIFBhdGNoIGJ5IERhdmlkIE0uIEhvcm4sIDI5IE9jdCAyMDAzOgogIEZpeGVzIHRvIGJ1aWxkIHVuZGVyIENZR1dJTgoKKiBHZXQgSWNlQ3ViZSBNR1Q1MTAwIHdvcmtpbmcgKGFnYWluKQoKKiBGaXggcHJvYmxlbXMgaW4gbWVtb3J5IHRlc3Qgb24gc29tZSBib2FyZHMgKHdoaWNoIHdhcyBub3QKICBub24tZGVzdHJ1Y3RpdmUgYXMgaW50ZW5kZWQpCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAyOCBPY3QgMjAwMzoKICBDaGFuZ2UgZnMvZmF0L2ZhdC5jIHRvIHB1dCBJL08gYnVmZmVycyBpbiBCU1MgaW5zdGVhZCBvbiB0aGUgc3RhY2sKICB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IG9uIEFSTSBzeXN0ZW1zCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjggT2N0IDIwMDM6CiAgZml4IGluaXQgc2VxdWVuY2UgZXJyb3IgZm9yIE5JT1MgcG9ydAoKKiBBbGxvdyBsb3dlcmNhc2Ugc3BlbGxpbmcgZm9yIEljZUN1YmVfNTIwMDsgc3VwcG9ydCBNUEM1MjAwTElURSBuYW1lCgoqIEFkZCBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSB0byBUUkFCIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgWGlhbyBYaWFuZ2h1YSwgMjMgT2N0IDIwMDM6CiAgc21hbGwgcGF0Y2ggZm9yIG1wYzg1eHgKCiogRml4IHNtYWxsIHByb2JsZW0gaW4gTVBDNTIwMCBJMkMgZHJpdmVyCgoqIEZpeCBGQ0MzIHN1cHBvcnQgb24gQVRDIGJvYXJkCgoqIENvcnJlY3QgaGVhZGVyIHByaW50aW5nIGZvciBtdWx0aS1pbWFnZSBmaWxlcyBpbiBkb19ib290bSgpCgoqIE1ha2UgQ09ORklHX1NJTEVOVF9DT05TT0xFIHdvcmsgd2l0aCBDT05GSUdfQVVUT0JPT1RfS0VZRUQKCiogRml4IFBDSSBwcm9ibGVtcyBvbiBQUENoYW1lbGVvbiBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxOCBPY3QgMjAwMzoKICBGaXggQVQ5MVJNOTIwMCBldGhlcm5ldCBkcml2ZXIKCiogUGF0Y2ggYnkgTnllIExpdSwgMTcgT2N0IDIwMDM6CiAgRml4IHR5cG8gaW4gaW5jbHVkZS9tcGM4eHguaAoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxNiBPY3QgMDM6CiAgRml4ZXMgZm9yIGNwdS9hcm05MjUvaW50ZXJydXB0LmMKICAtIEluaXRpYWxpemUgdGltZXN0YW1wICYgbGFzdGRlYyB2YXJzLgogIC0gZml4IHRpbWVzdGFtcCBvdmVyZmxvd3MuCiAgLSBmaXggbGFzdGRlYyBvdmVyZmxvdy4KICAtIHNtYXJ0ZXIgbm9ybWFsaXphdGlvbiB0byBhbGxvdyB1ZGVsYXkoKSBiZWxvdyAxbXMgdG8gd29yay4KCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAxNiBPY3QKICBhZGQgbmV0d29ya2luZyBzdXBwb3J0IGZvciB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAogIEN5Y2xvbmUgRWRpdGlvbiAoREstMUMyMCkKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE0IE9jdCAyMDAzOgogIGFkZCBoaW50IGFib3V0IGRvYy9SRUFETUUuc2lsZW50IHRvIFJFQURNRSBmaWxlCgoqIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgTlNDVQoKKiBGaXggUENJIHByb2JsZW1zIG9uIFBQQ2hhbWVsZW9uRVZCCgoqIFRSQUIgYXV0by11cGRhdGU6IEJhc2UgZGVjaXNpb24gaWYgd2UgaGF2ZSB0byBzdHJpcCB0aGUgaW1hZ2UKICBoZWFkZXIgb24gaW1hZ2UgdHlwZSBhcyBlbmNvZGVkIGluIHRoZSBoZWFkZXIKICAoaW5jbHVkZSBpbWFnZSB0eXBlIHBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IE9jdCAyMDAzKQoKKiBQYXRjaGVzIGJ5IFhpYW5naHVhIFhpYW8sIDE1IE9jdCAyMDAzOgoKICAtIEFkZGVkIE1vdG9yb2xhIENQVSA4NTQwLzg1NjAgc3VwcG9ydCAoY3B1Lzg1eHgpCiAgLSBBZGRlZCBNb3Rvcm9sYSBNUEM4NTQwQURTIGJvYXJkIHN1cHBvcnQgKGJvYXJkL21wYzg1NDBhZHMpCiAgLSBBZGRlZCBNb3Rvcm9sYSBNUEM4NTYwQURTIGJvYXJkIHN1cHBvcnQgKGJvYXJkL21wYzg1NjBhZHMpCgoqIEZpeCBmbGFzaCB0aW1pbmdzIG9uIFRSQUIgYm9hcmQKCiogTWFrZSBzdXJlIEhVU0ggaXMgaW5pdGlhbGl6ZWQgZm9yIHJ1bm5pbmcgYXV0by11cGRhdGUgc2NyaXB0cwoKKiBNYWtlIDUyMDAgcmVzZXQgY29tbWFuZCBfcmVhbGx5XyByZXNldCB0aGUgYm9hcmQsIHdpdGhvdXQgcnVubmluZwogIGFueSBvdGhlciBjb2RlIGFmdGVyIGl0CgoqIEZpeCBlcnJvcnMgd2l0aCBmbGFzaCBlcmFzZSB3aGVuIHJhbmdlIHNwYW5zCWFjcm9zcyBiYW5rcwogIHRoYXQgYXJlIG1hcHBlZCBpbiByZXZlcnNlIG9yZGVyCgoqIEZpeCBmbGFzaCBtYXBwaW5nIGFuZCBkaXNwbGF5IG9uIFAzRzQgYm9hcmQKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDE1IEp1bCAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIEludGVsIElYUDQyNSBDUFUKICAtIGFkZCBzdXBwb3J0IGZvciBJWERQNDI1IGV2YWwgYm9hcmQKCiogQWRkZWQgY29uZmlnIG9wdGlvbiBDT05GSUdfU0lMRU5UX0NPTlNPTEUuICBTZWUgZG9jL1JFQURNRS5zaWxlbnQKICBmb3IgbW9yZSBpbmZvcm1hdGlvbgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMCBPY3QgMjAwMwogIC0gQWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBGUEdBIEFDRVgxSwoKKiBQYXRjaGVzIGJ5IFRob21hcyBMYW5nZSwgMDkgT2N0IDIwMDM6CiAgLSBmaXggY21kX2lkZS5jIGZvciBub24gcHBjIGJvYXJkcyAocmVhZC93cml0ZSBmdW5jdGlvbnMgZGlkIG5vdAogICAgYWRkIEFUQSBiYXNlIGFkZHJlc3MpCiAgLSBmaXggZm9yIHNoYW5ub24gYm9hcmQKICAtICNpZmRlZiBDT05GSUdfSURFXzh4eF9ESVJFQ1Qgc29tZSBvdGhlcndpc2UgdW51c2VkIGNvZGUKICAtIEVuZGlhbiBzd2FwIEFUQSBpZGVudGl0eSBmb3IgYWxsIGJpZyBlbmRpYW4gQ1BVcywgbm90IGp1c3QgUFBDCiAgLSBNSVBTIG9ubHk6IE5ldyBvcHRpb24gQ09ORklHX01FTVNJWkVfSU5fQllURVMgZm9yIHBhc3NpbmcgbWVtc2l6ZQogICAgYXJncyB0byBsaW51eAogIC0gYWRkIHN1cHBvcnQgZm9yIGRiYXUxeDAwIGJvYXJkIChNSVBTMzIpCgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMDcgT2N0IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIGRlYnJpcyBib2FyZAoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOSBPY3QgMjAwMzoKICBGaXhlcyBmb3IgVFJBQiBib2FyZAogIC0gL2JvYXJkL3RyYWIvcnM0ODUuYzogY29ycmVjdCBiYXVkcmF0ZQogIC0gL2JvYXJkL3RyYWIvY21kX3RyYWIuYzogYnVnIGZpeCBmb3IgcHJvYmxlbSB3aXRoIHRpbWVyIG92ZXJmbG93IGluCiAgICB1ZGVsYXkoKTsgZml4IHNvbWUgdGltaW5nIHByb2JsZW1zIHdpdGggYWRjIGNvbnRyb2xsZXIKICAtIC9ib2FyZC90cmFiL3RyYWJfZmt0LmM6IGFkZCBuZXcgY29tbWFuZHM6IGdhaW4sIGVlcHJvbSBhbmQgcG93ZXI7CiAgICBtb2RpZnkgY29tbWFuZHM6IHRvdWNoIGFuZCBidXp6ZXIKCiogRGlzYWJsZSBDT05GSUdfU1VQUE9SVF9WRkFUIHdoZW4gdXNlZCB3aXRoIENPTkZJR19BVVRPX1VQREFURQogIChxdWljayAmIGRpcnR5IHdvcmthcm91bmQgZm9yIHJvZ3VlIHBvaW50ZXIgcHJvYmxlbSBpbiBnZXRfdmZhdG5hbWUoKSk7CiAgVXNlIGRpcmVjdCBmdW5jdGlvbiBjYWxscyBmb3IgYXV0b191cGRhdGUgaW5zdGVhZCBvZiBodXNoIGNvbW1hbmRzCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDQgT2N0IDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5pb3MtMzIgQ1BVCiAgLSBhZGQgc3VwcG9ydCBmb3IgTmlvcyBDeWNsb25lIERldmVsb3BtZW50IEtpdCAoREstMUMyMCkKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjkgU2VwIDIwMDM6CiAgLSBBIHNlY29uZCBwYXJhbWV0ZXIgZm9yIGJvb3RtIG92ZXJ3cml0ZXMgdGhlIGxvYWQgYWRkcmVzcyBmb3IKICAgICJTdGFuZGFsb25lIEFwcGxpY2F0aW9uIiBpbWFnZXMuCiAgLSBib290bSBzZXRzIGVudmlyb25tZW50IHZhcmlhYmxlICJmaWxlc2l6ZSIgdG8gdGhlIHJlc3VsdGluZwogICAgKHVuY29tcHJlc3NlZCkgZGF0YSBsZW5ndGggZm9yICJTdGFuZGFsb25lIEFwcGxpY2F0aW9uIiBpbWFnZXMKICAgIHdoZW4gYXV0b3N0YXJ0IGlzIHNldCB0byAibm8iLiBOb3cgeW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZQoJaWYgYm9vdG0gJGZwZ2FkYXRhICRzb21lX2ZyZWVfcmFtIDsgdGhlbgoJCWZwZ2EgbG9hZCAwICRzb21lX2ZyZWVfcmFtICRmaWxlc2l6ZQoJZmkKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDI1IFNlcHQgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNSBSZXYuIEMgYm9hcmQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjUgU2VwIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIFplcGh5ciBFbmdpbmVlcmluZyBaUEMuMTkwMCBib2FyZAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyMyBTZXAgMjAwMzoKICBhZGQgQ01EX1BPUlRJTyB0byBDRkdfQ01EX05PTlNURCAoY29tbWFuZHMgaW4gcXVlc3Rpb24gYXJlIG9ubHkKICBpbXBsZW1lbnRlZCBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUpCgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMjMgU2VwIDIwMDM6CiAgZml4IHBsbF9wY2lfdG9fbWVtX211bHRpcGxpZXIgdGFibGUgZm9yIE1QQzgyNDUKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjIgU2VwIDIwMDM6CiAgZW5hYmxlIHRpbWVkIGF1dG9ib290IG9uIFBYQQoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDIyIFNlcCAyMDAzOgogIC0gYWRkICQoQ0ZMQUdTKSB0byAiLXByaW50LWxpYmdjYy1maWxlbmFtZSIgc28gY29tcGlsZXIgZHJpdmVyCiAgICByZXR1cm5zIGNvcnJlY3QgbGliZ2NjIGZpbGUgcGF0aAogIC0gImxhdGVuY3kiIHJlZHVjdGlvbiBvZiBidXN5LWxvb3Agd2FpdGluZyB0byBpbXByb3ZlICJVLUJvb3QiIGJvb3QKICAgIHRpbWUgb24gczNjMjR4MCBzeXN0ZW1zCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxOSBTZXAgMjAwMzoKICAtIEFkZCBDRkdfRkFVTFRfRUNIT19MSU5LX0RPV04gb3B0aW9uIHRvIGVjaG8gdGhlIGludmVydGVkIEV0aGVybmV0CiAgICBsaW5rIHN0YXRlIHRvIHRoZSBmYXVsdCBMRUQuCiAgLSBJbiBOZXRMb29wLCBtYWtlIHRoZSBGYXVsdCBMRUQgcmVmbGVjdCB0aGUgbGluayBzdGF0dXMuICBUaGUgbGluawogICAgc3RhdHVzIGdldHMgdXBkYXRlZCBvbiBlbnRyeSwgYW5kIG9uIHRpbWVvdXRzLgoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxOCBTZXAgMjAwMzoKICBhbGxvdyBta2ltYWdlIHRvIGJ1aWxkIGFuZCBydW4gb24gQ3lnd2luLWhvc3RlZCBzeXN0ZW1zCgoqIFBhdGNoIGJ5IEZyYW5rIE38bGxlciwgMTggU2VwIDIwMDM6CiAgdXNlIGJpX2ludGZyZXEgaW5zdGVhZCBvZiBiaV9idXNmcmVxIHRvIGNvbXB1dGUgZmVjX21paV9zcGVlZCBpbgogIGNwdS9tcGM4eHgvZmVjLmMKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE2IFNlcCAyMDAzOgogIGFkZCB0b29sIHRvIGNvbXB1dGUgZmlsZWRzIGluIHRoZSBQTFBSQ1IgcmVnaXN0ZXIgZm9yIE1QQzg2eAoKKiBVc2UgSUhfVFlQRV9GSUxFU1lTVEVNIGZvciBUUkFCICJkaXNrIiBpbWFnZXMuCgoqIEZpeCBidWlsZCBwcm9ibGVtcyB1bmRlciBGcmVlQlNECgoqIEFkZCBnZW5lcmljIGZpbGVzeXN0ZW0gaW1hZ2UgdHlwZQoKKiBNYWtlIGZhdGxvYWQgc2V0IGZpbGVzaXplIGVudmlyb25tZW50IHZhcmlhYmxlCgoqIGVuYWJsZSBiYXNpYyAvIG1lZGl1bSAvIGhpZ2gtZW5kIGNvbmZpZ3VyYXRpb25zIGZvciBQUENoYW1lbGVvbkVWQgogIGJvYXJkOyBmaXggTkFORCBjb2RlCgoqIGVuYWJsZSBURlRQIGNsaWVudCBjb2RlIHRvIHNwZWNpZnkgdG8gdGhlIHNlcnZlciB0aGUgZGVzaXJlZAogIHRpbWVvdXQgdmFsdWUgKHNlZSBSRkMtMjM0OSkKCiogSW1wcm92ZSBTRFJBTSBzZXR1cCBmb3IgVFJBQiBib2FyZAoKKiBTdXBwcmVzcyBhbGwgb3V0cHV0IHdpdGggc3BsYXNoc2NyZWVuIGNvbmZpZ3VyZWQgb25seSBpZiAic3BsYXNoaW1hZ2UiCiAgaXMgc2V0CgoqIEZpeCBwcm9ibGVtcyB3aXRoIEkyQyBzdXBwb3J0IGZvciBtcGM1MjAwCgoqIEFkYXB0IFRSQUIgY29uZmlndXJhdGlvbiBhbmQgYXV0b191cGRhdGUgdG8gbmV3IG1lbW9yeSBsYXlvdXQKCiogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIHd0ayBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgdGhlIFNoYXJwIExRMDY1VDlEUjUxVSBMQ0QgZGlzcGxheQoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTcgU2VwIDIwMDM6CiAgLSBGaXhlcyBmb3IgTVBDODI2NiBkZWZhdWx0IGNvbmZpZwogIC0gQWxsb3cgZXRoX2xvb3BiYWNrX3Rlc3QoKSBvbiA4MjYwIHRvIHVzZSBhIHN1YnNldCBvZiB0aGUgRkNDJ3MKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgMTcgU2VwIDIwMDM6CiAgLSB1cGRhdGUgUkVBRE1FIChTSE9XX0JPT1RfUFJPR1JFU1MgdmFsdWVzIGZvciBjbWRfbmFuZC5jIGFuZAogICAgZW52X2NvbW1vbi5jKQogIC0gc2JjODI2MCB0d2Vha3MKICAtIGFkanVzdCAiaGVscCIgb3V0cHV0CgoqIFBhdGNoZXMgYnkgQW5kZXJzIExhcnNlbiwgMTcgU2VwIDIwMDM6CiAgLSBmaXggc3BlbGxpbmcgZXJyb3JzCiAgLSBzZXQgR0RfRkxHX0RFVklOSVQgZmxhZyBvbmx5IGFmdGVyIGRldmljZSBmdW5jdGlvbiBwb2ludGVycwogICAgYXJlIHZhbGlkCiAgLSBBbGxvdyBDRkdfQUxUX01FTVRFU1Qgb24gc3lzdGVtcyB3aGVyZSBhZGRyZXNzIHplcm8gaXNuJ3QKICAgIHdyaXRlYWJsZQogIC0gZW5hYmxlIDMucmQgVUFSVCAoU1QtVUFSVCkgb24gUFhBKFhTY2FsZSkgQ1BVcwogIC0gdHJpZ2dlciB3YXRjaGRvZyB3aGlsZSB3YWl0aW5nIGluIHNlcmlhbCBkcml2ZXIKCiogQWRkIGF1dG8tdXBkYXRlIGNvZGUgZm9yIFRSQUIgYm9hcmQgdXNpbmcgVVNCIG1lbW9yeSBzdGlja3MsCiAgc3VwcG9ydCBuZXcgY29uZmlndXJhdGlvbiB3aXRoIG1vcmUgbWVtb3J5CgoqIGRpc2FibGUgTVBDNTIwMCBidXMgcGlwZWxpbmluZyBhcyB3b3JrYXJvdW5kIGZvciBidXMgY29udGVudGlvbgoKKiBNb2RpZnkgWExCIGFyYml0ZXIgcHJpb3JpdGllcyBvbiBNUEM1MjAwIHNvIGFsbCBkZXZpY2VzIHVzZSBzYW1lCiAgcHJpb3JpdHk7IGNvbmZpZ3VyZSBjcml0aWNhbCBpbnRlcnJ1cHRzIHRvIGJlIGhhbmRsZWQgbGlrZSBleHRlcm5hbAogIGludGVycnVwdHMKCiogTWFrZSBJUEIgY2xvY2sgb24gTUdUNTEwMC9NUEM1MjAwIGNvbmZpZ3VyYWJsZSBpbiBib2FyZCBjb25maWcgZmlsZTsKICBnbyBiYWNrIHRvIDY2IE1IeiBmb3Igc3RhYmlsaXR5CgoqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDE1IFNlcCAyMDAzOgogIC0gYWRkIGRlc2NyaXB0aW9uIGZvciBtaXNzaW5nIENGR19DTURfKiBlbnRyaWVzIGluIHRoZSBSRUFETUUgZmlsZQogIC0gc2Fjc25nIHR3ZWFrcwoKKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDE0IFNlcCAyMDAzOgogIGVuYWJsZSB3YXRjaGRvZyBzdXBwb3J0IGZvciBhbGwgTVBDODI0eCBib2FyZHMgdGhhdCBoYXZlIGEgd2F0Y2hkb2cKCiogT24gTVBDNTIwMCwgcmVzdHJpY3QgRkVDIHRvIGEgbWF4aW11bSBvZiAxMCBNYnBzIHRvIHdvcmsgYXJvdW5kIHRoZQogICJOb24tb2N0ZXQgQWxpZ25lZCBGcmFtZSIgZXJyb3JzIHdlIHNlZSBhdCAxMDAgTWJwcwoKKiBQYXRjaCBieSBTaGFyYWQgR3VwdGEsIDE0IFNlcCAyMDAzOgogIGZpeCBTUFIgbnVtYmVycyBmb3IgdXBwZXIgQkFUIHJlZ2lzdGVyIChbSURdQkFUWzQtN11bVUxdKQoKKiBQYXRjaCBieSBsbGFuZHJlLCAxMSBTZXAgMjAwMzoKICB1cGRhdGUgY29uZmlndXJhdGlvbiBmb3IgUFBDaGFtZWxlb25FVkIgYm9hcmQKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAxMyBTZXAgMjAwMzoKICB2YXJpb3VzIGNoYW5nZXMgdG8gVkNNQTkgYm9hcmQgc3BlY2lmaWMgZmlsZXMKCiogQWRkIEkyQyBzdXBwb3J0IGZvciBNR1Q1MTAwIC8gTVBDNTIwMAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTEgU2VwIDIwMDM6CiAgQ2hhbmdlZCBkZWZhdWx0IG1lbW9yeSBvcHRpb24gb24gTVBDODI2NkFEUyB0byBOT1QgYmUgUGFnZSBCYXNlZAogIEludGVybGVhdmUsIHNpbmNlIHRoaXMgZG9lc24ndCB3b3JrIHZlcnkgd2VsbCB3aXRoIHRoZSBzdGFuZGFyZAogIDE2TUIgRElNTQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDEyIFNlcCAyMDAzOgogIGZpeCBNYWtlZmlsZSBzZXR0aW5ncyBmb3Igc2s5OCBkcml2ZXIKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMiBTZXAgMjAwMzoKICAtIG5ldyBib2FyZHMgYWRkZWQ6IERQNDA1LCBIVUI0MDUsIFBMVTQwNSwgVk9INDA1CiAgLSBzb21lIGVzZCBib2FyZHMgdXBkYXRlZAogIC0gY3B1L3BwYzR4eC9zZHJhbS5jOiBkaXNhYmxlIG1lbW9yeSBjb250cm9sbGVyIGJlZm9yZSBzZXR0aW5nCiAgICBmaXJzdCB2YWx1ZXMKICAtIGNwdS9wcGM0eHgvNDA1X3BjaS5jOiBzZXQgdmVuZG9yIGlkIG9uIFBQQzQwNUVQIHN5c3RlbXMKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTEgU2VwIDIwMDM6CiAgYWRkIGJ1cm4taW4gdGVzdHMgZm9yIFRSQUIgYm9hcmQKCiogRW5hYmxlIGluc3RydWN0aW9uIGNhY2hlIG9uIE1QQzUyMDAgYm9hcmQKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDExIFNlcCAyMDAzOgogIC0gZml4IFVTQiBkYXRhIHBvaW50ZXIgYXNzaWdubWVudCBmb3IgYnVsayBvbmx5IHRyYW5zZmVyLgogIC0gcHJldmVudCB0byBkaXNwbGF5IGVyYXNlZCBkaXJlY3RvcmllcyBpbiBGQVQgZmlsZXN5c3RlbS4KCiogQ2hhbmdlIG91dHB1dCBmb3JtYXQgZm9yIE5BTkQgZmxhc2ggLSBtYWtlIGl0IGxvb2sgbGlrZSBmb3Igb3RoZXIKICBtZW1vcnksIHRvbwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40Ljg6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIFJNVSBib2FyZAoKKiBQYXRjaGVzIGJ5IERlbmlzIFBldGVyLCA5IFNlcCAyMDAzOgogIGFkZCBGQVQgc3VwcG9ydCBmb3IgSURFLCBTQ1NJIGFuZCBVU0IKCiogUGF0Y2hlcyBieSBHbGViIE5hdGFwb3YsIDIgU2VwIDIwMDM6CiAgLSBjbGVhbnVwIG9mIFBPU1QgY29kZSBmb3IgdW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcwogIC0gTVBDODI0eCBsb2NrcyB3YXkwIG9mIGRhdGEgY2FjaGUgZm9yIHVzZSBhcyBpbml0aWFsIFJBTTsKICAgIHRoaXMgcGF0Y2ggdW5sb2NrcyBpdCBhZnRlciByZWxvY2F0aW9uIHRvIFJBTSBhbmQgaW52YWxpZGF0ZXMKICAgIHRoZSBsb2NrZWQgZW50cmllcy4KCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAzMCBBdWcgMjAwMzoKICBuZXcgSTJDIGRyaXZlciBmb3IgbXBjMTA3IGJyaWRnZS4gTm93IHdvcmtzIGZyb20gZmxhc2guCgoqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDExIEF1ZyAyMDAzOgogIC0gSkZGUzI6IGZpeCB0eXBvIGluIGNvbW1vbi9jbWRfamZmczIuYwogIC0gSkZGUzI6IGZpeCBDRkdfSkZGUzJfU09SVF9GUkFHTUVOVFMgb3B0aW9uCiAgLSBKRkZTMjogcmVtb3ZlIG5vZGUgdmVyc2lvbiAwIHdhcm5pbmcKICAtIEpGRlMyOiBhY2NlcHQgSkZGUzIgUEFERElORyBub2RlcwogIC0gU1hOSTg1NVQ6IGFkZCBBTTI5TFY4MDAgc3VwcG9ydAogIC0gU1hOSTg1NVQ6IG1vdmUgZW52aXJvbm1lbnQgZnJvbSBFRVBST00gdG8gZmxhc2gKICAtIFNYTkk4NTVUOiBib290IGZyb20gSkZGUzIgaW4gTk9SIG9yIE5BTkQgZmxhc2gKCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDExIEF1ZyAyMDAzOgogIGZpeGVzIGZvciBJMkMgb24gTVBDODI0MAogIC0gZml4IGkyY193cml0ZSByb3V0aW5lCiAgLSBmaXggaXByb2JlIGNvbW1hbmQKICAtIGVsaW1pbmF0ZXMgdXNlIG9mIGdsb2JhbCB2YXJpYWJsZXMsIHBsdXMgZGVhZCBjb2RlLCBjbGVhbnVwLgoKKiBBZGQgc3VwcG9ydCBmb3IgVVNCIE1hc3MgU3RvcmFnZSBEZXZpY2VzIChCQkIpCiAgKHRlc3RlZCB3aXRoIFVTQiBtZW1vcnkgc3RpY2tzIG9ubHkpCgoqIEF2b2lkIGZsaWNrZXIgb24gVFJBQidzIFZGRAoKKiBBZGQgc3VwcG9ydCBmb3IgU0s5OHh4IGRyaXZlcgoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIFNMODI0NSBib2FyZAoKKiBTdXBwb3J0IEljZUN1YmUgYm9hcmQgY29uZmlndXJhdGlvbnMgd2l0aCAxIHggQU1EIEFNMjlMVjA2NSAoOCBNQikKICBvciAxIHggQU0yOUxWNjUyICh0d28gTFYwNjUgaW4gb25lIGNoaXAgPSAxNiBNQik7CiAgUnVuIElQQiBhdCAxMzMgTWh6OyBhZGp1c3QgdGhlIE1JSSBjbG9jayBmcmVxdWVuY3kgYWNjb3JkaW5nbHkKCiogU2V0IEJSR19DTEsgb24gUE04MjUvODI2IHRvIDY0TUh6IChWQ09fT1VUIC8gNCwgaW5zdGVhZCBvZiAxNgkgTUh6KQogIHRvIGFsbG93IGZvciBtb3JlIGFjY3VyYXRlIGJhdWRyYXRlIHNldHRpbmdzCiAgKGVycm9yIG5vdyAwLjclIGF0IDExNSBrYnBzLCBpbnN0ZWFkIG9mIDMuNSUgYmVmb3JlKQoKKiBQYXRjaCBieSBBbmRyZWFzIE1vaHIsIDQgU2VwIDIwMDM6CiAgRml4IGEgbG90IG9mIHNwZWxsaW5nIGVycm9ycwoKKiBBZGQgc3VwcG9ydCBmb3IgUFBDaGFtZWxlb24gRXZhbCBCb2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgUDNHNCBib2FyZAoKKiBGaXggcHJvYmxlbSB3aXRoIE1HVDUxMDAgRkVDIGRyaXZlcjogYWRkICJlYXJseSIgTUFDIGFkZHJlc3MKICBpbml0aWFsaXphdGlvbgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCA3IEF1ZyAyMDAzOgogIGNoZWNrIEJDU1IgdG8gZGV0ZWN0IGlmIHRoZSBib2FyZCBpcyBjb25maWd1cmVkIGluIFBDSSBtb2RlCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNzoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBSYWdodSBLcmlzaG5hcHJhc2FkLCA3IEF1ZyAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBBZGRlciBJSSBNUEM4NTJUIG1vZHVsZQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDE5IEF1ZyAyMDAzOgogIGZpeCBUSSBJbm5vdmF0b3IvT01BUDE1MTAgcGluIGNvbmZpZ3MKCiogUGF0Y2hlcyBieSBLc2hpdGlqLCAxOCBBdWcgMjAwMwogIC0gYWRkIHN1cHBvcnQgZm9yIGFybTkyNmVqcyBjcHUgY29yZQogIC0gYWRkIHN1cHBvcnQgZm9yIFRJIE9NQVAgMTYxMCBJbm5vdmF0b3IgQm9hcmQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTQgQXVnIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIGJ6aXAyIHVuY29tcHJlc3Npb24KCiogQWRkIEdDQyBsaWJyYXJ5IHRvIGV4YW1wbGVzL01ha2VmaWxlIHNvIEdDQyB1dGlsaXR5IGZ1bmN0aW9ucyB3aWxsCiAgYmUgcmVzb2x2ZWQsIHRvbwoKKiBBZGQgSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgUk1VIGJvYXJkIHVzaW5nIHNvZnR3YXJlIEkyQyBkcml2ZXIKICAoYmVjYXVzZSBvZiBiZXR0ZXIgcmVzcG9uc2UgdG8gaXByb2JlIGNvbW1hbmQpOyBmaXggcHJvYmxlbSB3aXRoCiAgInJlc2V0IiBjb21tYW5kCgoqIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyOCBBdWcgMjAwMzoKICBBZGRlZCBDT05GSUdfQk9PVFBfRE5TMiBhbmQgQ09ORklHX0JPT1RQX1NFTkRfSE9TVE5BTUUgdG8KICBDT05GSUdfQk9PVFBfTUFLUyAoc2VlIFJFQURNRSkuCgoqIEZpeCBJQ1U4NjIgZW52aXJvbm1lbnQgcHJvYmxlbQoKKiBGaXggUkFNIHNpemUgZGV0ZWN0aW9uIGZvciBSTVUgYm9hcmQKCiogSW1wbGVtZW50ICJyZXNldCIgZm9yIE1HVDUxMDAvTVBDNTIwMCBzeXN0ZW1zCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBNYWtlIEV0aGVybmV0IGF1dG9uZWdvdGlhdGlvbiBvbiBJTkNBLUlQIHdvcmsgZm9yIGFsbCBjbG9jayByYXRlczsKICBhbGxvdyBzZWxlY3Rpb24gb2YgY2xvY2sgZnJlcXVlbmN5IGFzICJtYWtlIiB0YXJnZXQKCiogSW1wbGVtZW50IG1lbW9yeSBhdXRvc2l6aW5nIGNvZGUgZm9yIEljZUN1YmUgYm9hcmRzCgoqIENvbmZpZ3VyZSBuZXR3b3JrIHBvcnQgb24gSU5DQS1JUCBmb3IgYXV0b25lZ290aWF0aW9uCgoqIEZpeCBvdmVyZmxvdyBwcm9ibGVtIGluIG5ldHdvcmsgdGltZW91dCBjb2RlCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDggQXVnIDIwMDM6CiAgQWxsb3cgY3JjMzIgdG8gYmUgdXNlZCBhdCBhZGRyZXNzIDB4MDAwIChjcmMzMl9ub19jb21wLCB0b28pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjU6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogVXBkYXRlIGZvciBUUU0gYm9hcmQgZGVmYXVsdHM6CiAgZGlzYWJsZSBjbG9ja3NfaW5fbWh6LCBlbmFibGUgYm9vdCBjb3VudCBsaW1pdAoKKiBSZW1vdmVkIHRvb2xzL2dkYiBmcm9tICJtYWtlIGFsbCIgdGFyZ2V0LiAgQWRkZWQgbWFrZSB0YXJnZXQgImdkYnRvb2xzIgogIGluIHRvcGxldmVsIGRpcmVjdG9yeSBpbnN0ZWFkLiAgUmVtb3ZlZCBhc3Rlc3QuYyBmcm9tIHRvb2xzL2dkYiBiZWNhdXNlCiAgaXQgaXMgbm8gbG9uZ2VyIHJlbGV2YW50LgoKKiBGaXggUENJIHN1cHBvcnQgZm9yIE1QQzUyMDAgLyBJY2VDdWJlIEJvYXJkCgoqIE1hcCBJU1AxMzYyIFVTQiBPVEcgY29udHJvbGxlciBmb3IgTlNDVSBib2FyZAoKKiBQYXRjaCBieSBCcmFkIFBhcmtlciwgMDIgQXVnIDIwMDM6CiAgZml4IHNjNTIwX2NkcCBwcm9ibGVtcwoKKiBJbXBsZW1lbnQgQm9vdCBDeWNsZSBEZXRlY3Rpb24gKFJlcS4gMi4zIG9mIE9TREwgQ0dMIFJlcWlyZW1lbnRzKQoKKiBBbGxvdyBlcmFzZSBjb21tYW5kIHRvIGNyb3NzIGZsYXNoIGJhbmsgYm91bmRhcmllcwoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDIxIEp1bCAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBMeW51eFdvcmtzIEtlcm5lbCBEb3dubG9hZGFibGUgSW1hZ2VzIChLRElzKS4KICBCb3RoIEx5bnhPUyBhbmQgQmx1ZUNhdCBsaW51eCBLRElzIGFyZSBzdXBwb3J0ZWQuCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDI1IEp1bCAyMDAzOgogIHVzZSBtb3JlIHJlbGlhYmxlIHJlc2V0IGZvciBPTUFQLzkyNVQKCiogUGF0Y2ggYnkgTnllIExpdSwgMjUgSnVsIDIwMDM6CiAgZml4IHR5cG8gaW4gbXBjOHh4LmgKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMjQgSnVsIDIwMDM6CiAgRml4ZXMgZm9yIGNtZF9uYW5kLmM6CiAgLSBGaXhlZCBudWxsIGRlcmVmZXJlY2Ugd2hpY2ggY291bGQgcmVzdWx0IGluIGluY29ycmVjdCBFQ0MgdmFsdWVzLgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgZGV2aWNlcyB3aXRoIG5vIFJlYWR5L0J1c3kgc2lnbmFsIGhvb2tlZCB1cC4KICAtIEFkZGVkIE9NQVAxNTEwIHJlYWQvd3JpdGUgcHJvdGVjdCBoYW5kbGluZy4KICAtIEZpeGVkIG5hbmQuaCdzIEVDQ1BPUy4gQSBjb25mbGljdCBleGlzdGVkIHdpdGggUE9TNSBhbmQgYmFkYmxvY2sKICAgIGZvciBub24tSkZGUzIuCiAgLSBTd2l0Y2hlZCBkZWZhdWx0IEVDQyB0byBiZSBKRkZTMi4KCiogQWxsb3cgY3JjMzIgdG8gYmUgdXNlZCBhdCBhZGRyZXNzIDB4MDAwCgoqIFByb3ZpZGUgY29uc2lzdGVudCBpbnRlcmZhY2UgdG8gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgdG8gYWNjZXNzCiAgdGhlICdnbG9iYWxfZGF0YScgc3RydWN0dXJlCiAgUHJvdmlkZSBhIGRvYy9SRUFETUUuc3RhbmRhbG9uZSBtb3JlIHVzZWZ1bCB0byB1c2Vycy9kZXZlbG9wZXJzLgoKKiBNYWtlIEljZUN1YmUgTUdUNTEwMCBGRUMgZHJpdmVyIHdvcmsKCiogSW1wbGVtZW50IG5ldyBtZWNoYW5pc20gdG8gZXhwb3J0IFUtQm9vdCdzIGZ1bmN0aW9ucyB0byBzdGFuZGFsb25lCiAgYXBwbGljYXRpb25zOiBpbnN0ZWFkIG9mIHVzaW5nIChQUEMtc3BlY2lmaWMpIHN5c3RlbSBjYWxscyB3ZSBub3cKICB1c2UgYSBqdW1wIHRhYmxlOyBwbGVhc2Ugc2VlIGRvYy9SRUFETUUuc3RhbmRhbG9uZSBmb3IgZGV0YWlscwoKKiBQYXRjaCBieSBEYXZlIFdlc3R3b29kLCAyNCBKdWwgMjAwMzoKICBhZGRlZCBzdXBwb3J0IGZvciBVbml0eSBPUyAoYSBwcm9wcmlldGFyeSBPUykKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjMgSnVsIDIwMDM6CiAgYWRkICJpbWxzIiBjb21tYW5kIHRvIHByaW50IGZsYXNoIHRhYmxlIG9mIGNvbnRlbnRzCgoqIEZpeCBjb2xkIGJvb3QgZGV0ZWN0aW9uIGZvciBsb2cgYnVmZmVyIHJlc2V0CgoqIFJldHVybiBlcnJvciBmb3IgaW52YWxpZCBsZW5ndGggc3BlY2lmaWVycyB3aXRoICJjcC5YIiBldGMuCgoqIEZpeCBzdGFydHVwIHByb2JsZW0gb24gTUlQUwoKKiBBbGxvdyBmb3IgQ09ORklHX1NQTEFTSF9TQ1JFRU4gZXZlbiB3aGVuIG5vIGV4cGxpY2l0CiAgYml0bWFwIHN1cHBvcnQgaXMgY29uZmlndXJlZAoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMTggSnVsIDIwMDM6CiAgLSBmaXggZW5kaW5hbmVzcyBwcm9ibGVtIGluIGNwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyYzEuYwoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTggSnVsIDIwMDM6CiAgLSBmaXggbWVtb3J5IGNvbmZpZ3VyYXRpb24gZm9yIE1JUDQwNVQKICAtIGZpeCBwcmludG91dCBvZiBiYXVkcmF0ZSBmb3IgImxvYWRiIDxsb2FkYWRkcj4gPGJhdWRyYXRlPiIKCiogQ2xlYW51cCBvZiBUUU04Mnh4IGNvbmZpZ3VyYXRpb25zOyB1c2UgIm9mZmljaWFsIiBib2FyZCB0eXBlcwogIHRvIG1ha2Ugc2VsZWN0aW9uIGVhc2llci4KCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTcgSnVsIDIwMDM6CiAgYWRkIGRlbGF5IHRvIGdldCBJMkMgd29ya2luZyB3aXRoICJpbW0iIGNvbW1hbmQgYW5kIHMzYzI0eDBfaTJjLmMKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTcgSnVseSAwMzoKICAtIEZpeGVkIGJ1ZyBpbiBPTUFQMTUxMCBiYXVkIHJhdGUgZGl2aXNvciBzZXR0aW5ncy4KCiogUGF0Y2ggYnkgTnllIExpdSwgMTYgSnVseSAyMDAzOgogIE1QQzg2MEZBRFMgZml4ZXM6CiAgLSBhZGQgTVBDODZ4QURTIHN1cHBvcnQgKHVzZXMgTVBDODZ4QURTLmgpCiAgLSBhZGQgODY2UC9UIGNvcmUgc3VwcG9ydCAoYWxzbyBNUEM4NTlUL01QQzg1OURTTC9NUEM4NTJUKQogICAgbyBQTFBSQ1IgY2hhbmdlcwogICAgbyBCUkcgY2hhbmdlcyAoRVhUQUwvWFRBTCByZXN0cmljdGVkIHRvIDEwTUh6KQogICAgbyBkb24ndCB0cnVzdCBnY2xrKCkgc29mdHdhcmUgbWVhc3VyZW1lbnQgYnkgZGVmYXVsdCwgZGVwZW5kIG9uCiAgICAgIENPTkZJR184eHhfR0NMS19GUkVRCiAgLSBhZGQgRFJBTSBTSU1NIG5vdCBpbnN0YWxsZWQgZGV0ZWN0aW9uCiAgLSB1c2UgbW9yZSAiY29ycmVjdCIgU0RSQU0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UKICAtIGFsbG93IGRpZmZlcmVudCBTRFJBTSBzaXplcyAoOHh4QURTIGhhcyA4TSkKICAtIGRlZmF1bHQgREVSIGlzIDAKICAtIHJlbW92ZSB1bnVzZWQgTUFNUiBkZWZpbmVzIGZyb20gRkFEUzg2MFQuaCAoYWxsIGRvbmUgaW4gZmFkcy5jKQogIC0gcmVuYW1lIE1BTVIvTUJNUiBkZWZpbmVzIHRvIGJlIG1vcmUgY29uc2lzdGVudC4gU2hvdWxkIGV2ZW50dWFsbHkKICAgIGJlIG1lcmdlZCBpbnRvIE14TVIgdG8gYmV0dGVyIHJlZmxlY3QgdGhlIFBvd2VyUVVJQ0MgZGF0YXNoZWV0LgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNiBKdWwgMjAwMzoKICBzdXBwb3J0IG5ldyBNb3Rvcm9sYSBQUTJGQURTLVpVIGV2YWx1YXRpb24gYm9hcmQgd2hpY2ggcmVwbGFjZWQKICBNUEM4MjYwQURTIGFuZCBNUEM4MjY2QURTCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgSWNlQ3ViZSBib2FyZCAod2l0aCBNR1Q1MTAwIGFuZCBNUEM1MjAwIENQVXMpCgoqIEFkZCBzdXBwb3J0IGZvciBNR1Q1MTAwIGFuZCBNUEM1MjAwIHByb2Nlc3NvcnMKCiogUGF0Y2ggYnkgTHV0eiBEZW5uaWcsIDE1IEp1bCAyMDAzOgogIHVwZGF0ZSBmb3IgUjM2ME1QSSBib2FyZAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjM6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2hlcyBieSBLc2hpdGlqLCAwNCBKdWwgMjAwMwogIC0gYWRkZWQgc3VwcG9ydCBmb3IgYXJtOTI1dCBjcHUgY29yZQogIC0gYWRkZWQgc3VwcG9ydCBmb3IgVEkgT01BUCAxNTEwIElubm92YXRvciBCb2FyZAoKKiBQYXRjaGVzIGJ5IE1hcnRpbiBLcmF1c2UsIDE0IEp1bCAyMDAzOgogIC0gYWRkIEkyQyBzdXBwb3J0IGZvciBzM2MyNDAwIHN5c3RlbXMgKHRyYWIgYm9hcmQpCiAgLSAocmUtKSBhZGQgInBpbmciIHRvIGNvbW1hbmQgdGFibGUKCiogRml4IGhhbmRsaW5nIG9mICJzbG93IiBQT1NUIHJvdXRpbmVzCgoqIFBhdGNoZXMgYnkgWXVsaSBCYXJjb2hlbiwgMTMgSnVsIDIwMDM6CiAgLSBDb3JyZWN0IGZsYXNoIGFuZCBKRkZTMiBzdXBwb3J0IGZvciBNUEM4MjYwQURTCiAgLSBmaXggUFZSIHZhbHVlcyBhbmQgY2xvY2sgZ2VuZXJhdGlvbiBmb3IgUG93ZXJRVUlDQyBJSSBmYW1pbHkKICAgICg4MjcwLzgyNzUvODI4MCkKCiogUGF0Y2ggYnkgQmVybmhhcmQgS3VobiwgMDggSnVsIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgTTY4SyB0YXJnZXRzCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAzIEp1bDoKICAtIEZpeCBQQ0kgY29uZmlnIHRhYmxlIGZvciBBMzAwMAogIC0gRml4IGlvYmFzZSBmb3IgbmF0c2VtaS5jCiAgICAoUENJX0JBU0VfQUREUkVTU18wIGlzIHRoZSBJTyBiYXNlIHJlZ2lzdGVyIGZvciBEUDgzODE1KQoKKiBBbGxvdyB0byBlbmFibGUgInNsb3ciIFBPU1Qgcm91dGluZXMgYnkga2V5IHByZXNzIG9uIHBvd2VyLW9uCiogRml4IHRlbXBlcmF0dXJlIGRlcGVuZGVuZCBzd2l0Y2hpbmcgb2YgTENEIGJhY2tsaWdodCBvbiBMV01PTgoqIFR3ZWFrIG91dHB1dCBmb3JtYXQgZm9yIExXTU9OCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgSnVsIDIwMDM6CiAgLSBGaXggYnVnIGluIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFLgogIC0gQVI0MDUgY29uZmlnIHVwZGF0ZWQuCiAgLSBPQ1JUQy9PUlNHOiBic3AgY29tbWFuZCBhZGRlZC4KICAtIEFTSDQwNSBic3AgdXBkYXRlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjI6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIE5TQ1UgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTgyM00sIFRRTTg1ME0sIFRRTTg1NU0gYW5kIFRRTTg2ME0gbW9kdWxlcwoKKiBBZGQgc3VwcG9ydCBmb3IgQW0yOUxWMTYwTUwsIEFtMjlMVjMyME1MLCBhbmQgQW0yOUxWNjQwTUwKICBtaXJyb3IgYml0IGZsYXNoIG9uIFRRTTh4eE0gbW9kdWxlcwoKKiBQYXRjaCBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMzAgSnVuIDIwMDM6CiAgZ2V0IHJpZCBvZiBNS19DTURfRU5UUlkgbWFjcm87IHVwZGF0ZSBkb2MvUkVBRE1FLmNvbW1hbmQKCiogUGF0Y2ggYnkgU2ViIEphbWVzLCAzMCBKdW4gMjAwMzoKICBJbXByb3ZlIGRvY3VtZW50YXRpb24gb2YgSTJDIGNvbmZpZ3VyYXRpb24gaW4gUkVBRE1FCgoqIEZpeCBwcm9ibGVtcyB3aXRoIHByZXZpb3VzIGxvZyBidWZmZXIgImZpeGVzIgoKKiBGaXggbWlub3IgaGVscCB0ZXh0IGlzc3VlcwoKKiAibG9nIGFwcGVuZCIgZGlkIG5vdCBhcHBlbmQgYSBuZXdsaW5lCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBGaXggc29tZSBtaXNzaW5nIGNvbW1hbmRzLCBjbGVhbnVwIGhlYWRlciBmaWxlcwogIChhdXRvc2NyaXB0LCBibXAsIGJzcCwgZmF0LCBtbWMsIG5hbmQsIHBvcnRpbywgLi4uKQoKKiBSZXdyaXRlIGNvbW1hbmQgbG9va3VwIGFuZCBoZWxwIGNvbW1hbmQgKGZpeCBwcm9ibGVtcyB3aXRoIGJ1YmJsZQogIHNvcnQgd2hlbiBzb3J0aW5nIGNvbW1hbmQgbmFtZSBsaXN0KS4gTWlub3IgY2xlYW51cCBoZXJlIGFuZCB0aGVyZS4KCiogTWVyZ2UgZnJvbSAic3RhYmxlIGJyYW5jaCIsIHRhZyBMQUJFTF8yMDAzXzA2XzI4XzE4MDAtc3RhYmxlOgogIC0gQWxsb3cgdG8gY2FsbCBzeXNtb24gZnVuY3Rpb24gaW50ZXJhY3RpdmVseQogIC0gUElDIG9uIExXTU9OIGJvYXJkIG5lZWRzIGRlbGF5IGFmdGVyIHBvd2VyLW9uCiAgLSBBZGQgbWlzc2luZyBSU1IgZGVmaW5pdGlvbnMgZm9yIE1QQzh4eAogIC0gSW1wcm92ZSBsb2cgYnVmZmVyIGhhbmRsaW5nOiBndWFyYW50ZWUgY2xlYW4gcmVzZXQgYWZ0ZXIgcG93ZXItb24KICAtIEFkZCBzdXBwb3J0IGZvciBFWEJJVEdFTiBib2FyZCAoYWthICJnZW5pZSIpCiAgLSBBZGQgc3VwcG9ydCBmb3IgU0w4MjQ1IGJvYXJkCgoqIENvZGUgY2xlYW51cDoKICAtIHJlbW92ZSB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgdHJhaWxpbmcgZW1wdHkgbGluZXMsIEMrKyBjb21tZW50cywgZXRjLgogIC0gc3BsaXQgY21kX2Jvb3QuYyAoc2VwYXJhdGUgY21kX2JkaW5mby5jIGFuZCBjbWRfbG9hZC5jKQoKKiBQYXRjaGVzIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAyNSBKdW4gMjAwMzoKICAtIG1ham9yIHJld29yayBvZiBjb21tYW5kIHN0cnVjdHVyZQogICAgKHdvcmsgZG9uZSBtb3N0bHkgYnkgTWljaGFsIENlbmRyb3dza2kgYW5kIEpvYWtpbSBLcmlzdGlhbnNlbikKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAyNiBKdW4gMjAwMzoKICAtIGNzYjIyNiBjb25maWd1cmF0aW9uIHVwZGF0ZWQKICAtIGNyZWRpdHMgZm9yIGxvZ29kbCBwb3J0IHVwZGF0ZWQKICAtIGlubm9rb20gY29uZmlndXJhdGlvbiB1cGRhdGVkCiAgLSBsb2dvZGwgdHJlZSB1cGRhdGUsIHN0aWxsIHdpdGggY29kaW5nIHN0eWxlIGluY29uc2lzdGVuY2llcwogIC0gYWRkZWQgT0NNIGZvciBwcGM0MDUgd2FybmluZyB0byBSRUFETUUKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDI1IEp1biAyMDAzOgogIHVwZGF0ZSBOZXRWaWEgd2l0aCBWMiBib2FyZCBzdXBwb3J0CgoqIEhlYWRlciBmaWxlIGNsZWFudXAgZm9yIEFSTQoKKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyNCBKdW4gMjAwMzoKICAtIG1ha2Ugc3VyZSB0byB1c2Ugb25seSBVLWJvb3QgcHJvdmlkZWQgaGVhZGVyIGZpbGVzCiAgLSBmaXggcHJvYmxlbXMgd2l0aCAiLnJvZGF0YS5zdHIxLjQiIHNlY3Rpb24gYXMgdXNlZCBieSBHQ0MtMy54CgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgSnVuIDIwMDM6CiAgLSBVcGRhdGUgZXNkIEFTSDQwNSBib2FyZCBmaWxlcy4KICAtIFVwZGF0ZSBlc2QgREFTQV9TSU0gY29uZmlnIGZpbGUuCiAgLSBBZGQgcGluZyBjb21tYW5kIHRvIHNvbWUgZXNkIGJvYXJkcy4KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjMgSnVuIDIwMDM6CiAgVXBkYXRlIGZvciBNUEM4MjYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDIzIEp1biAyMDAzOgogIC0gY2xlYW51cCBvZiBHQ0MgMy54IGNvbXBpbGVyIHdhcm5pbmdzCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCA0IEp1biAyMDAzOgogIGFkZCBsYXJnZSBtZW1vcnkgc3VwcG9ydCBmb3IgTVBDODI2NkFEUyBib2FyZAoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxOSBKdW5lIDAzOgogIC0gRW5hYmxlZCBzdGFuZGFyZCB1LWJvb3QgZGV2aWNlIGFic3RyYWN0aW9uIGZvciBBUk0KICAtIEVuYWJsZWQgY29uc29sZSBkZXZpY2UgZm9yIEFSTQogIC0gSW5pdGlsaXplZCBiaV9iYXVkcmF0ZSBmb3IgQVJNCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAyMyBBcHIgMjAwMzoKICBmaXggYnl0ZSBvcmRlciBmb3IgODI0eCBJMkMgYWRkcmVzc2VzICh3cml0ZSBvcCkKCiogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjAgSnVuIDIwMDM6CiAgLSBoeW1vZCB1cGRhdGUKICAtIGNsZWFudXAgKGVzcGVjaWFsbHkgZm9yIGdjYy0zLnggY29tcGlsZXJzKQoKKiBQYXRjaCBieSBUb20gR3VpbGxpYW1zLCAyMCBKdW4gMjAwMzoKICBhZGRlZCBDT05GSUdfNzUwRlggc3VwcG9ydCBmb3IgSUJNIDc1MEZYIHByb2Nlc3NvcnMKCiogUGF0Y2ggYnkgRGV2aW4gQ3J1bWIsIDAyIEFwciAyMDAzOgogIEZpeCBjbG9jayBkaXZpZGVyIHJvdW5kaW5nIHByb2JsZW0gaW4gZHJpdmVycy9zZXJpYWwuYwoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxOSBKdW5lIDAzOgogIC0gRml4ZWQgc21jOTFjMTExIGRyaXZlciB0byBzeW5jIHdpdGggdGhlIHUtYm9vdCBlbnZpcm9ubWVudAogICAgKGRyaXZlci9zbWM5MWMxMTEuYykuCiAgLSBBZGRlZCBldGhfaW5pdCBlcnJvciByZXR1cm4gY2hlY2sgaW4gTmV0TG9vcCAobmV0L25ldC5jKS4KCiogUGF0Y2ggYnkgS2VuIENob3UsIDE5IEp1bmUgMjAwMzoKICBBZGRlZCBzdXBwb3J0IGZvciBBMzAwMCBTQkMgYm9hcmQgKEFydGlzIE1pY3Jvc3lzdGVtcyBJbmMuKQoKKiBQYXRjaGVzIGJ5IE11cnJheSBKZW5zZW4sIDE3IEp1biAyMDAzOgogIC0gSHltb2QgYm9hcmQgZGF0YWJhc2UgbW9kczogYWRkICJ3aG8iIGZpZWxkIGFuZCBuZXcgeGlsaW54IGNoaXAgdHlwZXMKICAtIHByb3ZpZGUgbmV3ICJpbml0X2NtZF90aW1lb3V0KCkiIGZ1bmN0aW9uIHNvIGNvZGUgZXh0ZXJuYWwgdG8KICAgICJjb21tb24vbWFpbi5jIiBjYW4gdXNlIHRoZSAicmVzZXRfY21kX3RpbWVvdXQoKSIgZnVuY3Rpb24gYmVmb3JlCiAgICBlbnRlcmluZyB0aGUgbWFpbiBsb29wCiAgLSBhZGQgRFRUIHN1cHBvcnQgZm9yIGFkbTEwMjEgKG5ldyBmaWxlIGR0dC9hZG0xMDIxLmM7IGNvbmZpZwogICAgc2xpZ2h0bHkgZGlmZmVyZW50LiBzZWUgaW5jbHVkZS9jb25maWdzL2h5bW9kLmggZm9yIGFuIGV4YW1wbGUKICAgIChyZXF1aXJlcyBDT05GSUdfRFRUX0FETTEwMjEsIENPTkZJR19EVFRfU0VOU09SUywgYW5kCiAgICBDRkdfRFRUX0FETTEwMjEgZGVmaW5lZCkKICAtIGFkZCBuZXcgImVlcHJvbV9wcm9iZSgpIiBmdW5jdGlvbiB3aGljaCBoYXMgc2ltaWxhciBhcmdzIGFuZAogICAgYmVoYXZlcyBpbiBhIHNpbWlsYXIgd2F5IHRvICJlZXByb21fcmVhZCgpIiBldGMuCiAgLSBhZGQgODI2MCBGQ0MgZXRoZXJuZXQgbG9vcGJhY2sgY29kZSAobmV3ICJldGhfbG9vcGJhY2tfdGVzdCgpIgogICAgZnVuY3Rpb24gd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZpbmluZyBDT05GSUdfRVRIRVJfTE9PUEJBQ0tfVEVTVCkKICAtIGdkYnRvb2xzIGNvcHlyaWdodCB1cGRhdGUKICAtIGVuc3VyZSB0aGF0IHNldF9tc3IoKSBleGVjdXRlcyB0aGUgInN5bmMiIGFuZCAiaXN5bmMiIGluc3RydWN0aW9ucwogICAgYWZ0ZXIgdGhlICJtdG1zciIgaW5zdHJ1Y3Rpb24gaW4gY3B1L21wYzgyNjAvaW50ZXJydXB0cy5jCiAgLSA4MjYwIEkvTyBwb3J0cyBmaXg6IE9wZW4gRHJhaW4gc2hvdWxkIGJlIHNldCBsYXN0IHdoZW4gY29uZmlndXJpbmcKICAtIGFkZCBTSVUgSVJRIGRlZmluZXMgZm9yIDgyNjAKICAtIGFsbG93IExEU0NSSVBUIG92ZXJyaWRlIGFuZCBPQkpDRkxBR1MgaW5pdGlhbGl6YXRpb246IGNoYW5nZSB0bwogICAgY29uZmlnLm1rIHRvIGFsbG93IGJvYXJkIGNvbmZpZ3VyYXRpb25zIHRvIG92ZXJyaWRlIHRoZSBHTlUKICAgIGxpbmtlciBzY3JpcHQsIHNlbGVjdGVkIHZpYSB0aGUgTERTQ1JJUFQsIG1ha2UgdmFyaWFibGUsIGFuZCB0bwogICAgZ2l2ZSBhbiBpbml0aWFsIHZhbHVlIHRvIHRoZSBPQkpDRkxBR1MgbWFrZSB2YXJpYWJsZQogIC0gODI2MCBpMmMgZW5oYW5jZW1lbnQ6CiAgICBvIGNvcnJlY3RseSBleHRlbmRzIHRoZSB0aW1lb3V0IGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiBhbGwKICAgICAgcXVldWVkIG1lc3NhZ2VzIGZvciBib3RoIHRyYW5zbWl0IGFuZCByZWNlaXZlCiAgICBvIHdpbGwgbm90IGNvbnRpbnVlIHdpdGggcmVjZWl2ZSBpZiB0cmFuc21pdCB0aW1lcyBvdXQKICAgIG8gZW5zdXJlcyB0aGF0IHRoZSBlcnJvciBjYWxsYmFjayBpcyBkb25lIGZvciBhbGwgcXVldWVkIHR4CiAgICAgIGFuZCByeCBtZXNzYWdlcwogICAgbyBjb3JyZWN0bHkgZGV0ZWN0cyBib3RoIHR4IGFuZCByeCB0aW1lb3V0cywgb25seSBkZWxpdmVycyBvbmUgdG8KICAgICAgdGhlIGNhbGxiYWNrLCBhbmQgZG9lcyBub3Qgb3ZlcndyaXRlIGFuIGVhcmxpZXIgZXJyb3IKICAgIG8gbG9naWMgaW4gaTJjX3Byb2JlIG5vdyBjb3JyZWN0CiAgLSBhZGQgInZwcmludGYoKSIgZnVuY3Rpb24gc28gdGhhdCAicGFuaWMoKSIgZnVuY3Rpb24gY2FuIGJlCiAgICB0ZWNobmljYWxseSBjb3JyZWN0CiAgLSBtYW55IEh5bW9kIGJvYXJkIGNoYW5nZXMKCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE0IEp1biAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIExvZ290cm9uaWMgREwgZGF0YWxvZ2dlciBib2FyZAogIC0gY2xlYW51cCBzZXJpYWwgbGluZSBhZnRlciBrZXJtaXQgYmluYXJ5IGRvd25sb2FkCiAgLSBhZGQgZGVidWdYIG1hY3JvIChkZWJ1ZyBsZXZlbCBzdXBwb3J0KQogIC0gdXBkYXRlIG1hY2gtdHlwZXMuaCB0byBsYXRlc3QgYXJtLmxpbnV4Lm9yZy51ayBtYXN0ZXIgbGlzdC4KCiogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDEyIEp1biAyMDAzOgogIC0gcmV3cml0ZSBvZiB0aGUgUzNDMjRYMCByZWdpc3RlciBkZWZpbml0aW9ucyBzdHVmZgogIC0gImRyaXZlciIgZm9yIHRoZSBidWlsdC1pbiBTM0MyNFgwIFJUQwoKKiBQYXRjaGVzIGJ5IFl1bGkgQmFyY29oZW4sIDEyIEp1biAyMDAzOgogIC0gQWRkIE1JSSBzdXBwb3J0IGFuZCBFdGhlcm5ldCBQSFkgaW5pdGlhbGl6YXRpb24gZm9yIE1QQzgyNjBBRFMgYm9hcmQKICAtIEZpeCBpbmNvcnJlY3QgU0lVTUNSIGluaXRpYWxpc2F0aW9uIGNhdXNlZCBieSB3cm9uZyBIYXJkIFJlc2V0CiAgICBjb25maWd1cmF0aW9uIHdvcmQgc3VwcGxpZWQgYnkgRlBHQSBvbiBzb21lIE1QQzgyNjBBRFMgYm9hcmRzCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxMCBKdW4gMjAwMzoKICBVbmlmeSBzdGF0dXMgTEVEIGludGVyZmFjZQoKKiBBZGQgc3VwcG9ydCBmb3IgRFMxMjg4NyBSVEM7IGFkZCBSVEMgc3VwcG9ydCBmb3IgQVRDIGJvYXJkCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDExIEp1biAyMDAzOgogIE1vZGlmaWNhdGlvbnMgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdAogIC0gQWRkIEF0bWVsIERhdGFGbGFzaCBzdXBwb3J0IGZvciByZWFkaW5nIGFuZCB3cml0aW5nLgogIC0gQWRkIHBvc3NpYmlsaXR5IHRvIGJvb3QgYSBMaW51eCBmcm9tIERhdGFGbGFzaCB3aXRoIEJPT1RNIGNvbW1hbmQuCiAgLSBBZGQgRmxhc2ggZGV0ZWN0aW9uIG9uIEF0bWVsIEFUOTFSTTkyMDBESwogICAgKGJldHdlZW4gQXRtZWwgQVQ0OUJWMTYxNCBhbmQgQVQ0OUJWMTYxNEEgZmxhc2hlcykKICAtIFJlcGxhY2Ugb2xkIEV0aGVybmV0IFBIWSBsYXllciBmdW5jdGlvbnMKICAtIENoYW5nZSBsaW5rIGFkZHJlc3MKCiogUGF0Y2ggYnkgRnJhbmsgU21pdGgsIDkgSnVuIDIwMDM6CiAgdXNlIENSSVRfRVhDRVBUSU9OIGZvciBtYWNoaW5lIGNoZWNrIG9uIDR4eAoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxMyBKdW4gMjAwMzoKICBhZGRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgImNhcmluZm8iIGNvbW1hbmQgaW4gY21kX2ltbWFwLmMKCiogRml4IENPTkZJR19ORVRfTVVMVEkgc3VwcG9ydCBpbiBpbmNsdWRlL25ldC5oCgoqIFBhdGNoZXMgYnkgS3lsZSBIYXJyaXMsIDEzIE1hciAyMDAzOgogIC0gQWRkIEZBVCBwYXJ0aXRpb24gc3VwcG9ydAogIC0gQWRkIGNvbW1hbmQgc3VwcG9ydCBmb3IgRkFUCiAgLSBBZGQgY29tbWFuZCBzdXBwb3J0IGZvciBNTUMKICAtLS0tCiAgLSBBZGQgSW50ZWwgUFhBIHN1cHBvcnQgZm9yIHZpZGVvCiAgLSBBZGQgSW50ZWwgUFhBIHN1cHBvcnQgZm9yIE1NQwogIC0tLS0KICAtIEVuYWJsZSBNTUMgYW5kIEZBVCBmb3IgbHViYm9jayBib2FyZAogIC0gT3RoZXIgbWlzYyBjaGFuZ2VzIGZvciBsdWJib2NrIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgQXByaWwgMDIsIDIwMDM6CiAgZml4IGZvciBTTVNDOTExMTEgZHJpdmVyCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAwNCBKdW4gMjAwMzoKICBtYWtlIHBwYzQwNSBldGhlcm5ldCBkcml2ZXIgY29tcGF0aWJsZSB3aXRoIENPTkZJR19ORVRfTVVMVEkgb3B0aW9uCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDUgSnVuIDIwMDM6CiAgLSBQUEM0eHg6IEZpeCBidWcgZm9yIGluaXRpYWwgc3RhY2sgaW4gZGF0YSBjYWNoZSBhcyBwb2ludGVkIG91dCBieQogICAgVGhvbWFzIFNjaGFlZmVyICh0c2NoYWVmZXJAZ2lnYS1zdHJlYW0uZGUpLiBOb3cgaW5pdGFsIHN0YWNrIGluCiAgICBkYXRhIGNhY2hlIGNhbiBiZSB1c2VkIGV2ZW4gaWYgdGhlIGNoaXAgc2VsZWN0IGlzIGluIHVzZS4KICAtIENGR19SWF9FVEhfQlVGRkVSIGFkZGVkIHRvIHNldCB0aGUgZXRoZXJuZXQgcmVjZWl2ZSBidWZmZXIgY291bnQKICAgIChzZWUgUkVBRE1FIGZvciBmdXJ0aGVyIGRlc2NyaXB0aW9uKS4KICAtIENoYW5nZWQgY29uZmlnIGZpbGVzIG9mIENPTkZJR19FRVBSTzEwMCBib2FyZHMgdG8gdXNlIHRoZQogICAgQ0ZHX1JYX0VUSF9CVUZGRVIgZGVmaW5lLgoKKiBBZGQgc3VwcG9ydCBmb3IgUk1VIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NjJMIGF0IDEwMC81MCBNSHoKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDAyIEp1biAyMDAzOgogIG1ham9yIHJlY29uc3RydWN0aW9uIG9mIG5ldHdvcmtpbmcgY29kZTsKICBhZGQgInBpbmciIHN1cHBvcnQgKG91dGdvaW5nIG9ubHkhKQoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDQgSnVuZSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1VCBib2FyZAoKKiBQYXRjaGVzIGJ5IFVkaSBGaW5rZWxzdGVpbiwgMiBKdW5lIDIwMDM6CiAgLSBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20ga2V5Ym9hcmRzLCBpbml0aWFsaXplZCBieSBkZWZpbmluZyBhCiAgICBib2FyZC1zcGVjaWZpYyBkcnZfa2V5Ym9hcmRfaW5pdCBhcyB3ZWxsIGFzIGRlZmluaW5nIENPTkZJR19LRVlCT0FSRCAuCiAgLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgUkJDODIzIGJvYXJkLgogIC0gY3B1L21wYzh4eC9sY2QuYyBub3cgYXV0b21hdGljYWxseSBjYWxjdWxhdGVzIHRoZQogICAgSG9yaXpvbnRhbCBQaXhlbCBDb3VudCBmaWVsZC4KCiogRml4IGFsaWdubWVudCBwcm9ibGVtIGluIEJPT1RQIChkaGNwX2xlYXNldGltZSBvcHRpb24pCiAgW3BvaW50ZWQgb3V0IGJ5IE5pY29sYXMgTGFjcmVzc29ubmnocmUsIDIgSnVuIDIwMDNdCgoqIFBhdGNoIGJ5IE1hcmsgUmFrZXMsIDE0IE1heSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBlMTAwMCBnaWcgY2FyZHMuCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDMgSnVuIDIwMDM6CiAgZml4IGNyaXRpY2FsIHR5cG8gaW4gTUFNUiBkZWZpbml0aW9uIChpbmNsdWRlL21wYzh4eC5oKQoKKiBGaXggcmVxdWlyZW1lbnQgdG8gYWxpZ24gVS1Cb290IGltYWdlIG9uIDE2IGtCIGJvdW5kYXJpZXMgb24gUFBDLgoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAyIEp1biAyMDAzCiAgTWlub3IgY2hhbmdlcyBmb3IgS1VQNEsgY29uZmlndXJhdGlvbgoKKiBQYXRjaCBieSBNYXJjIFNpbmdlciwgMjkgTWF5IDIwMDM6CiAgRml4ZWQgcmFycCBib290IG1ldGhvZCBmb3IgSUEzMiBhbmQgb3RoZXIgbGl0dGxlLWVuZGlhbiBDUFVzLgoKKiBQYXRjaCBieSBNYXJjIFNpbmdlciwgMjggTWF5IDIwMDM6CiAgQWRkZWQgcG9ydCBJL08gY29tbWFuZHMuCgoqIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jaywgMjggTWF5IDIwMDMKICAtIGNwdS9tcGM4MjR4L3N0YXJ0LlM6IGZpeCByZWxvY2F0aW9uIGNvZGUgd2hlbiBib290aW5nIGZyb20gUkFNCiAgLSBtaW5vciBwYXRjaGVzIGZvciB1dHg4MjQ1CgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMjggTWF5IDIwMDM6CiAgeDg2IHVwZGF0ZQoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCA5IE1heSAyMDAzICsgMjcgTWF5IDIwMDM6CiAgYWRkIG5hbmQgZmxhc2ggc3VwcG9ydCB0byBTWE5JODU1VCBjb25maWd1cmF0aW9uCiAgZml4L2V4dGVuZCBuYW5kIGZsYXNoIHN1cHBvcnQ6CiAgLSBmaXggJ25hbmQgZXJhc2UnIGNvbW1hbmQgc28gZG9lcyBub3QgZXJhc2UgYmFkIGJsb2NrcwogIC0gZml4ICduYW5kIHdyaXRlJyBjb21tYW5kIHNvIGRvZXMgbm90IHdyaXRlIHRvIGJhZCBibG9ja3MKICAtIGZpeCBuYW5kX3Byb2JlKCkgc28gaGFuZGxlcyBubyBmbGFzaCBkZXRlY3RlZCBwcm9wZXJseQogIC0gYWRkIGRvYy9SRUFETUUubmFuZAogIC0gYWRkIC5qZmZzMiBhbmQgLm9vYiBvcHRpb25zIHRvIG5hbmQgcmVhZC93cml0ZQogIC0gYWRkICduYW5kIGJhZCcgY29tbWFuZCB0byBsaXN0IGJhZCBibG9ja3MKICAtIGFkZCAnY2xlYW4nIG9wdGlvbiB0byAnbmFuZCBlcmFzZScgdG8gd3JpdGUgSkZGUzIgY2xlYW4gbWFya2VycwogIC0gbWFrZSBOQU5EIHJlYWQvd3JpdGUgZmFzdGVyCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAyMyBNYXkgMjAwMzoKICBVcGRhdGUgZm9yIE1QQzgyNjZBRFMgYm9hcmQKCiogR2V0IChtb3N0bHkpIHJpZCBvZiBDRkdfTU9OSVRPUl9MRU4gZGVmaW5pdGlvbjsgY29tcHV0ZSByZWFsIGxlbmd0aAogIGluc3RlYWQgQ0ZHX01PTklUT1JfTEVOIGlzIG5vdyBvbmx5IHVzZWQgdG8gZGV0ZXJtaW5lCSBfYXRfY29tcGlsZV8KICBfdGltZV8gICghKSBpZiB0aGUgZW52aXJvbm1lbnQgaXMgZW1iZWRkZWQgd2l0aGluIHRoZSBVLUJvb3QgaW1hZ2UsCiAgb3IgaW4gYSBzZXBhcmF0ZSBmbGFzaCBzZWN0b3IuCgoqIENsZWFudXAgQ0ZHX0RFUiAjZGVmaW5lcyBpbiBjb25maWcgZmlsZXMgKHdkIG1haW50YWluZWQgb25seSkKCiogRml4IGRhdGEgYWJvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGZvciBhcm05MjB0IENQVQoKKiBGaXggYWxpZ25tZW50IHByb2JsZW1zIHdpdGggZmxhc2ggZHJpdmVyIGZvciBUUkFCIGJvYXJkCgoqIFBhdGNoIGJ5IERvbmFsZCBXaGl0ZSwgMjEgTWF5IDIwMDM6CiAgZml4IGNhbGN1bGF0aW9uIG9mIGJhc2UgYWRkcmVzcyBpbiBwY2lfaG9zZV9jb25maWdfZGV2aWNlKCkKCiogRml4IGJ1ZyBpbiBjb21tYW5kIGxpbmUgcGFyc2luZzogImNtZDE7Y21kMiIgaXMgc3VwcG9zZWQgdG8gYWx3YXlzCiAgZXhlY3V0ZSAiY21kMiIsIGV2ZW4gaWYgImNtZDEiIGZhaWxzLiBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQKICB0byAicnVuIHZhcjEgdmFyMiIgd2hlcmUgdGhlIGNvbnRlbnRzIG9mICJ2YXIyIiB3aWxsIE5PVCBiZQogIGV4ZWN1dGVkIHdoZW4gYSBjb21tYW5kIGluICJ2YXIxIiBmYWlscy4KCiogQWRkIHplcm8tY29weSByYW1kaXNrIHN1cHBvcnQgKHJlcXVpcmVzIGNvcnJlc3BvbmRpbmcga2VybmVsIHN1cHBvcnQhKQoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMjAgTWF5IDIwMDM6CiAgSW4gcHJlcGFyYXRpb24gZm9yIGFuIGl4cCBwb3J0LCByZW5hbWUgY3B1L3hzY2FsZSBhbmQgYXJjaC14c2NhbGUKICBpbnRvIGNwdS9weGEgYW5kIGFyY2gtcHhhLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIzIE1heSAyMDAzOgogIC0gSUJNIFBQQzQwNUVQIHBvcnQgYWRkZWQuCiAgLSBDT05GSUdfVUFSVDFfQ09OU09MRSBhZGRlZC4gSWYgZGVmaW5lZCBpbnRlcm5hbCBVQVJUMSAoYW5kIG5vdAogICAgVUFSVDApIGlzIHVzZWQgYXMgZGVmYXVsdCBVLUJvb3QgY29uc29sZS4gUFBDNHh4IG9ubHkhCiAgLSBlc2QgQVNINDA1IGJvYXJkIGFkZGVkIChQUEM0MDVFUCBiYXNlZCkuCiAgLSBCVUJJTkdBNDA1RVAgYm9hcmQgYWRkZWQgKFBQQzQwNUVQIGJhc2VkIC0gSUJNIEV2YWwgQm9hcmQpLgogIC0gZXNkIENQQ0k0MDVBQiBib2FyZCBhZGRlZC4KICAtIGVzZCBQTUM0MDUgYm9hcmQgYWRkZWQuCiAgLSBVcGRhdGUgb2Ygc29tZSBlc2QgYm9hcmRzLgoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTkgTWFpIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUtMyBib2FyZAoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCAyMiBNYXkgMjAwMzoKICBGaXggcHJvYmxlbSB3aXRoIG9ubHkgcGFydGlhbGx5IGNsZWFyZWQgLmJzcyBzZWdtZW50CgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMiBNYXkgMjAwMzoKICBnZXQgUENJIHRvIHdvcmsgb24gYSBNUEM4MjY2QURTIGJvYXJkOyBpbmNvcnBvcmF0ZSBjaGFuZ2UgdG8KICBjcHUvbXBjODI2MC9wY2kuYyB0byBlbmFibGUgb3ZlcnJpZGVzIG9mIFBDSSBtZW1vcnkgcGFyYW1ldGVycwoKKiBQYXRjaCBieSBOeWUgTGl1LCAxIE1heSAyMDAzOgogIG1pbm9yIHBhdGNoZXMgZm9yIHRoZSBGQURTOHh4CgoqIFBhdGNoIGJ5IFRob21hcyBTY2jkZmVyLCAyOCBBcHIgMjAwMzoKICBGaXggU1BEIGhhbmRsaW5nIGZvciAyNTYgRUNDIERJTU0gb24gV2FsbnV0CgoqIEFkZCBzdXBwb3J0IGZvciBhcmJpdHJhcnkgYml0bWFwcyBmb3IgVFJBQidzCVZGRCBjb21tYW5kOwogIGFsbG93IHRvIHBhc3MgYm9vdCBiaXRtYXAgYWRkcmVzc2VzIGluIGVudmlyb25tZW50IHZhcmlhYmxlczsKICBhbGxvdyBmb3IgemVybyBib290IGRlbGF5CgoqIFBhdGNoIGJ5IENocmlzdGlhbiBHZWnfaW5nZXIsIDE5IE1heSAyMDAyOgogIE9uIFRSQUI6IHdhaXQgdW50aWwgdGhlIGR1bW15IGJ5dGUgaGFzIGJlZW4gY29tcGxldGVseSBzZW50CgoqIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMjIgQXByIDIwMDM6CiAgdXBkYXRlIGZvciBDcmF5TDEgYm9hcmQKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDIxIEFwciAyMDAzOgogIGFkZCBib290IHN1cHBvcnQgZm9yIEFSVE9TIChhIHByb3ByaWV0YXJ5IE9TKQoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMSBBcHIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRDIERTMTMzOAoKKiBQYXRjaCBieSBSb2QgQm95Y2UsIDI0IEphbiAyMDAzOgogIEZpeCBjb3VudGluZyBvZiBleHRlbmRlZCBwYXJ0aXRpb25zIGluIGRpc2tib290IGNvbW1hbmQKCiogUGF0Y2ggYnkgQ2hyaXN0b3BoZSBMaW5kaGVpbWVyLCAyMCBNYXkgMjAwMzoKICBhbGxvdyB0aGUgdXNlIG9mIENGR19MT0FEUyB3aGVuIENGR19OT19GTEFTSCBpcyBzZXQKCiogRml4IFNEUkFNIHRpbWluZyBvbiBQdXJwbGUgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIENvbXBhY3RGbGFzaCBvbiBBVEMgYm9hcmQKICAoaW5jbHVkZXMgc3VwcG9ydCBmb3IgSW50ZWwgODIzNjUgYW5kIGNvbXBhdGlibGUgUEMgQ2FyZCBjb250cm9sbGVycywKICBhbmQgWWVudGEtY29tcGF0aWJsZSBQQ0ktdG8tQ2FyZEJ1cyBjb250cm9sbGVycykKCiogUGF0Y2ggYnkgTWF0aGlqcyBIYWFybWFuLCAwOCBNYXkgMjAwMzoKICBBZGQgbGFuOTFjOTYgZHJpdmVyICh0ZXN0ZWQgb24gTHViYm9jayBhbmQgY3VzdG9tIFBYQTI1MCBib2FyZCBvbmx5KQoKKiBGaXggcHJvYmxlbSB3aXRoIHVzYWdlIG9mICJ0cnVlIiAodW5kZWZpbmVkIGluIGN1cnJlbnQgdmVyc2lvbnMgb2YgYmZkLmgpCgoqIEFkZCBzdXBwb3J0IGZvciBQcm9tZXNzIEFUQyBib2FyZAoKKiBQYXRjaCBieSBLZWl0aCBPdXR3YXRlciwgMjggQXByIDIwMDM6CiAgLSBNaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIGFuZCBhZGRpdGlvbnMgdG8gR0VOODYwVCBib2FyZCBzcGVjaWZpYyBjb2RlLgogIC0gQWRkZWQgR0VOODYwX1NDIHZhcmlhbnQgdG8gR0VOODYwVC4KICAtIE1pc2NlbGxhbmVvdXMgY29ycmVjdGlvbnMgdG8gR0VOODYwVCBkb2N1bWVudGF0aW9uLgogIC0gQ29ycmVjdCBkdXBsaWNhdGUgZW50cnkgaW4gVS1Cb290IENSRURJVFMgZmlsZS4KICAtIEFkZCBHRU44NjBUX1NDIGVudHJ5IGluIE1BSU5UQUlORVJTIGZpbGUuCiAgLSBVcGRhdGUgQ1JFRElUUyBmaWxlIHdpdGggR0VOODYwVF9TQyBpbmZvLgoKKiBVcGRhdGUgU21pdGhzIEFlcm9zcGFjZSBhZGRyZXNzZXMgaW4gTUFJTlRBSU5FUlMgZmlsZQoKKiBGaXggZXJyb3IgaGFuZGxpbmcgaW4gaHVzaCdzIHZlcnNpb24gb2YgInJ1biIgY29tbWFuZAoKKiBMV01PTiBleHRlbnNpb25zOgogIC0gU3BsYXNoc2NyZWVuIHN1cHBvcnQKICAtIG1vZGVtIHN1cHBvcnQKICAtIHN5c21vbiBzdXBwb3J0CiAgLSB0ZW1wZXJhdHVyZSBkZXBlbmRlbmQgZW5hYmxpbmcgb2YgTENECgoqIEFsbG93IGJvb3RpbmcgZnJvbSBvbGQgIlBQQ0Jvb3QiIGRpc2sgcGFydGl0aW9ucwoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODI1NSBCb2FyZCAvIE1QQzgyNTUgQ1BVCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjMuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBNYWtlIHN1cmUgQmxvY2sgTG9jayBCaXRzIGdldCBjbGVhcmVkIGluIFIzNjBNUEkgZmxhc2ggZHJpdmVyCgoqIE1QQzgyMyBMQ0QgZHJpdmVyOiBGaWxsIGNvbG9yIG1hcCBiYWNrd2FyZHMsIHRvIGFsbG93IGZvciBzdGVhZHkKICBkaXNwbGF5IHdoZW4gTGludXggdGFrZXMgb3ZlcgoKKiBQYXRjaCBieSBFcndpbiBSb2wsIDI3IEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEVNUyAodGhpcyB0aW1lIGZvciByZWFsKS4KCiogQWRkIHN1cHBvcnQgZm9yICJibXAgaW5mbyIgYW5kICJibXAgZGlzcGxheSIgY29tbWFuZHMgdG8gbG9hZAogIGJpdG1hcCBpbWFnZXM7IHRoaXMgY2FuIGJlIHVzZWQgKGZvciBleGFtcGxlIGluIGEgInByZWJvb3QiCiAgY29tbWFuZCkgdG8gZGlzcGxheSBhIHNwbGFzaCBzY3JlZW4gdmVyeSBxdWlja2x5IGFmdGVyIHBvd2Vyb24uCgoqIEFkZCBzdXBwb3J0IGZvciAxMzMgTUh6IGNsb2NrIG9uIElOQ0EtSVAgYm9hcmQKCiogUGF0Y2ggYnkgTHV0eiBEZW5uaWcsIDEwIEFwciAyMDAzOgogIFVwZGF0ZSBmb3IgUjM2ME1QSSBib2FyZAoKKiBBZGQgbmV3IG1lYW5pbmcgdG8gImF1dG9zdGFydCIgZW52aXJvbm1lbnQgdmFyaWFibGU6CiAgSWYgc2V0IHRvICJubyIsIGEgc3RhbmRhbG9uZSBpbWFnZSBwYXNzZWQgdG8gdGhlCiAgImJvb3RtIiBjb21tYW5kIHdpbGwgYmUgY29waWVkIHRvIHRoZSBsb2FkIGFkZHJlc3MKICAoYW5kIGV2ZW50dWFsbHkgdW5jb21wcmVzc2VkKSwgYnV0IE5PVCBiZSBzdGFydGVkLgogIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9hZCBhbmQgdW5jb21wcmVzcyBhcmJpdHJhcnkKICBkYXRhLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIEFwciAyMDAzOgogIENoYW5nZWQgREhDUCBjbGllbnQgdG8gdXNlIElQIGFkZHJlc3MgZnJvbSBzZXJ2ZXIgb3B0aW9uIGZpZWxkICM1NAogIGZyb20gdGhlIE9GRkVSIHBhY2tldCBpbiB0aGUgc2VydmVyIG9wdGlvbiBmaWVsZCAjNTQgaW4gdGhlIFJFUVVFU1QKICBwYWNrZXQuIFRoaXMgZml4ZXMgYSBwcm9ibGVtIHVzaW5nIGEgV2luZG93cyAyMDAwIERIQ1Agc2VydmVyLAogIHdoZXJlIHRoZSBESENQLXNlcnZlciBpcyBub3QgdGhlIFRGVFAtc2VydmVyLgoKKiBTZXQgbWF4IGJyaWdodG5lc3MgZm9yIE1OMTEyMzYgZGlzcGxheXMgb24gVFJBQiBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODYyTCBtb2R1bGVzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjMuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBBcnVuIERoYXJhbmthciwgNCBBcHIgMjAwMzoKICBBZGQgSURNQSBleGFtcGxlIGNvZGUgKHRlc3RlZCBvbiA4MjYwIG9ubHkpCgoqIEFkZCBzdXBwb3J0IGZvciBQdXJwbGUgQm9hcmQgKE1JUFM2NCA1S2MpCgoqIEFkZCBzdXBwb3J0IGZvciBNSVBTNjQgNUtjIENQVXMKCiogRml4IG1pc3Npbmcgc2V0dGluZyBvZiAibG9hZGFkZHIiIGFuZCAiYm9vdGZpbGUiIG9uIEFSTSBhbmQgTUlQUwoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDQgQXByIDIwMDM6CiAgLSB1cGRhdGUgTUlQNDA1LTQgYm9hcmQKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA0IEFwciAyMDAzOgogIC0gVS1Cb290IHZlcnNpb24gZW52aXJvbm1lbnQgdmFyaWFibGUgInZlciIgYWRkZWQKICAgIChDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSkuCiAgLSBDaGFuZ2VkIFBQQzQwNUdQciB2ZXJzaW9uIGZyb20gQSB0byBCLgogIC0gQ2hhbmdlZCBDUENJNDA1IHRvIHVzZSBDVFMgaW5zdGVhZCBvZiBEU1Igb24gUFBDNDA1IFVBUlQxLgoKKiBQYXRjaGVzIGJ5IERlbmlzIFBldGVyLCAwMyBBcHJpbCAyMDAzOgogIC0gZml4IFBDSSBJUlFzIG9uIE1QTCBib2FyZHMKICAtIGZpeCB0d28gbW9yZSB1bi1yZWxvY2F0ZWQgcG9pbnRlciBwcm9ibGVtcwoKKiBGaXggYmVoYXZpb3VyIG9mICJydW4iIGNvbW1hbmQ6CiAgLSBwcmludCBlcnJvciBtZXNzYWdlIGl2IHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0CiAgLSB0ZXJtaW5hdGUgcHJvY2Vzc2luZyBvZiBhcmd1bWVudHMgaW4gY2FzZSBvZiBlcnJvcgoKKiBQYXRjaGVzIGJ5IFBldGVyIEZpZ3VsaSwgMTAgTWFyIDIwMDMKICAtIEFkZCBzdXBwb3J0IGZvciBCVFVBUlQgb24gUFhBIHBsYXRmb3JtCiAgLSBBZGQgc3VwcG9ydCBmb3IgV0VQIEVQMjUwIChQWEEpIGJvYXJkCgoqIEZpeCBmbGFzaCBwcm9ibGVtcyBvbiBJTkNBLUlQOyBhZGQgdG9vbCB0byBhbGxvdyBicnVuaW5nIGltYWdlcyAgdG8KICBmbGFzaCB1c2luZyBhIEJESTIwMDAKCiogSW1wbGVtZW50IGZpeCBmb3IgSTJDIEVkZ2UgQ29uZGl0aW9ucyBwcm9ibGVtIGZvciBhbGwgYm9hcmRzIHRoYXQKICB1c2UgdGhlIGJpdC1iYW5naW5nIGRyaXZlciAoY29tbW9uL3NvZnRfaTJjLmMpCgoqIFBhdGNoIGJ5IE1hcnRpbiBXaW5pc3RvZXJmZXIsIDIzIE1hciAyMDAzCiAgLSBBZGQgcG9ydCB0byBNUEM1NTUvNTU2IG1pY3JvY29udHJvbGxlcnMKICAtIEFkZCBzdXBwb3J0IGZvciBjbWkgY3VzdG9tZXIgYm9hcmQgd2l0aAogICAgSW50ZWwgMjhGMTI4SjNBLCAyOEYzMjBKM0Egb3IgMjhGNjQwSjNBIGZsYXNoLgoKKiBQYXRjaCBieSBSaWNrIEJyb25zb24sIDI4IE1hciAyMDAzOgogIC0gZml4IGNvbW1vbi9jbWRfbmFuZC5jCgoqIFBhdGNoIGJ5IEFydW4gRGhhcmFua2FyLCAyNCBNYXIgMjAwMzoKICAtIGFkZCB0aHJlYWRzIC8gc2NoZWR1bGVyIGV4YW1wbGUgY29kZQoKKiBBZGQgcGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDMxIE1hciAyMDAzOgogIC0gYWRkIGN0cmwtYyBzdXBwb3J0IGZvciBrZXJtaXQgZG93bmxvYWQKICAtIGFsaWduIGJkaW5mbyBvdXRwdXQgb24gQVJNCiAgLSBjc2IyMjYgYm9hcmQ6IGJyaW5nIGluIHN5bmMgd2l0aCBpbm5va29tL21lbXNldHVwLlMKICAtIGNzYjIyNiBib2FyZDogZml4IE1EUkVGUiBoYW5kbGluZwogIC0gbWlzYyBkb2MgZml4ZXMgLyBleHRlbnNpb25zCiAgLSBpbm5va29tIGJvYXJkOiBjbGVhbnVwLCBNRFJFRlIgZml4IGluIG1lbXNldHVwLlMsIGNvbmZpZyB1cGRhdGUKICAtIGFkZCBCT09UX1BST0dSRVNTIHRvIGFybWxpbnV4LmMKCiogQWRkIENQVSBJRCwgdmVyc2lvbiwgYW5kIGNsb2NrIHNwZWVkIGZvciBJTkNBLUlQCgoqIFBhdGNoZXMgYnkgRGF2ZSBFbGxpcywgMTggTWFyIDIwMDMgZm9yIFNYTkk4NTVUIGJvYXJkOgogIC0gZml4IFNSQU0gYW5kIFNEUkFNIG1lbW9yeSBzaXppbmcKICAtIGFkZCBzdGF0dXMgTEVEIHN1cHBvcnQKICAtIGFkZCBNQUMgYWRkcmVzcyBmb3Igc2Vjb25kIChTQ0MxKSBldGhlcm5ldCBwb3J0CgoqIFVwZGF0ZSBkZWZhdWx0IGVudmlyb25tZW50IGZvciBUUU04MjYwIGJvYXJkCgoqIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMTYgTWFyIDIwMDM6CiAgLSBBZGQgTkFORCBmbGFzaCBzdXBwb3J0IGZvciByZWFkaW5nLCB3cml0aW5nLCBhbmQgZXJhc2luZyBOQU5ECiAgICBmbGFzaCAoY2VydGFpbiBmb3JtcyBvZiB3aGljaCBhcmUgY2FsbGVkIFNtYXJ0TWVkaWEpLgogIC0gQWRkIHN1cHBvcnQgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdC4KCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE5IE1hciAyMDAzOgogIC0gdXNlIGFybS1saW51eC1nY2MgYXMgZGVmYXVsdCBjb21waWxlciBmb3IgQVJNCiAgLSBmaXggaTJjIGZpeHVwIGNvZGUKICAtIGZpeCBtaXNzaW5nIGJhdWRyYXRlIHNldHRpbmcKICAtIGFkZGVkICRsb2FkYWRkciAvIENGR19MT0FEX0FERFIgc3VwcG9ydCB0byBsb2FkYgogIC0gbW92ZWQgImlnbm9yaW5nIHRyYWlsaW5nIGNoYXJhY3RlcnMiIF9iZWZvcmVfIHUtYm9vdCB3YW50cyB0bwogICAgcHJpbnQgb3V0IGRpYWdub3N0aWNzIG1lc3NhZ2VzOyByZW1vdmVzIGJvZ3VzIGNoYXJhY3RlcnMgYXQgdGhlCiAgICBlbmQgb2YgdHJhbnNtaXNzaW9uCgoqIFBhdGNoIGJ5IEpvaG4gWmhhbiwgMTggTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFNpbm9WZWUgTWljcm9zeXN0ZW1zIFNDOHh4IGJvYXJkcwoKKiBQYXRjaCBieSBSb2xmIE9mZmVybWFubnMsIDIxIE1hciAyMDAzOgogIHBvcnRlZCB0aGUgZG5wMTExMCByZWxhdGVkIGNoYW5nZXMgZnJvbSB0aGUgY3VycmVudCBhcm1ib290IGN2cyB0bwogIGN1cnJlbnQgdS1ib290IGN2cy4gc21jOTExMTEgZG9lcyBub3Qgd29yay4gcHJvYmxlbSBtYXJrZWQgaW4KICBzbWM5MTExMS5jLCBncmVwIGZvciAiRklYTUUiLgoKKiBQYXRjaCBieSBCcmlhbiBBdWxkLCAyNSBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgU1RNIGZsYXNoIGNoaXBzIG9uIGVib255IGJvYXJkCgoqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgTVBDODI1MCBCb2FyZHMgKFBNODI1IG1vZHVsZSkKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNSBNYXIgMjAwMzoKICAtIFBDSTQwNSB1cGRhdGUuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgTWFyIDIwMDM6CiAgLSBDUENJNDA1MiB1cGRhdGUgKHN1cHBvcnQgZm9yIHJldmlzaW9uIDMpLgogIC0gU2V0IGVkZ2UgY29uZGl0aW9uaW5nIGNpcmN1aXRyeSBvbiBQUEM0MDVHUHIgZm9yIGNvbXBhdGliaWxpdHkKICAgIHRvIGV4aXN0aW5nIFBQQzQwNUdQIGRlc2lnbnMuCiAgLSBDbGlwIHVkaXYgdG8gNSBiaXRzIG9uIFBQQzQwNSAoc2VyaWFsLmMpLgoKKiBFeHRlbmQgSU5DQUlQIGJvYXJkIHN1cHBvcnQ6CiAgLSBhZGQgYXV0b21hdGljIFJBTSBzaXplIGRldGVjdGlvbgogIC0gYWRkICJiZGluZm8iIGNvbW1hbmQKICAtIHBhc3MgZmxhc2ggYWRkcmVzcyBhbmQgc2l6ZSB0byBMaW51eCBrZXJuZWwKICAtIHN3aXRjaCB0byAxNTAgTUh6IGNsb2NrCgoqIEF2b2lkIGZsaWNrZXIgb24gdGhlIFRSQUIncyBWRkQgYnkgc3luY2hyb25pemluZyB0aGUgZW5hYmxlIHdpdGgKICB0aGUgSFNZTkMvVlNZTkMuIFJlcXVpcmVzIG5ldyBDUExEIGNvZGUgKFZlcnNpb24gMTAxIGZvciBSZXYuIDEwMAogIGJvYXJkcywgdmVyc2lvbiAxNTMgZm9yIFJldi4gMjAwIGJvYXJkcykuCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAxMiBNYXIgMjAwMzoKICBGaXggcmVsb2NhdGlvbiBwcm9ibGVtIG9mIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgc3RyaW5nIHBvaW50ZXJzCiAgaW4gY29tbW9uL2NtZF9wY2kuYwoKKiBQYXRjaCBieSBLYWktVXdlIEJs9m0sIDEyIE1hciAyMDAzOgogIENsZWFudXAgJiBidWcgZml4ZXMgZm9yIEpGRlMyIGNvZGU6CiAgLSB0aGUgbWVtb3J5IG1hbmdlbWVudCB3YXMgYnJva2VuLiBJdCBjYXVzZWQgaGF2b2Mgb24gbWFsbG9jIGJ5CiAgICB3cml0aW5nIGJleW9uZCB0aGUgYmxvY2sgYm91bmRhcmllcy4KICAtIHRoZSBsZW5ndGggY2FsY3VsYXRpb24gZm9yIGZpbGVzIHdhcyB3cm9uZywgc29tZXRpbWVzIHJlc3VsdGluZwogICAgaW4gc2hvcnQgZmlsZSByZWFkcy4KICAtIGRhdGEgY29weWluZyBub3cgb3B0aW9uYWxseSB0YWtlcyBmcmFnbWVudCB2ZXJzaW9uIG51bWJlcnMgaW50bwogICAgYWNjb3VudCwgdG8gYXZvaWQgY29weWluZyBmcm9tIG9sZGVyIGRhdGEuCiAgU2VlIGRvYy9SRUFETUUuSkZGUzIgZm9yIGRldGFpbHMuCgoqIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMTIgTWFyIDIwMDM6CiAgLSAxNi8zMiBNQiBhbmQgNTAvODAgTUh6IHN1cHBvcnQgd2l0aCBhdXRvLWRldGVjdGlvbiBmb3IgSVA4NjAKICAtIEVUSDA1IGFuZCBCRURCVUcgc3VwcG9ydCBmb3IgQ1U4MjQKICAtIGFkZGVkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIENQQzQ1CiAgLSBuZXcgQk9PVFJPTS9GTEFTSDAgYW5kIERPQyBiYXNlIGZvciBQTTgyNgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEyIE1hciAyMDAzOgogIEZpeCB0aGUgY2hwYXJ0IGNvbW1hbmQgb24gaW5ub2tvbSBib2FyZAoKKiBOYW1lIGNsZWFudXA6CiAgbXYgaW5jbHVkZS9hc20taTM4Ni9wcGNib290LWkzODYuaCBpbmNsdWRlL2FzbS1pMzg2L3UtYm9vdC1pMzg2LmgKICBzL1BQQ0Jvb3QvVS1Cb290LyBpbiBzb21lIGZpbGVzCiAgcy9wSW1hZ2UvdUltYWdlLyAgaW4gc29tZSBmaWxlcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxNSBKYW4gMjAwMzoKICBGaXggJycgY29tbWFuZCBsaW5lIHF1b3RpbmcKCiogUGF0Y2ggYnkgVGhlIExFT1ggdGVhbSwgMTkgSmFuIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEVMUFQ4NjAgYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciBEYWxsYXMgZHMxNjR4IFJUQwoKKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMzEgSmFuIDIwMDM6CiAgLSBtaW5pbWFsIHNldHVwIGZvciBDYXJkQnVzIGJyaWRnZXMKICAtIGFkZCBFRVBST00gcmVhZC93cml0ZSBzdXBwb3J0IGluIHRoZSBDUzg5MDAgZHJpdmVyCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0aW4gSTJDIGNvbnRyb2xsZXIgaW4gdGhlIFNhbXN1bmcgczNjMjR4MCBjaGlwcwogIC0gYWRkIHN1cHBvcnQgZm9yIE1QTCdzIFZDTUE5IChTYW1zdW5nIHMzYzI0MTAgYmFzZWQpIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA0IEZlYiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzA3CgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCA1IEZlYiAyMDAzOgogIGZpeCBQTFBSQ1IvU0NDUiBpbml0IHNlcXVlbmNlIG9uIDh4eCB0byBhbGxvdyBmb3IKICBjaGFuZ2VzIG9mIEVCREYgYnkgc29mdHdhcmUKCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDA3IEZlYiAyMDAzOgogICJBUEktY29tcGF0aWJpbGl0eSBwYXRjaCIgZm9yIDR4eCBJMkMgZHJpdmVyCgoqIFRSQUIgZml4ZXMgLyBleHRlbnNpb25zOgogIC0gUmVzdG9yZSBWRkQgYnJpZ2h0bmVzcyBhcyBzYXZlZCBpbiBlbnZpcm9ubWVudAogIC0gYWRkIHN1cHBvcnQgZm9yIEZ1aml0c3UgZmxhc2hlcwogIC0gbWFrZSBzdXJlIGJvdGggYnV6emVycyBhcmUgdHVybmVkIG9mZiAoZHJpdmUgbG93IGxldmVsKQoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMDYgTWFyIDIwMDM6CiAgLSBmaXggYnVnIGluIEJPT1RQIGNvZGUgKG11c3QgdXNlIE5ldENvcHlJUCkKICAtIHVwZGF0ZSBvZiBDU0IyMjYgcG9ydAogIC0gY2xlYXIgQlNTIHNlZ21lbnQgb24gWFNjYWxlCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBpMmNfaW5pdF9ib2FyZCgpIGZ1bmN0aW9uCiAgLSB1cGRhdGUgdG8gdGhlIElubm9rb20gcGxhdHRmb3JtCgoqIEV4dGVuZCBzdXBwb3J0IGZvciByZWR1bmRhbmQgZW52aXJvbm1lbnRzIGZvciBjb25maWd1cmF0aW9ucyB3aGVyZQogIGVudmlyb25tZW50IHNpemUgPCBzZWN0b3Igc2l6ZQoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTMgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIE1QQzgyNjZBRFMgYm9hcmQKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDE5IEZlYiAyMDAzOgogIHBhdGNoZXMgZm9yIHRoZSBJbnRlbCBsdWJib2NrIGJvYXJkOgogIG1lbXNldHVwLlMgLSBnZW5lcmFsIGNsZWFudXAgKGJhc2VkIG9uIFJvYmVydCdzIGNzYjIyNiBjb2RlKQogIGZsYXNoLmMgLSBvdmVyaGF1bCwgYWN0dWFsbHkgd29ya3Mgbm93CiAgbHViYm9jay5jIC0gZml4IGluaXQgZnVuY3MgdG8gcmV0dXJuIHByb3BlciB2YWx1ZQoKKiBQYXRjaCBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMjYgRmViIDIwMDM6CiAgLSBGaXhlZCBvZmYgYnkgb25lIGluIFJGVEEgY2FsY3VsYXRpb24uCiAgLSBObyBuZWVkIHRvIGFib3J0IHdoZW4gTERGIGlzIGxvd2VyIHRoYW4gd2UgY2FuIHByb2dyYW0gaXQncyBvbmx5CiAgICBtaW5pbXVtIHRpbWluZyBzbyBjbGFtcCBpdCB0byB3aGF0IHdlIGNhbiBkby4KICAtIFRha2VzIGZ1bmN0aW9uIHBvaW50ZXIgdG8gZnVuY3Rpb24gZm9yIHJlYWRpbmcgdGhlIHNwZF9udnJhbS4gVXNlZnVsbAogICAgZm9yIGZha2luZyBkYXRhIG9yIGhhcmRjb2RlIGEgbW9kdWxlIHdpdGhvdXQgdGhlIG52cmFtLgogIC0gZml4IG90aGVyIHVzZXIgZm9yIGFib3ZlIGNoYW5nZQogIC0gZml4IHNvbWUgY29tbWVudHMuCgoqIFBhdGNoZXMgYnkgQnJpYW4gV2FpdGUsIDI2IEZlYiAyMDAzOgogIC0gZml4IHBvcnQgZm9yIGV2YjY0MjYwIGJvYXJkCiAgLSBmaXggUENJIGZvciBldmI2NDI2MCBib2FyZAogIC0gZml4IFBDSSBzY2FuCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAxIE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBFTUsgVE9QODYwIE1vZHVsZQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwMiBNYXIgMjAwMzoKICBBZGQgU1BEIEVFUFJPTSBzdXBwb3J0IGZvciBNUEM4MjYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMjEgSmFuIDIwMDM6CiAgLSBBZGQgc3VwcG9ydCBmb3IgSW5ub2tvbSBib2FyZAogIC0gRG9uJ3QgY29tcGxhaW4gaWYgImluc3RhbGwiIGZhaWxzCiAgLSBSRUFETUUgY2xlYW51cCAocmVtb3ZlIGR1cGxpY2F0ZWQgbGluZXMpCiAgLSBVcGRhdGUgUFhBIGhlYWRlciBmaWxlcwoKKiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZXhpc3RpbmcgUE9TVCBjb2RlIChkb2MvUkVBRE1FLlBPU1QpCgoqIFBhdGNoIGJ5IExhdWRuZXkgUmVuLCAxNSBKYW4gMjAwMzoKICBGaXggaGFuZGxpbmcgb2YgcmVkdW5kYW5kIGVudmlyb25tZW50IGluICJ0b29scy9lbnZjcmMuYyIKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjggRmViIDIwMDM6CiAgQWRkIGJlZGJ1ZyBzdXBwb3J0IGZvciA4MjR4IHN5c3RlbXMKCiogQWRkIHN1cHBvcnQgZm9yIDE2IE1CIGZsYXNoIGNvbmZpZ3VyYXRpb24gb2YgVFJBQiBib2FyZAoKKiBQYXRjaCBieSBFcndpbiBSb2wsIDI3IEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEVNUwoKKiBBZGQgaW1hZ2UgaW5mb3JtYXRpb24gdG8gUkVBRE1FCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggRmViIDIwMDM6CiAgQ1BDSUlTRVI0IGNvbmZpZ3VyYXRpb24gdXBkYXRlZC4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNyBGZWIgMjAwMzoKICBGaXhlZCBidWcgaW4gZXh0LiBzZXJpYWwgY2xvY2sgc2V0dXAgb24gUFBDNDA1IChzaW5jZSBQUEM0NDAgcG9ydCkuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgRmViIDIwMDM6CiAgQWRkICJwY2lkZWxheSIgZW52aXJvbm1lbnQgdmFyaWFibGUgKGluIG1zLCBlbmFibGVkIHZpYQogIENPTkZJR19QQ0lfQk9PVERFTEFZKS4KICBQQ0kgc3BlYyAyLjIgZGVmaW5lcywgdGhhdCBhIHBjaSB0YXJnZXQgaGFzIDJeMjUgcGNpIGNsb2NrcyBhZnRlcgogIFJTVCMgdG8gcmVzcG9uZCB0byBjb25maWd1cmF0aW9uIGN5Y2xlcyAoMzNNSHogLT4gMXMpLgoKKiBGaXggZHVhbCBQQ01DSUEgc2xvdCBzdXBwb3J0ICh3aGVuIHJ1bm5pbmcgd2l0aCBqdXN0IG9uZQogIHNsb3QgcG9wdWxhdGVkKQoKKiBBZGQgVkZEIHR5cGUgZGV0ZWN0aW9uIHRvIHRyYWIgYm9hcmQKCiogZXh0ZW5kIGRyaXZlcnMvY3M4OTAwLmMgZHJpdmVyIHRvIHN5bmNocm9uaXplCSBldGhhZGRyICBlbnZpcm9ubWVudAogIHZhcmlhYmxlIHdpdGggdmFsdWUgaW4gdGhlIEVFUFJPTQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciA0TUIgYW5kIDEyOE1CIG9uYm9hcmQgU0RSQU0gKGNwdS9wcGM0eHgvc2RyYW0uYykKCiogQWRkIHN1cHBvcnQgZm9yIE1JUFMzMiA0S2MgQ1BVcwoKKiBBZGQgc3VwcG9ydCBmb3IgSU5DQS1JUCBCb2FyZAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjI6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIGR1YWwgZXRoZXJuZXQgc3VwcG9ydCBvbiBQTTgyNgoKKiBBZGQgc3VwcG9ydCBmb3IgTFhUOTcxIFBIWSBvbiBQTTgyNgoKKiBQYXRjaCBieSBUb3JkIEFuZGVyc3NvbiwgMTYgSmFuIDIwMDM6CiAgRml4IGZsYXNoIHNlY3RvciBjb3VudCBmb3IgVFFNOHh4TAoKKiBGaXggSTJDIEVFUFJPTSBwcm9ibGVtIG9uIElDVTg2MiBib2FyZCAod291bGQgb25seSB3cml0ZSB0aGUgZmlyc3QKICAxNiBieXRlcyBvdXQgb2YgZWFjaCAzMiBieXRlIGJsb2NrKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIFYzNyBib2FyZAogIChwYXRjaCBieSBK824gQmVuZWRpa3Rzc29uLCAxMSBEZWMgMjAwMikKCiogVXBkYXRlIGJhdWRyYXRlIGluIGJkX2luZm8gd2hlbiBpdCBnZXRzIGNoYW5nZWQKCiogQWRkIHdhdGNoZG9nIHRyaWdnZXIgcG9pbnRzIHdoaWxlIHdhaXRpbmcgZm9yIHNlcmlhbCBwb3J0CiAgKHNvIGZhciBvbmx5IDh4eCAtLSBuZWVkZWQgb24gTFdNT04gd2l0aCAxMDBtcyB3YXRjaGRvZykKCiogSW1wcm92ZSBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIFUtQm9vdCdzIGVudmlyb25tZW50CiAgKGZpZ3VyYXRpb24gb2YgdGhlIHV0aWxpdHksIHVzaW5nIGEgY29uZmlnIGZpbGUpCgoqIEFkZCBzaW5nbGUgcXVvdGUgc3VwcG9ydCBmb3IgKG9sZCkgY29tbWFuZCBsaW5lIHBhcnNlcgoKKiBTd2l0Y2ggTFdNT04gYm9hcmQgZGVmYXVsdCBjb25maWcgZnJvbSBGUkFNIHRvIEVFUFJPTTsKICBpbiBQT1NULCBFRVBST00gc2hvd3MgdXAgb24gOCBhZGRyZXNzZXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFVzZSAxLWJ5dGUtcmVhZCBpbnN0ZWFkIG9mIC13cml0ZSBmb3IgaXByb2JlKCkgZnVuY3Rpb24KICBBZGQgaTJjIGNvbW1hbmRzIHRvIFBNODI2IGNvbmZpZwoKKiBleHRlbmQgSTJDIFBPU1QgY29kZTogY2hlY2sgZm9yIGxpc3Qgb24ga25vd24gYWRkcmVzc2VzCgoqIEltcHJvdmUgbG9nIGJ1ZmZlciBjb2RlOyB1c2UgImxvZ2xldmVsIiB0byBkZWNpZGUgd2hpY2ggbWVzc2FnZXMKICB0byBsb2cgb24gdGhlIGNvbnNvbGUsIHRvbyAobGlrZSBpbiBMaW51eCk7IGdldCByaWQgb2YgImxvZ3N0YXJ0IgoKKiBBZGQgY29tbWFuZCBsaW5lIHRvb2wgdG8gYWNjZXNzIHRoZSBVLUJvb3QncyBlbnZpcm9ubWVudAogIChib2FyZC1zcGVjaWZpYyBmb3IgVFJBQiBub3csIHRvIGJlIGZpeGVkIGxhdGVyKQoKKiBQYXRjaCBieSBIYW5zLUpvZXJnIEZyaWVkZW4sIDA2IERlYyAyMDAyCiAgRml4IG1pc2MgcHJvYmxlbXMgd2l0aCBBbWlnYU9uZSBzdXBwb3J0CgoqIFBhdGNoIGJ5IENocmlzIEhhbGxpbmFuLCAzIERlYyAyMDAyOgogIG1pbm9yIGNsZWFudXAgdG8gdGhlIE1QQzgyNDUgRVBJQyBkcml2ZXIKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCiAgQWRkIHN1cHBvcnQgZm9yIGV4dGVybmFsIChTSVUpIGludGVycnVwdHMgb24gTVBDOHh4CgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyOCBOb3YgMjAwMgogIEZpeCBuZXN0ZWQgc3lzY2FsbHMgYnVnIGluIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjcgTm92IDIwMDI6CiAgZml4IG91dHB1dCBvZiAicGNpaW5mbyIgY29tbWFuZCBmb3IgQ2FyZEJ1cyBicmlkZ2UgZGV2aWNlcy4KCiogRml4IGJ1ZyBpbiBUUU04MjYwIGJvYXJkIGRldGVjdGlvbiAtIGJvYXJkcyBnb3Qgc3R1Y2sgd2hlbiBib2FyZCBJRAogIHdhcyBub3QgcmVhZGFibGUKCiogQWRkIExFRCBpbmRpY2F0aW9uIGZvciBJREUgYWN0aXZpdHkgb24gS1VQNEsgYm9hcmQKCiogRml4IHN0YXJ0dXAgcHJvYmxlbXMgd2l0aCBWRkQgZGlzcGxheSBvbiBUUkFCCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDIwIE5vdiAyMDAyCiAgQWRkIGRyaXZlciBmb3IgRXBzb24gU0VEMTM4MDYgZ3JhcGhpYyBjb250cm9sbGVyLgogIEFkZCBzdXBwb3J0IGZvciBCTVAgbG9nb3MgaW4gY2ZiX2NvbnNvbGUgZHJpdmVyLgoKKiBBZGRlZCBzdXBwb3J0IGZvciBib3RoIFBDTUNJQSBzbG90cyAoYXQgdGhlIHNhbWUgdGltZSEpIG9uIE1QQzh4eAoKKiBQYXRjaCBieSBSb2QgQm95Y2UsIDIxIE5vdiAyMDAyOgogIGZpeCBQQ01DSUEgb24gTUJYOHh4IGJvYXJkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyMSBOb3YgMjAwMgogIEFkZCBDRkdfQ1BNX1BPU1RfV09SRF9BRERSIHRvIG1ha2UgdGhlIG9mZnNldCBvZiB0aGUKICBib290bW9kZSB3b3JkIGluIERQUkFNIGNvbmZpZ3VyYWJsZQoKKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDE4IE5vdiAyMDAyOgogIEZpeGVzIGZvciB4ODYgcG9ydCAobW9zdGx5IHN0cmluZ3MgaXNzdWVzKQoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMTggTm92IDIwMDI6CiAgRml4IGZvciBuYXRzZW1pIE5JQyBjYXJkcyAoRFA4MzgxNSkKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTkgTm92IDIwMDI6CiAgZml4IGEgYnVnIGZvciB0aGUgTUlJIGNvbmZpZ3VyYXRpb24sIGFuZCBzb21lIHdhcm5pbmdzCgoqIFBhdGNoIGJ5IFRob21hcyBGcmllZGVuLCAxMyBOb3YgMjAwMjoKICBBZGQgY29kZSBmb3IgQW1pZ2FPbmUgYm9hcmQKICAocHJlbGltaW5hcnkgbWVyZ2UgdG8gVS1Cb290LCBzdGlsbCBXSVApCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxMiBOb3YgMjAwMjoKICAtIEFkZGluZyBVUkwgZm9yIElFRUUgT1VJIGxvb2t1cAogIC0gTWFraW5nIHRoZSBhdXRvYm9vdCAjZGVmaW5lcyBkZXBlbmRlbnQgb24gQ09ORklHX0FVVE9CT09UX0tFWUVECiAgICBiZWluZyBkZWZpbmVkLgogIC0gSW4gdGhlIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MgI2RlZmluZSwgdGhlIHJvb3Qtb24taW5pdHJkIGFuZAogICAgcm9vdC1vbi1uZnMgbWFjcm9zIGFyZSBkZXNpZ25lZCB0byBzd2l0Y2ggaG93IHRoZSBkZWZhdWx0IGJvb3QKICAgIG1ldGhvZCBnZXRzIGRlZmluZWQuCgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMTMgTm92IDIwMDI6CiAgQWRkIHN1cHBvcnQgZm9yIGkzODYgYXJjaGl0ZWN0dXJlIGFuZCBBTUQgU0M1MjAgYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTIgTm92IDIwMDI6CiAgQWRkIHN1cHBvcnQgZm9yIERPUyBmaWxlc3lzdGVtIGFuZCBib290aW5nIGZyb20gRE9TIGZsb3BweSBkaXNrCgoqIFBhdGNoIGJ5IEppbSBTYW5kb3osIDA3IE5vdiAyMDAyOgogIEluY3JlYXNlIG51bWJlciBvZiBuZXR3b3JrIFJYIGJ1ZmZlcnMgKFBLVEJVRlNSWCBpbgogICJpbmNsdWRlL25ldC5oIikgZm9yIEVFUFJPMTAwIGJhc2VkIGJvYXJkcyAoZXNwZWNpYWxseSBTUDgyNDApCiAgd2hpY2ggc2hvd2VkICJSZWNlaXZlciBpcyBub3QgcmVhZHkiIGVycm9ycyB3aGVuIFUtQm9vdCB3YXMKICBwcm9jZXNzaW5nIHRoZSByZWNlaXZlIGJ1ZmZlcnMgc2xvd2VyIHRoYW4gdGhlIG5ldHdvcmsgY29udHJvbGxlcgogIHdhcyBmaWxsaW5nIHRoZW0uCgoqIFBhdGNoIGJ5IEFuZHJlYXMgT2JlcnJpdHRlciwgMDkgTm92IDIwMDI6CiAgQ2hhbmdlIGJlaGF2aW91ciBvZiBOZXRMb29wKCk6IHJldHVybiAtMSBmb3IgZXJyb3JzLCBmaWxlc2l6ZQogIG90aGVyd2lzZTsgcmV0dXJuIGNvZGUgMCBpcyB2YWxpZCBhbiBtZWFucyBubyBmaWxlIGxvYWRlZCAtIGluIHRoaXMKICBjYXNlIHRoZSBlbnZpcm9ubWVudCBzdGlsbCBnZXRzIHVwZGF0ZWQhCgoqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDkgTm92IDIwMDI6CiAgLSBpbXByb3ZlIEFEQy9EQUMgY2xvY2tpbmcgb24gdGhlIFNBQ1NuZyBib2FyZCB0byBhbGlnbgogICAgdGhlIGZhaWxpbmcgZWRnZXMgb2YgTFJDTEsgYW5kIFNDTEsKICAtIHNiYzgyNjAgY29uZmlndXJhdGlvbiB0d2Vha3MKICAtIGFkZCBzdGF0dXMgTEVEIHN1cHBvcnQgZm9yIDgyeHggc3lzdGVtcwogIC0gd2lyZSBzc3BpL3NzcG8gY29tbWFuZHMgaW50byBjb21tYW5kIGhhbmRsZXI7IGltcHJvdmVkIGVycm9yCiAgICBoYW5kbGVyaW5nCiAgLSBhZGQgdGltZXN0YW1wIHN1cHBvcnQgYW5kIGFsdGVybmF0ZSBtZW1vcnkgdGVzdCB0byB0aGUKICAgIFNBQ1NuZyBjb25maWd1cmF0aW9uCgoqIFBhdGNoIGJ5IFZpbmNlIEh1c292c2t5LCA3IE5vdiAyMDAyOgogIEFkZCAiLW4iIHRvIGxpbmtlciBvcHRpb25zIHRvIGdldCByaWQgb2YgIk5vdCBlbm91Z2ggcm9vbSBmb3IKICBwcm9ncmFtIGhlYWRlcnMiIHByb2JsZW0KCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAwNSBOb3YgMjAwMgogIFJlbmFtZSBDT05GSUdfUExMX0lOUFVUX0ZSRVEgdG8gQ09ORklHX1NZU19DTEtfRlJFUQogIHNvIHdlIGNhbiB1c2UgYW4gYWxyZWFkeSBleGlzdGluZyBuYW1lCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCiAgSGFyZHdhcmUgcmVsYXRpZWQgaW1wcm92bWVudHMgaW4gRkRDIGJvb3QgY29kZQoKKiBQYXRjaCBieSBIb2xnZXIgU2NodXJpZywgNSBOb3YgMjAwMjoKICBNYWtlIHRoZSBQWEEgcmVhbGx5IGNoYW5nZSBpdCdzIGZyZXF1ZW5jeQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwNSBOb3YgMjAwMgogIEFkZCBzdXBwb3J0IGZvciBzbGF2ZSBzZXJpYWwgU3BhcnRhbiAyIEZQR0FzCgoqIEZpeCB1bmluaXRpYWxpemVkIG1lbW9yeSAoTUFDCSBhZGRyZXNzKSAgaW4gIDh4eCAgU0NDL0ZFQyAgZXRoZXJuZXQKICBkcml2ZXJzCgoqIEFkZCBzdXBwb3J0IGZvciBsb2cgYnVmZmVyIHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gTGludXgga2VybmVsJ3MKICBzeXNsb2cgbWVjaGFuaXNtOyB1c2VkIGVzcGVjaWFsbHkgZm9yIFBPU1QgcmVzdWx0cy4KCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMzEgT2N0IDIwMDI6CiAgQWRkIGluaXRpYWwgc3VwcG9ydCBmb3Iga3VwNGsgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAwNCBOb3YgMjAwMjoKICAtIHVzZSB3YXRjaGRvZyB0byByZXNldCBQWEEyNTAgc3lzdGVtcwogIC0gYWRkZWQgcHJvZ3Jlc3MgY2FsbGJhY2tzIHRvIChzb21lIG9mIHRoZSkgQVJNIGNvZGUKICAtIHVwZGF0ZSBmb3IgQ29nZW50IENTQjIyNiBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgRlBTODYwIGJvYXJkCgoqIFBhdGNoIGJ5IEd1aWxsYXVtZSBBbGV4YW5kcmUsLCAwNCBOb3YgMjAwMjoKICBJbXByb3ZlIFBDSSBhY2Nlc3Mgb24gMzItYml0cyBDb21wYWN0IFBDSSBidXMKCiogRml4IG1kZWxheSgpIG9uIFRSQUIgLSB0aGlzIHdhcyBzdGlsbCB0aGUgZGVidWdnaW5nIHZlcnNpb24gd2l0aAogIHNlY29uZHMgaW5zdGVhZCBvZiBtcy4KCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxIE5vdiAyMDAyOgogIFhTY2FsZSByZWxhdGVkIGNsZWFudXAgKGFmZmVjdHMgYWxsIEFSTSBib2FyZHMpCgoqIENsZWFudXAgb2YgbmFtZXMgYW5kIFJFQURNRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KTm90ZXMgZm9yIFUtQm9vdCAwLjEuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBpcyB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mICJEYXMgVS1Cb290IiwgdGhlIFVuaXZlcnNhbCBCb290IExvYWRlci4KCkl0IGlzIGJhc2VkIG9uIHZlcnNpb24gMi4wLjAgKHRoZSAiSGFsbG93ZWVuIFJlbGVhc2UiKSBvZiBQUENCb290LgpGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhpc3Rvcnkgb2YgdGhlIHByb2plY3QgcGxlYXNlIHNlZSB0aGUKUFBDQm9vdCBwcm9qZWN0IHBhZ2UgYXQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wcGNib290Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cg==