RlVUVVJFCgogICogVE9ETzogVGhlIGx3SVAgc291cmNlIGNvZGUgbWFrZXMgc29tZSBpbnZhbGlkIGFzc3VtcHRpb25zIG9uIHByb2Nlc3NvcgogICAgd29yZC1sZW5ndGgsIHN0b3JhZ2Ugc2l6ZXMgYW5kIGFsaWdubWVudC4gU2VlIHRoZSBtYWlsaW5nIGxpc3RzIGZvcgogICAgcHJvYmxlbXMgd2l0aCBleG90ZXJpYyAoL0RTUCkgYXJjaGl0ZWN0dXJlcyBzaG93aW5nIHRoZXNlIHByb2JsZW1zLgogICAgV2Ugc3RpbGwgaGF2ZSB0byBmaXggc29tZSBvZiB0aGVzZSBpc3N1ZXMgbmVhdGx5LgoKICAqIFRPRE86IHRoZSBQUFAgY29kZSBpcyBicm9rZW4gaW4gYSBmZXcgd2F5cy4gVGhlcmUgYXJlIG5hbWVzcGFjZQogICAgY29sbGlzaW9ucyBvbiBCU0Qgc3lzdGVtcyBhbmQgbWFueSBhc3N1bXB0aW9ucyBvbiB3b3JkLWxlbmd0aAogICAgKHNpemVvZihpbnQpKS4gSW4gcHBwLmMgYW4gYXNzdW1wdGlvbiBpcyBtYWRlIG9uIHRoZSBhdmFpbGFiaWxpdHkgb2YKICAgIGEgdGhyZWFkIHN1YnN5c3RlbS4gRWl0aGVyIFBQUCBuZWVkcyB0byBiZSBtb3ZlZCB0byBjb250cmliL3BvcnRzLz8/PwogICAgb3IgcmVhcnJhbmdlZCB0byBiZSBtb3JlIGdlbmVyaWMuCgpISVNUT1JZCgooQ1ZTIEhFQUQpCgogICogW0VudGVyIG5ldyBjaGFuZ2VzIGp1c3QgYWZ0ZXIgdGhpcyBsaW5lIC0gZG8gbm90IHJlbW92ZSB0aGlzIGxpbmVdCgogICsrIE5ldyBmZWF0dXJlczoKCiAgKysgQnVnZml4ZXM6CgoKKFNUQUJMRS0xLjMuMSkKCiAgKysgTmV3IGZlYXR1cmVzOgoKICAyMDA5LTA1LTEwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgc29ja2V0cy5jLCBwYnVmLmMsIG5ldGJ1Zi5oLCBwYnVmLmg6IHRhc2sgIzcwMTM6IEFkZGVkIG9wdGlvbgogICAgTFdJUF9ORVRJRl9UWF9TSU5HTEVfUEJVRiB0byB0cnkgdG8gY3JlYXRlIHRyYW5zbWl0IHBhY2tldHMgZnJvbSBvbmx5CiAgICBvbmUgcGJ1ZiB0byBoZWxwIE1BQ3MgdGhhdCBkb24ndCBzdXBwb3J0IHNjYXR0ZXItZ2F0aGVyIERNQS4KCiAgMjAwOS0wNS0wOSBTaW1vbiBHb2xkc2NobWlkdAogICogaWNtcC5oLCBpY21wLmM6IFNocmlua2VkIElDTVAgY29kZSwgYWRkZWQgb3B0aW9uIHRvIE5PVCBjaGVjayBpY29taW5nCiAgICBFQ0hPIHBidWYgZm9yIHNpemUgKGp1c3QgdXNlIGl0KTogTFdJUF9JQ01QX0VDSE9fQ0hFQ0tfSU5QVVRfUEJVRl9MRU4KCiAgMjAwOS0wNS0wNSBTaW1vbiBHb2xkc2NobWlkdCwgSmFrb2IgU3Rva2x1bmQgT2xlc2VuCiAgKiBpcC5oLCBpcC5jOiBBZGRlZCBpcF9jdXJyZW50X25ldGlmKCkgJiBpcF9jdXJyZW50X2hlYWRlcigpIHRvIHJlY2VpdmUKICAgIGV4dGVuZGVkIGluZm8gYWJvdXQgdGhlIGN1cnJlbnRseSByZWNlaXZlZCBwYWNrZXQuCgogIDIwMDktMDQtMjcgU2ltb24gR29sZHNjaG1pZHQKICAqIHN5cy5oOiBNYWRlIFNZU19MSUdIVFdFSUdIVF9QUk9UIGFuZCBzeXNfbm93KCkgd29yayB3aXRoIE5PX1NZUz0xCgogIDIwMDktMDQtMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5jLCBvcHQuaDogQWRkZWQgb3B0aW9uIE1FTV9VU0VfUE9PTFNfVFJZX0JJR0dFUl9QT09MIHRvIHRyeSB0aGUgbmV4dAogICAgYmlnZ2VyIG1hbGxvYyBwb29sIGlmIG9uZSBpcyBlbXB0eSAob25seSB1c2FibGUgd2l0aCBNRU1fVVNFX1BPT0xTKS4KCiAgMjAwOS0wNC0yMSBTaW1vbiBHb2xkc2NobWlkdAogICogZG5zLmMsIGluaXQuYywgZG5zLmgsIG9wdC5oOiB0YXNrICM3NTA3LCBwYXRjaCAjNjc4NjogRE5TIHN1cHBvcnRzIHN0YXRpYwogICAgaG9zdHMgdGFibGUuIE5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgRE5TX0xPQ0FMX0hPU1RMSVNUIGFuZAogICAgRE5TX0xPQ0FMX0hPU1RMSVNUX0lTX0RZTkFNSUMuIEFsc28sIEROU19MT09LVVBfTE9DQUxfRVhURVJOKCkgY2FuIGJlIGRlZmluZWQKICAgIGFzIGFuIGV4dGVybmFsIGZ1bmN0aW9uIGZvciBsb29rdXAuCgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYzogcGF0Y2ggIzY3NjM6IEdsb2JhbCBESENQIFhJRCBjYW4gYmUgcmVkZWZpbmVkIHRvIHNvbWV0aGluZyBtb3JlIHVuaXF1ZQoKICAyMDA5LTAzLTMxIEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3AuYywgdGNwX291dC5jLCB0Y3BfaW4uYywgc3lzLmgsIHRjcC5oLCBvcHRzLmg6IGFkZCBzdXBwb3J0IGZvcgogICAgVENQIHRpbWVzdGFtcCBvcHRpb25zLCBvZmYgYnkgZGVmYXVsdC4gIFJld29yayB0Y3BfZW5xdWV1ZSgpIHRvCiAgICB0YWtlIG9wdGlvbiBmbGFncyByYXRoZXIgdGhhbiBzcGVjaWZpZWQgb3B0aW9uIGRhdGEKCiAgMjAwOS0wMi0xOCBTaW1vbiBHb2xkc2NobWlkdAogICogY2MuaDogQWRkZWQgcHJpbnRmIGZvcm1hdHRlciBmb3Igc2l6ZV90OiBTWlRfRgoKICAyMDA5LTAyLTE2IFNpbW9uIEdvbGRzY2htaWR0IChwYXRjaCBieSBSaXNoaSBLaGFuKQogICogaWNtcC5jLCBvcHQuaDogcGF0Y2ggIzY1Mzk6IChjb25maWd1cmFibGUpIHJlc3BvbnNlIHRvIGJyb2FkY2FzdC0gYW5kIG11bHRpY2FzdAogICAgcGluZ3MKCiAgMjAwOS0wMi0xMiBTaW1vbiBHb2xkc2NobWlkdAogICogaW5pdC5oOiBBZGRlZCBMV0lQX1ZFUlNJT04gdG8gZ2V0IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHN0YWNrCgogIDIwMDktMDItMTEgU2ltb24gR29sZHNjaG1pZHQgKHN1Z2dlc3RlZCBieSBHb3R0ZnJpZWQgU3BpdGFsZXIpCiAgKiBvcHQuaCwgbWVtcC5oLy5jOiBhZGRlZCBNRU1QX01FTV9NQUxMT0MgdG8gdXNlIG1lbV9tYWxsb2MvbWVtX2ZyZWUgaW5zdGVhZAogICAgb2YgdGhlIHBvb2wgYWxsb2NhdG9yIChjYW4gc2F2ZSBjb2RlIHNpemUgd2l0aCBNRU1fTElCQ19NQUxMT0MgaWYgbGliYy1tYWxsb2MKICAgIGlzIG90aGVyd2lzZSB1c2VkKQoKICAyMDA5LTAxLTI4IEpvbmF0aGFuIExhcm1vdXIgKHN1Z2dlc3RlZCBieSBCaWxsIEJhdWVyYmFjaCkKICAqIGlwdjQvaW5ldF9jaGtzdW0uYywgaXB2NC9sd2lwL2luZXRfY2hrc3VtLmg6IGluZXRfY2hrc3VtX3BzZXVkb19wYXJ0aWFsKCkKICBpcyBvbmx5IHVzZWQgYnkgVURQTElURSBhdCBwcmVzZW50LCBzbyBjb25kaXRpb25hbGlzZSBpdC4KCiAgMjAwOC0xMi0wMyBTaW1vbiBHb2xkc2NobWlkdCAoYmFzZSBvbiBwYXRjaCBmcm9tIEx1Y2EgQ2VyZXNvbGkpCiAgKiBhdXRvaXAuYzogY2hlY2tlZCBpbiAoc2xpZ2h0bHkgbW9kaWZpZWQpIHBhdGNoICM2NjgzOiBDdXN0b21pemFibGUgQVVUT0lQCiAgICAic2VlZCIgYWRkcmVzcy4gVGhpcyBzaG91bGQgcmVkdWNlIEFVVE9JUCBjb25mbGljdHMgaWYKICAgIExXSVBfQVVUT0lQX0NSRUFURV9TRUVEX0FERFIgaXMgb3ZlcnJpZGRlbi4KCiAgMjAwOC0xMC0wMiBKb25hdGhhbiBMYXJtb3VyIGFuZCBSaXNoaSBLaGFuCiAgKiBzb2NrZXRzLmMgKGx3aXBfYWNjZXB0KTogUmV0dXJuIEVXT1VMREJMT0NLIGlmIHdvdWxkIGJsb2NrIG9uIG5vbi1ibG9ja2luZwogICAgc29ja2V0LgoKICAyMDA4LTA2LTMwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uYywgb3B0LmgsIHN0YXRzLmg6IGZpeGVkIGJ1ZyAjMjE0MzM6IENhbGxpbmcgbWVtX2ZyZWUvcGJ1Zl9mcmVlIGZyb20KICAgIGludGVycnVwdCBjb250ZXh0IGlzbid0IHNhZmU6IExXSVBfQUxMT1dfTUVNX0ZSRUVfRlJPTV9PVEhFUl9DT05URVhUIGFsbG93cwogICAgbWVtX2ZyZWUgdG8gcnVuIGJldHdlZW4gbWVtX21hbGxvYyBpdGVyYXRpb25zLiBBZGRlZCBpbGxlZ2FsIGNvdW50ZXIgZm9yCiAgICBtZW0gc3RhdHMuCgogIDIwMDgtMDYtMjcgU2ltb24gR29sZHNjaG1pZHQKICAqIHN0YXRzLmgvLmMsIHNvbWUgb3RoZXIgZmlsZXM6IHBhdGNoICM2NDgzOiBzdGF0cyBtb2R1bGUgaW1wcm92ZW1lbnQ6CiAgICBBZGRlZCBkZWZpbmVzIHRvIGRpc3BsYXkgZWFjaCBtb2R1bGUncyBzdGF0aXN0aWMgaW5kaXZpZHVhbGx5LCBhZGRlZCBzdGF0cwogICAgZGVmaW5lcyBmb3IgTUVNLCBNRU1QIGFuZCBTWVMgbW9kdWxlcywgcmVtb3ZlZCAodW51c2VkKSByZXhtaXQgY291bnRlci4KCiAgMjAwOC0wNi0xNyBTaW1vbiBHb2xkc2NobWlkdAogICogZXJyLmg6IHBhdGNoICM2NDU5OiBNYWRlIGVycl90IG92ZXJyaWRhYmxlIHRvIHVzZSBhIG1vcmUgZWZmaWNpZW50IHR5cGUKICAgIChkZWZpbmUgTFdJUF9FUlJfVCBpbiBjYy5oKQoKICAyMDA4LTA2LTE3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzbGlwaWYuYzogcGF0Y2ggIzY0ODA6IEFkZGVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHNsaXBpZiBmb3Igc3ltbWV0cnkKICAgIHRvIGxvb3BpZgoKICAyMDA4LTA2LTE3IFNpbW9uIEdvbGRzY2htaWR0IChwYXRjaCBieSBMdWNhIENlcmVzb2xpKQogICogbmV0aWYuYywgbG9vcGlmLmMsIGlwLmMsIG5ldGlmLmgsIGxvb3BpZi5oLCBvcHQuaDogQ2hlY2tlZCBpbiBzbGlnaHRseQogICAgbW9kaWZpZWQgdmVyc2lvbiBvZiBwYXRjaCAjIDYzNzA6IE1vdmVkIGxvb3BpZiBjb2RlIHRvIG5ldGlmLmMgc28gdGhhdAogICAgbG9vcGJhY2sgdHJhZmZpYyBpcyBzdXBwb3J0ZWQgb24gYWxsIG5ldGlmcyAoYWxsIGxvY2FsIElQcykuCiAgICBBZGRlZCBvcHRpb24gdG8gbGltaXQgbG9vcGJhY2sgcGFja2V0cyBmb3IgZWFjaCBuZXRpZnMuCgoKICArKyBCdWdmaXhlczoKCiAgMjAwOS0wNy0yNyBLaWVyYW4gTWFuc2xleQogICogYXBpLmggYXBpX21zZy5oIG5ldGRiLmggc29ja2V0cy5oOiBhZGQgbWlzc2luZyAjaW5jbHVkZSBkaXJlY3RpdmVzCgogIDIwMDktMDctMDkgS2llcmFuIE1hbnNsZXkKICAqIGFwaV9tc2cuYywgc29ja2V0cy5jLCBhcGkuaDogQlVHMjMyNDAgdXNlIHNpZ25lZCBjb3VudGVycyBmb3IKICAgIHJlY3ZfYXZhaWwgYW5kIGRvbid0IGluY3JlbWVudCBjb3VudGVycyB1bnRpbCBtZXNzYWdlIHN1Y2Nlc3NmdWxseQogICAgc2VudCB0byBtYm94CgogIDIwMDktMDYtMjUgS2llcmFuIE1hbnNsZXkKICAqIGFwaV9tc2cuYyBhcGkuaDogQlVHMjY3MjI6IGluaXRpYWxpc2UgbmV0Y29ubiB3cml0ZSB2YXJpYWJsZXMgCiAgICBpbiBuZXRjb25uX2FsbG9jCgogIDIwMDktMDYtMjUgS2llcmFuIE1hbnNsZXkKICAqIHRjcC5oOiBCVUcyNjg3OTogc2V0IHJldCB2YWx1ZSBpbiBUQ1BfRVZFTlQgbWFjcm9zIHdoZW4gZnVuY3Rpb24gaXMgbm90IHNldAoKICAyMDA5LTA2LTI1IEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3AuYywgdGNwX2luLmMsIHRjcF9vdXQuYywgdGNwLmg6IEJVRzI2MzAxIGFuZCBCVUcyNjI2NzogY29ycmVjdAogICAgc2ltdWx0YW5lb3VzIGNsb3NlIGJlaGF2aW91ciwgYW5kIG1ha2Ugc25kX254dCBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgCiAgICBhcyBpbiB0aGUgUkZDcy4KCiAgMjAwOS0wNS0xMiBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmgsIGV0aGFycC5jLCBuZXRpZi5jOiBmaXhlZCBidWcgIzI2NTA3OiAiR3JhdHVpdG91cyBBUlAgZGVwZW5kcyBvbgogICAgYXJwX3RhYmxlIC8gdXNlcyBldGhhcnBfcXVlcnkiIGJ5IGFkZGluZyBldGhhcnBfZ3JhdHVpdG91cygpCgogIDIwMDktMDUtMTIgU2ltb24gR29sZHNjaG1pZHQKICAqIGlwLmgsIGlwLmMsIGlnbXAuYzogYnVnICMyNjQ4NzogQWRkZWQgaXBfb3V0cHV0X2lmX29wdCB0aGF0IGNhbiBhZGQgSVAgb3B0aW9ucwogICAgdG8gdGhlIElQIGhlYWRlciAodXNlZCBieSBpZ21wX2lwX291dHB1dF9pZikKCiAgMjAwOS0wNS0wNiBTaW1vbiBHb2xkc2NobWlkdAogICogaW5ldF9jaGtzdW0uYzogT24gbGl0dGxlIGVuZGlhbiBhcmNoaXRlY3R1cmVzLCB1c2UgTFdJUF9QTEFURk9STV9IVE9OUyAoaWYKICAgIGRlZmluZWQpIGZvciBTV0FQX0JZVEVTX0lOX1dPUkQgdG8gc3BlZWQgdXAgY2hlY2tzdW1taW5nLgoKICAyMDA5LTA1LTA1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmM6IGJ1ZyAjMjY0MDU6IFByZW1hdHVyZWx5IHJlbGVhc2VkIHNlbWFwaG9yZSBjYXVzZXMgbHdpcF9zZWxlY3QoKQogICAgdG8gY3Jhc2gKCiAgMjAwOS0wNS0wNCBTaW1vbiBHb2xkc2NobWlkdAogICogaW5pdC5jOiBzbm1wIHdhcyBub3QgaW5pdGlhbGl6ZWQgaW4gbHdpcF9pbml0KCkKCiAgMjAwOS0wNS0wNCBGculk6XJpYyBCZXJub24KICAqIGRoY3AuYywgbmV0Ymlvcy5jOiBDaGFuZ2VzIGlmIElQX1NPRl9CUk9BRENBU1QgaXMgZW5hYmxlZC4KCiAgMjAwOS0wNS0wMyBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmg6IGJ1ZyAjMjYzNDk6IE5hZ2xlIGFsZ29yaXRobSBkb2Vzbid0IHNlbmQgYWx0aG91Z2ggc2VnbWVudCBpcyBmdWxsCiAgICAoYW5kIHVuc2VudC0+bmV4dCA9PSBOVUxMKQoKICAyMDA5LTA1LTAyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BpcC5oLCB0Y3BpcC5jOiBmaXhlZCB0Y3BpcF91bnRpbWVvdXQgKGRvZXMgbm90IG5lZWQgdGhlIHRpbWUsIGJyb2tlbiBhZnRlcgogICAgMS4zLjAgaW4gQ1ZTIG9ubHkpIC0gZml4ZXMgY29tcGlsYXRpb24gb2YgcHBwX29lLmMKCiAgMjAwOS0wNS0wMiBTaW1vbiBHb2xkc2NobWlkdAogICogbXNnX2luLmM6IGZpeGVkIGJ1ZyAjMjU2MzY6IFNOTVBTRVQgdmFsdWUgaXMgaWdub3JlZCBmb3IgaW50ZWdlciBmaWVsZHMKCiAgMjAwOS0wNS0wMSBTaW1vbiBHb2xkc2NobWlkdAogICogcGFwLmM6IGJ1ZyAjMjE2ODA6IFBQUCB1cGFwX3JhdXRobmFrKCkgZHJvcHMgbGVnYWwgTkFLIHBhY2tldHMKCiAgMjAwOS0wNS0wMSBTaW1vbiBHb2xkc2NobWlkdAogICogcHBwLmM6IGJ1ZyAjMjQyMjg6IE1lbW9yeSBjb3JydXB0aW9uIHdpdGggUFBQIGFuZCBESENQCgogIDIwMDktMDQtMjkgRnLpZOlyaWMgQmVybm9uCiAgKiByYXcuYywgdWRwLmMsIGluaXQuYywgb3B0LmgsIGlwLmgsIHNvY2tldHMuaDogYnVnICMyNjMwOTogSW1wbGVtZW50IHRoZQogICAgU08oRilfQlJPQURDQVNUIGZpbHRlciBmb3IgYWxsIEFQSSBsYXllcnMuIEF2b2lkIHRoZSB1bmluZGVudGVkIHJlY2VwdGlvbgogICAgb2YgYnJvYWRjYXN0IHBhY2tldHMgZXZlbiB3aGVuIHRoaXMgb3B0aW9uIHdhc24ndCBzZXQuIFBvcnQgbWFpbnRhaW5lcnMKICAgIHdoaWNoIHdhbnQgdG8gZW5hYmxlIHRoaXMgZmlsdGVyIGhhdmUgdG8gc2V0IElQX1NPRl9CUk9BRENBU1Q9MSBpbiBvcHQuaC4KICAgIElmIHlvdSB3YW50IHRoaXMgb3B0aW9uIGFsc28gZmlsdGVyIGJyb2FkY2FzdCBvbiByZWN2IG9wZXJhdGlvbnMsIHlvdSBhbHNvCiAgICBoYXZlIHRvIHNldCBJUF9TT0ZfQlJPQURDQVNUX1JFQ1Y9MSBpbiBvcHQuaC4KCiAgMjAwOS0wNC0yOCBTaW1vbiBHb2xkc2NobWlkdCwgSmFrb2IgU3Rva2x1bmQgT2xlc2VuCiAgKiBkaGNwLmM6IHBhdGNoICM2NzIxLCBidWdzICMyNTU3NSwgIzI1NTc2OiBTb21lIHNtYWxsIGZpeGVzIHRvIERIQ1AgYW5kCiAgICBESENQL0FVVE9JUCBjb29wZXJhdGlvbgoKICAyMDA5LTA0LTI1IFNpbW9uIEdvbGRzY2htaWR0LCBPbGVnIFR5c2hldgogICogdGNwX291dC5jOiBidWcgIzI0MjEyOiBEZWFkbG9ja2VkIHRjcF9yZXRyYW5zbWl0IGR1ZSB0byBleGNlZWRlZCBwY2ItPmN3bmQKICAgIEZpeGVkIGJ5IHNvcnRpbmcgdGhlIHVuc2VudCBhbmQgdW5hY2tlZCBxdWV1ZXMgKHNlZ21lbnRzIGFyZSBpbnNlcnRlZCBhdCB0aGUKICAgIHJpZ2h0IHBsYWNlIGluIHRjcF9vdXRwdXQgYW5kIHRjcF9yZXhtaXQpLgoKICAyMDA5LTA0LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW1wLmMsIG1lbS5jLCBtZW1wLmgsIG1lbV9zdGQuaDogYnVnICMyNjIxMyAiUHJvYmxlbSB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uCiAgICB3aGVuIGRlYnVnZ2luZyI6IG1lbXBfc2l6ZXMgY29udGFpbmVkIHRoZSB3cm9uZyBzaXplcyAoaW5jbHVkaW5nIHNhbml0eQogICAgcmVnaW9ucyk7IG1lbXAgcG9vbHMgZm9yIE1FTV9VU0VfUE9PTFMgd2VyZSB0b28gc21hbGwKCiAgMjAwOS0wNC0yNCBTaW1vbiBHb2xkc2NobWlkdCwgRnLpZOlyaWMgQmVybm9uCiAgKiBpbmV0LmM6IHBhdGNoICM2NzY1OiBGaXggYSBzbWFsbCBwcm9ibGVtIHdpdGggdGhlIGxhc3QgY2hhbmdlcyAoaW5jb3JyZWN0CiAgICBiZWhhdmlvciwgd2l0aCB3aXRoIGlwIGFkZHJlc3Mgc3RyaW5nIG5vdCBlbmRlZCBieSBhICdcMCcsIGEgc3BhY2Ugb3IgYQogICAgZW5kIG9mIGxpbmUpCgogIDIwMDktMDQtMTkgU2ltb24gR29sZHNjaG1pZHQKICAqIHJhd2FwaS50eHQ6IEZpeGVkIGJ1ZyAjMjYwNjk6IENvcnJlY3RlZCBkb2N1bWVudGF0aW9uOiBpZiB0Y3BfY29ubmVjdCBmYWlscywKICAgIHBjYi0+ZXJyIGlzIGNhbGxlZCwgbm90IHBjYi0+Y29ubmVjdGVkICh3aXRoIGFuIGVycm9yIGNvZGUpLgoKICAyMDA5LTA0LTE5IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3Bfb3V0LmM6IEZpeGVkIGJ1ZyAjMjYyMzY6ICJUQ1Agb3B0aW9ucyAodGltZXN0YW1wKSBkb24ndCB3b3JrIHdpdGgKICAgIG5vLWNvcHktdGNwd3JpdGUiOiBkZWFsbG9jYXRlIG9wdGlvbiBkYXRhLCBvbmx5IGNvbmNhdCBzZWdtZW50cyB3aXRoIHNhbWUgZmxhZ3MKCiAgMjAwOS0wNC0xOSBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX291dC5jOiBGaXhlZCBidWcgIzI1MDk0OiAiWmVyby1sZW5ndGggcGJ1ZiIgKG9wdGlvbnMgYXJlIG5vdyBhbGxvY2F0ZWQKICAgIGluIHRoZSBoZWFkZXIgcGJ1Ziwgbm90IHRoZSBkYXRhIHBidWYpCgogIDIwMDktMDQtMTggU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9tc2cuYzogZml4ZWQgYnVnICMyNTY5NTogU2VnbWVudGF0aW9uIGZhdWx0IGluIGRvX3dyaXRlbW9yZSgpCgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogdHJpZWQgdG8gZml4IGJ1ZyAjMjM1NTk6IGx3aXBfcmVjdmZyb20gcHJvYmxlbSB3aXRoIHRjcAoKICAyMDA5LTA0LTE1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmM6IHRhc2sgIzkxOTI6IG1lbV9mcmVlIG9mIGRoY3AtPm9wdGlvbnNfaW4gYW5kIGRoY3AtPm1zZ19pbgoKICAyMDA5LTA0LTE1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcC5jLCBpcDYuYywgdGNwX291dC5jLCBpcC5oOiBwYXRjaCAjNjgwODogQWRkIGEgdXRpbGl0eSBmdW5jdGlvbgogICAgaXBfaGludGVkX291dHB1dCgpIChmb3Igc21hbGxlciBjb2RlIG1haW5seSkKCiAgMjAwOS0wNC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogaW5ldC5jOiBwYXRjaCAjNjc2NTogU3VwcG9ydGluZyBuZXcgbGluZSBjaGFyYWN0ZXJzIGluIGluZXRfYXRvbigpCgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYzogcGF0Y2ggIzY3NjQ6IERIQ1AgcmViaW5kIGFuZCByZW5ldyBkaWQgbm90IHNlbmQgaG9zdG5hbSBvcHRpb247CiAgICBDb252ZXJ0ZWQgY29uc3RhbnQgT1BUSU9OX01BWF9NU0dfU0laRSB0byBuZXRpZi0+bXR1LCBjaGVjayBpZiBuZXRpZi0+bXR1CiAgICBpcyBiaWcgZW5vdWdoIGluIGRoY3Bfc3RhcnQKCiAgMjAwOS0wNC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0YnVmLmM6IGJ1ZyAjMjYwMjc6IG5ldGJ1Zl9jaGFpbiByZXN1bHRlZCBpbiBwYnVmIG1lbW9yeSBsZWFrCgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYywgcHBwLmM6IGJ1ZyAjMjU3NjM6IGNvcnJlY3RlZCA0IG9jY3VycmVuY2VzIG9mIFNNRU1DUFkgdG8gTUVNQ1BZCgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogYnVnICMyNjEyMTogc2V0X2Vycm5vIGNhbiBiZSBvdmVycmlkZGVuCgogIDIwMDktMDQtMDkgS2llcmFuIE1hbnNsZXkgKHBhdGNoIGZyb20gTHVjYSBDZXJlc29saSA8bHVjYWNlcmVzb2xpPikKICAqIGluaXQuYywgb3B0Lmg6IFBhdGNoIzY3NzQgVENQX1FVRVVFX09PU0VRIGJyZWFrcyBjb21waWxhdGlvbiB3aGVuCiAgICBMV0lQX1RDUD09MAoKICAyMDA5LTA0LTA5IEtpZXJhbiBNYW5zbGV5IChwYXRjaCBmcm9tIFJveSBMZWUgPHJveWxlZTE3PikKICAqIHRjcC5oOiBQYXRjaCM2ODAyIEFkZCBkby13aGlsZS1jbGF1c2VzIHRvIHRob3NlIGZ1bmN0aW9uIGxpa2UKICAgIG1hY3JvcyBpbiB0Y3AuaAoKICAyMDA5LTAzLTMxIEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3AuYywgdGNwX2luLmMsIHRjcF9vdXQuYywgdGNwLmgsIG9wdC5oOiBSZXdvcmsgdGhlIHdheSB3aW5kb3cKICAgIHVwZGF0ZXMgYXJlIGNhbGN1bGF0ZWQgYW5kIHNlbnQgKEJVRzIwNTE1KQoKICAqIHRjcF9pbi5jOiBjb3BlIHdpdGggU1lOIHBhY2tldHMgcmVjZWl2ZWQgZHVyaW5nIGVzdGFibGlzaGVkIHN0YXRlcywKICAgIGFuZCByZXRyYW5zbWlzc2lvbiBvZiBpbml0aWFsIFNZTi4KCiAgKiB0Y3Bfb3V0LmM6IHNldCBwdXNoIGJpdCBjb3JyZWN0bHkgd2hlbiB0Y3Agc2VnbWVudHMgYXJlIG1lcmdlZAoKICAyMDA5LTAzLTI3IEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3Bfb3V0LmMgc2V0IHdpbmRvdyBjb3JyZWN0bHkgb24gcHJvYmVzIChjb3JyZWN0aW5nIGNoYW5nZSBtYWRlCiAgICB5ZXN0ZXJkYXkpCgogIDIwMDktMDMtMjYgS2llcmFuIE1hbnNsZXkKICAqIHRjcC5jLCB0Y3BfaW4uYywgdGNwLmg6IGFkZCB0Y3BfYWJhbmRvbigpIHRvIGNvcGUgd2l0aCBkcm9wcGluZwogICAgY29ubmVjdGlvbnMgd2hlcmUgbm8gcmVzZXQgcmVxdWlyZWQgKGJ1ZyAjMjU2MjIpCgogICogdGNwX291dC5jOiBzZXQgVENQX0FDSyBmbGFnIG9uIGtlZXBhbGl2ZSBhbmQgemVybyB3aW5kb3cgcHJvYmVzIAogICAgKGJ1ZyAjMjA3NzkpCgogIDIwMDktMDItMTggU2ltb24gR29sZHNjaG1pZHQgKEpvbmF0aGFuIExhcm1vdXIgYW5kIEJpbGwgQXVlcmJhY2gpCiAgKiBpcF9mcmFnLmM6IHBhdGNoICM2NTI4OiB0aGUgYnVmZmVyIHVzZWQgZm9yIElQX0ZSQUdfVVNFU19TVEFUSUNfQlVGIGNvdWxkIGJlCiAgICB0b28gc21hbGwgZGVwZW5kaW5nIG9uIE1FTV9BTElHTk1FTlQKCiAgMjAwOS0wMi0xNiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5oLy5jLCBhcGlfKi5oLy5jOiBmaXhlZCBhcmd1bWVudHMgb2Ygc29ja2V0IGZ1bmN0aW9ucyB0byBtYXRjaCB0aGUgc3RhbmRhcmQ7CiAgICBjb252ZXJ0ZWQgc2l6ZSBhcmd1bWVudCBvZiBuZXRjb25uX3dyaXRlIHRvICdzaXplX3QnCgogIDIwMDktMDItMTYgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLCB0Y3AuYzogZml4ZWQgYnVnICMyNDQ0MDogVENQIGNvbm5lY3Rpb24gY2xvc2UgcHJvYmxlbSBvbiA2NC1iaXQgaG9zdAogICAgYnkgbW92aW5nIGFjY2VwdCBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyIHRvIFRDUF9QQ0JfQ09NTU9OCgogIDIwMDktMDItMTIgU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYzogZml4ZWQgYnVnICMyNTM0NSAoREhDUERFQ0xJTkUgaXMgc2VudCB3aXRoICJNYXhpbXVtIG1lc3NhZ2Ugc2l6ZSIKICAgIG9wdGlvbikKCiAgMjAwOS0wMi0xMSBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBmaXhlZCBidWcgIzI0NDgwIChyZWxlYXNpbmcgb2xkIHVkcF9wZGIgYW5kIHBidWYgaW4gZGhjcF9zdGFydCkKCiAgMjAwOS0wMi0xMSBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIGFwaV9tc2cuYzogYWRkZWQgY29uZmlndXJhYmxlIGRlZmF1bHQgdmFsdWQgZm9yIG5ldGNvbm4tPnJlY3ZfYnVmc2l6ZToKICAgIFJFQ1ZfQlVGU0laRV9ERUZBVUxUIChmaXhlcyBidWcgIzIzNzI2OiBwYnVmIHBvb2wgZXhoYXVzdGlvbiBvbiBzbG93IHJlY3YoKSkKCiAgMjAwOS0wMi0xMCBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmM6IGZpeGVkIGJ1ZyAjMjU0Njc6IExpc3RlbiBiYWNrbG9nIGlzIG5vdCByZXNldCBvbiB0aW1lb3V0IGluIFNZTl9SQ1ZEOgogICAgQWNjZXB0c19wZW5kaW5nIGlzIGRlY3JlYXNlIG9uIGEgY29ycmVzcG9uZGluZyBsaXN0ZW4gcGNiIHdoZW4gYSBjb25uZWN0aW9uCiAgICBpbiBzdGF0ZSBTWU5fUkNWRCBpcyBjbG9zZS4KCiAgMjAwOS0wMS0yOCBKb25hdGhhbiBMYXJtb3VyCiAgKiBwYnVmLmM6IHJlY2xhaW0gcGJ1ZnMgZnJvbSBUQ1Agb3V0LW9mLXNlcXVlbmNlIHNlZ21lbnRzIGlmIHdlIHJ1bgogICAgb3V0IG9mIHBvb2wgcGJ1ZnMuCgogIDIwMDgtMTItMTkgU2ltb24gR29sZHNjaG1pZHQKICAqIG1hbnkgZmlsZXM6IHBhdGNoICM2Njk5OiBmaXhlZCBzb21lIHdhcm5pbmdzIG9uIHBsYXRmb3JtIHdoZXJlIHNpemVvZihpbnQpID09IDIgCgogIDIwMDgtMTItMTAgVGFtYXMgU29tb2d5aSwgRnLpZOlyaWMgQmVybm9uCiAgKiBzb2NrZXRzLmM6IGZpeGVkIGJ1ZyAjMjUwNTE6IGx3aXBfcmVjdmZyb20gcHJvYmxlbSB3aXRoIHVkcDogZnJvbWFkZHIgYW5kCiAgICBwb3J0IHVzZXMgZGVsZXRlZCBuZXRidWYuCgogIDIwMDgtMTAtMTggU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9pbi5jOiBmaXhlZCBidWcgIyMyNDU5NjogVnVsbmVyYWJpbGl0eSBvbiBmYXVsdHkgVENQIG9wdGlvbnMgbGVuZ3RoCiAgICBpbiB0Y3BfcGFyc2VvcHQKCiAgMjAwOC0xMC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogaXBfZnJhZy5jOiBmaXhlZCBidWcgIzI0NTE3OiBJUCByZWFzc2VtYmx5IGNyYXNoZXMgb24gdW5hbGlnbmVkIElQIGhlYWRlcnMKICAgIGJ5IHBhY2tpbmcgdGhlIHN0cnVjdCBpcF9yZWFzc19oZWxwZXIuCgogIDIwMDgtMTAtMDMgRGF2aWQgV29vZGhvdXNlLCBKb25hdGhhbiBMYXJtb3VyCiAgKiBldGhhcnAuYyAoZXRoYXJwX2FycF9pbnB1dCk6IEZpeCB0eXBlIGFsaWFzaW5nIHByb2JsZW0gY29weWluZyBpcCBhZGRyZXNzLgoKICAyMDA4LTEwLTAyIEpvbmF0aGFuIExhcm1vdXIKICAqIGRucy5jOiBIYXJkLWNvZGUgc3RydWN0dXJlIHNpemVzLCB0byBhdm9pZCBpc3N1ZXMgb24gc29tZSBjb21waWxlcnMgd2hlcmUKICAgIHBhZGRpbmcgaXMgaW5jbHVkZWQuCgogIDIwMDgtMDktMzAgSm9uYXRoYW4gTGFybW91cgogICogc29ja2V0cy5jIChsd2lwX2FjY2VwdCk6IGNoZWNrIGFkZHIgaXNuJ3QgTlVMTC4gSWYgaXQncyB2YWxpZCwgZG8gYW4KICAgIGFzc2VydGlvbiBjaGVjayB0aGF0IGFkZHJsZW4gaXNuJ3QgTlVMTC4KCiAgMjAwOC0wOS0zMCBKb25hdGhhbiBMYXJtb3VyCiAgKiB0Y3AuYzogRml4IGJ1ZyAjMjQyMjcsIHdyb25nIGVycm9yIG1lc3NhZ2UgaW4gdGNwX2JpbmQuCgogIDIwMDgtMDgtMjYgU2ltb24gR29sZHNjaG1pZHQKICAqIGluZXQuaCwgaXBfYWRkci5oOiBmaXhlZCBidWcgIzI0MTMyOiBDcm9zcy1kZXBlbmRlbmN5IGJldHdlZW4gaXBfYWRkci5oIGFuZAogICAgaW5ldC5oIC0+IG1vdmVkIGRlY2xhcmF0aW9uIG9mIHN0cnVjdCBpbl9hZGRyIGZyb20gaXBfYWRkci5oIHRvIGluZXQuaAoKICAyMDA4LTA4LTE0IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbXNnLmM6IGZpeGVkIGJ1ZyAjMjM4NDc6IGRvX2Nsb3NlX2ludGVybmFsIHJlZmVyZW5jZXMgZnJlZWQgbWVtb3J5ICh3aGVuCiAgICB0Y3BfY2xvc2UgcmV0dXJucyAhPSBFUlJfT0spCgogIDIwMDgtMDctMDggRnLpZOlyaWMgQmVybm9uCiAgKiBzdGF0cy5oOiBGaXggc29tZSBidWlsZCBidWdzIGludHJvZHVjZWQgd2l0aCBwYXRjaCAjNjQ4MyAobWlzc2luZyBzb21lIHBhcmFtZXRlcnMKICAgIGluIG1hY3JvcywgbWFpbmx5IGlmIE1FTV9TVEFUUz0wIGFuZCBNRU1QX1NUQVRTPTApLgoKICAyMDA4LTA2LTI0IEpvbmF0aGFuIExhcm1vdXIKICAqIHRjcF9pbi5jOiBGaXggZm9yIGJ1ZyAjMjM2OTMgYXMgc3VnZ2VzdGVkIGJ5IEFydCBSLiBFbnN1cmUgY3NlZyBpcyB1bnVzZWQKICAgIGlmIHRjcF9zZWdfY29weSBmYWlscy4KCiAgMjAwOC0wNi0xNyBTaW1vbiBHb2xkc2NobWlkdAogICogaW5ldF9jaGtzdW0uYzogQ2hlY2tlZCBpbiBzb21lIGlkZWFzIG9mIHBhdGNoICM2NDYwIChsb29wIG9wdGltaXphdGlvbnMpCiAgICBhbmQgY3JlYXRlZCBkZWZpbmVzIGZvciBzd2FwcGluZyBieXRlcyBhbmQgZm9sZGluZyB1MzIgdG8gdTE2LgoKICAyMDA4LTA1LTMwIEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3BfaW4uYyBSZW1vdmUgcmVkdW5kYW50ICJpZiIgc3RhdGVtZW50LCBhbmQgdXNlIHJlYWwgcmN2X3duZAogICAgcmF0aGVyIHRoYW4gcmN2X2Fubl93bmQgd2hlbiBkZWNpZGluZyBpZiBwYWNrZXRzIGFyZSBpbi13aW5kb3cuCiAgICBDb250cmlidXRlZCBieSA8YXJhc211c3NlbkBjb25zdWx0YW50LmRhdGFzeXMuc3dyaS5lZHU+CgogIDIwMDgtMDUtMzAgS2llcmFuIE1hbnNsZXkKICAqIG1lbS5oOiBGaXggQlVHIzIzMjU0LiAgQ2hhbmdlIG1hY3JvIGRlZmluaXRpb24gb2YgbWVtXyogdG8gYWxsb3cKICAgIHBhc3NpbmcgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2hlbiBNRU1fTElCQ19NQUxMT0MgaXMgZGVmaW5lZC4KCiAgMjAwOC0wNS0wOSBKb25hdGhhbiBMYXJtb3VyCiAgKiBlcnIuaCwgZXJyLmMsIHNvY2tldHMuYzogRml4IGJ1ZyAjMjMxMTk6IFJlb3JkZXIgdGltZW91dCBlcnJvciBjb2RlIHRvCiAgICBzdG9wIGl0IGJlaW5nIHRyZWF0ZWQgYXMgYSBmYXRhbCBlcnJvci4KCiAgMjAwOC0wNC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBmaXhlZCBidWcgIzIyODA0OiBkaGNwX3N0b3AgZG9lc24ndCBjbGVhciBORVRJRl9GTEFHX0RIQ1AKICAgIChmbGFnIG5vdyBjbGVhcmVkKQoKICAyMDA4LTAzLTI3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uYywgdGNwaXAuYywgdGNwaXAuaCwgb3B0Lmg6IGZpeGVkIGJ1ZyAjMjE0MzMgKENhbGxpbmcgbWVtX2ZyZWUvcGJ1Zl9mcmVlCiAgICBmcm9tIGludGVycnVwdCBjb250ZXh0IGlzbid0IHNhZmUpOiBzZXQgTFdJUF9VU0VfSEVBUF9GUk9NX0lOVEVSUlVQVCB0byAxCiAgICBpbiBsd2lwb3B0cy5oIG9yIHVzZSBwYnVmX2ZyZWVfY2FsbGJhY2socCkvbWVtX2ZyZWVfY2FsbGJhY2sobSkgdG8gZnJlZSBwYnVmcwogICAgb3IgaGVhcCBtZW1vcnkgZnJvbSBpbnRlcnJ1cHQgY29udGV4dAoKICAyMDA4LTAzLTI2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYywgdGNwLmM6IGZpeGVkIGJ1ZyAjMjIyNDk6IGRpdmlzaW9uIGJ5IHplcm8gY291bGQgb2NjdXIgaWYgYSByZW1vdGUKICAgIGhvc3Qgc2VudCBhIHplcm8gbXNzIGFzIFRDUCBvcHRpb24uCgoKKFNUQUJMRS0xLjMuMCkKCiAgKysgTmV3IGZlYXR1cmVzOgoKICAyMDA4LTAzLTEwIEpvbmF0aGFuIExhcm1vdXIKICAqIGluZXRfY2hrc3VtLmM6IEFsbG93IGNob2ljZSBvZiBvbmUgb2YgdGhlIHNhbXBsZSBhbGdvcml0aG1zIHRvIGJlCiAgICBtYWRlIGZyb20gbHdpcG9wdHMuaC4gRml4IGNvbW1lbnQgb24gaG93IHRvIG92ZXJyaWRlIExXSVBfQ0hLU1VNLgoKICAyMDA4LTAxLTIyIEZy6WTpcmljIEJlcm5vbgogICogdGNwLmMsIHRjcF9pbi5jLCB0Y3AuaCwgb3B0Lmg6IFJlbmFtZSBMV0lQX0NBTENVTEFURV9FRkZfU0VORF9NU1MgaW4gCiAgICBUQ1BfQ0FMQ1VMQVRFX0VGRl9TRU5EX01TUyB0byBoYXZlIGNvaGVyZW50IFRDUCBvcHRpb25zIG5hbWVzLgoKICAyMDA4LTAxLTE0IEZy6WTpcmljIEJlcm5vbgogICogcmF3YXBpLnR4dCwgYXBpX21zZy5jLCB0Y3AuYywgdGNwX2luLmMsIHRjcC5oOiBjaGFuZ2VzIGZvciB0YXNrICM3Njc1ICJFbmFibGUKICAgIHRvIHJlZnVzZSBkYXRhIG9uIGEgVENQX0VWRU5UX1JFQ1YgY2FsbCIuIEltcG9ydGFudCwgYmVoYXZpb3IgY2hhbmdlcyBmb3IgdGhlCiAgICB0Y3BfcmVjdiBjYWxsYmFjayAoc2VlIHJhd2FwaS50eHQpLgoKICAyMDA4LTAxLTE0IEZy6WTpcmljIEJlcm5vbiwgTWFyYyBDaGFsYW5kCiAgKiBpcC5jOiBJbnRlZ3JhdGUgcGF0Y2ggIzYzNjkiIGlwX2lucHV0IDogY2hlY2tpbmcgYmVmb3JlIHJlYWxsb2MiLgogIAogIDIwMDgtMDEtMTIgRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3BpcC5oLCB0Y3BpcC5jLCBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYzogcmVwbGFjZSB0aGUgZmllbGQKICAgIG5ldGNvbm46OnNlbSBwZXIgbmV0Y29ubjo6b3BfY29tcGxldGVkIGxpa2Ugc3VnZ2VzdGVkIGZvciB0aGUgdGFzayAjNzQ5MAogICAgIkFkZCByZXR1cm4gdmFsdWUgdG8gc3lzX21ib3hfcG9zdCIuCgogIDIwMDgtMDEtMTIgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbXNnLmMsIG9wdC5oOiByZXBsYWNlIERFRkFVTFRfUkVDVk1CT1hfU0laRSBwZXIgREVGQVVMVF9UQ1BfUkVDVk1CT1hfU0laRSwKICAgIERFRkFVTFRfVURQX1JFQ1ZNQk9YX1NJWkUgYW5kIERFRkFVTFRfUkFXX1JFQ1ZNQk9YX1NJWkUgKHRvIG9wdGltaXplIHF1ZXVlcwogICAgc2l6ZXMpLCBsaWtlIHN1Z2dlc3RlZCBmb3IgdGhlIHRhc2sgIzc0OTAgIkFkZCByZXR1cm4gdmFsdWUgdG8gc3lzX21ib3hfcG9zdCIuCgogIDIwMDgtMDEtMTAgRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3BpcC5oLCB0Y3BpcC5jOiBhZGQgdGNwaXBfY2FsbGJhY2tfd2l0aF9ibG9jayBmdW5jdGlvbiBmb3IgdGhlIHRhc2sgIzc0OTAKICAgICJBZGQgcmV0dXJuIHZhbHVlIHRvIHN5c19tYm94X3Bvc3QiLiB0Y3BpcF9jYWxsYmFjayBpcyBhbHdheXMgZGVmaW5lZCBhcwogICAgImJsb2NraW5nIiAoImJsb2NrIiBwYXJhbWV0ZXIgPSAxKS4KCiAgMjAwOC0wMS0xMCBGculk6XJpYyBCZXJub24KICAqIHRjcGlwLmgsIHRjcGlwLmMsIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYywgc29ja2V0cy5jOiByZXBsYWNlIHRoZSBmaWVsZAogICAgbmV0Y29ubjo6bWJveCAoc3lzX21ib3hfdCkgcGVyIG5ldGNvbm46OnNlbSAoc3lzX3NlbV90KSBmb3IgdGhlIHRhc2sgIzc0OTAKICAgICJBZGQgcmV0dXJuIHZhbHVlIHRvIHN5c19tYm94X3Bvc3QiLgoKICAyMDA4LTAxLTA1IEZy6WTpcmljIEJlcm5vbgogICogc3lzX2FyY2gudHh0LCBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmgsIGFwaV9tc2cuYywgdGNwaXAuYywgc3lzLmgsIG9wdC5oOgogICAgSW50cm9kdWNlIGNoYW5nZXMgZm9yIHRhc2sgIzc0OTAgIkFkZCByZXR1cm4gdmFsdWUgdG8gc3lzX21ib3hfcG9zdCIgd2l0aCBzb21lCiAgICBtb2RpZmljYXRpb25zIGluIHRoZSBzeXNfbWJveCBhcGk6IHN5c19tYm94X25ldyB0YWtlIGEgInNpemUiIHBhcmFtZXRlcnMgd2hpY2gKICAgIGluZGljYXRlIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgcXVlcnkgYnkgdGhlIG1haWxib3guIFRoZXJlIGlzIHRocmVlIGRlZmluZXMKICAgIGluIG9wdC5oIHRvIGluZGljYXRlIHNpemVzIGZvciB0Y3BpcDo6bWJveCwgbmV0Y29ubjo6cmVjdm1ib3gsIGFuZCBmb3IgdGhlIAogICAgbmV0Y29ubjo6YWNjZXB0bWJveC4gUG9ydCBtYWludGFpbmVycywgeW91IGNhbiBkZWNpZGUgdG8ganVzdCBhZGQgdGhpcyBuZXcgCiAgICBwYXJhbWV0ZXIgaW4geW91ciBpbXBsZW1lbnRhdGlvbiwgYnV0IHRvIGlnbm9yZSBpdCB0byBrZWVwIHRoZSBwcmV2aW91cyBiZWhhdmlvci4KICAgIFRoZSBuZXcgc3lzX21ib3hfdHJ5cG9zdCBmdW5jdGlvbiByZXR1cm4gYSB2YWx1ZSB0byBrbm93IGlmIHRoZSBtYWlsYm94IGlzCiAgICBmdWxsIG9yIGlmIHRoZSBtZXNzYWdlIGlzIHBvc3RlZC4gVGFrZSBhIGxvb2sgdG8gc3lzX2FyY2gudHh0IGZvciBtb3JlIGRldGFpbHMuCiAgICBUaGlzIG5ldyBmdW5jdGlvbiBpcyB1c2VkIGluIHRjcGlwX2lucHV0IChzbywgY2FuIGJlIGNhbGxlZCBpbiBhbiBpbnRlcnJ1cHQKICAgIGNvbnRleHQgc2luY2UgdGhlIGZ1bmN0aW9uIGlzIG5vdCBibG9ja2luZyksIGFuZCBpbiByZWN2X3VkcCBhbmQgcmVjdl9yYXcuCgogIDIwMDgtMDEtMDQgRnLpZOlyaWMgQmVybm9uLCBTaW1vbiBHb2xkc2NobWlkdCwgSm9uYXRoYW4gTGFybW91cgogICogcmF3YXBpLnR4dCwgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmMsIHNvY2tldHMuYywgdGNwLmgsIHRjcC5jLAogICAgdGNwX2luLmMsIGluaXQuYywgb3B0Lmg6IHJlbmFtZSBiYWNrbG9nIG9wdGlvbnMgd2l0aCBUQ1BfIHByZWZpeCwgbGltaXQgdGhlCiAgICAiYmFja2xvZyIgcGFyYW1ldGVyIGluIGFuIHU4X3QsIDAgaXMgaW50ZXJwcmV0ZWQgYXMgInNtYWxsZXN0IHF1ZXVlIiwgYWRkCiAgICBkb2N1bWVudGF0aW9uIGluIHRoZSByYXdhcGkudHh0IGZpbGUuCgogIDIwMDctMTItMzEgS2llcmFuIE1hbnNsZXkgKGJhc2VkIG9uIHBhdGNoIGZyb20gUGVyLUhlbnJpayBMdW5kYm9sbSkKICAqIHRjcC5jLCB0Y3BfaW4uYywgdGNwX291dC5jLCB0Y3AuaDogQWRkIFRDUCBwZXJzaXN0IHRpbWVyCgogIDIwMDctMTItMzEgRnLpZOlyaWMgQmVybm9uLCBMdWNhIENlcmVzb2xpCiAgKiBhdXRvaXAuYywgZXRoYXJwLmM6IGlwX2FkZHIuaDogSW50ZWdyYXRlIHBhdGNoICM2MzQ4OiAiQnJvYWRjYXN0IEFSUCBwYWNrZXRzCiAgICBpbiBhdXRvaXAiLiBUaGUgY2hhbmdlIGluIGV0aGFycF9yYXcgY291bGQgYmUgcmVtb3ZlZCwgc2luY2UgYWxsIGNhbGxzIHRvCiAgICBldGhhcnBfcmF3IHVzZSBldGhicm9hZGNhc3QgZm9yIHRoZSAiZXRoZHN0X2FkZHIiIHBhcmFtZXRlci4gQnV0IGl0IGNvdWxkIGJlCiAgICB3cm9uZyBpbiB0aGUgZnV0dXJlLgoKICAyMDA3LTEyLTMwIEZy6WTpcmljIEJlcm5vbiwgVG9tIEV2YW5zCiAgKiBpcC5jOiBGaXggYnVnICMyMTg0NiAiTHdJUCBkb2Vzbid0IGFwcGVhciB0byBwZXJmb3JtIGFueSBJUCBTb3VyY2UgQWRkcmVzcwogICAgRmlsdGVyaW5nIiByZXBvcnRlZCBieSBUb20gRXZhbnMuCgogIDIwMDctMTItMjEgRnLpZOlyaWMgQmVybm9uLCBTaW1vbiBHb2xkc2NobWlkdCwgSm9uYXRoYW4gTGFybW91cgogICogdGNwLmgsIG9wdC5oLCBhcGkuaCwgYXBpX21zZy5oLCB0Y3AuYywgdGNwX2luLmMsIGFwaV9saWIuYywgYXBpX21zZy5jLAogICAgc29ja2V0cy5jLCBpbml0LmM6IHRhc2sgIzcyNTI6IEltcGxlbWVudCBUQ1AgbGlzdGVuIGJhY2tsb2c6IFdhcm5pbmc6IHJhdyBBUEkKICAgIGFwcGxpY2F0aW9ucyBoYXZlIHRvIGNhbGwgJ3RjcF9hY2NlcHRlZChwY2IpJyBpbiB0aGVpciBhY2NlcHQgY2FsbGJhY2sgdG8KICAgIGtlZXAgYWNjZXB0aW5nIG5ldyBjb25uZWN0aW9ucy4KCiAgMjAwNy0xMi0xMyBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuYywgZXJyLmgsIGVyci5jLCBzb2NrZXRzLmMsIGRucy5jLCBkbnMuaDogcmVwbGFjZSAiZW51bSBkbnNfcmVzdWx0IgogICAgYnkgZXJyX3QgdHlwZS4gQWRkIGEgbmV3IGVycl90IGNvZGUgIkVSUl9JTlBST0dSRVNTIi4KCiAgMjAwNy0xMi0xMiBGculk6XJpYyBCZXJub24KICAqIGRucy5oLCBkbnMuYywgb3B0Lmg6IG1vdmUgRE5TIG9wdGlvbnMgdG8gdGhlICJyaWdodCIgcGxhY2UuIE1vc3QgdmlzaWJsZXMKICAgIGFyZSB0aGUgb25lIHdoaWNoIGhhdmUgcmFtIHVzYWdlLgoKICAyMDA3LTEyLTA1IEZy6WTpcmljIEJlcm5vbgogICogbmV0ZGIuYzogYWRkIGEgTFdJUF9ETlNfQVBJX0hPU1RFTlRfU1RPUkFHRSBvcHRpb24gdG8gZGVjaWRlIHRvIHVzZSBhIHN0YXRpYwogICAgc2V0IG9mIHZhcmlhYmxlcyAoPTApIG9yIGEgbG9jYWwgb25lICg9MSkuIEluIHRoaXMgbGFzdCBjYXNlLCB5b3VyIHBvcnQgc2hvdWxkCiAgICBwcm92aWRlIGEgZnVuY3Rpb24gInN0cnVjdCBob3N0ZW50KiBzeXNfdGhyZWFkX2hvc3RlbnQoIHN0cnVjdCBob3N0ZW50KiBoKSIKICAgIHdoaWNoIGhhdmUgdG8gZG8gYSBjb3B5IG9mICJoIiBhbmQgcmV0dXJuIGEgcG9pbnRlciBvbnQgdGhlICJwZXItdGhyZWFkIiBjb3B5LgoKICAyMDA3LTEyLTAzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcC5jOiBpcF9pbnB1dDogY2hlY2sgaWYgYSBwYWNrZXQgaXMgZm9yIGlucCBmaXJzdCBiZWZvcmUgY2hlY2tpbmcgYWxsIG90aGVyCiAgICBuZXRpZnMgb24gbmV0aWZfbGlzdCAoc3BlZWRzIHVwIHBhY2tldCByZWNlaXZpbmcgaW4gbW9zdCBjYXNlcykKCiAgMjAwNy0xMS0zMCBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmMsIHJhdy5jOiB0YXNrICM3NDk3OiBTb3J0IGxpc3RzIChwY2IsIG5ldGlmLCAuLi4pIGZvciBmYXN0ZXIgYWNjZXNzCiAgICBVRFA6IG1vdmUgYSAoY29ubmVjdGVkKSBwY2Igc2VsZWN0ZWQgZm9yIGlucHV0IHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdCBvZgogICAgcGNicyBzbyB0aGF0IGl0IGlzIGZvdW5kIGZhc3RlciBuZXh0IHRpbWUuIFNhbWUgZm9yIFJBVyBwY2JzIHRoYXQgaGF2ZSBlYXRlbgogICAgYSBwYWNrZXQuCgogIDIwMDctMTEtMjggU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5jLCBzdGF0cy5jLCBzdGF0cy5oLCBvcHQuaDogSW50cm9kdWNlZCBFVEhBUlBfU1RBVFMKCiAgMjAwNy0xMS0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBkaGNwX3VuZm9sZF9yZXBseSgpIHVzZXMgcGJ1Zl9jb3B5X3BhcnRpYWwgaW5zdGVhZCBvZiBpdHMgb3duIGNvcHkKICAgIGFsZ29yaXRobS4KCiAgMjAwNy0xMS0yNCBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0ZGIuaCwgbmV0ZGIuYywgc29ja2V0cy5oLy5jOiBNb3ZlZCBsd2lwX2dldGhvc3RieW5hbWUgZnJvbSBzb2NrZXRzLmMKICAgIHRvIHRoZSBuZXcgZmlsZSBuZXRkYi5jOyBpbmNsdWRlZCBsd2lwX2dldGFkZHJpbmZvLgoKICAyMDA3LTExLTIxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCwgb3B0LmgsIHRjcC5jLCB0Y3BfaW4uYzogaW1wbGVtZW50ZWQgY2FsY3VsYXRpbmcgdGhlIGVmZmVjdGl2ZSBzZW5kLW1zcwogICAgYmFzZWQgb24gdGhlIE1UVSBvZiB0aGUgbmV0aWYgdXNlZCB0byBzZW5kLiBFbmFibGVkIGJ5IGRlZmF1bHQuIERpc2FibGUgYnkKICAgIHNldHRpbmcgTFdJUF9DQUxDVUxBVEVfRUZGX1NFTkRfTVNTIHRvIDAuIFRoaXMgZml4ZXMgYnVnICMyMTQ5Mi4KCiAgMjAwNy0xMS0xOSBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuYywgZG5zLmgsIGRucy5jOiBJbXBsZW1lbnQgRE5TX0RPRVNfTkFNRV9DSEVDSyBvcHRpb24gKGNoZWNrIGlmIG5hbWUKICAgIHJlY2VpdmVkIG1hdGNoIHRoZSBuYW1lIHF1ZXJ5KSwgaW1wbGVtZW50IEROU19VU0VTX1NUQVRJQ19CVUYgKHRoZSBwbGFjZSB3aGVyZQogICAgY29weSBkbnMgcGF5bG9hZCB0byBwYXJzZSB0aGUgcmVzcG9uc2UpLCByZXR1cm4gYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm8gcGxhY2UKICAgIGZvciBhIG5ldyBxdWVyeSwgYW5kIGZpeCBzb21lIG1pbm9yIHByb2JsZW1zLgoKICAyMDA3LTExLTE2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXcgZmlsZXM6IGlwdjQvaW5ldC5jLCBpcHY0L2luZXRfY2hrc3VtLmMsIGlwdjYvaW5ldDYuYwogICAgcmVtb3ZlZCBmaWxlczogY29yZS9pbmV0LmMsIGNvcmUvaW5ldDYuYwogICAgTW92ZWQgaW5ldCBmaWxlcyBpbnRvIGlwdjQvaXB2NiBkaXJlY3Rvcnk7IHNwbGl0dGVkIGluZXQuYy9pbmV0LmggaW50bwogICAgaW5ldCBhbmQgY2hrc3VtIHBhcnQ7IGNoYW5nZWQgaW5jbHVkZXMgaW4gYWxsIGx3SVAgZmlsZXMgYXMgYXBwcm9wcmlhdGUKCiAgMjAwNy0xMS0xNiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpLmgsIGFwaV9tc2cuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldC5oLCBzb2NrZXQuYzogQWRkZWQgc2VxdWVudGlhbAogICAgZG5zIHJlc29sdmVyIGZ1bmN0aW9uIGZvciBuZXRjb25uIGFwaSAobmV0Y29ubl9nZXRob3N0YnluYW1lKSBhbmQgc29ja2V0IGFwaQogICAgKGdldGhvc3RieW5hbWUvZ2V0aG9zdGJ5bmFtZV9yKS4KCiAgMjAwNy0xMS0xNSBKaW0gUGV0dGluYXRvLCBGculk6XJpYyBCZXJub24KICAqIG9wdC5oLCBpbml0LmMsIHRjcGlwLmMsIGRoY3AuYywgZG5zLmgsIGRucy5jOiBhZGQgRE5TIGNsaWVudCBmb3Igc2ltcGxlIG5hbWUKICAgIHJlcXVlc3RzIHdpdGggUkFXIGFwaSBpbnRlcmZhY2UuIEluaXRpYWxpemF0aW9uIGlzIGRvbmUgaW4gbHdpcF9pbml0KCkgd2l0aAogICAgYnVpbGQgdGltZSBvcHRpb25zLiBETlMgdGltZXIgaXMgYWRkZWQgaW4gdGNwaXBfdGhyZWFkIGNvbnRleHQuIERIQ1AgY2FuIHNldAogICAgRE5TIHNlcnZlciBpcCBhZGRyZXNzZXMgd2hlbiBvcHRpb25zIGFyZSByZWNlaXZlZC4gWW91IG5lZWQgdG8gc2V0IExXSVBfRE5TPTEKICAgIGluIHlvdXIgbHdpcG9wdHMuaCBmaWxlIChMV0lQX0ROUz0wIGluIG9wdC5oKS4gRE5TX0RFQlVHIGNhbiBiZSBzZXQgdG8gZ2V0CiAgICBzb21lIHRyYWNlcyB3aXRoIExXSVBfREVCVUdGLiBTYW5pdHkgY2hlY2sgaGF2ZSBiZWVuIGFkZGVkLiBUaGVyZSBpcyBhICJ0b2RvIgogICAgbGlzdCB3aXRoIHBvaW50cyB0byBpbXByb3ZlLgoKICAyMDA3LTExLTA2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgbWliMi5jOiBQYXRjaCAjNjIxNTogYWRkZWQgaWZBZG1pblN0YXR1cyB3cml0ZSBzdXBwb3J0IChpZiBleHBsaWNpdGx5CiAgICBlbmFibGVkIGJ5IGRlZmluaW5nIFNOTVBfU0FGRV9SRVFVRVNUUyB0byAwKTsgYWRkZWQgY29kZSB0byBjaGVjayBsaW5rIHN0YXR1cwogICAgZm9yIGlmT3BlclN0YXR1cyBpZiBMV0lQX05FVElGX0xJTktfQ0FMTEJBQ0sgaXMgZGVmaW5lZC4KCiAgMjAwNy0xMS0wNiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpLmgsIGFwaV9tc2cuaCBhbmQgZGVwZW5kZW50IGZpbGVzOiBUYXNrICM3NDEwOiBSZW1vdmVkIHRoZSBuZWVkIHRvIGluY2x1ZGUKICAgIGNvcmUgaGVhZGVyIGZpbGVzIGluIGFwaS5oIChpcC90Y3AvdWRwL3Jhdy5oKSB0byBoaWRlIHRoZSBpbnRlcm5hbAogICAgaW1wbGVtZW50YXRpb24gZnJvbSBuZXRjb25uIGFwaSBhcHBsaWNhdGlvbnMuCgogIDIwMDctMTEtMDMgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYywgb3B0Lmg6IGFkZCBTT19SQ1ZCVUYgb3B0aW9uIGZvciBVRFAgJgogICAgUkFXIG5ldGNvbm4uIFlvdSBuZWVkIHRvIHNldCBMV0lQX1NPX1JDVkJVRj0xIGluIHlvdXIgbHdpcG9wdHMuaCAoaXQncyBkaXNhYmxlZAogICAgYnkgZGVmYXVsdCkuIE5ldGNvbm4gQVBJIHVzZXJzIGNhbiB1c2UgdGhlIG5ldGNvbm5fcmVjdl9idWZzaXplIG1hY3JvIHRvIGFjY2VzcwogICAgaXQuIFRoaXMgaXMgYSBmaXJzdCByZWxlYXNlIHdoaWNoIGhhdmUgdG8gYmUgaW1wcm92ZSBmb3IgVENQLiBOb3RlIGl0IHVzZWQgdGhlCiAgICBuZXRjb25uOjpyZWN2X2F2YWlsIHdoaWNoIG5lZWQgdG8gYmUgbW9yZSAidGhyZWFkLXNhZmUiIChub3RlIHRoZXJlIGlzIGFscmVhZHkKICAgIHRoZSBwcm9ibGVtIGZvciBGSU9OUkVBRCB3aXRoIGx3aXBfaW9jdGwvaW9jdGxzb2NrZXQpLgoKICAyMDA3LTExLTAxIEZy6WTpcmljIEJlcm5vbiwgTWFyYyBDaGFsYW5kCiAgKiBzb2NrZXRzLmgsIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmMsIHRjcC5oLCB0Y3Bfb3V0LmM6CiAgICBJbnRlZ3JhdGUgInBhdGNoICM2MjUwIDogTVNHX01PUkUgZmxhZyBmb3Igc2VuZCIuIE1TR19NT1JFIGlzIHVzZWQgYXQgc29ja2V0IGFwaQogICAgbGF5ZXIsIE5FVENPTk5fTU9SRSBhdCBuZXRjb25uIGFwaSBsYXllciwgYW5kIFRDUF9XUklURV9GTEFHX01PUkUgYXQgcmF3IGFwaQogICAgbGF5ZXIuIFRoaXMgb3B0aW9uIGVuYWJsZSB0byBkZWxheWVkIFRDUCBQVVNIIGZsYWcgb24gbXVsdGlwbGUgIndyaXRlIiBjYWxscy4KICAgIE5vdGUgdGhhdCBwcmV2aW91cyAiY29weSIgcGFyYW1ldGVyIGZvciAid3JpdGUiIEFQSXMgaXMgbm93IGNhbGxlZCAiYXBpZmxhZ3MiLgoKICAyMDA3LTEwLTI0IEZy6WTpcmljIEJlcm5vbgogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jOiBBZGQgbWFjcm8gQVBJX0VWRU5UIGluIHRoZSBzYW1lIHNwaXJpdCB0aGFuIAogICAgVENQX0VWRU5UX3h4eCBtYWNyb3MgdG8gZ2V0IGEgY29kZSBtb3JlIHJlYWRhYmxlLiBJdCBjb3VsZCBhbHNvIGhlbHAgdG8gcmVtb3ZlCiAgICBzb21lIGNvZGUgKGxpa2Ugd2UgaGF2ZSB0YWxrIGluICJwYXRjaCAjNTkxOSA6IENyZWF0ZSBjb21waWxlIHN3aXRjaCB0byByZW1vdmUKICAgIHNlbGVjdCBjb2RlIiksIGJ1dCBpdCBjb3VsZCBiZSBkb25lIGxhdGVyLgoKICAyMDA3LTEwLTA4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtYW55IGZpbGVzOiBDaGFuZ2VkIGluaXRpYWxpemF0aW9uOiBtYW55IGluaXQgZnVuY3Rpb25zIGFyZSBub3QgbmVlZGVkIGFueQogICAgbW9yZSBzaW5jZSB3ZSBub3cgcmVseSBvbiB0aGUgY29tcGlsZXIgaW5pdGlhbGl6aW5nIGdsb2JhbCBhbmQgc3RhdGljCiAgICB2YXJpYWJsZXMgdG8gemVybyEKCiAgMjAwNy0xMC0wNiBTaW1vbiBHb2xkc2NobWlkdAogICogaXBfZnJhZy5jLCBtZW1wLmMsIG1pYjIuYywgaXBfZnJhZy5oLCBtZW1wX3N0ZC5oLCBvcHQuaDogQ2hhbmdlZCBJUF9SRUFTU0VNQkxZCiAgICB0byBlbnF1ZXVlIHRoZSByZWNlaXZlZCBwYnVmcyBzbyB0aGF0IG11bHRpcGxlIHBhY2tldHMgY2FuIGJlIHJlYXNzZW1ibGVkCiAgICBzaW11bHRhbmVvdXNseSBhbmQgbm8gc3RhdGljIHJlYXNzZW1ibHkgYnVmZmVyIGlzIG5lZWRlZC4KCiAgMjAwNy0xMC0wNSBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwaXAuYywgZXRoYXJwLmgsIGV0aGFycC5jOiBtb3ZlZCBldGhlcm5ldF9pbnB1dCBmcm9tIHRjcGlwLmMgdG8gZXRoYXJwLmMgc28KICAgIGFsbCBuZXRpZnMgKG9yIHBvcnRzKSBjYW4gdXNlIGl0LgoKICAyMDA3LTEwLTA1IEZy6WTpcmljIEJlcm5vbgogICogbmV0aWZhcGkuaCwgbmV0aWZhcGkuYzogYWRkIGZ1bmN0aW9uIG5ldGlmYXBpX25ldGlmX3NldF9kZWZhdWx0LiBDaGFuZ2UgdGhlIAogICAgY29tbW9uIGZ1bmN0aW9uIHRvIHJlZHVjZSBhIGxpdHRsZSBiaXQgdGhlIGZvb3RwcmludCAoZm9yIGFsbCBmdW5jdGlvbnMgdXNpbmcKICAgIG9ubHkgdGhlICJuZXRpZiIgcGFyYW1ldGVyKS4KCiAgMjAwNy0xMC0wMyBGculk6XJpYyBCZXJub24KICAqIG5ldGlmYXBpLmgsIG5ldGlmYXBpLmM6IGFkZCBmdW5jdGlvbnMgbmV0aWZhcGlfbmV0aWZfc2V0X3VwLCBuZXRpZmFwaV9uZXRpZl9zZXRfZG93biwKICAgIG5ldGlmYXBpX2F1dG9pcF9zdGFydCBhbmQgbmV0aWZhcGlfYXV0b2lwX3N0b3AuIFVzZSBhIGNvbW1vbiBmdW5jdGlvbiB0byByZWR1Y2UKICAgIGEgbGl0dGxlIGJpdCB0aGUgZm9vdHByaW50IChmb3IgYWxsIGZ1bmN0aW9ucyB1c2luZyBvbmx5IHRoZSAibmV0aWYiIHBhcmFtZXRlcikuCgogIDIwMDctMDktMTUgRnLpZOlyaWMgQmVybm9uCiAgKiB1ZHAuaCwgdWRwLmMsIHNvY2tldHMuYzogQ2hhbmdlcyBmb3IgIiMyMDUwMyBJR01QIEltcHJvdmVtZW50Ii4gQWRkIElQX01VTFRJQ0FTVF9JRgogICAgb3B0aW9uIGluIHNvY2tldCBBUEksIGFuZCBhIG5ldyBmaWVsZCAibXVsdGljYXN0X2lwIiBpbiAic3RydWN0IHVkcF9wY2IiIChmb3IKICAgIG5ldGNvbm4gYW5kIHJhdyBBUEkgdXNlcnMpLCBvbmx5IGlmIExXSVBfSUdNUD0xLiBBZGQgZ2V0c29ja29wdCBwcm9jZXNzaW5nIGZvcgogICAgSVBfTVVMVElDQVNUX1RUTCBhbmQgSVBfTVVMVElDQVNUX0lGLgoKICAyMDA3LTA5LTEwIEZy6WTpcmljIEJlcm5vbgogICogc25tcC5oLCBtaWIyLmM6IGVuYWJsZSB0byByZW1vdmUgU05NUCB0aW1lciAod2hpY2ggY29uc3VtbmUgc2V2ZXJhbCBjeWNsZXMKICAgIGV2ZW4gd2hlbiBpdCdzIG5vdCBuZWNlc3NhcnkpLiBzbm1wX2FnZW50LnR4dCB0ZWxsIHRvIGNhbGwgc25tcF9pbmNfc3lzdXB0aW1lKCkKICAgIGVhY2ggMTBtcyAoYnV0LCBpdCdzIGludHJ1c2l2ZSBpZiB5b3UgdXNlIHN5c190aW1lb3V0IGZlYXR1cmUpLiBOb3csIHlvdSBjYW4KICAgIGRlY2lkZSB0byBjYWxsIHNubXBfYWRkX3N5c3VwdGltZSgxMDApIGVhY2ggMTAwMG1zICh3aGljaCBpcyBiaWdnZXIgInN0ZXAiLCBidXQKICAgIGNhbGwgdG8gYSBsb3dlciBmcmVxdWVuY3kpLiBPciwgeW91IGNhbiBkZWNpZGUgdG8gbm90IGNhbGwgc25tcF9pbmNfc3lzdXB0aW1lKCkKICAgIG9yIHNubXBfYWRkX3N5c3VwdGltZSgpLCBhbmQgdG8gZGVmaW5lIHRoZSBTTk1QX0dFVF9TWVNVUFRJTUUoc3lzdXB0aW1lKSBtYWNyby4KICAgIFRoaXMgb25lIGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0IGluIG1pYjIuYy4gU05NUF9HRVRfU1lTVVBUSU1FIGlzIGNhbGxlZCBpbnNpZGUKICAgIHNubXBfZ2V0X3N5c3VwdGltZSh1MzJfdCAqdmFsdWUpLCBhbmQgZW5hYmxlIHRvIGNoYW5nZSAic3lzdXB0aW1lIiB2YWx1ZSBvbmx5CiAgICB3aGVuIGl0J3MgcXVlcmllZCAoYW55IGRpcmVjdCBjYWxsIHRvICJzeXN1cHRpbWUiIGlzIGNoYW5nZWQgYnkgYSBjYWxsIHRvIAogICAgc25tcF9nZXRfc3lzdXB0aW1lKS4KCiAgMjAwNy0wOS0wOSBGculk6XJpYyBCZXJub24sIEJpbGwgRmxvcmFjCiAgKiBpZ21wLmgsIGlnbXAuYywgbmV0aWYuaCwgbmV0aWYuYywgaXAuYzogVG8gZW5hYmxlIHRvIGhhdmUgaW50ZXJmYWNlcyB3aXRoIElHTVAsCiAgICBhbmQgb3RoZXJzIHdpdGhvdXQgaXQsIHRoZXJlIGlzIGEgbmV3IE5FVElGX0ZMQUdfSUdNUCBmbGFnIHRvIHNldCBpbiBuZXRpZi0+ZmxhZ3MKICAgIGlmIHlvdSB3YW50IElHTVAgb24gYW4gaW50ZXJmYWNlLiBpZ21wX3N0b3AoKSBpcyBub3cgY2FsbGVkIGluc2lkZSBuZXRpZl9yZW1vdmUoKS4KICAgIGlnbXBfcmVwb3J0X2dyb3VwcygpIGlzIG5vdyBjYWxsZWQgaW5zaWRlIG5ldGlmX3NldF9saW5rX3VwKCkgKG5lZWQgdG8gaGF2ZQogICAgTFdJUF9ORVRJRl9MSU5LX0NBTExCQUNLPTEpIHRvIHJlc2VuZCByZXBvcnRzIG9uY2UgdGhlIGxpbmsgaXMgdXAgKGF2b2lkIHRvIHdhaXQKICAgIHRoZSBuZXh0IHF1ZXJ5IG1lc3NhZ2UgdG8gcmVjZWl2ZSB0aGUgbWF0Y2hpbmcgbXVsdGljYXN0IHN0cmVhbXMpLgoKICAyMDA3LTA5LTA4IEZy6WTpcmljIEJlcm5vbgogICogc29ja2V0cy5jLCBpcC5oLCBhcGkuaCwgdGNwLmg6IGRlY2xhcmUgYSAic3RydWN0IGlwX3BjYiIgd2hpY2ggb25seSBjb250YWlucwogICAgSVBfUENCLiBBZGQgaW4gdGhlIG5ldGNvbm4ncyAicGNiIiB1bmlvbiBhICJzdHJ1Y3QgaXBfcGNiICppcDsiIChubyBzaXplIGNoYW5nZSkuCiAgICBVc2UgdGhpcyBuZXcgZmllbGQgdG8gYWNjZXNzIHRvIGNvbW1vbiBwY2IgZmllbGRzICh0dGwsIHRvcywgc29fb3B0aW9ucywgZXRjLi4uKS4KICAgIEVuYWJsZSB0byBhY2Nlc3MgdG8gdGhlc2UgZmllbGRzIHdpdGggTFdJUF9UQ1A9MC4KCiAgMjAwNy0wOS0wNSBGculk6XJpYyBCZXJub24KICAqIHVkcC5jLCBpcHY0L2ljbXAuYywgaXB2NC9pcC5jLCBpcHY2L2ljbXAuYywgaXB2Ni9pcDYuYywgaXB2NC9pY21wLmgsCiAgICBpcHY2L2ljbXAuaCwgb3B0Lmg6IEludGVncmF0ZSAidGFzayAjNzI3MiA6IExXSVBfSUNNUCBvcHRpb24iLiBUaGUgbmV3IG9wdGlvbgogICAgTFdJUF9JQ01QIGVuYWJsZS9kaXNhYmxlIElDTVAgbW9kdWxlIGluc2lkZSB0aGUgSVAgc3RhY2sgKGVuYWJsZSBwZXIgZGVmYXVsdCkuCiAgICBCZSBjYXJlZnVsLCBkaXNhYmxpbmcgSUNNUCBtYWtlIHlvdXIgcHJvZHVjdCBub24tY29tcGxpYW50IHRvIFJGQzExMjIsIGJ1dAogICAgaGVscCB0byByZWR1Y2UgZm9vdHByaW50LCBhbmQgdG8gcmVkdWNlICJ2aXNpYmlsaXR5IiBvbiB0aGUgSW50ZXJuZXQuCgogIDIwMDctMDktMDUgRnLpZOlyaWMgQmVybm9uLCBCaWxsIEZsb3JhYwogICogb3B0LmgsIHN5cy5oLCB0Y3BpcC5jLCBzbGlwaWYuYywgcHBwLmMsIHN5c19hcmNoLnR4dDogQ2hhbmdlIHBhcmFtZXRlcnMgbGlzdAogICAgZm9yIHN5c190aHJlYWRfbmV3IChzZWUgInRhc2sgIzcyNTIgOiBDcmVhdGUgc3lzX3RocmVhZF9uZXdfZXgoKSIpLiBUd28gbmV3CiAgICBwYXJhbWV0ZXJzIGhhdmUgdG8gYmUgcHJvdmlkZWQ6IGEgdGFzayBuYW1lLCBhbmQgYSB0YXNrIHN0YWNrIHNpemUuIEZvciB0aGlzCiAgICBvbmUsIHNpbmNlIGl0J3MgcGxhdGZvcm0gZGVwZW5kYW50LCB5b3UgY291bGQgZGVmaW5lIHRoZSBiZXN0IG9uZSBmb3IgeW91IGluCiAgICB5b3VyIGx3aXBvcHRzLmguIEZvciBwb3J0IG1haW50YWluZXJzLCB5b3UgY2FuIGp1c3QgYWRkIHRoZXNlIG5ldyBwYXJhbWV0ZXJzCiAgICBpbiB5b3VyIHN5c19hcmNoLmMgZmlsZSwgYW5kIGJ1dCBpdCdzIG5vdCBtYW5kYXRvcnksIHVzZSB0aGVtIGluIHlvdXIgT1MKICAgIHNwZWNpZmljIGZ1bmN0aW9ucy4KCiAgMjAwNy0wOS0wNSBGculk6XJpYyBCZXJub24KICAqIGluZXQuYywgYXV0b2lwLmMsIG1zZ19pbi5jLCBtc2dfb3V0LmMsIGluaXQuYzogTW92ZSBzb21lIGJ1aWxkIHRpbWUgY2hlY2tpbmdzCiAgICBpbnNpZGUgaW5pdC5jIGZvciB0YXNrICM3MTQyICJTYW5pdHkgY2hlY2sgdXNlci1jb25maWd1cmFibGUgdmFsdWVzIi4KCiAgMjAwNy0wOS0wNCBGculk6XJpYyBCZXJub24sIEJpbGwgRmxvcmFjCiAgKiBpZ21wLmgsIGlnbXAuYywgbWVtcF9zdGQuaCwgbWVtcC5jLCBpbml0LmMsIG9wdC5oOiBSZXBsYWNlIG1lbV9tYWxsb2MgY2FsbCBieQogICAgbWVtcF9tYWxsb2MsIGFuZCB1c2UgYSBuZXcgTUVNUF9OVU1fSUdNUF9HUk9VUCBvcHRpb24gKHNlZSBvcHQuaCB0byBkZWZpbmUgdGhlCiAgICB2YWx1ZSkuIEl0IHdpbGwgYXZvaWQgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gcHJvYmxlbXMsIHVzZSBhIGNvdW50ZXIgdG8ga25vdwogICAgaG93IG1hbnkgdGltZXMgYSBncm91cCBpcyB1c2VkIG9uIGFuIG5ldGlmLCBhbmQgZnJlZSBpdCB3aGVuIGFsbCBhcHBsaWNhdGlvbnMKICAgIGxlYXZlIGl0LiBNRU1QX05VTV9JR01QX0dST1VQIGdvdCA4IGFzIGRlZmF1bHQgdmFsdWUgKGFuZCBpbml0LmMgZ290IGEgc2FuaXR5CiAgICBjaGVjayBpZiBMV0lQX0lHTVAhPTApLgoKICAyMDA3LTA5LTAzIEZy6WTpcmljIEJlcm5vbgogICogaWdtcC5oLCBpZ21wLmMsIHNvY2tldHMuYywgYXBpX21zZy5jOiBDaGFuZ2VzIGZvciAiIzIwNTAzIElHTVAgSW1wcm92ZW1lbnQiLgogICAgSW5pdGlhbGl6ZSBpZ21wX21hY19maWx0ZXIgdG8gTlVMTCBpbiBuZXRpZl9hZGQgKHRoaXMgZmllbGQgc2hvdWxkIGJlIHNldCBpbgogICAgdGhlIG5ldGlmJ3MgImluaXQiIGZ1bmN0aW9uKS4gVXNlIHRoZSAiaW1yX2ludGVyZmFjZSIgZmllbGQgKGZvciBzb2NrZXQgbGF5ZXIpCiAgICBhbmQvb3IgdGhlICJpbnRlcmZhY2UiIGZpZWxkIChmb3IgbmV0Y29ubiBsYXllciksIGZvciBqb2luL2xlYXZlIG9wZXJhdGlvbnMuCiAgICBUaGUgaWdtcF9qb2luL2xlYXZlZ3JvdXAgZmlyc3QgcGFyYW1ldGVyIGNoYW5nZSBmcm9tIGEgbmV0aWYgdG8gYW4gaXBhZGRyLgogICAgVGhpcyBmaWVsZCBjb3VsZCBiZSBhIG5ldGlmJ3MgaXBhZGRyLCBvciAiYW55IiAoc2FtZSBtZWFuaW5nIHRoYW4gaXBfYWRkcl9pc2FueSkuCgogIDIwMDctMDgtMzAgRnLpZOlyaWMgQmVybm9uCiAgKiBBZGQgbmV0YnVmLmgsIG5ldGJ1Zi5jLCBDaGFuZ2UgYXBpLmgsIGFwaV9saWIuYzogIzcyNDkgIlNwbGl0IG5ldGJ1ZiBmdW5jdGlvbnMKICAgIGZyb20gYXBpL2FwaV9saWIiLiBOb3cgbmV0YnVmIEFQSSBpcyBpbmRlcGVuZGFudCBvZiBuZXRjb25uLCBhbmQgY2FuIGJlIHVzZWQKICAgIHdpdGggb3RoZXIgQVBJIChhcHBsaWNhdGlvbiBiYXNlZCBvbiByYXcgQVBJLCBvciBmdXR1cmUgInNvY2tldDIiIEFQSSkuIFBvcnRzCiAgICBtYWludGFpbmVycyBqdXN0IGhhdmUgdG8gYWRkIHNyYy9hcGkvbmV0YnVmLmMgaW4gdGhlaXIgbWFrZWZpbGUvcHJvamVjdHMuCgogIDIwMDctMDgtMzAgRnLpZOlyaWMgQmVybm9uLCBKb25hdGhhbiBMYXJtb3VyCiAgKiBpbml0LmM6IEFkZCBmaXJzdCB2ZXJzaW9uIG9mIGx3aXBfc2FuaXR5X2NoZWNrIGZvciB0YXNrICM3MTQyICJTYW5pdHkgY2hlY2sKICAgIHVzZXItY29uZmlndXJhYmxlIHZhbHVlcyIuCgogIDIwMDctMDgtMjkgRnLpZOlyaWMgQmVybm9uCiAgKiBpZ21wLmgsIGlnbXAuYywgdGNwaXAuYywgaW5pdC5jLCBuZXRpZi5jOiBjaGFuZ2UgaWdtcF9pbml0IGFuZCBhZGQgaWdtcF9zdGFydC4KICAgIGlnbXBfc3RhcnQgaXMgY2FsbCBpbnNpZGUgbmV0aWZfYWRkLiBOb3csIGlnbXAgaW5pdGlhbGl6YXRpb24gaXMgaW4gdGhlIHNhbWUKICAgIHNwaXJpdCB0aGFuIHRoZSBvdGhlcnMgbW9kdWxlcy4gTW9kaWZ5IHNvbWUgSUdNUCBkZWJ1ZyB0cmFjZXMuCgogIDIwMDctMDgtMjkgRnLpZOlyaWMgQmVybm9uCiAgKiBBZGQgaW5pdC5oLCBpbml0LmMsIENoYW5nZSBvcHQuaCwgdGNwaXAuYzogVGFzayAgIzcyMTMgIkFkZCBhIGx3aXBfaW5pdCBmdW5jdGlvbiIKICAgIEFkZCBsd2lwX2luaXQgZnVuY3Rpb24gdG8gcmVncm91cCBhbGwgbW9kdWxlcyBpbml0aWFsaXphdGlvbnMsIGFuZCB0byBwcm92aWRlCiAgICBhIHBsYWNlIHRvIGFkZCBjb2RlIGZvciB0YXNrICM3MTQyICJTYW5pdHkgY2hlY2sgdXNlci1jb25maWd1cmFibGUgdmFsdWVzIi4KICAgIFBvcnRzIG1haW50YWluZXJzIHNob3VsZCByZW1vdmUgZGlyZWN0IGluaXRpYWxpemF0aW9ucyBjYWxscyBmcm9tIHRoZWlyIGNvZGUsCiAgICBhbmQgYWRkIGluaXQuYyBpbiB0aGVpciBtYWtlZmlsZXMuIE5vdGUgdGhhdCBsd2lwX2luaXQoKSBmdW5jdGlvbiBpcyBjYWxsZWQKICAgIGluc2lkZSB0Y3BpcF9pbml0LCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSByYXcgYXBpIHVzZXJzIHNpbmNlIGFsbCBjYWxscyBhcmUKICAgIGRpc2FibGVkIHdoZW4gbWF0Y2hpbmcgb3B0aW9ucyBhcmUgZGlzYWJsZWQuIEFsc28gbm90ZSB0aGF0IHRoZWlyIGlzIG5ldyBvcHRpb25zCiAgICBpbiBvcHQuaCwgeW91IHNob3VsZCBjb25maWd1cmUgaW4geW91ciBsd2lwb3B0cy5oICh0aGV5IGFyZSBlbmFibGVkIHBlciBkZWZhdWx0KS4KCiAgMjAwNy0wOC0yNiBNYXJjIEJvdWNoZXIKICAqIGFwaV9tc2cuYzogZG9fY2xvc2VfaW50ZXJuYWwoKTogUmVzZXQgdGhlIGNhbGxiYWNrcyBhbmQgYXJnIChjb25uKSB0byBOVUxMCiAgICBzaW5jZSB0aGV5IGNhbiB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgYmUgY2FsbGVkIHdpdGggYW4gaW52YWxpZCBjb25uCiAgICBwb2ludGVyIGFmdGVyIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZCAoYW5kIGNvbm4gaGFzIGJlZW4gZnJlZWQpLiAKCiAgMjAwNy0wOC0yNSBGculk6XJpYyBCZXJub24gKEFydGVtIE1pZ2FldidzIFBhdGNoKQogICogbmV0aWYuaCwgbmV0aWYuYzogSW50ZWdyYXRlICJwYXRjaCAjNjE2MyA6IEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGxpbmsgbGF5ZXIgaXMgdXAiLgogICAgQWRkIGEgbmV0aWZfaXNfbGlua191cCgpIGZ1bmN0aW9uIGlmIExXSVBfTkVUSUZfTElOS19DQUxMQkFDSyBvcHRpb24gaXMgc2V0LgoKICAyMDA3LTA4LTIyIEZy6WTpcmljIEJlcm5vbgogICogbmV0aWYuaCwgbmV0aWYuYywgb3B0Lmg6IFJlbmFtZSBMV0lQX05FVElGX0NBTExCQUNLIGluIExXSVBfTkVUSUZfU1RBVFVTX0NBTExCQUNLCiAgICB0byBiZSBjb2hlcmVudCB3aXRoIG5ldyBMV0lQX05FVElGX0xJTktfQ0FMTEJBQ0sgb3B0aW9uIGJlZm9yZSBuZXh0IHJlbGVhc2UuCgogIDIwMDctMDgtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3BpcC5oLCB0Y3BpcC5jLCBldGhlcm5ldGlmLmMsIG9wdC5oOiByZW1vdmUgb3B0aW9ucyBFVEhBUlBfVENQSVBfSU5QVVQgJgogICAgRVRIQVJQX1RDUElQX0VUSElOUFVULCBub3csIG9ubHkgImV0aGlucHV0IiBjb2RlIGlzIHN1cHBvcnRlZCwgZXZlbiBpZiB0aGUgCiAgICBuYW1lIGlzIHRjcGlwX2lucHV0ICh3ZSBrZWVwIHRoZSBuYW1lIG9mIDEuMi4wIGZ1bmN0aW9uKS4KCiAgMjAwNy0wOC0xNyBKYXJlZCBHcnViYgogICogbWVtcF9zdGQuaCwgbWVtcC5oLCBtZW1wLmMsIG1lbS5jLCBzdGF0cy5jOiAoVGFzayAjNzEzNikgQ2VudHJhbGl6ZSBtZW1wb29sIAogICAgc2V0dGluZ3MgaW50byBuZXcgbWVtcF9zdGQuaCBhbmQgb3B0aW9uYWwgdXNlciBmaWxlIGx3aXBwb29scy5oLiBUaGlzIGFkZHMKICAgIG1vcmUgZHluYW1pYyBtZW1wb29scywgYW5kIGFsbG93cyB0aGUgdXNlciB0byBjcmVhdGUgYW4gYXJiaXRyYXJ5IG51bWJlciBvZgogICAgbWVtcG9vbHMgZm9yIG1lbV9tYWxsb2MuCgogIDIwMDctMDgtMTYgTWFyYyBCb3VjaGVyCiAgKiBhcGlfbXNnLmM6IEluaXRpYWxpemUgbmV3Y29ubi0+c3RhdGUgdG8gTkVUQ09OTl9OT05FIGluIGFjY2VwdF9mdW5jdGlvbjsKICAgIG90aGVyd2lzZSBpdCB3YXMgbGVmdCB0byBORVRDT05OX0NMT1NFIGFuZCBzZW50X3RjcCgpIGNvdWxkIHByZW1hdHVyZWx5CiAgICBjbG9zZSB0aGUgY29ubmVjdGlvbi4KCiAgMjAwNy0wOC0xNiBNYXJjIEJvdWNoZXIKICAqIHNvY2tldHMuYzogbHdpcF9hY2NlcHQoKTogY2hlY2sgbmV0Y29ubl9wZWVyKCkgZXJyb3IgcmV0dXJuLgoKICAyMDA3LTA4LTE2IE1hcmMgQm91Y2hlcgogICogbWVtLmMsIG1lbS5oOiBBZGRlZCBtZW1fY2FsbG9jKCkuCgogIDIwMDctMDgtMTYgTWFyYyBCb3VjaGVyCiAgKiB0Y3BpcC5jLCB0Y3BpcC5oIG1lbXAuYywgbWVtcC5oOiBBZGRlZCBkaXN0aW5jdCBtZW1wIChNRU1QX1RDUElQX01TR19JTlBLVCkKICAgIGZvciBpbnB1dCBwYWNrZXRzIHRvIHByZXZlbnQgZmxvb2RzIGZyb20gY29uc3VtaW5nIGFsbCBvZiBNRU1QX1RDUElQX01TRwogICAgYW5kIHN0YXJ2aW5nIG90aGVyIG1lc3NhZ2UgdHlwZXMuCiAgICBSZW5hbWVkIE1FTVBfVENQSVBfTVNHIHRvIE1FTVBfVENQSVBfTVNHX0FQSQoKICAyMDA3LTA4LTE2IE1hcmMgQm91Y2hlcgogICogcGJ1Zi5jLCBwYnVmLmgsIGV0aGFycC5jLCB0Y3BfaW4uYywgc29ja2V0cy5jOiBTcGxpdCBwYnVmIGZsYWdzIGluIHBidWYKICAgIHR5cGUgYW5kIGZsZ3MgKGxhdGVyIHJlbmFtZWQgdG8gZmxhZ3MpLgogICAgVXNlIGVudW0gcGJ1Zl9mbGFnIGFzIHBidWZfdHlwZS4gIFJlbnVtYmVyIFBCVUZfRkxBR18qLgogICAgSW1wcm92ZWQgbHdpcF9yZWN2ZnJvbSgpLiAgVENQIHB1c2ggbm93IHByb3BhZ2F0ZWQuCgogIDIwMDctMDgtMTYgTWFyYyBCb3VjaGVyCiAgKiBldGhlcm5ldGlmLmMsIGNvbnRyaWIvcG9ydHMvdmFyaW91czogZXRoYnJvYWRjYXN0IG5vdyBhIHNoYXJlZCBnbG9iYWwKICAgIHByb3ZpZGVkIGJ5IGV0aGFycC4KCiAgMjAwNy0wOC0xNiBNYXJjIEJvdWNoZXIKICAqIHBwcF9vZS5jIHBwcF9vZS5oLCBhdXRoLmMgY2hhcC5jIGZzbS5jIGxjcC5jIHBwcC5jIHBwcC5oLAogICAgZXRoYXJwLmMgZXRoZXJuZXRpZi5jLCBldGhhcnAuaCwgb3B0LmggdGNwaXAuaCwgdGNwaXAuYzoKICAgIEFkZGVkIFBQUG9FIHN1cHBvcnQgYW5kIHZhcmlvdXMgUFBQIGltcHJvdmVtZW50cy4KCiAgMjAwNy0wNy0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX2xpYi5jLCBpcF9mcmFnLmMsIHBidWYuYywgYXBpLmgsIHBidWYuaDogSW50cm9kdWNlZCBwYnVmX2NvcHlfcGFydGlhbCwKICAgIG1ha2luZyBuZXRidWZfY29weV9wYXJ0aWFsIHVzZSB0aGlzIGZ1bmN0aW9uLgoKICAyMDA3LTA3LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYzogRml4IGJ1ZyAjMjA1MDY6IFNsb3cgc3RhcnQgLyBpbml0aWFsIGNvbmdlc3Rpb24gd2luZG93IHN0YXJ0cyB3aXRoCiAgICAyICogbXNzIChpbnN0ZWFkIG9mIDEgKiBtc3MgcHJldmlvdXNseSkgdG8gY29tcGx5IHdpdGggc29tZSBuZXdlciBSRkNzIGFuZAogICAgb3RoZXIgc3RhY2tzLgoKICAyMDA3LTA3LTEzIEphcmVkIEdydWJiIChpbnRlZ3JhdGVkIGJ5IEZy6WTpcmljIEJlcm5vbikKICAqIG9wdC5oLCBuZXRpZi5oLCBuZXRpZi5jLCBldGhlcm5ldGlmLmM6IEFkZCBuZXcgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gYWRkCiAgICBhIGxpbmsgY2FsbGJhY2sgaW4gdGhlIG5ldGlmIHN0cnVjdCwgYW5kIGZ1bmN0aW9ucyB0byBoYW5kbGUgaXQuIEJlIGNhcmVmdWxsCiAgICBmb3IgcG9ydCBtYWludGFpbmVycyB0byBhZGQgdGhlIE5FVElGX0ZMQUdfTElOS19VUCBmbGFnIChsaWtlIGluIGV0aGVybmV0aWYuYykKICAgIGlmIHlvdSB3YW50IHRvIGJlIHN1cmUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIGZ1dHVyZSBjaGFuZ2VzLi4uCgogIDIwMDctMDYtMzAgRnLpZOlyaWMgQmVybm9uCiAgKiBzb2NrZXRzLmgsIHNvY2tldHMuYzogSW1wbGVtZW50IE1TR19QRUVLIGZsYWcgZm9yIHJlY3YvcmVjdmZyb20gZnVuY3Rpb25zLgoKICAyMDA3LTA2LTIxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuaCwgZXRoYXJwLmM6IENvbWJpbmVkIGV0aGFycF9yZXF1ZXN0IHdpdGggZXRoYXJwX3JhdyBmb3IgYm90aAogICAgTFdJUF9BVVRPSVAgPTAgYW5kID0xIHRvIHJlbW92ZSByZWR1bmRhbnQgY29kZS4KCiAgMjAwNy0wNi0yMSBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmMsIG1lbXAuYywgbWVtLmgsIG1lbXAuaCwgb3B0Lmg6IHRhc2sgIzY4NjM6IEludHJvZHVjZWQgdGhlIG9wdGlvbgogICAgTUVNX1VTRV9QT09MUyB0byB1c2UgNCBwb29scyB3aXRoIGRpZmZlcmVudCBzaXplZCBlbGVtZW50cyBpbnN0ZWFkIG9mIGEKICAgIGhlYXAuIFRoaXMgYm90aCBwcmV2ZW50cyBtZW1vcnkgZnJhZ21lbnRhdGlvbiBhbmQgZ2l2ZXMgYSBoaWdoZXIgc3BlZWQKICAgIGF0IHRoZSBjb3N0IG9mIG1vcmUgbWVtb3J5IGNvbnN1bXB0aW9uLiBUdXJuZWQgb2ZmIGJ5IGRlZmF1bHQuCgogIDIwMDctMDYtMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9saWIuYywgYXBpX21zZy5jLCBhcGkuaCwgYXBpX21zZy5oOiBDb252ZXJ0ZWQgdGhlIGxlbmd0aCBhcmd1bWVudCBvZgogICAgbmV0Y29ubl93cml0ZSAoYW5kIHRoZXJlZm9yZSBhbHNvIGFwaV9tc2dfbXNnLm1zZy53LmxlbikgZnJvbSB1MTZfdCBpbnRvCiAgICBpbnQgdG8gYmUgYWJsZSB0byBzZW5kIGEgYmlnZ2VyIGJ1ZmZlciB0aGFuIDY0SyB3aXRoIG9uZSB0aW1lIChtYWlubHkKICAgIHVzZWQgZnJvbSBsd2lwX3NlbmQpLgoKICAyMDA3LTA2LTIxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCwgYXBpX21zZy5jOiBNb3ZlZCB0aGUgbmFnbGUgYWxnb3JpdGhtIGZyb20gbmV0Y29ubl93cml0ZS9kb193cml0ZQogICAgaW50byBhIGRlZmluZSAodGNwX291dHB1dF9uYWdsZSkgaW4gdGNwLmggdG8gcHJvdmlkZSBpdCB0byByYXcgYXBpIHVzZXJzLCB0b28uCgogIDIwMDctMDYtMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYzogRml4ZWQgYnVnICMyMDAyMTogTW92ZWQgc2VuZGJ1Zi1wcm9jZXNzaW5nIGluCiAgICBuZXRjb25uX3dyaXRlIGZyb20gYXBpX2xpYi5jIHRvIGFwaV9tc2cuYyB0byBhbHNvIHByZXZlbnQgbXVsdGlwbGUgY29udGV4dC0KICAgIGNoYW5nZXMgb24gbG93IG1lbW9yeSBvciBlbXB0eSBzZW5kLWJ1ZmZlci4KCiAgMjAwNy0wNi0xOCBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmMsIGV0aGFycC5oOiBDaGFuZ2VkIGV0aGFycCB0byB1c2UgYSBkZWZpbmVkIGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoCiAgICBvZiA2IHRvIGF2b2lkIGxvYWRpbmcgbmV0aWYtPmh3YWRkcl9sZW4gZXZlcnkgdGltZSAoc2luY2UgdGhpcyBmaWxlIGlzIG9ubHkKICAgIHVzZWQgZm9yIGV0aGVybmV0IGFuZCBzdHJ1Y3QgZXRoX2FkZHIgYWxyZWFkeSBoYWQgYSBkZWZpbmVkIGxlbmd0aCBvZiA2KS4KCiAgMjAwNy0wNi0xNyBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jLCBzb2NrZXRzLmg6IEltcGxlbWVudGVkIHNvY2tldCBvcHRpb25zIFNPX05PX0NIRUNLIGZvciBVRFAgc29ja2V0cwogICAgdG8gZGlzYWJsZSBVRFAgY2hlY2tzdW0gZ2VuZXJhdGlvbiBvbiB0cmFuc21pdC4KCiAgMjAwNy0wNi0xMyBGculk6XJpYyBCZXJub24sIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkZWJ1Zy5oLCBhcGlfbXNnLmM6IGNoYW5nZSBMV0lQX0VSUk9SIHRvIHVzZSBpdCB0byBjaGVjayBlcnJvcnMgbGlrZSBpbnZhbGlkCiAgICBwb2ludGVycyBvciBwYXJhbWV0ZXJzLCBhbmQgbGV0IHRoZSBwb3NzaWJpbGl0eSB0byByZWRlZmluZWQgaXQgaW4gY2MuaC4gVXNlCiAgICB0aGlzIG1hY3JvIHRvIGNoZWNrICJjb25uIiBwYXJhbWV0ZXIgaW4gYXBpX21zZy5jIGZ1bmN0aW9ucy4KCiAgMjAwNy0wNi0xMSBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jLCBzb2NrZXRzLmg6IEFkZGVkIFVEUCBsaXRlIHN1cHBvcnQgZm9yIHNvY2tldHMKCiAgMjAwNy0wNi0xMCBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmgsIG9wdC5oLCBhcGlfbXNnLmMsIGlwLmMsIHVkcC5jOiBJbmNsdWRlZCBzd2l0Y2ggTFdJUF9VRFBMSVRFIChlbmFibGVkCiAgICBieSBkZWZhdWx0KSB0byBzd2l0Y2ggb2ZmIFVEUC1MaXRlIHN1cHBvcnQgaWYgbm90IG5lZWRlZCAocmVkdWNlcyB1ZHAuYyBjb2RlCiAgICBzaXplKQoKICAyMDA3LTA2LTA5IERvbWluaWsgU3BpZXMgKGludGVncmF0ZWQgYnkgRnLpZOlyaWMgQmVybm9uKQogICogYXV0b2lwLmgsIGF1dG9pcC5jLCBkaGNwLmgsIGRoY3AuYywgbmV0aWYuaCwgbmV0aWYuYywgZXRoYXJwLmgsIGV0aGFycC5jLCBvcHQuaDoKICAgIEF1dG9JUCBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgZm9yIElQdjQsIHdpdGggbmV3IG9wdGlvbnMgTFdJUF9BVVRPSVAgYW5kCiAgICBMV0lQX0RIQ1BfQVVUT0lQX0NPT1AgaWYgeW91IHdhbnQgdG8gY29vcGVyYXRlIHdpdGggREhDUC4gU29tZSB0aXBzIHRvIGFkYXB0CiAgICAoc2VlIFRPRE8gbWFyayBpbiB0aGUgc291cmNlIGNvZGUpLgoKICAyMDA3LTA2LTA5IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuaCwgZXRoYXJwLmMsIGV0aGVybmV0aWYuYzogTW9kaWZpZWQgb3JkZXIgb2YgcGFyYW1ldGVycyBmb3IKICAgIGV0aGFycF9vdXRwdXQoKSB0byBtYXRjaCBuZXRpZi0+b3V0cHV0IHNvIGV0aGFycF9vdXRwdXQoKSBjYW4gYmUgdXNlZAogICAgZGlyZWN0bHkgYXMgbmV0aWYtPm91dHB1dCB0byBzYXZlIG9uZSBmdW5jdGlvbiBjYWxsLgoKICAyMDA3LTA2LTA4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXRpZi5oLCBldGhlcm5ldGlmLmMsIHNsaXBpZi5jLCBsb29waWYuYzogQWRkZWQgZGVmaW5lCiAgICBORVRJRl9JTklUX1NOTVAobmV0aWYsIHR5cGUsIHNwZWVkKSB0byBpbml0aWFsaXplIHBlci1uZXRpZiBzbm1wIHZhcmlhYmxlcywKICAgIGFkZGVkIGluaXRpYWxpemF0aW9uIG9mIHRob3NlIHRvIGV0aGVybmV0aWYsIHNsaXBpZiBhbmQgbG9vcGlmLgoKICAyMDA3LTA1LTE4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgaXBfZnJhZy5jLCBpcF9mcmFnLmgsIGlwLmM6IEFkZGVkIG9wdGlvbiBJUF9GUkFHX1VTRVNfU1RBVElDX0JVRgogICAgKGRlZmF1bHRpbmcgdG8gb2ZmIGZvciBub3cpIHRoYXQgY2FuIGJlIHNldCB0byAwIHRvIHNlbmQgZnJhZ21lbnRlZAogICAgcGFja2V0cyBieSBwYXNzaW5nIFBCVUZfUkVGcyBkb3duIHRoZSBzdGFjay4KCiAgMjAwNy0wNS0yMyBGculk6XJpYyBCZXJub24KICAqIGFwaV9saWIuYzogSW1wbGVtZW50IFNPX1JDVlRJTUVPIGZvciBhY2NlcHQgYW5kIHJlY3Ygb24gVENQCiAgICBjb25uZWN0aW9ucywgc3VjaCBwcmVzZW50IGluIHBhdGNoICM1OTU5LgoKICAyMDA3LTA1LTIzIEZy6WTpcmljIEJlcm5vbgogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmM6IGdyb3VwIHRoZSBkaWZmZXJlbnQgTkVUQ09OTl9VRFB4eHgKICAgIGNvZGUgaW4gb25seSBvbmUgcGFydC4uLgoKICAyMDA3LTA1LTE4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgbWVtcC5oLCBtZW1wLmM6IEFkZGVkIG9wdGlvbiBNRU1QX09WRVJGTE9XX0NIRUNLIHRvIGNoZWNrIGZvciBtZW1wCiAgICBlbGVtZW50cyB0byBvdmVyZmxvdy4gVGhpcyBpcyBhY2hpZXZlZCBieSBhZGRpbmcgc29tZSBieXRlcyBiZWZvcmUgYW5kIGFmdGVyCiAgICBlYWNoIHBvb2wgZWxlbWVudCAoaW5jcmVhc2luZyB0aGVpciBzaXplLCBvZiBjb3Vyc2UpLCBmaWxsaW5nIHRoZW0gd2l0aCBhCiAgICBwcm9taW5lbnQgdmFsdWUgYW5kIGNoZWNraW5nIHRoZW0gb24gZnJlZWluZyB0aGUgZWxlbWVudC4KICAgIFNldCBpdCB0byAyIHRvIGFsc28gY2hlY2sgZXZlcnkgZWxlbWVudCBpbiBldmVyeSBwb29sIGVhY2ggdGltZSBtZW1wX21hbGxvYygpCiAgICBvciBtZW1wX2ZyZWUoKSBpcyBjYWxsZWQgKHNsb3dlciBidXQgbW9yZSBoZWxwZnVsKS4KCiAgMjAwNy0wNS0xMCBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIG1lbXAuaCwgbWVtcC5jLCBwYnVmLmMgKHNlZSB0YXNrICM2ODMxKTogdXNlIGEgbmV3IG1lbXAgcG9vbCBmb3IKICAgIFBCVUZfUE9PTCBwYnVmcyBpbnN0ZWFkIG9mIHRoZSBvbGQgcG9vbCBpbXBsZW1lbnRhdGlvbiBpbiBwYnVmLmMgdG8gcmVkdWNlCiAgICBjb2RlIHNpemUuCgogIDIwMDctMDUtMTEgRnLpZOlyaWMgQmVybm9uCiAgKiBzb2NrZXRzLmMsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmMsIG5ldGlmYXBpLmgsIG5ldGlmYXBpLmMsIHRjcGlwLmM6CiAgICBJbmNsdWRlIGEgZnVuY3Rpb24gcG9pbnRlciBpbnN0ZWFkIG9mIGEgdGFibGUgaW5kZXggaW4gdGhlIG1lc3NhZ2UgdG8gcmVkdWNlCiAgICBmb290cHJpbnQuIERpc2FibGUgc29tZSBwYXJ0IG9mIGx3aXBfc2VuZCBhbmQgbHdpcF9zZW5kdG8gaWYgc29tZSBvcHRpb25zIGFyZQogICAgbm90IHNldCAoTFdJUF9UQ1AsIExXSVBfVURQLCBMV0lQX1JBVykuCgogIDIwMDctMDUtMTAgU2ltb24gR29sZHNjaG1pZHQKICAqICouaCAoZXhjZXB0IG5ldGlmL3BwcC8qLmgpOiBJbmNsdWRlZCBwYXRjaCAjNTQ0ODogaW5jbHVkZSAnI2lmZGVmIF9fY3BsdXNwbHVzCiAgICBcIGV4dGVybiAiQyIgeycgaW4gYWxsIGhlYWRlciBmaWxlcy4gTm93IHlvdSBjYW4gd3JpdGUgeW91ciBhcHBsaWNhdGlvbiB1c2luZwogICAgdGhlIGx3SVAgc3RhY2sgaW4gQysrIGFuZCBzaW1wbHkgI2luY2x1ZGUgdGhlIGNvcmUgZmlsZXMuIE5vdGUgSSBoYXZlIGxlZnQKICAgIG91dCB0aGUgbmV0aWYvcHBwLypoIGhlYWRlciBmaWxlcyBmb3Igbm93LCBzaW5jZSBJIGRvbid0IGtub3cgd2hpY2ggZmlsZXMgYXJlCiAgICBpbmNsdWRlZCBieSBhcHBsaWNhdGlvbnMgYW5kIHdoaWNoIGFyZSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuCgogIDIwMDctMDUtMDkgU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCAqLmMvKi5oOiBJbmNsdWRlZCBwYXRjaCAjNTkyMDogQ3JlYXRlIGRlZmluZSB0byBvdmVycmlkZSBDLWxpYnJhcnkKICAgIG1lbWNweS4gMiBEZWZpbmVzIGFyZSBjcmVhdGVkOiBNRU1DUFkoKSBmb3Igbm9ybWFsIG1lbWNweSwgU01FTUNQWSgpIGZvcgogICAgc2l0dWF0aW9ucyB3aGVyZSBzb21lIGNvbXBpbGVycyBtaWdodCBpbmxpbmUgdGhlIGNvcHkgYW5kIHNhdmUgYSBmdW5jdGlvbgogICAgY2FsbC4gQWxzbyByZXBsYWNlZCBhbGwgY2FsbHMgdG8gbWVtY3B5KCkgd2l0aCBjYWxscyB0byAoUylNRU1DUFkoKS4KCiAgMjAwNy0wNS0wOCBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmg6IElmIE1FTV9MSUJDX01BTExPQz09MSwgYWxsb3cgdGhlIGRlZmluZXMgKGUuZy4gbWVtX21hbGxvYygpIC0+IG1hbGxvYygpKQogICAgdG8gYmUgb3ZlcnJpZGVuIGluIGNhc2UgdGhlIEMtbGlicmFyeSBtYWxsb2MgaW1wbGVtZW50YXRpb24gaXMgbm90IHByb3RlY3RlZAogICAgYWdhaW5zdCBjb25jdXJyZW50IGFjY2Vzcy4KCiAgMjAwNy0wNS0wNCBTaW1vbiBHb2xkc2NobWlkdCAoQXR0ZSBLb2pvKQogICogZXRoYXJwLmM6IEludHJvZHVjZWQgZmFzdCBvbmUtZW50cnktY2FjaGUgdG8gc3BlZWQgdXAgQVJQIGxvb2t1cCB3aGVuIHNlbmRpbmcKICAgIG11bHRpcGxlIHBhY2tldHMgdG8gdGhlIHNhbWUgaG9zdC4KCiAgMjAwNy0wNS0wNCBGculk6XJpYyBCZXJub24sIEpvbmF0aGFuIExhcm1vdXIKICAqIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmM6IEZpeCBidWcgIzE5MTYyICJsd2lwX3NlbnRvOiBhIHBvc3NpYmxlCiAgICB0byBjb3JydXB0IHJlbW90ZSBhZGRyL3BvcnQgY29ubmVjdGlvbiBzdGF0ZSIuIFJlZHVjZSBwcm9ibGVtcyAibm90IGVub3VnaHQgbWVtb3J5IiB3aXRoCiAgICBuZXRidWYgKGlmIHdlIHJlY2VpdmUgbG90IG9mIGRhdGFncmFtcykuIEltcHJvdmUgbHdpcF9zZW5kdG8gKG9ubHkgb25lIGV4Y2hhbmdlIGJldHdlZW4KICAgIHNvY2tldHMgYXBpIGFuZCBhcGlfbXNnIHdoaWNoIHJ1biBpbiB0Y3BpcF90aHJlYWQgY29udGV4dCkuIEFkZCBuZXRjb25uX3NlbnRvIGZ1bmN0aW9uLgogICAgV2FybmluZywgaWYgeW91IGRpcmVjdGx5IGFjY2VzcyB0byAiZnJvbWFkZHIiICYgImZyb21wb3J0IiBmaWVsZCBmcm9tIG5ldGJ1ZiBzdHJ1Y3QsCiAgICB0aGVzZSBmaWVsZHMgYXJlIG5vdyByZW5hbWVkICJhZGRyIiAmICJwb3J0Ii4KCiAgMjAwNy0wNC0xMSBKb25hdGhhbiBMYXJtb3VyCiAgKiBzeXMuaCwgYXBpX2xpYi5jOiBQcm92aWRlIG5ldyBzeXNfbWJveF90cnlmZXRjaCBmdW5jdGlvbi4gUmVxdWlyZSBwb3J0cyB0byBwcm92aWRlIG5ldwogICAgc3lzX2FyY2hfbWJveF90cnlmZXRjaCBmdW5jdGlvbiB0byBnZXQgYSBtZXNzYWdlIGlmIG9uZSBpcyB0aGVyZSwgb3RoZXJ3aXNlIHJldHVybgogICAgd2l0aCBTWVNfTUJPWF9FTVBUWS4gc3lzX2FyY2hfbWJveF90cnlmZXRjaCBjYW4gYmUgaW1wbGVtZW50ZWQgYXMgYSBmdW5jdGlvbi1saWtlIG1hY3JvCiAgICBieSB0aGUgcG9ydCBpbiBzeXNfYXJjaC5oIGlmIGRlc2lyZWQuCgogIDIwMDctMDQtMDYgRnLpZOlyaWMgQmVybm9uLCBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIHRjcGlwLmgsIHRjcGlwLmMsIG5ldGlmYXBpLmgsIG5ldGlmYXBpLmM6IE5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBMV0lQX05FVElGX0FQSQogICAgYWxsb3cgdG8gdXNlIHRocmVhZC1zYWZlIGZ1bmN0aW9ucyB0byBhZGQvcmVtb3ZlIG5ldGlmIGluIGxpc3QsIGFuZCB0byBzdGFydC9zdG9wIGRoY3AKICAgIGNsaWVudHMsIHVzaW5nIG5ldyBmdW5jdGlvbnMgZnJvbSBuZXRpZmFwaS5oLiBEaXNhYmxlIGFzIGRlZmF1bHQgKG5vIHBvcnQgY2hhbmdlIHRvIGRvKS4KCiAgMjAwNy0wNC0wNSBGculk6XJpYyBCZXJub24KICAqIHNvY2tldHMuYzogcmVtcGxhY2UgRU5PQlVGUyBlcnJvcnMgb24gYWxsb2Nfc29ja2V0IGJ5IEVORklMRSB0byBiZSBtb3JlIEJTRCBjb21wbGlhbnQuCgogIDIwMDctMDQtMDQgU2ltb24gR29sZHNjaG1pZHQKICAqIGFyY2guaCwgYXBpX21zZy5jLCBkaGNwLmMsIG1zZ19pbi5jLCBzb2NrZXRzLmM6IEludHJvZHVjZWQgI2RlZmluZSBMV0lQX1VOVVNFRF9BUkcoeCkKICAgIHVzZSB0aGlzIGZvciBhbmQgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZvcm0gdG8gdGVsbCB0aGUgY29tcGlsZXIgeW91IGludGVudGlvbmFsbHkKICAgIGFyZSBub3QgdXNpbmcgdGhpcyB2YXJpYWJsZS4gQ2FuIGJlIG92ZXJyaWRlbiBpbiBjYy5oLgoKICAyMDA3LTAzLTI4IEZy6WTpcmljIEJlcm5vbgogICogb3B0LmgsIG5ldGlmLmgsIGRoY3AuaCwgZGhjcC5jOiBOZXcgY29uZmlndXJhdGlvbiBvcHRpb24gTFdJUF9ORVRJRl9IT1NUTkFNRSBhbGxvdyB0bwogICAgZGVmaW5lIGEgaG9zdG5hbWUgaW4gbmV0aWYgc3RydWN0ICh0aGlzIGlzIGp1c3QgYSBwb2ludGVyLCBzbywgeW91IGNhbiB1c2UgYSBoYXJkY29kZWQKICAgIHN0cmluZywgcG9pbnQgb24gb25lIG9mIHlvdXIncyBldGhlcm5ldGlmIGZpZWxkLCBvciBhbGxvYyBhIHN0cmluZyB5b3Ugd2lsbCBmcmVlIHlvdXJzZWxmKS4KICAgIEl0IHdpbGwgYmUgdXNlZCBieSBESENQIHRvIHJlZ2lzdGVyIGEgY2xpZW50IGhvc3RuYW1lLCBidXQgY2FuIGFsc28gYmUgdXNlIHdoZW4geW91IGNhbGwKICAgIHNubXBfc2V0X3N5c25hbWUuCgogIDIwMDctMDMtMjggRnLpZOlyaWMgQmVybm9uCiAgKiBuZXRpZi5oLCBuZXRpZi5jOiBBIG5ldyBORVRJRl9GTEFHX0VUSEFSUCBmbGFnIGlzIGRlZmluZWQgaW4gbmV0aWYuaCwgdG8gYWxsb3cgdG8gCiAgICBpbml0aWFsaXplIGEgbmV0d29yayBpbnRlcmZhY2UncyBmbGFnIHdpdGguIEl0IHRlbGwgdGhpcyBpbnRlcmZhY2UgaXMgYW4gZXRoZXJuZXQKICAgIGRldmljZSwgYW5kIHdlIGNhbiB1c2UgQVJQIHdpdGggaXQgdG8gZG8gYSAiZ3JhdHVpdG91cyBBUlAiIChSRkMgMzIyMCAiSVAgTW9iaWxpdHkKICAgIFN1cHBvcnQgZm9yIElQdjQiIHNlY3Rpb24gNC42KSB3aGVuIGludGVyZmFjZSBpcyAidXAiIHdpdGggbmV0aWZfc2V0X3VwKCkuCgogIDIwMDctMDMtMjYgRnLpZOlyaWMgQmVybm9uLCBKb25hdGhhbiBMYXJtb3VyCiAgKiBvcHQuaCwgdGNwaXAuYzogTmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uIExXSVBfQVJQIGFsbG93IHRvIGRpc2FibGUgQVJQIGluaXQgYXQgYnVpbGQKICAgIHRpbWUgaWYgeW91IG9ubHkgdXNlIFBQUCBvciBTTElQLiBUaGUgZGVmYXVsdCBpcyBlbmFibGUuIE5vdGUgd2UgZG9uJ3QgaGF2ZSB0byBjYWxsIAogICAgZXRoYXJwX2luaXQgaW4geW91ciBwb3J0J3MgaW5pdGlsaXphdGlvbiBzZXF1ZW5jZSBpZiB5b3UgdXNlIHRjcGlwLmMsIGJlY2F1c2UgdGhpcyBjYWxsCiAgICBpcyBkb25lIGluIHRjcGlwX2luaXQgZnVuY3Rpb24uCgogIDIwMDctMDMtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiBzdGF0cy5oLCBzdGF0cy5jLCBtc2dfaW4uYzogU3RhdHMgY291bnRlcnMgY2FuIGJlIGNoYW5nZSB0byB1MzJfdCBpZiBuZWNlc3Nhcnkgd2l0aCB0aGUKICAgIG5ldyBvcHRpb24gTFdJUF9TVEFUU19MQVJHRS4gSWYgeW91IG5lZWQgdGhpcyBvcHRpb24sIGRlZmluZSBMV0lQX1NUQVRTX0xBUkdFIHRvIDEgaW4KICAgIHlvdXIgbHdpcG9wdHMuaC4gTW9yZSwgdW51c2VkIGNvdW50ZXJzIGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgc3RhdHMgc3RydWN0cywgYW5kIG5vdCAKICAgIGRpc3BsYXkgYnkgc3RhdHNfZGlzcGxheSgpLiBOb3RlIHRoYXQgc29tZSBvcHRpb25zIChTWVNfU1RBVFMgYW5kIFJBV19TVEFUUykgYXJlIGRlZmluZWQKICAgIGJ1dCBuZXZlciB1c2VkLiBGaXggbXNnX2luLmMgd2l0aCB0aGUgY29ycmVjdCAjaWYgdGVzdCBmb3IgYSBzdGF0IGRpc3BsYXkuCgogIDIwMDctMDMtMjEgS2llcmFuIE1hbnNsZXkKICAqIG5ldGlmLmMsIG5ldGlmLmg6IEFwcGx5IHBhdGNoIzQxOTcgd2l0aCBzb21lIGNoYW5nZXMgKG9yaWdpbmF0b3I6IHJpcmVsYW5kQGhtZ3NsLmNvbSkuIAogICAgUHJvdmlkZXMgY2FsbGJhY2sgb24gbmV0aWYgdXAvZG93biBzdGF0ZSBjaGFuZ2UuCgogIDIwMDctMDMtMTEgRnLpZOlyaWMgQmVybm9uLCBNYWNlIEdhZWwsIFN0ZXZlIFJleW5vbGRzCiAgKiBzb2NrZXRzLmgsIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmMsIGlnbXAuaCwgaWdtcC5jLAogICAgaXAuYywgbmV0aWYuaCwgdGNwaXAuYywgb3B0Lmg6CiAgICBOZXcgY29uZmlndXJhdGlvbiBvcHRpb24gTFdJUF9JR01QIHRvIGVuYWJsZSBJR01QIHByb2Nlc3NpbmcuIEJhc2VkIG9uIG9ubHkgb25lIAogICAgZmlsdGVyIHBlciBhbGwgbmV0d29yayBpbnRlcmZhY2VzLiBEZWNsYXJlIGEgbmV3IGZ1bmN0aW9uIGluIG5ldGlmIHRvIGVuYWJsZSB0bwogICAgY29udHJvbCB0aGUgTUFDIGZpbHRlciAodG8gcmVkdWNlIGx3SVAgdHJhZmZpYyBwcm9jZXNzaW5nKS4KCiAgMjAwNy0wMy0xMSBGculk6XJpYyBCZXJub24KICAqIHRjcC5oLCB0Y3AuYywgc29ja2V0cy5jLCB0Y3Bfb3V0LmMsIHRjcF9pbi5jLCBvcHQuaDogS2VlcGFsaXZlIHZhbHVlcyBjYW4KICAgIGJlIGNvbmZpZ3VyZWQgYXQgcnVuIHRpbWUgd2l0aCBMV0lQX1RDUF9LRUVQQUxJVkUsIGJ1dCBkb24ndCBjaGFuZ2UgdGhpcwogICAgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nIChkZWZhdWx0IGFyZSBSRkMxMTIyIGNvbXBsaWFudCkuIE5vdGUKICAgIHRoYXQgVENQX0tFRVBJRExFIGFuZCBUQ1BfS0VFUElOVFZMIGhhdmUgdG8gYmUgc2V0IGluIHNlY29uZHMuCgogIDIwMDctMDMtMDggRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3AuaDogS2VlcGFsaXZlIHZhbHVlcyBjYW4gYmUgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUsIGJ1dCBkb24ndCBjaGFuZ2UKICAgIHRoaXMgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nIChkZWZhdWx0IGFyZSBSRkMxMTIyIGNvbXBsaWFudCkuCgogIDIwMDctMDMtMDggRnLpZOlyaWMgQmVybm9uCiAgKiBzb2NrZXRzLmMsIGFwaS5oLCBhcGlfbGliLmMsIHRjcGlwLmMsIHN5cy5oLCBzeXMuYywgZXJyLmMsIG9wdC5oOgogICAgSW1wbGVtZW50IExXSVBfU09fUkNWVElNRU8gY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlL2Rpc2FibGUgU09fUkNWVElNRU8KICAgIG9uIFVEUCBzb2NrZXRzL25ldGNvbm4uCgogIDIwMDctMDMtMDggU2ltb24gR29sZHNjaG1pZHQKICAqIHNubXBfbXNnLmgsIG1zZ19pbi5jOiBTTk1QIFVEUCBwb3J0cyBjYW4gYmUgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUuCgogIDIwMDctMDMtMDYgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBzb2NrZXRzLmgsIHNvY2tldHMuYywgdGNwaXAuYywgc3lzLmgsIHN5cy5jLCBlcnIuaDogCiAgICBJbXBsZW1lbnQgU09fUkNWVElNRU8gb24gVURQIHNvY2tldHMvbmV0Y29ubi4KCiAgMjAwNy0wMi0yOCBLaWVyYW4gTWFuc2xleSAoYmFzZWQgb24gcGF0Y2ggZnJvbSBTaW1vbiBHb2xkc2NobWlkdCkKICAqIGFwaV9saWIuYywgdGNwaXAuYywgbWVtcC5jLCBtZW1wLmg6IG1ha2UgQVBJIG1zZyBzdHJ1Y3RzIGFsbG9jYXRlZAogICAgb24gdGhlIHN0YWNrIGFuZCByZW1vdmUgdGhlIEFQSSBtc2cgdHlwZSBmcm9tIG1lbXAKCiAgMjAwNy0wMi0yNiBKb25hdGhhbiBMYXJtb3VyIChiYXNlZCBvbiBwYXRjaCBmcm9tIFNpbW9uIEdvbGRzY2htaWR0KQogICogc29ja2V0cy5oLCBzb2NrZXRzLmM6IE1vdmUgc29ja2V0IGluaXRpYWxpemF0aW9uIHRvIG5ldwogICAgbHdpcF9zb2NrZXRfaW5pdCgpIGZ1bmN0aW9uLgogICAgTk9URTogdGhpcyBjaGFuZ2VzIHRoZSBBUEkgd2l0aCBwb3J0cy4gUG9ydHMgd2lsbCBoYXZlIHRvIGJlCiAgICB1cGRhdGVkIHRvIGNhbGwgbHdpcF9zb2NrZXRfaW5pdCgpIG5vdy4KCiAgMjAwNy0wMi0yNiBKb25hdGhhbiBMYXJtb3VyIChiYXNlZCBvbiBwYXRjaCBmcm9tIFNpbW9uIEdvbGRzY2htaWR0KQogICogYXBpX2xpYi5jOiBVc2UgbWVtY3B5IGluIG5ldGJ1Zl9jb3B5X3BhcnRpYWwuCgoKICArKyBCdWcgZml4ZXM6CgogIDIwMDgtMDMtMTcgRnLpZOlyaWMgQmVybm9uLCBFZCBLZXJla2VzCiAgKiBpZ21wLmgsIGlnbXAuYzogRml4IGJ1ZyAjMjI2MTMgIklHTVAgaXBoZHIgcHJvYmxlbSIgKGNvdWxkIGhhdmUKICAgIHNvbWUgcHJvYmxlbXMgdG8gZmlsbCB0aGUgSVAgaGVhZGVyIG9uIHNvbWUgdGFyZ2V0cywgdXNlIG5vdyB0aGUKICAgIGlwLmggbWFjcm9zIHRvIGRvIGl0KS4KCiAgMjAwOC0wMy0xMyBGculk6XJpYyBCZXJub24KICAqIHNvY2tldHMuYzogRml4IGJ1ZyAjMjI0MzUgImx3aXBfcmVjdmZyb20gd2l0aCBUQ1AgYnJlYWs7Ii4gVXNpbmcKICAgIChsd2lwXylyZWN2ZnJvbSB3aXRoIHZhbGlkICJmcm9tIiBhbmQgImZyb21sZW4iIHBhcmFtZXRlcnMsIG9uIGEKICAgIFRDUCBjb25uZWN0aW9uIGNhdXNlZCBhIGNyYXNoLiBOb3RlIHRoYXQgdXNpbmcgKGx3aXBfKXJlY3Zmcm9tCiAgICBsaWtlIHRoaXMgaXMgYSBiaXQgc2xvdyBhbmQgdGhhdCB1c2luZyAobHdpcClnZXRwZWVybmFtZSBpcyB0aGUKICAgIGdvb2QgbHdpcCB3YXkgdG8gZG8gaXQgKHNvLCB1c2luZyByZWN2IGlzIGZhc3RlciBvbiB0Y3Agc29ja2V0cykuCgogIDIwMDgtMDMtMTIgRnLpZOlyaWMgQmVybm9uLCBKb25hdGhhbiBMYXJtb3VyCiAgKiBhcGlfbXNnLmMsIGNvbnRyaWIvYXBwcy9waW5nLmM6IEZpeCBidWcgIzIyNTMwICJhcGlfbXNnLmMncwogICAgcmVjdl9yYXcoKSBkb2VzIG5vdCBjb25zdW1lIGRhdGEiLCBhbmQgdGhlIHBpbmcgc2FtcGxlICh3aXRoCiAgICBMV0lQX1NPQ0tFVD0xLCB0aGUgY29kZSBkaWQgdGhlIHdyb25nIHN1cHBvc2l0aW9uIHRoYXQgbHdpcF9yZWN2ZnJvbQogICAgcmV0dXJuZWQgdGhlIElQIHBheWxvYWQsIHdpdGhvdXQgdGhlIElQIGhlYWRlcikuCgogIDIwMDgtMDMtMDQgSm9uYXRoYW4gTGFybW91cgogICogbWVtLmMsIHN0YXRzLmMsIG1lbS5oOiBhcHBseSBwYXRjaCAjNjQxNCB0byBhdm9pZCBjb21waWxlciBlcnJvcnMKICBhbmQvb3Igd2FybmluZ3Mgb24gc29tZSBzeXN0ZW1zIHdoZXJlIG1lbV9zaXplX3QgYW5kIHNpemVfdCBkaWZmZXIuCiAgKiBwYnVmLmMsIHBwcC5jOiBGaXggd2FybmluZ3Mgb24gc29tZSBzeXN0ZW1zIHdpdGggbWVtX21hbGxvYy4KCiAgMjAwOC0wMy0wNCBLaWVyYW4gTWFuc2xleSAoY29udHJpYnV0aW9ucyBieSBvdGhlcnMpIAogICogTnVtZXJvdXMgc21hbGwgY29tcGlsZXIgZXJyb3Ivd2FybmluZyBmaXhlcyBmcm9tIGNvbnRyaWJ1dGlvbnMgdG8KICAgIG1haWxpbmcgbGlzdCBhZnRlciAxLjMuMCByZWxlYXNlIGNhbmRpZGF0ZSBtYWRlLgoKICAyMDA4LTAxLTI1IEN1aSBoZW5nYmluIChpbnRlZ3JhdGVkIGJ5IEZy6WTpcmljIEJlcm5vbikKICAqIGRucy5jOiBGaXggYnVnICMyMjEwOCAiRE5TIHByb2JsZW0iIGNhdXNlZCBieSB1bmFsaWduZWQgc3RydWN0dXJlcy4KCiAgMjAwOC0wMS0xNSBLaWVyYW4gTWFuc2xleQogICogdGNwX291dC5jOiBCVUcyMDUxMS4gIE1vZGlmeSBwZXJzaXN0IHRpbWVyIHRvIHN0YXJ0IHdoZW4gd2UgYXJlCiAgICBwcmV2ZW50ZWQgZnJvbSBzZW5kaW5nIGJ5IGEgc21hbGwgc2VuZCB3aW5kb3csIG5vdCBqdXN0IGEgemVybwogICAgc2VuZCB3aW5kb3cuCgogIDIwMDgtMDEtMDkgSm9uYXRoYW4gTGFybW91cgogICogb3B0LmgsIGlwLmM6IFJlbmFtZSBJUF9PUFRJT05TIGRlZmluZSB0byBJUF9PUFRJT05TX0FMTE9XRUQgdG8gYXZvaWQKICAgIGNvbmZsaWN0IHdpdGggTGludXggc3lzdGVtIGhlYWRlcnMuCgogIDIwMDgtMDEtMDYgSm9uYXRoYW4gTGFybW91cgogICogZGhjcC5jOiBmaXggYnVnICMxOTkyNzogIkRIQ1AgTkFDSyBwcm9ibGVtIiBieSBjbGVhcmluZyBhbnkgZXhpc3Rpbmcgc2V0IElQCiAgICBhZGRyZXNzIGVudGlyZWx5IG9uIHJlY2VpdmluZyBhIERIQ1BOQUssIGFuZCByZXN0YXJ0aW5nIGRpc2NvdmVyeS4KCiAgMjAwNy0xMi0yMSBTaW1vbiBHb2xkc2NobWlkdAogICogc3lzLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmM6IGZpeCBidWcgIzIxNjk4OiAibmV0Y29ubi0+cmVjdl9hdmFpbAogICAgaXMgbm90IHByb3RlY3RlZCIgYnkgdXNpbmcgbmV3IG1hY3JvcyBmb3IgaW50ZXJsb2NrZWQgYWNjZXNzIHRvIG1vZGlmeS90ZXN0CiAgICBuZXRjb25uLT5yZWN2X2F2YWlsLgoKICAyMDA3LTEyLTIwIEtpZXJhbiBNYW5zbGV5IChiYXNlZCBvbiBwYXRjaCBmcm9tIE9sZWcgVHlzaGV2KQogICogdGNwX2luLmM6IGZpeCBidWcjIDIxNTM1IChucnR4IG5vdCByZXNldCBjb3JyZWN0bHkgaW4gU1lOX1NFTlQgc3RhdGUpCgogIDIwMDctMTItMjAgS2llcmFuIE1hbnNsZXkgKGJhc2VkIG9uIHBhdGNoIGZyb20gUGVyLUhlbnJpayBMdW5kYm9sbSkKICAqIHRjcC5jLCB0Y3BfaW4uYywgdGNwX291dC5jLCB0Y3AuaDogZml4IGJ1ZyAjMjAxOTkgKGJldHRlciBoYW5kbGluZwogICAgb2Ygc2lsbHkgd2luZG93IGF2b2lkYW5jZSBhbmQgcHJldmVudCBsd0lQIGZyb20gc2hyaW5raW5nIHRoZSB3aW5kb3cpCgogIDIwMDctMTItMDQgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5jLCB0Y3BfaW4uYzogZml4IGJ1ZyAjMjE2OTkgKHNlZ21lbnQgbGVhayBpbiBvb3NlcSBwcm9jZXNzaW5nIHdoZW4gbGFzdAogICAgZGF0YSBwYWNrZXQgd2FzIGxvc3QpOiBhZGQgYXNzZXJ0IHRoYXQgYWxsIHNlZ21lbnQgbGlzdHMgYXJlIGVtcHR5IGluCiAgICB0Y3BfcGNiX3JlbW92ZSBiZWZvcmUgc2V0dGluZyBwY2IgdG8gQ0xPU0VEIHN0YXRlOyBkb24ndCBkaXJlY3RseSBzZXQgQ0xPU0VECiAgICBzdGF0ZSBmcm9tIExBU1RfQUNLIGluIHRjcF9wcm9jZXNzCgogIDIwMDctMTItMDIgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuaDogZml4IGJ1ZyAjMjE2NTQ6IGV4Y2x1ZGUgZGVmaW5pdGlvbiBvZiBzdHJ1Y3QgdGltZXZhbCBmcm9tICNpZm5kZWYgRkRfU0VUCiAgICBJZiBpbmNsdWRpbmcgPHN5cy90aW1lLmg+IGZvciBzeXN0ZW0tc3RydWN0IHRpbWV2YWwsIExXSVBfVElNRVZBTF9QUklWQVRFIG5vdwogICAgaGFzIHRvIGJlIHNldCB0byAwIGluIGx3aXBvcHRzLmgKCiAgMjAwNy0xMi0wMiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jLCBhcGlfbGliLmM6IGZpeCBidWcgIzIxNjU2IChyZWN2bWJveCBwcm9ibGVtIGluIG5ldGNvbm4gQVBJKTogYWx3YXlzCiAgICBhbGxvY2F0ZSBhIHJlY3ZtYm94IGluIG5ldGNvbm5fbmV3X3dpdGhfcHJvdG9fYW5kX2NhbGxiYWNrLiBGb3IgYSB0Y3AtbGlzdGVuCiAgICBuZXRjb25uLCB0aGlzIHJlY3ZtYm94IGlzIGxhdGVyIGZyZWVkIGFuZCBhIG5ldyBtYm94IGlzIGFsbG9jYXRlZCBmb3IgYWNjZXB0bWJveC4KICAgIFRoaXMgaXMgYSBmaXggZm9yIHRocmVhZC1zYWZldHkgYW5kIGFsbG9jYXRlcyBhbGwgaXRlbXMgbmVlZGVkIGZvciBhIG5ldGNvbm4KICAgIHdoZW4gdGhlIG5ldGNvbm4gaXMgY3JlYXRlZC4KCiAgMjAwNy0xMS0zMCBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmM6IGZpcnN0IGF0dGVtcHQgdG8gZml4IGJ1ZyAjMjE2NTUgKERIQ1AgZG9lc24ndCB3b3JrIHJlbGlhYmx5IHdpdGggbXVsdGlwbGUKICAgIG5ldGlmcyk6IGlmIExXSVBfREhDUCBpcyBlbmFibGVkLCBVRFAgcGFja2V0cyB0byBESENQX0NMSUVOVF9QT1JUIGFyZSBwYXNzZWQKICAgIHRvIG5ldGlmLT5kaGNwLT5wY2Igb25seSAoaWYgdGhhdCBleGlzdHMpIGFuZCBub3QgdG8gYW55IG90aGVyIHBjYiBmb3IgdGhlIHNhbWUKICAgIHBvcnQgKG9ubHkgc29sdXRpb24gdG8gbGV0IFVEUCBwY2JzICdiaW5kJyB0byBhIG5ldGlmIGluc3RlYWQgb2YgYW4gSVAgYWRkcmVzcykKCiAgMjAwNy0xMS0yNyBTaW1vbiBHb2xkc2NobWlkdAogICogaXAuYzogZml4ZWQgYnVnICMyMTY0MyAodWRwX3NlbmQvcmF3X3NlbmQgZG9uJ3QgZmFpbCBpZiBuZXRpZiBpcyBkb3duKSBieQogICAgbGV0dGluZyBpcF9yb3V0ZSBvbmx5IHVzZSBuZXRpZnMgdGhhdCBhcmUgdXAuCgogIDIwMDctMTEtMjcgU2ltb24gR29sZHNjaG1pZHQKICAqIGVyci5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYywgc29ja2V0cy5jOiBDaGFuZ2VkIGVycm9yIGhhbmRsaW5nOiBFUlJfTUVNLCBFUlJfQlVGCiAgICBhbmQgRVJSX1JURSBhcmUgc2VlbiBhcyBub24tZmF0YWwsIGFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLiBuZXRjb25ucyBhbmQKICAgIHNvY2tldHMgYmxvY2sgbW9zdCBvcGVyYXRpb25zIG9uY2UgdGhleSBoYXZlIHNlZW4gYSBmYXRhbCBlcnJvci4KCiAgMjAwNy0xMS0yNyBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmgsIHVkcC5jLCBkaGNwLmM6IEltcGxlbWVudGVkIG5ldyBmdW5jdGlvbiB1ZHBfc2VuZHRvX2lmIHdoaWNoIHRha2VzIHRoZQogICAgbmV0aWYgdG8gc2VuZCBhcyBhbiBhcmd1bWVudCAodG8gYmUgYWJsZSB0byBzZW5kIG9uIG5ldGlmcyB0aGF0IGFyZSBkb3duKS4KCiAgMjAwNy0xMS0yNiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmM6IEZpeGVkIGJ1ZyAjMjE1ODI6IHBjYi0+YWNrZWQgYWNjb3VudGluZyBjYW4gYmUgd3Jvbmcgd2hlbiBBQ0tzCiAgICBhcnJpdmUgb3V0LW9mLW9yZGVyCgogIDIwMDctMTEtMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLCB0Y3Bfb3V0LmMsIGFwaV9tc2cuYzogRml4ZWQgYnVnICMyMDI4NzogdGNwX291dHB1dF9uYWdsZSBzZW5kcyB0b28gZWFybHkKICAgIEZpeGVkIHRoZSBuYWdsZSBhbGdvcml0aG07IG5hZ2xlIG5vdyBhbHNvIHdvcmtzIGZvciBhbGwgcmF3IEFQSSBhcHBsaWNhdGlvbnMKICAgIGFuZCBoYXMgdG8gYmUgZXhwbGljaXRseSBkaXNhYmxlZCB3aXRoICd0Y3BfcGNiLT5mbGFncyB8PSBURl9OT0RFTEFZJwoKICAyMDA3LTExLTEyIEZy6WTpcmljIEJlcm5vbgogICogc29ja2V0cy5jLCBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmgsIGFwaV9tc2cuYzogRml4ZWQgYnVnICMyMDkwMC4gTm93LCBtb3N0CiAgICBvZiB0aGUgbmV0Y29ubl9wZWVyIGFuZCBuZXRjb25uX2FkZHIgcHJvY2Vzc2luZyBpcyBkb25lIGluc2lkZSB0Y3BpcF90aHJlYWQKICAgIGNvbnRleHQgaW4gZG9fZ2V0YWRkci4KCiAgMjAwNy0xMS0xMCBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmM6IEZpeGVkIGJ1ZzogYXNzZXJ0IGZpcmVkIHdoZW4gTUVNUF9BUlBfUVVFVUUgd2FzIGVtcHR5ICh3aGljaCBjYW4KICAgIGhhcHBlbiBhbnkgdGltZSkuIE5vdyB0aGUgcGFja2V0IHNpbXBseSBpc24ndCBlbnF1ZXVlZCB3aGVuIG91dCBvZiBtZW1vcnkuCgogIDIwMDctMTEtMDEgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5jLCB0Y3BfaW4uYzogRml4ZWQgYnVnICMyMTQ5NDogVGhlIHNlbmQgbXNzIChwY2ItPm1zcykgaXMgc2V0IHRvIDUzNiAob3IKICAgIFRDUF9NU1MgaWYgdGhhdCBpcyBzbWFsbGVyKSBhcyBsb25nIGFzIG5vIE1TUyBvcHRpb24gaXMgcmVjZWl2ZWQgZnJvbSB0aGUKICAgIHJlbW90ZSBob3N0LgoKICAyMDA3LTExLTAxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCwgdGNwLmMsIHRjcF9pbi5jOiBGaXhlZCBidWcgIzIxNDkxOiBUaGUgTVNTIG9wdGlvbiBzZW50ICh3aXRoIFNZTikKICAgIGlzIG5vdyBiYXNlZCBvbiBUQ1BfTVNTIGluc3RlYWQgb2YgcGNiLT5tc3MgKG9uIHBhc3NpdmUgb3BlbiBub3cgZWZmZWN0aXZlbHkKICAgIHNlbmRpbmcgb3VyIGNvbmZpZ3VyZWQgVENQX01TUyBpbnN0ZWFkIG9mIHRoZSBvbmUgcmVjZWl2ZWQpLgoKICAyMDA3LTExLTAxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYzogRml4ZWQgYnVnICMyMTE4MTogT24gYWN0aXZlIG9wZW4sIHRoZSBpbml0aWFsIGNvbmdlc3Rpb24gd2luZG93IHdhcwogICAgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgY29uZmlndXJlZCBUQ1BfTVNTLCBub3Qgb24gdGhlIE1TUyBvcHRpb24gcmVjZWl2ZWQKICAgIHdpdGggU1lOK0FDSy4KCiAgMjAwNy0xMC0wOSBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmMsIGluZXQuYywgaW5ldC5oOiBGaXhlZCBVRFBMaXRlOiBzZW5kOiBDaGVja3N1bSB3YXMgYWx3YXlzIGdlbmVyYXRlZCB0b28KICAgIHNob3J0IGFuZCBhbHNvIHdhcyBnZW5lcmF0ZWQgd3JvbmcgaWYgY2hlY2tzdW0gY292ZXJhZ2UgIT0gdG90X2xlbjsKICAgIHJlY2VpdmU6IGNoZWNrc3VtIHdhcyBjYWxjdWxhdGVkIHdyb25nIGlmIGNoZWNrc3VtIGNvdmVyYWdlICE9IHRvdF9sZW4KCiAgMjAwNy0xMC0wOCBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmM6IGxmcmVlIHdhcyBub3QgdXBkYXRlZCBpbiBtZW1fcmVhbGxvYyEKCiAgMjAwNy0xMC0wNyBGculk6XJpYyBCZXJub24KICAqIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYzogRmlyc3Qgc3RlcCB0byBmaXggImJ1ZyAjMjA5MDAgOiBQb3RlbnRpYWwKICAgIGNyYXNoIGVycm9yIHByb2JsZW0gd2l0aCBuZXRjb25uX3BlZXIgJiBuZXRjb25uX2FkZHIiLiBWRVJZIElNUE9SVEFOVDoKICAgIHRoaXMgY2hhbmdlIGNhdXNlIGFuIEFQSSBicmVha2FnZSBmb3IgbmV0Y29ubl9hZGRyLCBzaW5jZSBhIHBhcmFtZXRlcgogICAgdHlwZSBjaGFuZ2UuIEFueSBjb21waWxlciBzaG91bGQgY2F1c2UgYW4gZXJyb3Igd2l0aG91dCBhbnkgY2hhbmdlcyBpbgogICAgeW91cnMgbmV0Y29ubl9wZWVyIGNhbGxzIChzbywgaXQgY2FuJ3QgYmUgYSAic2lsZW50IGNoYW5nZSIpLiBJdCBhbHNvCiAgICByZWR1Y2UgYSBsaXR0bGUgYml0IHRoZSBmb290cHJpbnQgZm9yIHNvY2tldCBsYXllciAobHdpcF9nZXRwZWVybmFtZSAmCiAgICBsd2lwX2dldHNvY2tuYW1lIHVzZSBub3cgYSBjb21tb24gbHdpcF9nZXRhZGRybmFtZSBmdW5jdGlvbiBzaW5jZSAKICAgIG5ldGNvbm5fcGVlciAmIG5ldGNvbm5fYWRkciBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlcnMpLgoKICAyMDA3LTA5LTIwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYzogRml4ZWQgYnVnICMyMTA4MCAodGNwX2JpbmQgd2l0aG91dCBjaGVjayBwY2JzIGluIFRJTUVfV0FJVCBzdGF0ZSkKICAgIGJ5IGNoZWNraW5nICB0Y3BfdHdfcGNicyBhbHNvCgogIDIwMDctMDktMTkgU2ltb24gR29sZHNjaG1pZHQKICAqIGljbXAuYzogRml4ZWQgYnVnICMyMTEwNyAoZGlkbid0IHJlc2V0IElQIFRUTCBpbiBJQ01QIGVjaG8gcmVwbGllcykKCiAgMjAwNy0wOS0xNSBNaWtlIEtsZXNob3YKICAqIG1lbS5jOiBGaXhlZCBidWcgIzIxMDc3IChpbmFjY3VyYWN5IGluIGNhbGN1bGF0aW9uIG9mIGx3aXBfc3RhdC5tZW0udXNlZCkKCiAgMjAwNy0wOS0wNiBGculk6XJpYyBCZXJub24KICAqIHNldmVyYWwtZmlsZXM6IHJlcGxhY2Ugc29tZSAjaW5jbHVkZSAiYXJjaC9jYy5oIiBieSAibHdpcC9hcmNoLmgiLCBvciBzaW1wbHkgcmVtb3ZlCiAgICBpdCBhcyBsb25nIGFzICJsd2lwL29wdC5oIiBpcyBpbmNsdWRlZCBiZWZvcmUgKHRoaXMgb25lIGluY2x1ZGUgImx3aXAvZGVidWcuaCIgd2hpY2gKICAgIGFscmVhZHkgaW5jbHVkZSAibHdpcC9hcmNoLmgiKS4gTGlrZSB0aGF0LCBkZWZhdWx0IGRlZmluZXMgYXJlIHByb3ZpZGVkIGJ5ICJsd2lwL2FyY2guaCIKICAgIGlmIHRoZXkgYXJlIG5vdCBkZWZpbmVkIGluIGNjLmgsIGluIHRoZSBzYW1lIHNwaXJpdCB0aGFuICJsd2lwL29wdC5oIiBmb3IgbHdpcG9wdHMuaC4KCiAgMjAwNy0wOC0zMCBGculk6XJpYyBCZXJub24KICAqIGlnbXAuaCwgaWdtcC5jOiBTb21lIGNoYW5nZXMgdG8gcmVtb3ZlIHNvbWUgcmVkdW5kYW50IGNvZGUsIGFkZCBzb21lIHRyYWNlcywgCiAgICBhbmQgZml4IHNvbWUgY29kaW5nIHN0eWxlLgoKICAyMDA3LTA4LTI4IEZy6WTpcmljIEJlcm5vbgogICogdGNwaXAuYzogRml4IFRDUElQX01TR19JTlBLVCBwcm9jZXNzaW5nOiBub3csIHRjcGlwX2lucHV0IGNhbiBiZSB1c2VkIGZvciBhbnkKICAgIGtpbmQgb2YgcGFja2V0cy4gVGhlc2UgcGFja2V0cyBhcmUgY29uc2lkZXJlZCBsaWtlIEV0aGVybmV0IHBhY2tldHMgKHBheWxvYWQgCiAgICBwb2ludGluZyB0byBldGhoZHIpIGlmIHRoZSBuZXRpZiBnb3QgdGhlIE5FVElGX0ZMQUdfRVRIQVJQIGZsYWcuIEVsc2UsIHBhY2tldHMgCiAgICBhcmUgY29uc2lkZXJlZCBsaWtlIElQIHBhY2tldHMgKHBheWxvYWQgcG9pbnRpbmcgdG8gaXBoZHIpLgoKICAyMDA3LTA4LTI3IEZy6WTpcmljIEJlcm5vbgogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jOiBGaXJzdCBmaXggZm9yICJidWcgIzIwOTAwIDogUG90ZW50aWFsIGNyYXNoIGVycm9yCiAgICBwcm9ibGVtIHdpdGggbmV0Y29ubl9wZWVyICYgbmV0Y29ubl9hZGRyIi4gSW50cm9kdWNlIE5FVENPTk5fTElTVEVOIG5ldGNvbm5fc3RhdGUKICAgIGFuZCByZW1vdmUgb2Jzb2xldGUgb25lcyAoTkVUQ09OTl9SRUNWICYgTkVUQ09OTl9BQ0NFUFQpLgoKICAyMDA3LTA4LTI0IEtpZXJhbiBNYW5zbGV5CiAgKiBpbmV0LmMgTW9kaWZ5IChhY2MgPj4gMTYpIHRlc3QgdG8gKChhY2MgPj4gMTYpICE9IDApIHRvIGhlbHAgYnVnZ3kKICAgIGNvbXBpbGVyIChQYXJhZGlnbSBDKyspCgogIDIwMDctMDgtMDkgRnLpZOlyaWMgQmVybm9uLCBCaWxsIEZsb3JhYwogICogc3RhdHMuaCwgc3RhdHMuYywgaWdtcC5oLCBpZ21wLmMsIG9wdC5oOiBGaXggZm9yIGJ1ZyAjMjA1MDMgOiBJR01QIEltcHJvdmVtZW50LgogICAgSW50cm9kdWNlIElHTVBfU1RBVFMgdG8gY2VudHJhbGl6ZSBzdGF0aXN0aWNzIG1hbmFnZW1lbnQuCgogIDIwMDctMDgtMDkgRnLpZOlyaWMgQmVybm9uLCBCaWxsIEZsb3JhYwogICogdWRwLmM6IEZpeCBmb3IgYnVnICMyMDUwMyA6IElHTVAgSW1wcm92ZW1lbnQuIEVuYWJsZSB0byByZWNlaXZlIGEgbXVsdGljYXN0CiAgICBwYWNrZXQgb24gYSB1ZHAgcGNiIGJpbmRlZCBvbiBhbiBuZXRpZidzIElQIGFkZHJlc3MsIGFuZCBub3Qgb24gImFueSIuCgogIDIwMDctMDgtMDkgRnLpZOlyaWMgQmVybm9uLCBCaWxsIEZsb3JhYwogICogaWdtcC5oLCBpZ21wLmMsIGlwLmM6IEZpeCBtaW5vciBjaGFuZ2VzIGZyb20gYnVnICMyMDUwMyA6IElHTVAgSW1wcm92ZW1lbnQuCiAgICBUaGlzIGlzIG1haW5seSBvbiB1c2luZyBsb29rdXAvbG9va2ZvciwgYW5kIHNvbWUgY29kaW5nIHN0eWxlcy4uLgoKICAyMDA3LTA3LTI2IEZy6WTpcmljIEJlcm5vbiAoYW5kICJ0aGVkb2N0b3IiKQogICogaWdtcC5jOiBGaXggYnVnICMyMDU5NSB0byBhY2NlcHQgSUdNUHYzICJRdWVyeSIgbWVzc2FnZXMuCgogIDIwMDctMDctMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9tc2cuYywgdGNwLmM6IEFub3RoZXIgZml4IGZvciBidWcgIzIwMDIxOiBieSBub3QgcmV0dXJuaW5nIGFuIGVycm9yIGlmCiAgICB0Y3Bfb3V0cHV0IGZhaWxzIGluIHRjcF9jbG9zZSwgdGhlIGNvZGUgaW4gZG9fY2xvc2VfaW50ZXJuYWwgZ2V0cyBzaW1wbGVyCiAgICAodGNwX291dHB1dCBpcyBjYWxsZWQgYWdhaW4gbGF0ZXIgZnJvbSB0Y3AgdGltZXJzKS4KCiAgMjAwNy0wNy0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogaXBfZnJhZy5jOiBGaXhlZCBidWcgIzIwNDI5OiB1c2UgdGhlIG5ldyBwYnVmX2NvcHlfcGFydGlhbCBpbnN0ZWFkIG9mIHRoZSBvbGQKICAgIGNvcHlfZnJvbV9wYnVmLCB3aGljaCBpbGxlZ2FsbHkgbW9kaWZpZWQgdGhlIGdpdmVuIHBidWYuCgogIDIwMDctMDctMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9vdXQuYzogdGNwX2VucXVldWU6IHBjYi0+c25kX3F1ZXVlbGVuIGRpZG4ndCB3b3JrIGZvciBjaGFpbmUgUEJVRl9SQU1zOgogICAgY2hhbmdlZCBzbmRfcXVldWVsZW4rKyB0byBzbmRfcXVldWVsZW4gKz0gcGJ1Zl9jbGVuKHApLgoKICAyMDA3LTA3LTI0IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbXNnLmMsIHRjcC5jOiBGaXggYnVnICMyMDQ4MDogQ2hlY2sgdGhlIHBjYiBwYXNzZWQgdG8gdGNwX2xpc3RlbigpIGZvciB0aGUKICAgIGNvcnJlY3Qgc3RhdGUgKG11c3QgYmUgQ0xPU0VEKS4KCiAgMjAwNy0wNy0xMyBUaG9tYXMgVGFyYW5vd3NraSAoY29tbWl0ZWQgYnkgSmFyZWQgR3J1YmIpCiAgKiBtZW1wLmM6IEZpeCBidWcgIzIwNDc4OiBtZW1wX21hbGxvYyByZXR1cm5lZCBOVUxMK01FTVBfU0laRSBvbiBmYWlsZWQKICAgIGFsbG9jYXRpb24uIEl0IG5vdyByZXR1cm5zIE5VTEwuCgogIDIwMDctMDctMTMgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbXNnLmM6IEZpeCBidWcgIzIwMzE4OiBhcGlfbXNnICJyZWN2IiBjYWxsYmFja3MgZG9uJ3QgY2FsbCBwYnVmX2ZyZWUgaW4KICAgIGFsbCBlcnJvciBjYXNlcy4KCiAgMjAwNy0wNy0xMyBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuYzogRml4IGJ1ZyAjMjAzMTU6IHBvc3NpYmxlIG1lbW9yeSBsZWFrIHByb2JsZW0gaWYgdGNwX2xpc3RlbiBmYWlsZWQsCiAgICBiZWNhdXNlIGN1cnJlbnQgY29kZSBkb2Vzbid0IGZvbGxvdyByYXdhcGkudHh0IGRvY3VtZW50YXRpb24uCgogIDIwMDctMDctMTMgS2llcmFuIE1hbnNsZXkKICAqIHNyYy9jb3JlL3RjcF9pbi5jIEFwcGx5IHBhdGNoIzU3NDEgZnJvbSBPbGVnIFR5c2hldiB0byBmaXggYnVnIGluCiAgICBvdXQgb2Ygc2VxdWVuY2UgcHJvY2Vzc2luZyBvZiByZWNlaXZlZCBwYWNrZXRzCgogIDIwMDctMDctMDMgU2ltb24gR29sZHNjaG1pZHQKICAqIG5lYXJseS1hbGwtZmlsZXM6IEFkZGVkIGFzc2VydGlvbnMgd2hlcmUgUEJVRl9SQU0gcGJ1ZnMgYXJlIHVzZWQgYW5kIGFuCiAgICBhc3N1bXB0aW9uIGlzIG1hZGUgdGhhdCB0aGlzIHBidWYgaXMgaW4gb25lIHBpZWNlIChpLmUuIG5vdCBjaGFpbmVkKS4gVGhlc2UKICAgIGFzc3VtcHRpb25zIGNsYXNoIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGNvbnZlcnRpbmcgdG8gZnVsbHkgcG9vbC1iYXNlZAogICAgcGJ1ZiBpbXBsZW1lbnRhdGlvbnMsIHdoZXJlIFBCVUZfUkFNIHBidWZzIG1pZ2h0IGJlIGNoYWluZWQuCgogIDIwMDctMDctMDMgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYzogRmluYWwgZml4IGZvciBidWcgIzIwMDIxIGFuZCBzb21lIG90aGVyIHByb2JsZW1zCiAgICB3aGVuIGNsb3NpbmcgdGNwIG5ldGNvbm5zOiByZW1vdmVkIGNvbm4tPnNlbSwgbGVzcyBjb250ZXh0IHN3aXRjaGVzIHdoZW4KICAgIGNsb3NpbmcsIGJvdGggbmV0Y29ubl9jbG9zZSBhbmQgbmV0Y29ubl9kZWxldGUgc2hvdWxkIHNhZmVseSBjbG9zZSB0Y3AKICAgIGNvbm5lY3Rpb25zLgoKICAyMDA3LTA3LTAyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcHY0L2lwLmgsIGlwdjYvaXAuaCwgb3B0LmgsIG5ldGlmLmgsIGV0aGFycC5oLCBpcHY0L2lwLmMsIG5ldGlmLmMsIHJhdy5jLAogICAgdGNwX291dC5jLCB1ZHAuYywgZXRoYXJwLmM6IEFkZGVkIG9wdGlvbiBMV0lQX05FVElGX0hXQUREUkhJTlQgKGRlZmF1bHQ9b2ZmKQogICAgdG8gY2FjaGUgQVJQIHRhYmxlIGluZGljZXMgd2l0aCBlYWNoIHBjYiBpbnN0ZWFkIG9mIHNpbmdsZS1lbnRyeSBjYWNoZSBmb3IKICAgIHRoZSBjb21wbGV0ZSBzdGFjay4KCiAgMjAwNy0wNy0wMiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgsIHRjcC5jLCB0Y3BfaW4uYywgdGNwX291dC5jOiBBZGRlZCBzb21lIEFTU0VSVFMgYW5kIGNhc3RzIHRvIHByZXZlbnQKICAgIHdhcm5pbmdzIHdoZW4gYXNzaWduaW5nIHRvIHNtYWxsZXIgdHlwZXMuCgogIDIwMDctMDYtMjggU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9vdXQuYzogQWRkZWQgY2hlY2sgdG8gcHJldmVudCB0Y3BfcGNiLT5zbmRfcXVldWVsZW4gZnJvbSBvdmVyZmxvd2luZy4KCiAgMjAwNy0wNi0yOCBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmg6IEZpeGVkIGJ1ZyAjMjAyODc6IEZpeGVkIG5hZ2xlIGFsZ29yaXRobSAoc2VuZGluZyB3YXMgZG9uZSB0b28gZWFybHkgaWYKICAgIGEgc2VnbWVudCBjb250YWluZWQgY2hhaW5lZCBwYnVmcykKCiAgMjAwNy0wNi0yOCBGculk6XJpYyBCZXJub24KICAqIGF1dG9pcC5jOiByZXBsYWNlIG1vc3Qgb2YgcmFuZCgpIGNhbGxzIGJ5IGEgbWFjcm8gTFdJUF9BVVRPSVBfUkFORCB3aGljaCBjb21wdXRlCiAgICBhICJwc2V1ZG8tcmFuZG9tIiB2YWx1ZSBiYXNlZCBvbiBuZXRpZidzIE1BQyBhbmQgc29tZSBhdXRvaXAgZmllbGRzLiBJdCdzIGFsd2F5cwogICAgcG9zc2libGUgdG8gZGVmaW5lIHRoaXMgbWFjcm8gaW4geW91ciBvd24gbHdpcG9wdHMuaCB0byBhbHdheXMgdXNlIEMgbGlicmFyeSdzCiAgICByYW5kKCkuIE5vdGUgdGhhdCBhdXRvaXBfY3JlYXRlX3JhbmRfYWRkciBkb2Vzbid0IHVzZSB0aGlzIG1hY3JvLgoKICAyMDA3LTA2LTI4IEZy6WTpcmljIEJlcm5vbgogICogbmV0aWZhcGkuaCwgbmV0aWZhcGkuYywgdGNwaXAuaCwgdGNwaXAuYzogVXBkYXRlIGNvZGUgdG8gaGFuZGxlIHRoZSBvcHRpb24KICAgIExXSVBfVENQSVBfQ09SRV9MT0NLSU5HLCBhbmQgZG8gc29tZSBjaGFuZ2VzIHRvIGJlIGNvaGVyZW50IHdpdGggbGFzdCBtb2RpZmljYXRpb25zCiAgICBpbiBhcGlfbGliL2FwaV9tc2cgKHVzZSBwb2ludGVycyBhbmQgbm90IHR5cGUgd2l0aCB0YWJsZSwgZXRjLi4uKSAKCiAgMjAwNy0wNi0yNiBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmg6IEZpeGVkIGJ1ZyAjMjAyNTk6IHN0cnVjdCB1ZHBfaGRyIHdhcyBsYWNraW5nIHRoZSBwYWNraW4gZGVmaW5lcy4KCiAgMjAwNy0wNi0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmM6IEZpeGVkIGJ1ZyAjMjAyNTM6IGljbXBfZGVzdF91bnJlYWNoIHdhcyBjYWxsZWQgd2l0aCBhIHdyb25nIHAtPnBheWxvYWQKICAgIGZvciB1ZHAgcGFja2V0cyB3aXRoIG5vIG1hdGNoaW5nIHBjYi4KCiAgMjAwNy0wNi0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmM6IEZpeGVkIGJ1ZyAjMjAyMjA6IFVEUCBQQ0Igc2VhcmNoIGluIHVkcF9pbnB1dCgpOiBhIG5vbi1sb2NhbCBtYXRjaAogICAgY291bGQgZ2V0IHVkcCBpbnB1dCBwYWNrZXRzIGlmIHRoZSByZW1vdGUgc2lkZSBtYXRjaGVkLgoKICAyMDA3LTA2LTEzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXRpZi5jOiBGaXhlZCBidWcgIzIwMTgwIChUQ1AgcGNicyBsaXN0ZW5pbmcgb24gSVBfQUREUl9BTlkgY291bGQgZ2V0CiAgICBjaGFuZ2VkIGluIG5ldGlmX3NldF9pcGFkZHIgaWYgcHJldmlvdXMgbmV0aWYtPmlwX2FkZHIuYWRkciB3YXMgMC4KCiAgMjAwNy0wNi0xMyBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jOiBwY2JfbmV3IHNldHMgY29ubi0+ZXJyIGlmIHByb3RvY29sIGlzIG5vdCBpbXBsZW1lbnRlZAogICAgLT4gbmV0Y29ubl9uZXdfLi4oKSBkb2VzIG5vdCBhbGxvY2F0ZSBhIG5ldyBjb25uZWN0aW9uIGZvciB1bnN1cHBvcnRlZAogICAgcHJvdG9jb2xzLgoKICAyMDA3LTA2LTEzIEZy6WTpcmljIEJlcm5vbiwgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9saWIuYzogY2hhbmdlIHJldHVybiBleHByZXNzaW9uIGluIG5ldGNvbm5fYWRkciBhbmQgbmV0Y29ubl9wZWVyLCBiZWNhdXNlCiAgICBjb25uLT5lcnIgd2FzIHJlc2V0IHRvIEVSUl9PSyB3aXRob3V0IGFueSByZWFzb25zIChhbmQgZXJyb3Igd2FzIGxvc3QpLi4uCgogIDIwMDctMDYtMTMgRnLpZOlyaWMgQmVybm9uLCBNYXR0aGlhcyBXZWlzc2VyCiAgKiBvcHQuaCwgbWVtLmgsIG1lbS5jLCBtZW1wLmMsIHBidWYuYywgaXBfZnJhZy5jLCB2ai5jOiBGaXggYnVnICMyMDE2Mi4gUmVuYW1lCiAgICBNRU1fQUxJR04gaW4gTFdJUF9NRU1fQUxJR04gYW5kIE1FTV9BTElHTl9TSVpFIGluIExXSVBfTUVNX0FMSUdOX1NJWkUgdG8gYXZvaWQKICAgIHNvbWUgbWFjcm8gbmFtZXMgY29sbGlzaW9uIHdpdGggc29tZSBPUyBtYWNyb3MuCgogIDIwMDctMDYtMTEgU2ltb24gR29sZHNjaG1pZHQKICAqIHVkcC5jOiBVRFAgTGl0ZTogY29ycmVjdGVkIHRoZSB1c2Ugb2YgY2hrc3VtX2xlbiAoYmFzZWQgb24gUkZDMzgyODogaWYgaXQncyAwLAogICAgY3JlYXRlIGNoZWNrc3VtIG92ZXIgdGhlIGNvbXBsZXRlIHBhY2tldC4gT24gUlgsIGlmIGl0J3MgPCA4IChhbmQgbm90IDApLAogICAgZGlzY2FyZCB0aGUgcGFja2V0LiBBbHNvIHJlbW92ZWQgdGhlIGR1cGxpY2F0ZSAndWRwaGRyLT5jaGtzdW0gPSAwJyBmb3IgYm90aAogICAgVURQICYgVURQIExpdGUuCgogIDIwMDctMDYtMTEgU3Jpbml2YXMgR29sbGFrb3RhICYgT2xlZyBUeXNoZXYKICAqIHRjcF9vdXQuYzogRml4IGZvciBidWcgIzIwMDc1IDogIkEgcHJvYmxlbSB3aXRoIGtlZXAtYWxpdmUgdGltZXIgYW5kIFRDUCBmbGFncyIKICAgIHdoZXJlIFRDUCBmbGFncyB3YXNuJ3QgaW5pdGlhbGl6ZWQgaW4gdGNwX2tlZXBhbGl2ZS4KCiAgMjAwNy0wNi0wMyBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmM6IHVkcF9pbnB1dCgpOiBJbnB1dCBwYnVmIHdhcyBub3QgZnJlZWQgaWYgcGNiIGhhZCBubyByZWN2IGZ1bmN0aW9uCiAgICByZWdpc3RlcmVkLCBwLT5wYXlsb2FkIHdhcyBtb2RpZmllZCB3aXRob3V0IG1vZGlmeWluZyBwLT5sZW4gaWYgc2VuZGluZwogICAgaWNtcF9kZXN0X3VucmVhY2goKSAoaGFkIG5vIG5lZ2F0aXZlIGVmZmVjdCBidXQgd2FzIGRlZmluaXRpdmVseSB3cm9uZykuCgogIDIwMDctMDYtMDMgU2ltb24gR29sZHNjaG1pZHQKICAqIGljbXAuYzogQ29ycmVjdGVkIGJ1ZyAjMTk5Mzc6IEZvciByZXNwb25kaW5nIHRvIGFuIGljbXAgZWNobyByZXF1ZXN0LCBpY21wCiAgICByZS11c2VkIHRoZSBpbnB1dCBwYnVmIGV2ZW4gaWYgdGhhdCBkaWRuJ3QgaGF2ZSBlbm91Z2ggc3BhY2UgdG8gaW5jbHVkZSB0aGUKICAgIGxpbmsgaGVhZGVycy4gTm93IHRoZSBzcGFjZSBpcyB0ZXN0ZWQgYW5kIGEgbmV3IHBidWYgaXMgYWxsb2NhdGVkIGZvciB0aGUKICAgIGVjaG8gcmVzcG9uc2UgcGFja2V0IGlmIHRoZSBlY2hvIHJlcXVlc3QgcGJ1ZiBpc24ndCBiaWcgZW5vdWdoLgoKICAyMDA3LTA2LTAxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmM6IENoZWNrZWQgaW4gcGF0Y2ggIzU5MTQ6IE1vdmVkIHNvY2tvcHQgcHJvY2Vzc2luZyBpbnRvIHRjcGlwX3RocmVhZC4KCiAgMjAwNy0wNS0yMyBGculk6XJpYyBCZXJub24KICAqIGFwaV9saWIuYywgc29ja2V0cy5jOiBGaXhlZCBidWcgIzU5NTggZm9yIG5ldGNvbm5fbGlzdGVuIChhY2NlcHRtYm94IG9ubHkKICAgIGFsbG9jYXRlZCBieSBkb19saXN0ZW4gaWYgc3VjY2VzcykgYW5kIG5ldGNvbm5fYWNjZXB0IGVycm9ycyBoYW5kbGluZy4gSW4KICAgIG1vc3Qgb2YgYXBpX2xpYiBmdW5jdGlvbnMsIHdlIHJlcGxhY2Ugc29tZSBlcnJvcnMgY2hlY2tpbmdzIGxpa2UgImlmIChjb25uPT1OVUxMKSIKICAgIGJ5IEFTU0VSVCwgZXhjZXB0IGZvciBuZXRjb25uX2RlbGV0ZS4KCiAgMjAwNy0wNS0yMyBGculk6XJpYyBCZXJub24KICAqIGFwaV9saWIuYzogRml4ZWQgYnVnICM1OTU3ICJTYWZlLXRocmVhZCBwcm9ibGVtIGluc2lkZSBuZXRjb25uX3JlY3YiIHRvIHJldHVybgogICAgYW4gZXJyb3IgY29kZSBpZiBpdCdzIGltcG9zc2libGUgdG8gZmV0Y2ggYSBwYnVmIG9uIGEgVENQIGNvbm5lY3Rpb24gKGFuZCBub3QKICAgIGRpcmVjdGx5IGNsb3NlIHRoZSByZWN2bWJveCkuCgogIDIwMDctMDUtMjIgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5jOiBGaXhlZCBidWcgIzE4OTUgKHRjcF9iaW5kIG5vdCBjb3JyZWN0KSBieSBpbnRyb2R1Y2luZyBhIGxpc3Qgb2YKICAgIGJvdW5kIGJ1dCB1bmNvbm5lY3RlZCAoYW5kIG5vbi1saXN0ZW5pbmcpIHRjcF9wY2JzLgoKICAyMDA3LTA1LTIyIEZy6WTpcmljIEJlcm5vbgogICogc3lzLmgsIHN5cy5jLCBhcGlfbGliLmMsIHRjcGlwLmM6IHJlbW92ZSBzeXNfbWJveF9mZXRjaF90aW1lb3V0KCkgKHdhcyBvbmx5CiAgICB1c2VkIGZvciBMV0lQX1NPX1JDVlRJTUVPIG9wdGlvbikgYW5kIHVzZSBzeXNfYXJjaF9tYm94X2ZldGNoKCkgaW5zdGVhZCBvZgogICAgc3lzX21ib3hfZmV0Y2goKSBpbiBhcGkgZmlsZXMuIE5vdywgdXNlcnMgU0hPVUxEIE5PVCB1c2UgaW50ZXJuYWwgbHdJUCBmZWF0dXJlcwogICAgbGlrZSAic3lzX3RpbWVvdXQiIGluIHRoZWlyIGFwcGxpY2F0aW9uIHRocmVhZHMuCgogIDIwMDctMDUtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmgsIGFwaV9tc2cuYzogY2hhbmdlIHRoZSBzdHJ1Y3QgYXBpX21zZ19tc2cgdG8gc2VlCiAgICB3aGljaCBwYXJhbWV0ZXJzIGFyZSB1c2VkIGJ5IHdoaWNoIGRvX3h4eCBmdW5jdGlvbiwgYW5kIHRvIGF2b2lkICJtaXN1c2luZyIKICAgIHBhcmFtZXRlcnMgKHBhdGNoICM1OTM4KS4KCiAgMjAwNy0wNS0yMiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHJhdy5jLCBhcGkuaCwgYXBpX21zZy5oLCByYXcuaDogSW5jbHVkZWQgcGF0Y2ggIzU5Mzg6CiAgICBjaGFuZ2VkIHJhd19wY2IucHJvdG9jb2wgZnJvbSB1MTZfdCB0byB1OF90IHNpbmNlIGZvciBJUHY0IGFuZCBJUHY2LCBwcm90bwogICAgaXMgb25seSA4IGJpdHMgd2lkZS4gVGhpcyBhZmZlY3RzIHRoZSBhcGksIGFzIHRoZXJlLCB0aGUgcHJvdG9jb2wgd2FzCiAgICB1MTZfdCwgdG9vLgoKICAyMDA3LTA1LTE4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW1wLmM6IGFkZGl0aW9uIHRvIHBhdGNoICM1OTEzOiBzbWFsbGVyIHBvaW50ZXIgd2FzIHJldHVybmVkIGJ1dAogICAgbWVtcF9tZW1vcnkgd2FzIHRoZSBzYW1lIHNpemUgLT4gZGlkIG5vdCBzYXZlIG1lbW9yeS4KCiAgMjAwNy0wNS0xNiBTaW1vbiBHb2xkc2NobWlkdAogICogbG9vcGlmLmMsIHNsaXBpZi5jOiBGaXggYnVnICMxOTcyOTogZnJlZSBwYnVmIGlmIG5ldGlmLT5pbnB1dCgpIHJldHVybnMKICAgICE9IEVSUl9PSy4KCiAgMjAwNy0wNS0xNiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jLCB1ZHAuYzogSWYgYSB1ZHBfcGNiIGhhcyBhIGxvY2FsX2lwIHNldCwgY2hlY2sgaWYgaXQgaXMgdGhlIHNhbWUKICAgIGFzIHRoZSBvbmUgb2YgdGhlIG5ldGlmIHVzZWQgZm9yIHNlbmRpbmcgdG8gcHJldmVudCBzZW5kaW5nIGZyb20gb2xkCiAgICBhZGRyZXNzZXMgYWZ0ZXIgYSBuZXRpZiBhZGRyZXNzIGdldHMgY2hhbmdlZCAocGFydGx5IGZpeGVzIGJ1ZyAjMzE2OCkuCgogIDIwMDctMDUtMTYgRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3BpcC5jLCBpZ21wLmgsIGlnbXAuYzogRml4ZWQgYnVnICIjMTk4MDAgOiBJR01QOiBpZ21wX3RpY2soKSB3aWxsIG5vdCB3b3JrCiAgICB3aXRoIE5PX1NZUz0xIi4gTm90ZSB0aGF0IGlnbXBfaW5pdCBpcyBhbHdheXMgaW4gdGNwaXBfdGhyZWFkIChhbmQgbm90IGluIAogICAgdGNwaXBfaW5pdCkgYmVjYXVzZSB3ZSBoYXZlIHRvIGJlIHN1cmUgdGhhdCBuZXR3b3JrIGludGVyZmFjZXMgYXJlIGFscmVhZHkKICAgIGFkZGVkIChtYWMgZmlsdGVyIGlzIHVwZGF0ZWQgb25seSBpbiBpZ21wX2luaXQgZm9yIHRoZSBtb21lbnQpLgoKICAyMDA3LTA1LTE2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uYywgbWVtcC5jOiBSZW1vdmVkIHNlbWFwaG9yZXMgZnJvbSBtZW1wLCBjaGFuZ2VkIHN5c19zZW1fd2FpdCBjYWxscwogICAgaW50byBzeXNfYXJjaF9zZW1fd2FpdCBjYWxscyB0byBwcmV2ZW50IHRpbWVycyBmcm9tIHJ1bm5pbmcgd2hpbGUgd2FpdGluZwogICAgZm9yIHRoZSBoZWFwLiBUaGlzIGZpeGVzIGJ1ZyAjMTkxNjcuCgogIDIwMDctMDUtMTMgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLCBzb2NrZXRzLmgsIHNvY2tldHMuYzogRml4ZWQgYnVnIGZyb20gcGF0Y2ggIzU4NjUgYnkgbW92aW5nIHRoZSBkZWZpbmVzCiAgICBmb3Igc29ja2V0IG9wdGlvbnMgKGx3aXBfc2V0Ly1nZXRzb2Nrb3B0KSB1c2VkIHdpdGggbGV2ZWwgSVBQUk9UT19UQ1AgZnJvbQogICAgdGNwLmggdG8gc29ja2V0cy5oLgoKICAyMDA3LTA1LTA3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uYzogQW5vdGhlciBhdHRlbXB0IHRvIGZpeCBidWcgIzE3OTIyLgoKICAyMDA3LTA1LTA0IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBwYnVmLmMsIHBidWYuaCwgZXRoYXJwLmM6IEZ1cnRoZXIgdXBkYXRlIHRvIEFSUCBxdWV1ZWluZzogQ2hhbmdlZCBwYnVmX2NvcHkoKQogICAgaW1wbGVtZW50YXRpb24gc28gdGhhdCBpdCBjYW4gYmUgcmV1c2VkIChkb24ndCBhbGxvY2F0ZSB0aGUgdGFyZ2V0CiAgICBwYnVmIGluc2lkZSBwYnVmX2NvcHkoKSkuCgogIDIwMDctMDUtMDQgU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbXAuYzogY2hlY2tlZCBpbiBwYXRjaCAjNTkxMzogaW4gbWVtcF9tYWxsb2MoKSB3ZSBjYW4gcmV0dXJuIG1lbXAgYXMgbWVtCiAgICB0byBzYXZlIGEgbGl0dGxlIFJBTSAobmV4dCBwb2ludGVyIG9mIG1lbXAgaXMgbm90IHVzZWQgd2hpbGUgbm90IGluIHBvb2wpLgoKICAyMDA3LTA1LTAzICJtYXEiCiAgKiBzb2NrZXRzLmM6IEZpeCBpb2N0bCBGSU9OUkVBRCB3aGVuIHNvbWUgZGF0YSByZW1haW5zIGZyb20gbGFzdCByZWN2LgogICAgKHBhdGNoICMzNTc0KS4KCiAgMjAwNy0wNC0yMyBTaW1vbiBHb2xkc2NobWlkdAogICogbG9vcGlmLmMsIGxvb3BpZi5oLCBvcHQuaCwgc3JjL25ldGlmL0ZJTEVTOiBmaXggYnVnICMyNTk1OiAibG9vcGlmIHJlc3VsdHMKICAgIGluIE5VTEwgcmVmZXJlbmNlIGZvciBpbmNvbWluZyBUQ1AgcGFja2V0cyIuIExvb3BpZiBoYXMgdG8gYmUgY29uZmlndXJlZAogICAgKHVzaW5nIExXSVBfTE9PUElGX01VTFRJVEhSRUFESU5HKSB0byBkaXJlY3RseSBjYWxsIG5ldGlmLT5pbnB1dCgpCiAgICAobXVsdGl0aHJlYWRpbmcgZW52aXJvbm1lbnRzLCBlLmcuIG5ldGlmLT5pbnB1dCgpID0gdGNwaXBfaW5wdXQoKSkgb3IKICAgIHB1dHRpbmcgcGFja2V0cyBvbiBhIGxpc3QgdGhhdCBpcyBmZWQgdG8gdGhlIHN0YWNrIGJ5IGNhbGxpbmcgbG9vcGlmX3BvbGwoKQogICAgKHNpbmdsZS10aHJlYWQgLyBOT19TWVMgLyBwb2xsaW5nIGVudmlyb25tZW50IHdoZXJlIGUuZy4KICAgIG5ldGlmLT5pbnB1dCgpID0gaXBfaW5wdXQpLgoKICAyMDA3LTA0LTE3IEpvbmF0aGFuIExhcm1vdXIKICAqIHBidWYuYzogVXNlIHMzMl90IGluIHBidWZfcmVhbGxvYygpLCBhcyBhbiBzMTZfdCBjYW4ndCByZWxpYWJseSBob2xkCiAgICB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byB1MTZfdCdzLgogICogc29ja2V0cy5oOiBGRF9TRVRTSVpFIG5lZWRzIHRvIG1hdGNoIG51bWJlciBvZiBzb2NrZXRzLCB3aGljaCBpcwogICAgTUVNUF9OVU1fTkVUQ09OTiBpbiBzb2NrZXRzLmMgcmlnaHQgbm93LgoKICAyMDA3LTA0LTEyIEpvbmF0aGFuIExhcm1vdXIKICAqIGljbXAuYzogUmVzZXQgSVAgaGVhZGVyIFRUTCBpbiBJQ01QIEVDSE8gcmVzcG9uc2VzIChidWcgIzE5NTgwKS4KCiAgMjAwNy0wNC0xMiBLaWVyYW4gTWFuc2xleQogICogdGNwLmMsIHRjcF9pbi5jLCB0Y3Bfb3V0LmMsIHRjcC5oOiBNb2RpZnkgd2F5IHRoZSByZXRyYW5zbWlzc2lvbgogICAgdGltZXIgaXMgcmVzZXQgdG8gZml4IGJ1ZyMxOTQzNCwgd2l0aCBoZWxwIGZyb20gT2xlZyBUeXNoZXYuCgogIDIwMDctMDQtMTEgU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5jLCBwYnVmLmMsIHBidWYuaDogM3JkIGZpeCBmb3IgYnVnICMxMTQwMCAoYXJwLXF1ZXVpbmcpOiBNb3JlIHBidWZzIHRoYW4KICAgIHByZXZpb3VzbHkgdGhvdWdodCBuZWVkIHRvIGJlIGNvcGllZCAoZXZlcnl0aGluZyBidXQgUEJVRl9ST00hKS4gQ2xlYW5lZCB1cAogICAgcGJ1Zi5jOiByZW1vdmVkIGZ1bmN0aW9ucyBubyBuZWVkZWQgYW55IG1vcmUgKGJ5IGV0aGFycCkuCgogIDIwMDctMDQtMTEgS2llcmFuIE1hbnNsZXkKICAqIGluZXQuYywgaXBfYWRkci5oLCBzb2NrZXRzLmgsIHN5cy5oLCB0Y3AuaDogQXBwbHkgcGF0Y2ggIzU3NDU6IEZpeAogICAgIkNvbnN0YW50IGlzIGxvbmciIHdhcm5pbmdzIHdpdGggMTZiaXQgY29tcGlsZXJzLiAgQ29udHJpYnV0ZWQgYnkKICAgIGF2YXRhckBtbWxhYi5jc2UueXp1LmVkdS50dwoKICAyMDA3LTA0LTA1IEZy6WTpcmljIEJlcm5vbiwgSm9uYXRoYW4gTGFybW91cgogICogYXBpX21zZy5jOiBGaXggYnVnICMxNjgzMDogImVycl90Y3AoKSBwb3N0cyB0byBjb25uZWN0aW9uIG1haWxib3ggd2hlbiBubyBwZW5kIG9uCiAgICB0aGUgbWFpbGJveCBpcyBhY3RpdmUiLiBOb3csIHRoZSBwb3N0IGlzIG9ubHkgZG9uZSBkdXJpbmcgYSBjb25uZWN0LCBhbmQgZG9fc2VuZCwKICAgIGRvX3dyaXRlIGFuZCBkb19qb2luX2xlYXZlX2dyb3VwIGRvbid0IGRvIGFueXRoaW5nIGlmIGEgcHJldmlvdXMgZXJyb3Igd2FzIHNpZ25hbGVkLgoKICAyMDA3LTA0LTAzIEZy6WTpcmljIEJlcm5vbgogICogaXAuYzogRG9uJ3Qgc2V0IHRoZSBJUF9ERiAoIkRvbid0IGZyYWdtZW50IikgZmxhZyBpbiB0aGUgSVAgaGVhZGVyIGluIElQIG91dHB1dAogICAgcGFja2V0cy4gU2VlIHBhdGNoICM1ODM0LgoKICAyMDA3LTAzLTMwIEZy6WTpcmljIEJlcm5vbgogICogYXBpX21zZy5jOiBhZGQgYSAicGNiX25ldyIgaGVscGVyIGZ1bmN0aW9uIHRvIGF2b2lkIHJlZHVuZGFudCBjb2RlLCBhbmQgdG8gYWRkCiAgICBtaXNzaW5nICBwY2IgYWxsb2NhdGlvbnMgY2hlY2tpbmcgKGluIGRvX2JpbmQsIGFuZCBmb3IgZWFjaCByYXdfbmV3KS4gRml4IHN0eWxlLgoKICAyMDA3LTAzLTMwIEZy6WTpcmljIEJlcm5vbgogICogbW9zdCBvZiBmaWxlczogcHJlZml4IGFsbCBkZWJ1Zy5oIGRlZmluZSB3aXRoICJMV0lQXyIgdG8gYXZvaWQgYW55IGNvbmZsaWN0IHdpdGgKICAgIG90aGVycyBlbnZpcm9ubWVudCBkZWZpbmVzICh0aGVzZSB3ZXJlIHRvbyAiZ2VuZXJpYyIpLgoKICAyMDA3LTAzLTI4IEZy6WTpcmljIEJlcm5vbgogICogYXBpLmgsIGFwaV9saWIuYywgc29ja2V0cy5jOiBuZXRidWZfcmVmIGRvZXNuJ3QgY2hlY2sgaXRzIGludGVybmFsIHBidWZfYWxsb2MgY2FsbAogICAgcmVzdWx0IGFuZCBjYW4gY2F1c2UgYSBjcmFzaC4gbHdpcF9zZW5kIG5vdyBjaGVjayBuZXRidWZfcmVmIHJlc3VsdC4KCiAgMjAwNy0wMy0yOCBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jIFJlbW92ZSAiI2luY2x1ZGUgPGVycm5vLmg+IiBmcm9tIHNvY2tldHMuYyB0byBhdm9pZCBtdWx0aXBsZQogICAgZGVmaW5pdGlvbiBvZiBtYWNyb3MgKGluIGVycm5vLmggYW5kIGx3aXAvYXJjaC5oKSBpZiBMV0lQX1BST1ZJREVfRVJSTk8gaXMKICAgIGRlZmluZWQuIFRoaXMgaXMgdGhlIHdheSBpdCBzaG91bGQgaGF2ZSBiZWVuIGFscmVhZHkgKGxvb2tpbmcgYXQKICAgIGRvYy9zeXNfYXJjaC50eHQpCgogIDIwMDctMDMtMjggS2llcmFuIE1hbnNsZXkKICAqIG9wdC5oIENoYW5nZSBkZWZhdWx0IFBCVUZfUE9PTF9CVUZTSVpFIChhZ2FpbikgdG8gYWNjb21vZGF0ZSBkZWZhdWx0IE1TUyArCiAgICBJUCBhbmQgVENQIGhlYWRlcnMgKmFuZCogcGh5c2ljYWwgbGluayBoZWFkZXJzCgogIDIwMDctMDMtMjYgRnLpZOlyaWMgQmVybm9uIChiYXNlZCBvbiBwYXRjaCBmcm9tIERtaXRyeSBQb3RhcG92KQogICogYXBpX2xpYi5jOiBwYXRjaCBmb3IgbmV0Y29ubl93cml0ZSgpLCBmaXhlcyBhIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIHdoaWNoIGNhdXNlCiAgICB0byBzZW5kIHNvbWUgZ2FyYmFnZS4gSXQgaXMgbm90IGEgZGVmaW5pdGl2ZSBzb2x1dGlvbiwgYnV0IHRoZSBwYXRjaCBkb2VzIHNvbHZlCiAgICB0aGUgcHJvYmxlbSBmb3IgbW9zdCBjYXNlcy4KCiAgMjAwNy0wMy0yMiBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuaCwgYXBpX21zZy5jOiBSZW1vdmUgb2Jzb2xldGUgQVBJX01TR19BQ0NFUFQgYW5kIGRvX2FjY2VwdCAobmV2ZXIgdXNlZCkuCgogIDIwMDctMDMtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbGliLmM6IHNvbWVzIHJlc291cmNlcyBjb3VsZG4ndCBiZSBmcmVlZCBpZiB0aGVyZSB3YXMgZXJyb3JzIGR1cmluZwogICAgbmV0Y29ubl9uZXdfd2l0aF9wcm90b19hbmRfY2FsbGJhY2suCgogIDIwMDctMDMtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiBldGhlcm5ldGlmLmM6IHVwZGF0ZSBuZXRpZi0+aW5wdXQgY2FsbHMgdG8gY2hlY2sgcmV0dXJuIHZhbHVlLiBJbiBvbGRlciBwb3J0cywKICAgIGl0J3MgYSBnb29kIGlkZWEgdG8gdXBncmFkZSB0aGVtLCBldmVuIGlmIGJlZm9yZSwgdGhlcmUgY291bGQgYmUgYW5vdGhlciBwcm9ibGVtCiAgICAoYWNjZXNzIHRvIGFuIHVuaW5pdGlhbGl6ZWQgbWFpbGJveCkuCgogIDIwMDctMDMtMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogZml4ZWQgYnVnICM1MDY3IChlc3NlbnRpYWx5IGEgc2lnbmVkL3Vuc2lnbmVkIHdhcm5pbmcgZml4ZWQKICAgIGJ5IGNhc3RpbmcgdG8gdW5zaWduZWQpLgoKICAyMDA3LTAzLTIxIEZy6WTpcmljIEJlcm5vbgogICogYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHRjcGlwLmM6IGludGVncmF0ZSBzeXNfbWJveF9mZXRjaChjb25uLT5tYm94LCBOVUxMKSBjYWxscyBmcm9tCiAgICBhcGlfbGliLmMgdG8gdGNwaXAuYydzIHRjcGlwX2FwaW1zZygpLiBOb3csIHVzZSBhIGxvY2FsIHZhcmlhYmxlIGFuZCBub3QgYQogICAgZHluYW1pYyBvbmUgZnJvbSBtZW1wIHRvIHNlbmQgdGNwaXBfbXNnIHRvIHRjcGlwX3RocmVhZCBpbiBhIHN5bmNocm9uZSBjYWxsLgogICAgRnJlZSB0Y3BpcF9tc2cgZnJvbSB0Y3BpcF9hcGltc2cgaXMgbm90IGRvbmUgaW4gdGNwaXBfdGhyZWFkLiBUaGlzIGdpdmUgYQogICAgZmFzdGVyIGFuZCBtb3JlIHJlbGlhYmxlIGNvbW11bmljYXRpb24gYmV0d2VlbiBhcGlfbGliIGFuZCB0Y3BpcC4KCiAgMjAwNy0wMy0yMSBGculk6XJpYyBCZXJub24KICAqIG9wdC5oOiBBZGQgTFdJUF9ORVRJRl9DQUxMQkFDSyAodG8gYXZvaWQgY29tcGlsZXIgd2FybmluZykgYW5kIHNldCBpdCB0byAwLgoKICAyMDA3LTAzLTIxIEZy6WTpcmljIEJlcm5vbgogICogYXBpX21zZy5jLCBpZ21wLmMsIGlnbXAuaDogRml4IEMrKyBzdHlsZSBjb21tZW50cwoKICAyMDA3LTAzLTIxIEtpZXJhbiBNYW5zbGV5CiAgKiBvcHQuaCBDaGFuZ2UgZGVmYXVsdCBQQlVGX1BPT0xfQlVGU0laRSB0byBhY2NvbW9kYXRlIGRlZmF1bHQgTVNTICsKICAgIElQIGFuZCBUQ1AgaGVhZGVycwoKICAyMDA3LTAzLTIxIEtpZXJhbiBNYW5zbGV5CiAgKiBGaXggYWxsIHVzZXMgb2YgcGJ1Zl9oZWFkZXIgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZS4gIEluIHNvbWUKICAgIGNhc2VzIGp1c3QgYXNzZXJ0IGlmIGl0IGZhaWxzIGFzIEknbSBub3Qgc3VyZSBob3cgdG8gZml4IHRoZW0sIGJ1dAogICAgdGhpcyBpcyBubyB3b3JzZSB0aGFuIGJlZm9yZSB3aGVuIHRoZXkgd291bGQgY2Fycnkgb24gcmVnYXJkbGVzcwogICAgb2YgdGhlIGZhaWx1cmUuCgogIDIwMDctMDMtMjEgS2llcmFuIE1hbnNsZXkKICAqIHNvY2tldHMuYywgaWdtcC5jLCBpZ21wLmgsIG1lbXAuaDogRml4IEMrKyBzdHlsZSBjb21tZW50cyBhbmQKICAgIGNvbW1lbnQgb3V0IG1pc3NpbmcgaGVhZGVyIGluY2x1ZGUgaW4gaWNtcC5jCgogIDIwMDctMDMtMjAgRnLpZOlyaWMgQmVybm9uCiAgKiBtZW1wLmgsIHN0YXRzLmM6IEZpeCBzdGF0c19kaXNwbGF5IGZ1bmN0aW9uIHdoZXJlIG1lbXBfbmFtZXMgdGFibGUgd2Fzbid0CiAgICBzeW5jaHJvbml6ZWQgd2l0aCBtZW1wLmguCgogIDIwMDctMDMtMjAgRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3BpcC5jOiBJbml0aWFsaXplIHRjcGlwJ3MgbWJveCwgYW5kIHZlcmlmeSBpZiBpbml0aWFsaXplZCBpbiB0Y3BpcF9pbnB1dCwKICAgIHRjcGlwX2V0aGlucHV0LCB0Y3BpcF9jYWxsYmFjaywgdGNwaXBfYXBpbXNnLCB0byBmaXggYSBpbml0IHByb2JsZW0gd2l0aCAKICAgIG5ldHdvcmsgaW50ZXJmYWNlcy4gQWxzbyBmaXggYSBjb21waWxlciB3YXJuaW5nLgoKICAyMDA3LTAzLTIwIEtpZXJhbiBNYW5zbGV5CiAgKiB1ZHAuYzogT25seSB0cnkgYW5kIHVzZSBwYnVmX2hlYWRlcigpIHRvIG1ha2Ugc3BhY2UgZm9yIGhlYWRlcnMgaWYKICAgIG5vdCBhIFJPTSBvciBSRUYgcGJ1Zi4KCiAgMjAwNy0wMy0xOSBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuaCwgYXBpX21zZy5jLCB0Y3BpcC5oLCB0Y3BpcC5jOiBBZGQgcmV0dXJuIHR5cGVzIHRvIHRjcGlwX2FwaW1zZygpCiAgICBhbmQgYXBpX21zZ19wb3N0KCkuCgogIDIwMDctMDMtMTkgRnLpZOlyaWMgQmVybm9uCiAgKiBSZW1vdmUgdW5pbXBsZW1lbnRlZCAibWVtcF9yZWFsbG9jIiBmdW5jdGlvbiBmcm9tIG1lbXAuaC4KCiAgMjAwNy0wMy0xMSBTaW1vbiBHb2xkc2NobWlkdAogICogcGJ1Zi5jOiBjaGVja2VkIGluIHBhdGNoICM1Nzk2OiBwYnVmX2FsbG9jOiBsZW4gZmllbGQgY2xhY3VsYXRpb24gY2F1c2VkCiAgICBtZW1vcnkgY29ycnVwdGlvbi4KCiAgMjAwNy0wMy0xMSBTaW1vbiBHb2xkc2NobWlkdCAoYmFzZWQgb24gcGF0Y2ggZnJvbSBEbWl0cnkgUG90YXBvdikKICAqIGFwaV9saWIuYywgc29ja2V0cy5jLCBhcGkuaCwgYXBpX21zZy5oLCBzb2NrZXRzLmg6IEZpeGVkIGJ1ZyAjMTkyNTEKICAgIChtaXNzaW5nIGBjb25zdCcgcXVhbGlmaWVyIGluIHNvY2tldCBmdW5jdGlvbnMpLCB0byBnZXQgbW9yZSBjb21wYXRpYmxlIHRvCiAgICBzdGFuZGFyZCBQT1NJWCBzb2NrZXRzLgoKICAyMDA3LTAzLTExIEZy6WTpcmljIEJlcm5vbiAoYmFzZWQgb24gcGF0Y2ggZnJvbSBEbWl0cnkgUG90YXBvdikKICAqIHNvY2tldHMuYzogQWRkIGFzc2VydHMgaW5zaWRlIGJpbmQsIGNvbm5lY3QgYW5kIHNlbmR0byB0byBjaGVjayBpbnB1dAogICAgcGFyYW1ldGVycy4gUmVtb3ZlIGV4Y2Vzc2l2ZSBzZXRfZXJybm8oKSBjYWxscyBhZnRlciBnZXRfc29ja2V0KCksIGJlY2F1c2UKICAgIGVycm5vIGlzIHNldCBpbnNpZGUgb2YgZ2V0X3NvY2tldCgpLiBNb3ZlIGxhc3Qgc29ja19zZXRfZXJybm8oKSBpbnNpZGUKICAgIGx3aXBfY2xvc2UuCgogIDIwMDctMDMtMDkgU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbXAuYzogRml4ZWQgYnVnICMxMTQwMDogTmV3IGV0aGFycCBxdWV1ZWluZyBpbnRyb2R1Y2VkIGJ1ZzogbWVtcF9tZW1vcnkKICAgIHdhcyBhbGxvY2F0ZWQgdG9vIHNtYWxsLgoKICAyMDA3LTAzLTA2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BpcC5jOiBJbml0aWFsaXplIGRoY3AgdGltZXJzIGluIHRjcGlwX3RocmVhZCAoaWYgTFdJUF9ESENQKSB0byBwcm90ZWN0CiAgICB0aGUgc3RhY2sgZnJvbSBjb25jdXJyZW50IGFjY2Vzcy4KCiAgMjAwNy0wMy0wNiBGculk6XJpYyBCZXJub24sIERtaXRyeSBQb3RhcG92CiAgKiB0Y3BpcC5jLCBpcF9mcmFnLmMsIGV0aGVybmV0aWYuYzogRml4IHNvbWUgYnVpbGQgcHJvYmxlbXMsIGFuZCBhIHJlZHVuZGFuY3kKICAgIGNhbGwgdG8gImx3aXBfc3RhdHMubGluay5yZWN2Kys7IiBpbiBsb3dfbGV2ZWxfaW5wdXQoKSAmIGV0aGVybmV0aWZfaW5wdXQoKS4KCiAgMjAwNy0wMy0wNiBTaW1vbiBHb2xkc2NobWlkdAogICogaXBfZnJhZy5jLCBpcF9mcmFnLmg6IFJlZHVjZSBjb2RlIHNpemU6IGRvbid0IGluY2x1ZGUgY29kZSBpbiB0aG9zZSBmaWxlcwogICAgaWYgSVBfRlJBRyA9PSAwIGFuZCBJUF9SRUFTU0VNQkxZID09IDAKCiAgMjAwNy0wMy0wNiBGculk6XJpYyBCZXJub24sIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgaXBfZnJhZy5oLCB0Y3BpcC5oLCB0Y3BpcC5jLCBldGhlcm5ldGlmLmM6IGFkZCBuZXcgY29uZmlndXJhdGlvbgogICAgb3B0aW9uIG5hbWVkIEVUSEFSUF9UQ1BJUF9FVEhJTlBVVCwgd2hpY2ggZW5hYmxlIHRoZSBuZXcgdGNwaXBfZXRoaW5wdXQuCiAgICBBbGxvdyB0byBkbyBBUlAgcHJvY2Vzc2luZyBmb3IgaW5jb21pbmcgcGFja2V0cyBpbnNpZGUgdGNwaXBfdGhyZWFkCiAgICAocHJvdGVjdGluZyBBUlAgbGF5ZXIgYWdhaW5zdCBjb25jdXJyZW50IGFjY2VzcykuIFlvdSBjYW4gYWxzbyBkaXNhYmxlCiAgICBvbGQgY29kZSB1c2luZyB0Y3BfaW5wdXQgd2l0aCBuZXcgZGVmaW5lIEVUSEFSUF9UQ1BJUF9JTlBVVCBzZXQgdG8gMC4KICAgIE9sZGVyIHBvcnRzIGhhdmUgdG8gdXNlIHRjcGlwX2V0aGlucHV0LgoKICAyMDA3LTAzLTA2IFNpbW9uIEdvbGRzY2htaWR0IChiYXNlZCBvbiBwYXRjaCBmcm9tIERtaXRyeSBQb3RhcG92KQogICogZXJyLmgsIGVyci5jOiBmaXhlZCBjb21waWxlciB3YXJuaW5nICJpbml0aWFsaXphdGlvbiBkaXJjYXJkcyBxdWFsaWZpZXJzCiAgICBmcm9tIHBvaW50ZXIgdGFyZ2V0IHR5cGUiCgogIDIwMDctMDMtMDUgRnLpZOlyaWMgQmVybm9uCiAgKiBvcHQuaCwgc29ja2V0cy5oOiBhZGQgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoTFdJUF9QT1NJWF9TT0NLRVRTX0lPX05BTUVTLAogICAgRVRIQVJQX1RSVVNUX0lQX01BQywgcmV2aWV3IFNPX1JFVVNFKQoKICAyMDA3LTAzLTA0IEZy6WTpcmljIEJlcm5vbgogICogYXBpX21zZy5jOiBSZW1vdmUgc29tZSBjb21waWxlciB3YXJuaW5ncyA6IHBhcmFtZXRlciAicGNiIiB3YXMgbmV2ZXIKICAgIHJlZmVyZW5jZWQuCgogIDIwMDctMDMtMDQgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbGliLmM6IEZpeCAiW3BhdGNoICM1NzY0XSBhcGlfbGliLmMgY2xlYW51cDogYWZ0ZXIgcGF0Y2ggIzU2ODciIChmcm9tCiAgICBEbWl0cnkgUG90YXBvdikuCiAgICBUaGUgYXBpX21zZyBzdHJ1Y3Qgc3RheSBvbiB0aGUgc3RhY2sgKG5vdCBtb3ZlZCB0byBuZXRjb25uIHN0cnVjdCkuCgogIDIwMDctMDMtMDQgU2ltb24gR29sZHNjaG1pZHQgKGJhc2VkIG9uIHBhdGNoIGZyb20gRG1pdHJ5IFBvdGFwb3YpCiAgKiBwYnVmLmM6IEZpeCBCVUcjMTkxNjggLSBwYnVmX2ZyZWUgY2FuIGNhdXNlIGRlYWRsb2NrIChpZgogICAgU1lTX0xJR0hUV0VJR0hUX1BST1Q9MSAmIGZyZWVpbmcgUEJVRl9SQU0gd2hlbiBtZW1fc2VtIGlzIG5vdCBhdmFpbGFibGUpCiAgICBBbHNvIGZpeGVkIGNhc3Qgd2FybmluZyBpbiBwYnVmX2FsbG9jKCkKCiAgMjAwNy0wMy0wNCBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmMsIGV0aGFycC5oLCBtZW1wLmMsIG1lbXAuaCwgb3B0Lmg6IEZpeCBCVUcjMTE0MDAgLSBkb24ndCBjb3JydXB0CiAgICBleGlzdGluZyBwYnVmIGNoYWluIHdoZW4gZW5xdWV1aW5nIG11bHRpcGxlIHBidWZzIHRvIGEgcGVuZGluZyBBUlAgcmVxdWVzdAoKICAyMDA3LTAzLTAzIEZy6WTpcmljIEJlcm5vbgogICogdWRwLmM6IHJlbW92ZSBvYnNvbGV0ZSBsaW5lICJzdGF0aWMgc3RydWN0IHVkcF9wY2IgKnBjYl9jYWNoZSA9IE5VTEw7IgogICAgSXQgaXMgc3RhdGljLCBhbmQgbmV2ZXIgdXNlZCBpbiB1ZHAuYyBleGNlcHQgdWRwX2luaXQoKS4KCiAgMjAwNy0wMy0wMiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwaXAuYzogTW92ZWQgY2FsbCB0byBpcF9pbml0KCksIHVkcF9pbml0KCkgYW5kIHRjcF9pbml0KCkgZnJvbQogICAgdGNwaXBfdGhyZWFkKCkgdG8gdGNwaXBfaW5pdCgpLiBUaGlzIHdheSwgcmF3IEFQSSBjb25uZWN0aW9ucyBjYW4gYmUKICAgIGluaXRpYWxpemVkIGJlZm9yZSB0Y3BpcF90aHJlYWQgaXMgcnVubmluZyAoZS5nLiBiZWZvcmUgT1MgaXMgc3RhcnRlZCkKCiAgMjAwNy0wMy0wMiBGculk6XJpYyBCZXJub24KICAqIHJhd2FwaS50eHQ6IEZpeCBkb2N1bWVudGF0aW9uIG1pc21hdGNoIHdpdGggZXRoYXJwLmggYWJvdXQgZXRoYXJwX3RtcidzIGNhbGwKICAgIGludGVydmFsLgoKICAyMDA3LTAyLTI4IEtpZXJhbiBNYW5zbGV5IAogICogcGJ1Zi5jOiBGaXggQlVHIzE3NjQ1IC0gZW5zdXJlIHBidWYgcGF5bG9hZCBwb2ludGVyIGlzIG5vdCBtb3ZlZAogICAgb3V0c2lkZSB0aGUgcmVnaW9uIG9mIHRoZSBwYnVmIGJ5IHBidWZfaGVhZGVyKCkKCiAgMjAwNy0wMi0yOCBLaWVyYW4gTWFuc2xleSAKICAqIHNvY2tldHMuYzogRml4IEJVRyMxOTE2MSAtIGVuc3VyZSBtaWxsaXNlY29uZHMgdGltZW91dCBpcyBub24temVybwogICAgd2hlbiBzdXBwbGllZCB0aW1lb3V0IGlzIGFsc28gbm9uLXplcm8gCgooU1RBQkxFLTEuMi4wKQoKICAyMDA2LTEyLTA1IExlb24gV29lc3RlbmJlcmcKICAqIENIQU5HRUxPRzogTWVudGlvbiBTVEFCTEUtMS4yLjAgcmVsZWFzZS4KCiAgKysgTmV3IGZlYXR1cmVzOgoKICAyMDA2LTEyLTAxIENocmlzdGlhYW4gU2ltb25zCiAgKiBtZW0uaCwgb3B0Lmg6IEFkZGVkIE1FTV9MSUJDX01BTExPQyBvcHRpb24uCiAgICBOb3RlIHRoaXMgaXMgYSB3b3JrYXJvdW5kLiBDdXJyZW50bHkgSSBoYXZlIG5vIG90aGVyIG9wdGlvbnMgbGVmdC4KCiAgMjAwNi0xMC0yNiBDaHJpc3RpYWFuIFNpbW9ucyAoYWNjZXB0ZWQgcGF0Y2ggYnkgSm9uYXRoYW4gTGFybW91cikKICAqIGlwdjQvaXBfZnJhZy5jOiByZW5hbWUgTUFYX01UVSB0byBJUF9GUkFHX01BWF9NVFUgYW5kIG1vdmUgZGVmaW5lCiAgICB0byBpbmNsdWRlL2x3aXAvb3B0LmguCiAgKiBpcHY0L2x3aXAvaXBfZnJhZy5oOiBSZW1vdmUgdW51c2VkIElQX1JFQVNTX0lOVEVSVkFMLgogICAgTW92ZSBJUF9SRUFTU19NQVhBR0UgYW5kIElQX1JFQVNTX0JVRlNJWkUgdG8gaW5jbHVkZS9sd2lwL29wdC5oLgogICogb3B0Lmg6IEFkZCBhYm92ZSBuZXcgb3B0aW9ucy4KCiAgMjAwNi0wOC0xOCBDaHJpc3RpYWFuIFNpbW9ucwogICogdGNwX3tpbixvdXR9LmM6IGFkZGVkIFNOTVAgY291bnRlcnMuCiAgKiBpcHY0L2lwLmM6IGFkZGVkIFNOTVAgY291bnRlcnMuCiAgKiBpcHY0L2lwX2ZyYWcuYzogYWRkZWQgU05NUCBjb3VudGVycy4KCiAgMjAwNi0wOC0wOCBDaHJpc3RpYWFuIFNpbW9ucwogICogZXRoYXJwLntjLGh9OiBhZGRlZCBldGhhcnBfZmluZF9hZGRyKCkgdG8gcmVhZAogICAgKHN0YWJsZSkgZXRoZXJuZXQvSVAgYWRkcmVzcyBwYWlyIGZyb20gQVJQIHRhYmxlCgogIDIwMDYtMDctMTQgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIG1pYl9zdHJ1Y3RzLmM6IGFkZGVkCiAgKiBpbmNsdWRlL2x3aXAvc25tcF9zdHJ1Y3RzLmg6IGFkZGVkCiAgKiBuZXRpZi57YyxofSwgbmV0aWYvZXRoZXJuZXRpZi5jOiBhZGRlZCBTTk1QIHN0YXRpc3RpY3MgdG8gbmV0aWYgc3RydWN0CgogIDIwMDYtMDctMDYgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIHNubXAvYXNuMV97ZW5jLGRlY30uYyBhZGRlZAogICogc25tcC9taWIyLmMgYWRkZWQKICAqIHNubXAvbXNnX3tpbixvdXR9LmMgYWRkZWQKICAqIGluY2x1ZGUvbHdpcC9zbm1wX2FzbjEuaCBhZGRlZAogICogaW5jbHVkZS9sd2lwL3NubXBfbXNnLmggYWRkZWQKICAqIGRvYy9zbm1wX2FnZW50LnR4dCBhZGRlZAoKICAyMDA2LTAzLTI5IENocmlzdGlhYW4gU2ltb25zCiAgKiBpbmV0LmMsIGluZXQuaDogQWRkZWQgcGxhdGZvcm0gYnl0ZXN3YXAgc3VwcG9ydC4KICAgIEFkZGVkIExXSVBfUExBVEZPUk1fQllURVNXQVAgZGVmaW5lIChkZWZhdWx0cyB0byAwKSBhbmQKICAgIG9wdGlvbmFsIExXSVBfUExBVEZPUk1fSFRPTlMoKSwgTFdJUF9QTEFURk9STV9IVE9OTCgpIG1hY3Jvcy4KCiAgKysgQnVnIGZpeGVzOgoKICAyMDA2LTExLTMwIENocmlzdGlhYW4gU2ltb25zCiAgKiBkaGNwLmM6IEZpeGVkIGZhbHNlIHRyaWdnZXJzIG9mIHJlcXVlc3RfdGltZW91dC4KCiAgMjAwNi0xMS0yOCBDaHJpc3RpYWFuIFNpbW9ucwogICogbmV0aWYuYzogSW4gbmV0aWZfYWRkKCkgZml4ZWQgbWlzc2luZyBjbGVhciBvZiBpcF9hZGRyLCBuZXRtYXNrLCBndyBhbmQgZmxhZ3MuCgogIDIwMDYtMTAtMTEgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGFwaV9saWIuYyBldGhhcnAuYywgaXAuYywgbWVtcC5jLCBzdGF0cy5jLCBzeXMue2MsaH0gdGNwLmg6CiAgICBQYXJ0aWFsbHkgYWNjZXB0ZWQgcGF0Y2ggIzU0NDkgZm9yIEFOU0kgQyBjb21wYXRpYmlsaXR5IC8gYnVpbGQgZml4ZXMuCiAgKiBpcHY0L2x3aXAvaXAuaCBpcHY2L2x3aXAvaXAuaDogQ29ycmVjdGVkIFVEUC1MaXRlIHByb3RvY29sCiAgICBpZGVudGlmaWVyIGZyb20gMTcwIHRvIDEzNiAoYnVnICMxNzU3NCkuCgogIDIwMDYtMTAtMTAgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGFwaV9tc2cuYzogRml4ZWQgTmFnbGUgYWxnb3JpdGhtIGFzIHJlcG9ydGVkIGJ5IEJvYiBHcmljZS4KCiAgMjAwNi0wOC0xNyBDaHJpc3RpYWFuIFNpbW9ucwogICogdWRwLmM6IEZpeGVkIGJ1ZyAjMTcyMDAsIGFkZGVkIGNoZWNrIGZvciBicm9hZGNhc3QKICAgIGRlc3RpbmF0aW9ucyBmb3IgUENCcyBib3VuZCB0byBhIHVuaWNhc3QgYWRkcmVzcy4KCiAgMjAwNi0wOC0wNyBDaHJpc3RpYWFuIFNpbW9ucwogICogYXBpX21zZy5jOiBGbHVzaGluZyBUQ1Agb3V0cHV0IGluIGRvX2Nsb3NlKCkgKGJ1ZyAjMTU5MjYpLgoKICAyMDA2LTA2LTI3IENocmlzdGlhYW4gU2ltb25zCiAgKiBhcGlfbXNnLmM6IEFwcGxpZWQgcGF0Y2ggZm9yIGNvbGQgY2FzZSAoYnVnICMxMTEzNSkuCiAgICBJbiBhY2NlcHRfZnVuY3Rpb24oKSBlbnN1cmUgbmV3Y29ubi0+Y2FsbGJhY2sgaXMgYWx3YXlzIGluaXRpYWxpemVkLgoKICAyMDA2LTA2LTE1IENocmlzdGlhYW4gU2ltb25zCiAgKiBtZW0uaDogYWRkZWQgTUVNX1NJWkVfRiBhbGlhcyB0byBmaXggYW4gYW5jaWVudCBjb2xkIGNhc2UgKGJ1ZyAjMTc0OCksCiAgICBmYWNpbGl0YXRlIHByaW50aW5nIG9mIG1lbV9zaXplX3QgYW5kIHUxNl90IHN0YXRpc3RpY3MuCgogIDIwMDYtMDYtMTQgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGFwaV9tc2cuYzogQXBwbGllZCBwYXRjaCAjNTE0NiB0byBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcwogICAgaW4gYWNjZXB0KCkgYnkgS2V2aW4gTGF3c29uLgoKICAyMDA2LTA1LTI2IENocmlzdGlhYW4gU2ltb25zCiAgKiBhcGlfbGliLmM6IFJlbW92ZWQgY29ubi0+c2VtIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiAKICAgIGZyb20gbmV0Y29ubl93cml0ZSgpIGFuZCBhZGRlZCBzeXNfc2VtX25ldyB0byBuZXRjb25uX25ld18qLgoKKFNUQUJMRS0xXzFfMSkKCiAgMjAwNi0wMy0wMyAgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGlwdjQvaXBfZnJhZy5jOiBBZGRlZCBib3VuZC1jaGVja2luZyBhc3NlcnRpb25zIG9uIGlwX3JlYXNzYml0bWFwCiAgICBhY2Nlc3MgYW5kIGFkZGVkIHBidWZfYWxsb2MoKSByZXR1cm4gdmFsdWUgY2hlY2tzLgoKICAyMDA2LTAxLTAxICBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiB0Y3Bfe2luLG91dH0uYywgdGNwX291dC5jOiBSZW1vdmVkICdldmVuIHNuZGJ1ZicgZml4IGluIFRDUCwgd2hpY2ggaXMKICAgIG5vdyBoYW5kbGVkIGJ5IHRoZSBjaGVja3N1bSByb3V0aW5lIHByb3Blcmx5LgoKICAyMDA2LTAyLTI3ICBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgICogcGJ1Zi5jOiBGaXggYWxpZ25tZW50OyBwYnVmX2luaXQoKSB3b3VsZCBub3Qgd29yayB1bmxlc3MKICAgICBwYnVmX3Bvb2xfbWVtb3J5W10gd2FzIHByb3Blcmx5IGFsaWduZWQuIChQYXRjaCBieSBDdXJ0IE1jRG93ZWxsLikKCiAgMjAwNS0xMi0yMCAgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogdGNwLmM6IFJlbW92ZSBQQ0JzIHdoaWNoIHN0YXkgaW4gTEFTVF9BQ0sgc3RhdGUgdG9vIGxvbmcuIFBhdGNoCiAgICBzdWJtaXR0ZWQgYnkgTWl0cmFuaSBIaXJvc2hpLgoKICAyMDA1LTEyLTE1ICBDaHJpc3RpYWFuIFNpbW9ucwogICogaW5ldC5jOiBEaXNhYmxlZCB0aGUgYWRkZWQgc3VtbWluZyByb3V0aW5lIHRvIHByZXNlcnZlIGNvZGUgc3BhY2UuCgogIDIwMDUtMTItMTQgIExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIHRjcF9pbi5jOiBEdXBsaWNhdGUgRklOIEFDSyByYWNlIGNvbmRpdGlvbiBmaXggYnkgS2VsdmluIExhd3Nvbi4KICAgIEFkZGVkIEN1cnQgTWNEb3dlbGwncyBvcHRpbWl6ZWQgY2hlY2tzdW1taW5nIHJvdXRpbmUgZm9yIGZ1dHVyZQogICAgaW5jbHVzaW9uLiBOZWVkIHRvIGNyZWF0ZSB0ZXN0IGNhc2UgZm9yIHVuYWxpZ2VkLCBhbGlnbmVkLCBvZGQsCiAgICBldmVuIGxlbmd0aCBjb21iaW5hdGlvbiBvZiBjYXNlcyBvbiB2YXJpb3VzIGVuZGlhbmVzcyBtYWNoaW5lcy4KCiAgMjAwNS0xMi0wOSAgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGluZXQuYzogUmV3cm90ZSBzdGFuZGFyZCBjaGVja3N1bSByb3V0aW5lIGluIHByb3BlciBwb3J0YWJsZSBDLgoKICAyMDA1LTExLTI1ICBDaHJpc3RpYWFuIFNpbW9ucwogICogdWRwLmMgdGNwLmM6IFJlbW92ZWQgU09fUkVVU0UgaGFjay4gU2hvdWxkIHJlc2lkZSBpbiBzb2NrZXQgY29kZSBvbmx5LgogICogKi5jOiBpbnRyb2R1Y2VkIGNjLmggTFdJUF9ERUJVRyBmb3JtYXR0ZXJzIG1hdGNoaW5nIHRoZSB1MTZfdCwgczE2X3QsCiAgICB1MzJfdCwgczMyX3QgdHlwZWRlZnMuIFRoaXMgc29sdmVzIG1vc3QgZGVidWcgd29yZC1sZW5ndGggYXNzdW1lcy4KCiAgMjAwNS0wNy0xNyBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiBpbmV0LmM6IEZpeGVkIHVuYWxpZ25lZCAxNi1iaXQgYWNjZXNzIGluIHRoZSBzdGFuZGFyZCBjaGVja3N1bQogICAgcm91dGluZSBieSBQZXRlciBKb2xhc3Nvbi4KICAqIHNsaXBpZi5jOiBGaXhlZCBpbXBsZW1lbnRhdGlvbiBhc3N1bXB0aW9uIG9mIHNpbmdsZS1wYnVmIGRhdGFncmFtcy4KCiAgMjAwNS0wMi0wNCBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiB0Y3Bfb3V0LmM6IEZpeGVkIHVuaW5pdGlhbGl6ZWQgJ3F1ZXVlJyByZWZlcmVuY2VkIGluIG1lbWVyciBicmFuY2guCiAgKiB0Y3Bfe291dHxpbn0uYzogQXBwbGllZCBwYXRjaCBmaXhpbmcgdW5hbGlnbmVkIGFjY2Vzcy4KCiAgMjAwNS0wMS0wNCBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiBwYnVmLmM6IEZpeGVkIG1pc3Npbmcgc2VtaWNvbG9uIGFmdGVyIExXSVBfREVCVUcgc3RhdGVtZW50LgoKICAyMDA1LTAxLTAzIExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIHVkcC5jOiBVRFAgcGNiLT5yZWN2KCkgd2FzIGNhbGxlZCBldmVuIHdoZW4gaXQgd2FzIE5VTEwuCgooU1RBQkxFLTFfMV8wKQoKICAyMDA0LTEyLTI4IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIGV0aGFycC4qOiBEaXNhYmxlZCBtdWx0aXBsZSBwYWNrZXRzIG9uIHRoZSBBUlAgcXVldWUuCiAgICBUaGlzIGNsYXNoZXMgd2l0aCBUQ1AgcXVldWVpbmcuCgogIDIwMDQtMTEtMjggTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogZXRoYXJwLio6IEZpeGVkIHJhY2UgY29uZGl0aW9uIGZyb20gQVJQIHJlcXVlc3QgdG8gQVJQIHRpbWVvdXQuCiAgICBIYWx2ZWQgdGhlIEFSUCBwZXJpb2QsIGRvdWJsZWQgdGhlIHBlcmlvZCBjb3VudHMuCiAgICBFVEhBUlBfTUFYX1BFTkRJTkcgbm93IHNob3VsZCBiZSBhdCBsZWFzdCAyLiBUaGlzIHByZXZlbnRzCiAgICB0aGUgY291bnRlciBmcm9tIHJlYWNoaW5nIDAgcmlnaHQgYXdheSAod2hpY2ggd291bGQgYWxsb3cKICAgIHRvbyBsaXR0bGUgdGltZSBmb3IgQVJQIHJlc3BvbnNlcyB0byBiZSByZWNlaXZlZCkuCgogIDIwMDQtMTEtMjUgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogZGhjcC5jOiBEZWNsaW5lIG1lc3NhZ2VzIHdlcmUgbm90IG11bHRpY2FzdCBidXQgdW5pY2FzdC4KICAqIGV0aGFycC5jOiBFVEhBUlBfQ1JFQVRFIGlzIHJlbmFtZWQgdG8gRVRIQVJQX1RSWV9IQVJELgogICAgRG8gbm90IHRyeSBoYXJkIHRvIGluc2VydCBhcmJpdHJhcnkgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MsCiAgICBldGhhcnBfaXBfaW5wdXQoKSBub3cgY2FsbHMgZXRoYXJwX3VwZGF0ZSgpIHdpdGhvdXQgRVRIQVJQX1RSWV9IQVJELiAKICAgIGV0aGFycF9xdWVyeSgpIG5vdyBhbHdheXMgRE9FUyBjYWxsIEVUSEFSUF9UUllfSEFSRCBzbyB0aGF0IHVzZXJzCiAgICBxdWVyeWluZyBhbiBhZGRyZXNzIHdpbGwgc2VlIGl0IGFwcGVhciBpbiB0aGUgY2FjaGUgKERIQ1AgY291bGQKICAgIHN1ZmZlciBmcm9tIHRoaXMgd2hlbiBhIHNlcnZlciBpbnZhbGlkbHkgZ2F2ZSBhbiBpbi11c2UgYWRkcmVzcy4pCiAgKiBpcHY0L2lwX2FkZHIuaDogUmVuYW1lZCBpcF9hZGRyX21hc2tjbXAoKSB0byBfbmV0Y21wKCkgYXMgd2UgYXJlCiAgICBjb21wYXJpbmcgbmV0d29yayBhZGRyZXNzZXMgKGlkZW50aWZpZXJzKSwgbm90IHRoZSBuZXR3b3JrIG1hc2tzCiAgICB0aGVtc2VsdmVzLgogICogaXB2NC9pcF9hZGRyLmM6IGlwX2FkZHJfaXNicm9hZGNhc3QoKSBub3cgY2hlY2tzIHRoYXQgdGhlIGdpdmVuCiAgICBJUCBhZGRyZXNzIGFjdHVhbGx5IGJlbG9uZ3MgdG8gdGhlIG5ldHdvcmsgb2YgdGhlIGdpdmVuIGludGVyZmFjZS4KCiAgMjAwNC0xMS0yNCBLaWVyYW4gTWFuc2xleSA8a2ptMjVAY2FtLmFjLnVrPgogICogdGNwLmM6IEluY3JlbWVudCBwY2ItPnNuZF9idWYgd2hlbiBBQ0sgaXMgcmVjZWl2ZWQgaW4gU1lOX1NFTlQgc3RhdGUuCgooU1RBQkxFLTFfMV8wLVJDMSkKCiAgMjAwNC0xMC0xNiBLaWVyYW4gTWFuc2xleSA8a2ptMjVAY2FtLmFjLnVrPgogICogdGNwLmM6IEFkZCBjb2RlIHRvIHRjcF9yZWN2ZWQoKSB0byBzZW5kIGFuIEFDSyAod2luZG93IHVwZGF0ZSkgaW1tZWRpYXRlbHksCiAgICBldmVuIGlmIG9uZSBpcyBhbHJlYWR5IHBlbmRpbmcsIGlmIHRoZSByY3Zfd25kIGlzIGFib3ZlIGEgdGhyZXNob2xkCiAgICAoY3VycmVudGx5IFRDUF9XTkQvMikuIFRoaXMgYXZvaWRzIHdhaXRpbmcgZm9yIGEgdGltZXIgdG8gZXhwaXJlIHRvIHNlbmQgYQogICAgZGVsYXllZCBBQ0sgaW4gb3JkZXIgdG8gb3BlbiB0aGUgd2luZG93IGlmIHRoZSBzdGFjayBpcyBvbmx5IHJlY2VpdmluZyBkYXRhLgoKICAyMDA0LTA5LTEyIEtpZXJhbiBNYW5zbGV5IDxram0yNUBjYW0uYWMudWs+CiAgKiB0Y3AqLio6IFJldHJhbnNtaXQgdGltZS1vdXQgaGFuZGxpbmcgaW1wcm92ZW1lbnQgYnkgU2FtIEphbnNlbi4KCiAgMjAwNC0wOC0yMCBUb255IE1vdW50aWZpZWxkIDx0b255QHNvZnRpbnMuY28udWs+CiAgKiBldGhhcnAuYzogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYnVmIHF1ZXVlZCBvbiBhbiBBUlAgZW50cnkKICAgIGlzIHByb3Blcmx5IHJlZiBjb3VudGVkLgoKICAyMDA0LTA3LTI3IFRvbnkgTW91bnRpZmllbGQgPHRvbnlAc29mdGlucy5jby51az4KICAqIGRlYnVnLmg6IEFkZGVkIChpbnQpIGNhc3QgaW4gTFdJUF9ERUJVR0YoKSB0byBhdm9pZCBjb21waWxlcgogICAgd2FybmluZ3MgYWJvdXQgY29tcGFyaXNvbi4KICAqIHBidWYuYzogU3RvcHBlZCBjb21waWxlciBjb21wbGFpbmluZyBvZiBlbXB0eSBpZiBzdGF0ZW1lbnQKICAgIHdoZW4gTFdJUF9ERUJVR0YoKSBlbXB0eS4gIENsb3NlZCBhbiB1bmNsb3NlZCBjb21tZW50LgogICogdGNwLmM6IFN0b3BwZWQgY29tcGlsZXIgY29tcGxhaW5pbmcgb2YgZW1wdHkgaWYgc3RhdGVtZW50CiAgICB3aGVuIExXSVBfREVCVUdGKCkgZW1wdHkuCiAgKiBpcC5oIENvcnJlY3RlZCBJUEhfVE9TKCkgbWFjcm86IHJldHVybnMgYSBieXRlLCBzbyBkb2Vzbid0IG5lZWQgaHRvbnMoKS4KICAqIGluZXQuYzogQWRkZWQgYSBjb3VwbGUgb2YgY2FzdHMgdG8gcXVpZXQgdGhlIGNvbXBpbGVyLgogICAgTm8gbmVlZCB0byB0ZXN0IGlzYXNjaWkoYykgYmVmb3JlIGlzZGlnaXQoYykgb3IgaXN4ZGlnaXQoYykuCgogIDIwMDQtMDctMjIgVG9ueSBNb3VudGlmaWVsZCA8dG9ueUBzb2Z0aW5zLmNvLnVrPgogICogaW5ldC5jOiBNYWRlIGRhdGEgdHlwZXMgY29uc2lzdGVudCBpbiBpbmV0X250b2EoKS4KICAgIEFkZGVkIGNhc3RzIGZvciByZXR1cm4gdmFsdWVzIG9mIGNoZWNrc3VtIHJvdXRpbmVzLCB0byBwYWNpZnkgY29tcGlsZXIuCiAgKiBpcF9mcmFnLmMsIHRjcF9vdXQuYywgc29ja2V0cy5jLCBwYnVmLmMKICAgIFNtYWxsIGNvcnJlY3Rpb25zIHRvIHNvbWUgZGVidWdnaW5nIHN0YXRlbWVudHMsIHRvIHBhY2lmeSBjb21waWxlci4KCiAgMjAwNC0wNy0yMSBUb255IE1vdW50aWZpZWxkIDx0b255QHNvZnRpbnMuY28udWs+CiAgKiBldGhhcnAuYzogUmVtb3ZlZCBzcHVyaW91cyBzZW1pY29sb24gYW5kIGFkZGVkIG1pc3NpbmcgZW5kLW9mLWNvbW1lbnQuCiAgKiBldGhlcm5ldGlmLmMgVXBkYXRlZCBsb3dfbGV2ZWxfb3V0cHV0KCkgdG8gbWF0Y2ggcHJvdG90eXBlIGZvcgogICAgbmV0aWYtPmxpbmtvdXRwdXQgYW5kIGNoYW5nZWQgbG93X2xldmVsX2lucHV0KCkgc2ltaWxhcmx5IGZvciBjb25zaXN0ZW5jeS4KICAqIGFwaV9tc2cuYzogQ2hhbmdlZCByZWN2X3JhdygpIGZyb20gaW50IHRvIHU4X3QsIHRvIG1hdGNoIHByb3RvdHlwZQogICAgb2YgcmF3X3JlY3YoKSBpbiByYXcuaCBhbmQgc28gYXZvaWQgY29tcGlsZXIgZXJyb3IuCiAgKiBzb2NrZXRzLmM6IEFkZGVkIHRyaXZpYWwgKGludCkgY2FzdCB0byBrZWVwIGNvbXBpbGVyIGhhcHBpZXIuCiAgKiBpcC5jLCBuZXRpZi5jIENoYW5nZWQgZGVidWcgc3RhdGVtZW50cyB0byB1c2UgdGhlIHRpZGllciBpcDRfYWRkck4oKSBtYWNyb3MuCgooU1RBQkxFLTFfMF8wKQoKICArKyBDaGFuZ2VzOgoKICAyMDA0LTA3LTA1IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIHNvY2tldHMuKjogUmVzdHJ1Y3R1cmVkIExXSVBfUFJJVkFURV9USU1FVkFMLiBNYWtlIHN1cmUKICAgIHlvdXIgY2MuaCBmaWxlIGRlZmluZXMgdGhpcyBlaXRoZXIgMSBvciAwLiBJZiBub24tZGVmaW5lZCwKICAgIGRlZmF1bHRzIHRvIDEuCiAgKiAuYzogQWRkZWQgPHN0cmluZy5oPiBhbmQgPGVycm5vLmg+IGluY2x1ZGVzIHdoZXJlIHVzZWQuCiAgKiBldGhhcnAuYzogTWFkZSBzb21lIGFycmF5IGluZGljZXMgdW5zaWduZWQuCgogIDIwMDQtMDYtMjcgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogbmV0aWYuKjogQWRkZWQgbmV0aWZfc2V0X3VwKCkvZG93bigpLgogICogZGhjcC5jOiBDaGFuZ2VzIHRvIHJlc3RhcnQgcHJvZ3JhbSBmbG93LgoKICAyMDA0LTA1LTA3IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIGV0aGFycC5jOiBJbiBmaW5kX2VudHJ5KCksIGluc3RlYWQgb2YgYSBsaXN0IHRyYXZlcnNhbCBwZXIgY2FuZGlkYXRlLCBkbyBhCiAgICBzaW5nbGUtcGFzcyBsb29rdXAgZm9yIGRpZmZlcmVudCBjYW5kaWRhdGVzLiBTaG91bGQgZXhwbG9pdCBsb2NhbGl0eS4KCiAgMjAwNC0wNC0yOSBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiB0Y3AqLmM6IENsZWFuZWQgdXAgc291cmNlIGNvbW1lbnQgZG9jdW1lbnRhdGlvbiBmb3IgRG94eWdlbiBwcm9jZXNzaW5nLgogICogb3B0Lmg6IEVUSEFSUF9BTFdBWVNfSU5TRVJUIG9wdGlvbiByZW1vdmVkIHRvIGNvbXBseSB3aXRoIEFSUCBSRkMuCiAgKiBldGhhcnAuYzogdXBkYXRlX2FycF9lbnRyeSgpIG9ubHkgYWRkcyBuZXcgQVJQIGVudHJpZXMgd2hlbiBhZHZpY2VkIHRvIGJ5CiAgICB0aGUgY2FsbGVyLiBUaGlzIGRlcHJlY2F0ZXMgdGhlIEVUSEFSUF9BTFdBWVNfSU5TRVJUIG92ZXJydWxlIG9wdGlvbi4KCiAgKysgQnVnIGZpeGVzOgoKICAyMDA0LTA0LTI3IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIGV0aGFycC5jOiBBcHBsaWVkIHBhdGNoIG9mIGJ1ZyAjODcwOCBieSBUb25pIE1vdW50aWZpZWxkIHdpdGggYSBzb2x1dGlvbgogICAgc3VnZ2VzdGVkIGJ5IFRpbW15IEJyb2xpbi4gRml4IGZvciAzMi1iaXQgcHJvY2Vzc29ycyB0aGF0IGNhbm5vdCBhY2Nlc3MKICAgIG5vbi1hbGlnbmVkIDMyLWJpdCB3b3Jkcywgc3VjaCBhcyBzb21zIDMyLWJpdCBUQ1AvSVAgaGVhZGVyIGZpZWxkcy4gRml4CiAgICBpcyB0byBwcmVmaXggdGhlIDE0LWJpdCBFdGhlcm5ldCBoZWFkZXJzIHdpdGggdHdvIHBhZGRpbmcgYnl0ZXMuCgogIDIwMDQtMDQtMjMgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogaXBfYWRkci5jOiBGaXggaW4gdGhlIGlwX2FkZHJfaXNicm9hZGNhc3QoKSBjaGVjay4KICAqIGV0aGFycC5jOiBGaXhlZCB0aGUgY2FzZSB3aGVyZSB0aGUgcGFja2V0IHRoYXQgaW5pdGlhdGVzIHRoZSBBUlAgcmVxdWVzdAogICAgaXMgbm90IHF1ZXVlZCwgYW5kIGdldHMgbG9zdC4gRml4ZWQgdGhlIGNhc2Ugd2hlcmUgdGhlIHBhY2tldHMgZGVzdGluYXRpb24KICAgIGFkZHJlc3MgaXMgYWxyZWFkeSBrbm93bjsgd2Ugbm93IGFsd2F5cyBxdWV1ZSB0aGUgcGFja2V0IGFuZCBwZXJmb3JtIGFuIEFSUAogICAgcmVxdWVzdC4KCihTVEFCTEUtMF83XzApCgogICsrIEJ1ZyBmaXhlczoKCiAgKiBGaXhlZCBUQ1AgYnVnIGZvciBTWU5fU0VOVCB0byBFU1RBQkxJU0hFRCBzdGF0ZSB0cmFuc2l0aW9uLgogICogRml4ZWQgVENQIGJ1ZyBpbiBkZXF1ZXVlaW5nIG9mIEZJTiBmcm9tIG91dCBvZiBvcmRlciBzZWdtZW50IHF1ZXVlLgogICogRml4ZWQgdHdvIHBvc3NpYmxlIE5VTEwgcmVmZXJlbmNlcyBpbiByYXJlIGNhc2VzLgoKKFNUQUJMRS0wXzZfNikKCiAgKysgQnVnIGZpeGVzOgoKICAqIEZpeGVkIERIQ1Agd2hpY2ggZGlkIG5vdCBpbmNsdWRlIHRoZSBJUCBhZGRyZXNzIGluIERFQ0xJTkUgbWVzc2FnZXMuCgogICsrIENoYW5nZXM6CgogICogZXRoYXJwLmMgaGFzIGJlZW4gaGF1bGVkIG92ZXIgYSBiaXQuCgooU1RBQkxFLTBfNl81KQoKICArKyBCdWcgZml4ZXM6CgogICogRml4ZWQgVENQIGJ1ZyBpbmR1Y2VkIGJ5IGJhZCB3aW5kb3cgcmVzaXppbmcgd2l0aCB1bmlkaXJlY3Rpb25hbCBUQ1AgdHJhZmZpYy4KICAqIFBhY2tldHMgc2VudCBmcm9tIEFSUCBxdWV1ZSBoYWQgaW52YWxpZCBzb3VyY2UgaGFyZHdhcmUgYWRkcmVzcy4KCiAgKysgQ2hhbmdlczoKCiAgKiBQYXNzLWJ5IEFSUCByZXF1ZXN0cyBkbyBub3cgdXBkYXRlIHRoZSBjYWNoZS4KCiAgKysgTmV3IGZlYXR1cmVzOgoKICAqIE5vIGxvbmdlciBkZXBlbmRlbnQgb24gY3R5cGUuaC4KICAqIE5ldyBzb2NrZXQgb3B0aW9ucy4KICAqIFJhdyBJUCBwY2Igc3VwcG9ydC4KCihTVEFCTEUtMF82XzQpCgogICsrIEJ1ZyBmaXhlczoKCiAgKiBTb21lIGRlYnVnIGZvcm1hdHRlcnMgYW5kIGNhc3RzIGZpeGVkLgogICogTnVtZXJlb3VzIGZpeGVzIGluIFBQUC4KCiAgKysgQ2hhbmdlczoKCiAgKiBERUJVR0Ygbm93IGlzIExXSVBfREVCVUdGCiAgKiBwYnVmX2RlY2hhaW4oKSBoYXMgYmVlbiByZS1lbmFibGVkLgogICogTWVudGlvbmVkIHRoZSBjaGFuZ2VkIHVzZSBvZiBDVlMgYnJhbmNoZXMgaW4gUkVBRE1FLgoKKFNUQUJMRS0wXzZfMykKCiAgKysgQnVnIGZpeGVzOgoKICAqIEZpeGVkIHBvb2wgcGJ1ZiBtZW1vcnkgbGVhayBpbiBwYnVmX2FsbG9jKCkuCiAgICBPY2N1cmVkIGlmIG5vdCBlbm91Z2ggUEJVRl9QT09MIHBidWZzIGZvciBhIHBhY2tldCBwYnVmIGNoYWluLgogICAgUmVwb3J0ZWQgYnkgU2F2aW4gWmxvYmVjLgoKICAqIFBCVUZfUE9PTCBjaGFpbnMgaGFkIHRoZWlyIHRvdF9sZW4gZmllbGQgbm90IHNldCBmb3Igbm9uLWZpcnN0CiAgICBwYnVmcy4gRml4ZWQgaW4gcGJ1Zl9hbGxvYygpLgoKICArKyBOZXcgZmVhdHVyZXM6CgogICogQWRkZWQgUFBQIHN0YWNrIGNvbnRyaWJ1dGVkIGJ5IE1hcmMgQm91Y2hlcgoKICArKyBDaGFuZ2VzOgoKICAqIE5vdyBkcm9wcyBzaG9ydCBwYWNrZXRzIGZvciBJQ01QL1VEUC9UQ1AgcHJvdG9jb2xzLiBNb3JlIHJvYnVzdC4KCiAgKiBBUlAgcXVldWV1aW5nIG5vdyBxdWV1ZXMgdGhlIGxhdGVzdCBwYWNrZXQgaW5zdGVhZCBvZiB0aGUgZmlyc3QuCiAgICBUaGlzIGlzIHRoZSBSRkMgcmVjb21tZW5kZWQgYmVoYXZpb3VyLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gaW4KICAgIGx3aXBvcHRzLmguCgooMC42LjIpCgogICsrIEJ1Z2ZpeGVzOgoKICAqIFRDUCBoYXMgYmVlbiBmaXhlZCB0byBkZWFsIHdpdGggdGhlIG5ldyB1c2Ugb2YgdGhlIHBidWYtPnJlZgogICAgY291bnRlci4KCiAgKiBESENQIGRoY3BfaW5mb3JtKCkgY3Jhc2ggYnVnIGZpeGVkLgoKICArKyBDaGFuZ2VzOgoKICAqIFJlbW92ZWQgcGJ1Zl9wb29sX2ZyZWVfY2FjaGUgYW5kIHBidWZfcG9vbF9hbGxvY19jYWNoZS4gQWxzbyByZW1vdmVkCiAgICBwYnVmX3JlZnJlc2goKS4gVGhpcyBoYXMgc3BlZCB1cCBwYnVmIHBvb2wgb3BlcmF0aW9ucyBjb25zaWRlcmFibHkuCiAgICBJbXBsZW1lbnRlZCBieSBEYXZpZCBIYWFzLgoKKDAuNi4xKQoKICArKyBOZXcgZmVhdHVyZXM6CgogICogVGhlIHBhY2tldCBidWZmZXIgaW1wbGVtZW50YXRpb24gaGFzIGJlZW4gZW5oYW5jZWQgdG8gc3VwcG9ydAogICAgemVyby1jb3B5IGFuZCBjb3B5LW9uLWRlbWFuZCBmb3IgcGFja2V0IGJ1ZmZlcnMgd2hpY2ggaGF2ZSB0aGVpcgogICAgcGF5bG9hZHMgaW4gYXBwbGljYXRpb24tbWFuYWdlZCBtZW1vcnkuCiAgICBJbXBsZW1lbnRlZCBieSBEYXZpZCBIYWFzLgoKICAgIFVzZSBQQlVGX1JFRiB0byBtYWtlIGEgcGJ1ZiByZWZlciB0byBSQU0uIGx3SVAgd2lsbCB1c2UgemVyby1jb3B5CiAgICBpZiBhbiBvdXRnb2luZyBwYWNrZXQgY2FuIGJlIGRpcmVjdGx5IHNlbnQgb24gdGhlIGxpbmssIG9yIHBlcmZvcm0KICAgIGEgY29weS1vbi1kZW1hbmQgd2hlbiBuZWNlc3NhcnkuCgogICAgVGhlIGFwcGxpY2F0aW9uIGNhbiBzYWZlbHkgYXNzdW1lIHRoZSBwYWNrZXQgaXMgc2VudCwgYW5kIHRoZSBSQU0KICAgIGlzIGF2YWlsYWJsZSB0byB0aGUgYXBwbGljYXRpb24gZGlyZWN0bHkgYWZ0ZXIgY2FsbGluZyB1ZHBfc2VuZCgpCiAgICBvciBzaW1pbGFyIGZ1bmN0aW9uLgoKICArKyBCdWdmaXhlczoKCiAgKiBBUlBfUVVFVUVJTkcgc2hvdWxkIG5vdyBjb3JyZWN0bHkgd29yayBmb3IgYWxsIGNhc2VzLCBpbmNsdWRpbmcKICAgIFBCVUZfUkVGLgogICAgSW1wbGVtZW50ZWQgYnkgTGVvbiBXb2VzdGVuYmVyZy4KCiAgKysgQ2hhbmdlczoKCiAgKiBJUF9BRERSX0FOWSBpcyBubyBsb25nZXIgYSBOVUxMIHBvaW50ZXIuIEluc3RlYWQsIGl0IGlzIGEgcG9pbnRlcgogICAgdG8gYSAnMC4wLjAuMCcgSVAgYWRkcmVzcy4KCiAgKiBUaGUgcGFja2V0IGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiBpcyBjaGFuZ2VkLiBUaGUgcGJ1Zi0+cmVmIGNvdW50ZXIKICAgIG1lYW5pbmcgaGFzIGNoYW5nZWQsIGFuZCBzZXZlcmFsIHBidWYgZnVuY3Rpb25zIGhhdmUgYmVlbgogICAgYWRhcHRlZCBhY2NvcmRpbmdseS4KCiAgKiBuZXRpZiBkcml2ZXJzIGhhdmUgdG8gYmUgY2hhbmdlZCB0byBzZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoIGZpZWxkCiAgICB0aGF0IG11c3QgYmUgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IGJ5IHRoZSBkcml2ZXIgKGhpbnQ6IDYgZm9yIEV0aGVybmV0IE1BQykuCiAgICBTZWUgdGhlIGNvbnRyaWIvcG9ydHMvYzE2eCBjczg5MDAgZHJpdmVyIGFzIGEgZHJpdmVyIGV4YW1wbGUuCgogICogbmV0aWYncyBoYXZlIGEgZGhjcCBmaWVsZCB0aGF0IG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gTlVMTCBieSB0aGUgZHJpdmVyLgogICAgU2VlIHRoZSBjb250cmliL3BvcnRzL2MxNnggY3M4OTAwIGRyaXZlciBhcyBhIGRyaXZlciBleGFtcGxlLgoKKDAuNS54KSBUaGlzIGZpbGUgaGFzIGJlZW4gdW5tYWludGFpbmVkIHVwIHRvIDAuNi4xLiBBbGwgY2hhbmdlcyBhcmUKICBsb2dnZWQgaW4gQ1ZTIGJ1dCBoYXZlIG5vdCBiZWVuIGV4cGxhaW5lZCBoZXJlLgoKKDAuNS4zKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC41LjIKCiAgKysgQnVnZml4ZXM6CgogICogbWVtcF9tYWxsb2MoTUVNUF9BUElfTVNHKSBjb3VsZCBmYWlsIHdpdGggbXVsdGlwbGUgYXBwbGljYXRpb24KICAgIHRocmVhZHMgYmVjYXVzZSBpdCB3YXNuJ3QgcHJvdGVjdGVkIGJ5IHNlbWFwaG9yZXMuCgogICsrIE90aGVyIGNoYW5nZXM6CgogICogc3RydWN0IGlwX2FkZHIgbm93IHBhY2tlZC4KCiAgKiBUaGUgbmFtZSBvZiB0aGUgdGltZSB2YXJpYWJsZSBpbiBhcnAuYyBoYXMgYmVlbiBjaGFuZ2VkIHRvIGN0aW1lCiAgICB0byBhdm9pZCBjb25mbGljdHMgd2l0aCB0aGUgdGltZSgpIGZ1bmN0aW9uLgoKKDAuNS4yKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC41LjEKCiAgKysgTmV3IGZlYXR1cmVzOgoKICAqIEEgbmV3IFRDUCBmdW5jdGlvbiwgdGNwX3RtcigpLCBub3cgaGFuZGxlcyBib3RoIFRDUCB0aW1lcnMuCgogICsrIEJ1Z2ZpeGVzOgoKICAqIEEgYnVnIGluIHRjcF9wYXJzZW9wdCgpIGNvdWxkIGNhdXNlIHRoZSBzdGFjayB0byBoYW5nIGJlY2F1c2Ugb2YgYQogICAgbWFsZm9ybWVkIFRDUCBvcHRpb24uCgogICogVGhlIGFkZHJlc3Mgb2YgbmV3IGNvbm5lY3Rpb25zIGluIHRoZSBhY2NlcHQoKSBmdW5jdGlvbiBpbiB0aGUgQlNECiAgICBzb2NrZXQgbGlicmFyeSB3YXMgbm90IGhhbmRsZWQgY29ycmVjdGx5LgoKICAqIHBidWZfZGVjaGFpbigpIGRpZCBub3QgdXBkYXRlIHRoZSAtPnRvdF9sZW4gZmllbGQgb2YgdGhlIHRhaWwuCgogICogQWJvcnRlZCBUQ1AgY29ubmVjdGlvbnMgd2VyZSBub3QgaGFuZGxlZCBjb3JyZWN0bHkgaW4gYWxsCiAgICBzaXR1YXRpb25zLgoKICArKyBPdGhlciBjaGFuZ2VzOgoKICAqIEFsbCBwcm90b2NvbCBoZWFkZXIgc3RydWN0cyBhcmUgbm93IHBhY2tlZC4KCiAgKiBUaGUgLT5sZW4gZmllbGQgaW4gdGhlIHRjcF9zZWcgc3RydWN0dXJlIG5vdyBjb3VudHMgdGhlIGFjdHVhbAogICAgYW1vdW50IG9mIGRhdGEsIGFuZCBkb2VzIG5vdCBhZGQgb25lIGZvciBTWU4gYW5kIEZJTiBzZWdtZW50cy4KCigwLjUuMSkgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuNS4wCgogICsrIE5ldyBmZWF0dXJlczoKCiAgKiBQb3NzaWJsZSB0byBydW4gYXMgYSB1c2VyIHByb2Nlc3MgdW5kZXIgTGludXguCgogICogUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgY3Jvc3MgcGxhdGZvcm0gcGFja2VkIHN0cnVjdHMuCgogICogQVJQIHRpbWVyIG5vdyBpbXBsZW1lbnRlZC4KCiAgKysgQnVnZml4ZXM6CgogICogVENQIG91dHB1dCBxdWV1ZSBsZW5ndGggd2FzIGJhZGx5IGluaXRpYWxpemVkIHdoZW4gb3BlbmluZwogICAgY29ubmVjdGlvbnMuCgogICogVENQIGRlbGF5ZWQgQUNLcyB3ZXJlIG5vdCBzZW50IGNvcnJlY3RseS4KCiAgKiBFeHBsaWNpdCBpbml0aWFsaXphdGlvbiBvZiBCU1Mgc2VnbWVudCB2YXJpYWJsZXMuCgogICogcmVhZCgpIGluIEJTRCBzb2NrZXQgbGlicmFyeSBjb3VsZCBkcm9wIGRhdGEuCgogICogUHJvYmxlbXMgd2l0aCBtZW1vcnkgYWxpZ25tZW50LgoKICAqIFNpdHVhdGlvbnMgd2hlbiBhbGwgVENQIGJ1ZmZlcnMgd2VyZSB1c2VkIGNvdWxkIGxlYWQgdG8KICAgIHN0YXJ2YXRpb24uCgogICogVENQIE1TUyBvcHRpb24gd2Fzbid0IHBhcnNlZCBjb3JyZWN0bHkuCgogICogUHJvYmxlbXMgd2l0aCBVRFAgY2hlY2tzdW0gY2FsY3VsYXRpb24uCgogICogSVAgbXVsdGljYXN0IGFkZHJlc3MgdGVzdHMgaGFkIGVuZGlhbmVzcyBwcm9ibGVtcy4KCiAgKiBBUlAgcmVxdWVzdHMgaGFkIHdyb25nIGRlc3RpbmF0aW9uIGhhcmR3YXJlIGFkZHJlc3MuCgogICsrIE90aGVyIGNoYW5nZXM6CgogICogc3RydWN0IGV0aF9hZGRyIGNoYW5nZWQgZnJvbSB1MTZfdFszXSBhcnJheSB0byB1OF90WzZdLgoKICAqIEEgLT5saW5rb3V0cHV0KCkgbWVtYmVyIHdhcyBhZGRlZCB0byBzdHJ1Y3QgbmV0aWYuCgogICogVENQIGFuZCBVRFAgLT5kZXN0Xyogc3RydWN0IG1lbWJlcnMgd2hlcmUgY2hhbmdlZCB0byAtPnJlbW90ZV8qLgoKICAqIG50b2gqIG1hY3JvcyBhcmUgbm93IG51bGwgZGVmaW5pdGlvbnMgZm9yIGJpZyBlbmRpYW4gQ1BVcy4KCigwLjUuMCkgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuNC4yCgogICsrIE5ldyBmZWF0dXJlczoKCiAgKiBSZWRlc2lnbmVkIG9wZXJhdGluZyBzeXN0ZW0gZW11bGF0aW9uIGxheWVyIHRvIG1ha2UgcG9ydGluZyBlYXNpZXIuCgogICogQmV0dGVyIGNvbnRyb2wgb3ZlciBUQ1Agb3V0cHV0IGJ1ZmZlcnMuCgogICogRG9jdW1lbmF0aW9uIGFkZGVkLgoKICArKyBCdWdmaXhlczoKCiAgKiBMb2NraW5nIGlzc3VlcyBpbiBidWZmZXIgbWFuYWdlbWVudC4KCiAgKiBCdWdmaXhlcyBpbiB0aGUgc2VxdWVudGlhbCBBUEkuCgogICogSVAgZm9yd2FyZGluZyBjb3VsZCBjYXVzZSBtZW1vcnkgbGVha2FnZS4gVGhpcyBoYXMgYmVlbiBmaXhlZC4KCiAgKysgT3RoZXIgY2hhbmdlczoKCiAgKiBEaXJlY3Rvcnkgc3RydWN0dXJlIHNvbWV3aGF0IGNoYW5nZWQ7IHRoZSBjb3JlLyB0cmVlIGhhcyBiZWVuCiAgICBjb2xsYXBzZWQuCgooMC40LjIpIENoYW5nZXMgc2luY2UgdmVyc2lvbiAwLjQuMQoKICArKyBOZXcgZmVhdHVyZXM6CgogICogRXhwZXJpbWVudGFsIEFSUCBpbXBsZW1lbnRhdGlvbiBhZGRlZC4KCiAgKiBTa2VsZXRvbiBFdGhlcm5ldCBkcml2ZXIgYWRkZWQuCgogICogRXhwZXJpbWVudGFsIEJTRCBzb2NrZXQgQVBJIGxpYnJhcnkgYWRkZWQuCgogICsrIEJ1Z2ZpeGVzOgoKICAqIEluIHZlcnkgaW50ZW5zZSBzaXR1YXRpb25zLCBtZW1vcnkgbGVha2FnZSBjb3VsZCBvY2N1ci4gVGhpcyBoYXMKICAgIGJlZW4gZml4ZWQuCgogICsrIE90aGVyIGNoYW5nZXM6CgogICogVmFyaWFibGVzIG5hbWVkICJkYXRhIiBhbmQgImNvZGUiIGhhdmUgYmVlbiByZW5hbWVkIGluIG9yZGVyIHRvCiAgICBhdm9pZCBuYW1lIGNvbmZsaWN0cyBpbiBjZXJ0YWluIGNvbXBpbGVycy4KCiAgKiBWYXJpYWJsZSsrIGhhdmUgaW4gYXBwbGljaWFibGUgY2FzZXMgYmVlbiB0cmFuc2xhdGVkIHRvICsrdmFyaWFibGUKICAgIHNpbmNlIHNvbWUgY29tcGlsZXJzIGdlbmVyYXRlIGJldHRlciBjb2RlIGluIHRoZSBsYXR0ZXIgY2FzZS4KCigwLjQuMSkgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuNAoKICArKyBOZXcgZmVhdHVyZXM6CgogICogVENQOiBDb25uZWN0aW9uIGF0dGVtcHRzIHRpbWUgb3V0IGVhcmxpZXIgdGhhbiBkYXRhCiAgICB0cmFuc21pc3Npb25zLiBOYWdsZSBhbGdvcml0aG0gaW1wbGVtZW50ZWQuIFB1c2ggZmxhZyBzZXQgb24gdGhlCiAgICBsYXN0IHNlZ21lbnQgaW4gYSBidXJzdC4KCiAgKiBVRFA6IGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBVRFAtTGl0ZSBleHRlbnNpb25zLgoKICArKyBCdWdmaXhlczoKCiAgKiBUQ1A6IG91dCBvZiBvcmRlciBzZWdtZW50cyB3ZXJlIGluIHNvbWUgY2FzZXMgaGFuZGxlZCBpbmNvcnJlY3RseSwKICAgIGFuZCB0aGlzIGhhcyBub3cgYmVlbiBmaXhlZC4gRGVsYXllZCBhY2tub3dsZWRnZW1lbnRzIHdhcyBicm9rZW4KICAgIGluIDAuNCwgaGFzIG5vdyBiZWVuIGZpeGVkLiBCaW5kaW5nIHRvIGFuIGFkZHJlc3MgdGhhdCBpcyBpbiB1c2UKICAgIG5vdyByZXN1bHRzIGluIGFuIGVycm9yLiBSZXNldCBjb25uZWN0aW9ucyBzb21ldGltZXMgaHVuZyBhbgogICAgYXBwbGljYXRpb247IHRoaXMgaGFzIGJlZW4gZml4ZWQuCgogICogQ2hlY2tzdW0gY2FsY3VsYXRpb24gc29tZXRpbWVzIGZhaWxlZCBmb3IgY2hhaW5lZCBwYnVmcyB3aXRoIG9kZAogICAgbGVuZ3Rocy4gVGhpcyBoYXMgYmVlbiBmaXhlZC4KCiAgKiBBUEk6IGEgbG90IG9mIGJ1ZyBmaXhlcyBpbiB0aGUgQVBJLiBUaGUgVURQIEFQSSBoYXMgYmVlbiBpbXByb3ZlZAogICAgYW5kIHRlc3RlZC4gRXJyb3IgcmVwb3J0aW5nIGFuZCBoYW5kbGluZyBoYXMgYmVlbgogICAgaW1wcm92ZWQuIExvZ2ljYWwgZmxhd3MgYW5kIHJhY2UgY29uZGl0aW9ucyBmb3IgaW5jb21pbmcgVENQCiAgICBjb25uZWN0aW9ucyBoYXMgYmVlbiBmb3VuZCBhbmQgcmVtb3ZlZC4KCiAgKiBNZW1vcnkgbWFuYWdlcjogYWxpZ25tZW50IGlzc3Vlcy4gUmVhbGxvY2F0aW5nIG1lbW9yeSBzb21ldGltZXMKICAgIGZhaWxlZCwgdGhpcyBoYXMgYmVlbiBmaXhlZC4KCiAgKiBHZW5lcmljIGxpYnJhcnk6IGJjb3B5IHdhcyBmbGF3ZWQgYW5kIGhhcyBiZWVuIGZpeGVkLgoKICArKyBPdGhlciBjaGFuZ2VzOgoKICAqIEFQSTogYWxsIGRhdGF0eXBlcyBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gZ2VuZXJpYyBvbmVzIHN1Y2ggYXMKICAgIGludHMsIHRvIHNwZWNpZmllZCBvbmVzIHN1Y2ggYXMgdTE2X3QuIEZ1bmN0aW9ucyB0aGF0IHJldHVybgogICAgZXJyb3JzIG5vdyBoYXZlIHRoZSBjb3JyZWN0IHR5cGUgKGVycl90KS4KCiAgKiBHZW5lcmFsOiBBIGxvdCBvZiBjb2RlIGNsZWFuZWQgdXAgYW5kIGRlYnVnZ2luZyBjb2RlIHJlbW92ZWQuIE1hbnkKICAgIHBvcnRhYmlsaXR5IGlzc3VlcyBoYXZlIGJlZW4gZml4ZWQuCgogICogVGhlIGxpY2Vuc2Ugd2FzIGNoYW5nZWQ7IHRoZSBhZHZlcnRpc2luZyBjbGF1c2Ugd2FzIHJlbW92ZWQuCgogICogQzY0IHBvcnQgYWRkZWQuCgogICogVGhhbmtzOiBIdWdlIHRoYW5rcyBnbyB0byBEYWdhbiBHYWxhcm5lYXUsIEhvcnN0IEdhcm5ldHprZSwgUGV0cmkKICAgIEtvc3VuZW4sIE1pa2FlbCBDYWxlcmVzLCBhbmQgRnJpdHMgV2lsbWluayBmb3IgcmVwb3J0aW5nIGFuZAogICAgZml4aW5nIGJ1Z3MhCgooMC40KSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC4zLjEKCiAgKiBNZW1vcnkgbWFuYWdlbWVudCBoYXMgYmVlbiByYWRpY2FsbHkgY2hhbmdlZDsgaW5zdGVhZCBvZgogICAgYWxsb2NhdGluZyBtZW1vcnkgZnJvbSBhIHNoYXJlZCBoZWFwLCBtZW1vcnkgZm9yIG9iamVjdHMgdGhhdCBhcmUKICAgIHJhcGlkbHkgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCBpcyBub3cga2VwdCBpbiBwb29scy4gQWxsb2NhdGlvbgogICAgYW5kIGRlYWxsb2NhdGlvbiBmcm9tIHRob3NlIG1lbW9yeSBwb29scyBpcyB2ZXJ5IGZhc3QuIFRoZSBzaGFyZWQKICAgIGhlYXAgaXMgc3RpbGwgcHJlc2VudCBidXQgaXMgdXNlZCBsZXNzIGZyZXF1ZW50bHkuCgogICogVGhlIG1lbW9yeSwgbWVtb3J5IHBvb2wsIGFuZCBwYWNrZXQgYnVmZmVyIHN1YnN5c3RlbXMgbm93IHN1cHBvcnQKICAgIDQtLCAyLSwgb3IgMS1ieXRlIGFsaWdubWVudC4KCiAgKiAiT3V0IG9mIG1lbW9yeSIgc2l0dWF0aW9ucyBhcmUgaGFuZGxlZCBpbiBhIG1vcmUgcm9idXN0IHdheS4KCiAgKiBTdGFjayB1c2FnZSBoYXMgYmVlbiByZWR1Y2VkLgoKICAqIEVhc2llciBjb25maWd1cmF0aW9uIG9mIGx3SVAgcGFyYW1ldGVycyBzdWNoIGFzIG1lbW9yeSB1c2FnZSwKICAgIFRUTHMsIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLCBldGMuIEFsbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlCiAgICBub3cga2VwdCBpbiBhIHNpbmdsZSBoZWFkZXIgZmlsZSAibHdpcG9wdHMuaCIuCgogICogVGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaGFzIGJlZW4gY2hhbmdlZCBzbGlnaHRseSBzbyB0aGF0IGFsbAogICAgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZpbGVzIGFyZSBrZXB0IHVuZGVyIHRoZSBzcmMvYXJjaAogICAgaGllcmFyY2h5LgoKICAqIEVycm9yIHByb3BhZ2F0aW9uIGhhcyBiZWVuIGltcHJvdmVkLCBib3RoIGluIHRoZSBwcm90b2NvbCBtb2R1bGVzCiAgICBhbmQgaW4gdGhlIEFQSS4KCiAgKiBUaGUgY29kZSBmb3IgdGhlIFJUWEMgYXJjaGl0ZWN0dXJlIGhhcyBiZWVuIGltcGxlbWVudGVkLCB0ZXN0ZWQKICAgIGFuZCBwdXQgdG8gdXNlLgoKICAqIEJ1Z3MgaGF2ZSBiZWVuIGZvdW5kIGFuZCBjb3JyZWN0ZWQgaW4gdGhlIFRDUCwgVURQLCBJUCwgQVBJLCBhbmQKICAgIHRoZSBJbnRlcm5ldCBjaGVja3N1bSBtb2R1bGVzLgoKICAqIEJ1Z3MgcmVsYXRlZCB0byBwb3J0aW5nIGJldHdlZW4gYSAzMi1iaXQgYW5kIGEgMTYtYml0IGFyY2hpdGVjdHVyZQogICAgaGF2ZSBiZWVuIGZvdW5kIGFuZCBjb3JyZWN0ZWQuCgogICogVGhlIGxpY2Vuc2UgaGFzIGJlZW4gY2hhbmdlZCBzbGlnaHRseSB0byBjb25mb3JtIG1vcmUgd2l0aCB0aGUKICAgIG9yaWdpbmFsIEJTRCBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGFkdmVydGlzZW1lbnQgY2xhdXNlLgoKKDAuMy4xKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC4zCgogICogRml4IG9mIGEgZmF0YWwgYnVnIGluIHRoZSBidWZmZXIgbWFuYWdlbWVudC4gUGJ1ZnMgd2l0aCBhbGxvY2F0ZWQKICAgIFJBTSBuZXZlciByZXR1cm5lZCB0aGUgUkFNIHdoZW4gdGhlIHBidWYgd2FzIGRlYWxsb2NhdGVkLgoKICAqIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wsIHdpbmRvdyB1cGRhdGVzIGFuZCByZXRyYW5zbWlzc2lvbnMgZGlkIG5vdAogICAgd29yayBjb3JyZWN0bHkuIFRoaXMgaGFzIG5vdyBiZWVuIGZpeGVkLgoKICAqIEJ1Z2ZpeGVzIGluIHRoZSBBUEkuCgooMC4zKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC4yCgogICogTmV3IGFuZCBpbXByb3ZlZCBkaXJlY3Rvcnkgc3RydWN0dXJlLiBBbGwgaW5jbHVkZSBmaWxlcyBhcmUgbm93CiAgICBrZXB0IGluIGEgZGVkaWNhdGVkIGluY2x1ZGUvIGRpcmVjdG9yeS4KCiAgKiBUaGUgQVBJIG5vdyBoYXMgcHJvcGVyIGVycm9yIGhhbmRsaW5nLiBBIG5ldyBmdW5jdGlvbiwKICAgIG5ldGNvbm5fZXJyKCksIG5vdyByZXR1cm5zIGFuIGVycm9yIGNvZGUgZm9yIHRoZSBjb25uZWN0aW9uIGluCiAgICBjYXNlIG9mIGVycm9ycy4KCiAgKiBJbXByb3ZlbWVudHMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhlIHN5c3RlbSBub3cKICAgIGtlZXBzIGEgcG9pbnRlciB0byB0aGUgbG93ZXN0IGZyZWUgbWVtb3J5IGJsb2NrLiBBIG5ldyBmdW5jdGlvbiwKICAgIG1lbV9tYWxsb2MyKCkgdHJpZXMgdG8gYWxsb2NhdGUgbWVtb3J5IG9uY2UsIGFuZCBpZiBpdCBmYWlscyB0cmllcwogICAgdG8gZnJlZSBzb21lIG1lbW9yeSBhbmQgcmV0cnkgdGhlIGFsbG9jYXRpb24uCgogICogTXVjaCB0ZXN0aW5nIGhhcyBiZWVuIGRvbmUgd2l0aCBsaW1pdGVkIG1lbW9yeQogICAgY29uZmlndXJhdGlvbnMuIGx3SVAgbm93IGRvZXMgYSBiZXR0ZXIgam9iIHdoZW4gb3ZlcmxvYWRlZC4KCiAgKiBTb21lIGJ1Z2ZpeGVzIGFuZCBpbXByb3ZlbWVudHMgdG8gdGhlIGJ1ZmZlciAocGJ1Zikgc3Vic3lzdGVtLgoKICAqIE1hbnkgYnVnZml4ZXMgaW4gdGhlIFRDUCBjb2RlOgoKICAgIC0gRml4ZWQgYSBidWcgaW4gdGNwX2Nsb3NlKCkuCgogICAgLSBUaGUgVENQIHJlY2VpdmUgd2luZG93IHdhcyBpbmNvcnJlY3RseSBjbG9zZWQgd2hlbiBvdXQgb2YKICAgICAgc2VxdWVuY2Ugc2VnbWVudHMgd2FzIHJlY2VpdmVkLiBUaGlzIGhhcyBiZWVuIGZpeGVkLgoKICAgIC0gQ29ubmVjdGlvbnMgYXJlIG5vdyB0aW1lZC1vdXQgb2YgdGhlIEZJTi1XQUlULTIgc3RhdGUuCgogICAgLSBUaGUgaW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdyBjb3VsZCBpbiBzb21lIGNhc2VzIGJlIHRvbwogICAgICBsYXJnZS4gVGhpcyBoYXMgYmVlbiBmaXhlZC4KCiAgICAtIFRoZSByZXRyYW5zbWlzc2lvbiBxdWV1ZSBjb3VsZCBpbiBzb21lIGNhc2VzIGJlIHNjcmV3ZWQgdXAuIFRoaXMKICAgICAgaGFzIGJlZW4gZml4ZWQuCgogICAgLSBUQ1AgUlNUIGZsYWcgbm93IGhhbmRsZWQgY29ycmVjdGx5LgoKICAgIC0gT3V0IG9mIHNlcXVlbmNlIGRhdGEgd2FzIGluIHNvbWUgY2FzZXMgbmV2ZXIgZGVsaXZlcmVkIHRvIHRoZQogICAgICBhcHBsaWNhdGlvbi4gVGhpcyBoYXMgYmVlbiBmaXhlZC4KCiAgICAtIFJldHJhbnNtaXR0ZWQgc2VnbWVudHMgbm93IGNvbnRhaW4gdGhlIGNvcnJlY3QgYWNrbm93bGVkZ21lbnQKICAgICAgbnVtYmVyIGFuZCBhZHZlcnRpc2VkIHdpbmRvdy4KCiAgICAtIFRDUCByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGJhY2tvZmZzIGFyZSBub3QgY29ycmVjdGx5IGNvbXB1dGVkCiAgICAgIChhbGEgQlNEKS4gQWZ0ZXIgYSBudW1iZXIgb2YgcmV0cmFuc21pc3Npb25zLCBUQ1Agbm93IGdpdmVzIHVwCiAgICAgIHRoZSBjb25uZWN0aW9uLgoKICAqIFRDUCBjb25uZWN0aW9ucyBub3cgYXJlIGtlcHQgb24gdGhyZWUgbGlzdHMsIG9uZSBmb3IgYWN0aXZlCiAgICBjb25uZWN0aW9ucywgb25lIGZvciBsaXN0ZW5pbmcgY29ubmVjdGlvbnMsIGFuZCBvbmUgZm9yCiAgICBjb25uZWN0aW9ucyB0aGF0IGFyZSBpbiBUSU1FLVdBSVQuIFRoaXMgZ3JlYXRseSBzcGVlZHMgdXAgdGhlIGZhc3QKICAgIHRpbWVvdXQgcHJvY2Vzc2luZyBmb3Igc2VuZGluZyBkZWxheWVkIEFDS3MuCgogICogVENQIG5vdyBwcm92aWRlcyBwcm9wZXIgZmVlZGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIHdoZW4gYQogICAgY29ubmVjdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2V0IHVwLgoKICAqIE1vcmUgY29tbWVudHMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBjb2RlLiBUaGUgY29kZSBoYXMgYWxzbyBiZWVuCiAgICBzb21ld2hhdCBjbGVhbmVkIHVwLgoKKDAuMikgSW5pdGlhbCBwdWJsaWMgcmVsZWFzZS4K