-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathuserjs-base64.js
3 lines (3 loc) · 102 KB
/
userjs-base64.js
1
2
3
// 20250306 v135 user.js as base64 from main repo
// place this in a file named "userjs-base64.js"
const userjsbase64="LyoqKioqKgoqICAgIG5hbWU6IGFya2VuZm94IHVzZXIuanMKKiAgICBkYXRlOiA2IE1hcmNoIDIwMjUKKiB2ZXJzaW9uOiAxMzUKKiAgICB1cmxzOiBodHRwczovL2dpdGh1Yi5jb20vYXJrZW5mb3gvdXNlci5qcyBbcmVwb10KKiAgICAgICAgOiBodHRwczovL2Fya2VuZm94LmdpdGh1Yi5pby9ndWkvIFtpbnRlcmFjdGl2ZV0KKiBsaWNlbnNlOiBNSVQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcmtlbmZveC91c2VyLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UudHh0CgoqIFJFQURNRToKCiAgMS4gQ29uc2lkZXIgdXNpbmcgVG9yIEJyb3dzZXIgaWYgaXQgbWVldHMgeW91ciBuZWVkcyBvciBmaXRzIHlvdXIgdGhyZWF0IG1vZGVsCiAgICAgICAqIGh0dHBzOi8vMjAxOS53d3cudG9ycHJvamVjdC5vcmcvYWJvdXQvdG9ydXNlcnMuaHRtbAogIDIuIFJlYWQgdGhlIGVudGlyZSB3aWtpCiAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmtlbmZveC91c2VyLmpzL3dpa2kKICAzLiBJZiB5b3Ugc2tpcHBlZCBzdGVwIDIsIHJldHVybiB0byBzdGVwIDIKICA0LiBNYWtlIGNoYW5nZXMgaW4gYSB1c2VyLW92ZXJyaWRlcy5qcwogICAgICAgKiBUaGVyZSBhcmUgb2Z0ZW4gdHJhZGUtb2ZmcyBhbmQgY29uZmxpY3RzIGJldHdlZW4gc2VjdXJpdHkgdnMgcHJpdmFjeSB2cyBhbnRpLXRyYWNraW5nCiAgICAgICAgIGFuZCB0aGVzZSBuZWVkIHRvIGJlIGJhbGFuY2VkIGFnYWluc3QgZnVuY3Rpb25hbGl0eSAmIGNvbnZlbmllbmNlICYgYnJlYWthZ2UKICAgICAgICogU29tZSBzaXRlIGJyZWFrYWdlIGFuZCB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyB3aWxsIGhhcHBlbi4gRXZlcnlvbmUncyBleHBlcmllbmNlIHdpbGwgZGlmZmVyCiAgICAgICAgIGUuZy4gc29tZSB1c2VyIGRhdGEgaXMgZXJhc2VkIG9uIGV4aXQgKHNlY3Rpb24gMjgwMCksIGNoYW5nZSB0aGlzIHRvIHN1aXQgeW91ciBuZWVkcwogICAgICAgKiBXaGlsZSBub3QgMTAwJSBkZWZpbml0aXZlLCBzZWFyY2ggZm9yICJbU0VUVVAiIHRhZ3MKICA1LiBTb21lIHRhZyBpbmZvCiAgICAgICBbU0VUVVAtU0VDVVJJVFldIGl0J3Mgb25lIGl0ZW0sIHJlYWQgaXQKICAgICAgICAgICAgW1NFVFVQLVdFQl0gY2FuIGNhdXNlIHNvbWUgd2Vic2l0ZXMgdG8gYnJlYWsKICAgICAgICAgW1NFVFVQLUNIUk9NRV0gY2hhbmdlcyBob3cgRmlyZWZveCBpdHNlbGYgYmVoYXZlcyAoaS5lLiBub3QgZGlyZWN0bHkgd2Vic2l0ZSByZWxhdGVkKQogIDYuIE92ZXJyaWRlIFJlY2lwZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcmtlbmZveC91c2VyLmpzL2lzc3Vlcy8xMDgwCgoqIFJFTEVBU0VTOiBodHRwczovL2dpdGh1Yi5jb20vYXJrZW5mb3gvdXNlci5qcy9yZWxlYXNlcwoKICAqIFVzZSB0aGUgYXJrZW5mb3ggcmVsZWFzZSB0aGF0IG1hdGNoZXMgeW91ciBGaXJlZm94IHZlcnNpb24KICAgIC0gRE9OJ1Qgd2FpdCBmb3IgYXJrZW5mb3ggdG8gdXBkYXRlIEZpcmVmb3gsIG5vdGhpbmcgbWFqb3IgY2hhbmdlcyB0aGVzZSBkYXlzCiAgKiBFYWNoIHJlbGVhc2UKICAgIC0gcnVuIHByZWZzQ2xlYW5lciB0byByZXNldCBwcmVmcyBtYWRlIGluYWN0aXZlLCBpbmNsdWRpbmcgZGVwcmVjYXRlZCAoOTk5OSkKICAqIEVTUgogICAgLSBJdCBpcyByZWNvbW1lbmRlZCB0byBub3QgdXNlIHRoZSB1cGRhdGVyLCBvciB5b3Ugd2lsbCBnZXQgYSBsYXRlciB2ZXJzaW9uIHdoaWNoIG1heSBjYXVzZSBpc3N1ZXMuCiAgICAgIFNvIHlvdSBzaG91bGQgbWFudWFsbHkgYXBwZW5kIHlvdXIgb3ZlcnJpZGVzIChhbmQga2VlcCBhIGNvcHkpLCBhbmQgbWFudWFsbHkgdXBkYXRlIHdoZW4geW91CiAgICAgIGNoYW5nZSBFU1IgcmVsZWFzZXMgKGFya2VuZm94IGlzIGFscmVhZHkgcGFzdCB0aGF0IHJlbGVhc2UpCiAgICAtIElmIHlvdSBkZWNpZGUgdG8ga2VlcCB1cGRhdGluZywgdGhlbiB0aGUgb251cyBpcyBvbiB5b3UgLSBhbHNvIHNlZSBzZWN0aW9uIDk5OTkKCiogSU5ERVg6CgogIDAxMDA6IFNUQVJUVVAKICAwMjAwOiBHRU9MT0NBVElPTgogIDAzMDA6IFFVSUVURVIgRk9YCiAgMDQwMDogU0FGRSBCUk9XU0lORwogIDA2MDA6IEJMT0NLIElNUExJQ0lUIE9VVEJPVU5ECiAgMDcwMDogRE5TIC8gRG9IIC8gUFJPWFkgLyBTT0NLUwogIDA4MDA6IExPQ0FUSU9OIEJBUiAvIFNFQVJDSCBCQVIgLyBTVUdHRVNUSU9OUyAvIEhJU1RPUlkgLyBGT1JNUwogIDA5MDA6IFBBU1NXT1JEUwogIDEwMDA6IERJU0sgQVZPSURBTkNFCiAgMTIwMDogSFRUUFMgKFNTTC9UTFMgLyBPQ1NQIC8gQ0VSVFMgLyBIUEtQKQogIDE2MDA6IFJFRkVSRVJTCiAgMTcwMDogQ09OVEFJTkVSUwogIDIwMDA6IFBMVUdJTlMgLyBNRURJQSAvIFdFQlJUQwogIDI0MDA6IERPTSAoRE9DVU1FTlQgT0JKRUNUIE1PREVMKQogIDI2MDA6IE1JU0NFTExBTkVPVVMKICAyNzAwOiBFVFAgKEVOSEFOQ0VEIFRSQUNLSU5HIFBST1RFQ1RJT04pCiAgMjgwMDogU0hVVERPV04gJiBTQU5JVElaSU5HCiAgNDAwMDogRlBQIChmaW5nZXJwcmludGluZ1Byb3RlY3Rpb24pCiAgNDUwMDogT1BUSU9OQUwgUkZQIChyZXNpc3RGaW5nZXJwcmludGluZykKICA1MDAwOiBPUFRJT05BTCBPUFNFQwogIDU1MDA6IE9QVElPTkFMIEhBUkRFTklORwogIDYwMDA6IERPTidUIFRPVUNICiAgNzAwMDogRE9OJ1QgQk9USEVSCiAgODAwMDogRE9OJ1QgQk9USEVSOiBGSU5HRVJQUklOVElORwogIDg1MDA6IFRFTEVNRVRSWQogIDkwMDA6IE5PTi1QUk9KRUNUIFJFTEFURUQKICA5OTk5OiBERVBSRUNBVEVEIC8gUkVOQU1FRAoKKioqKioqLwoKLyogU1RBUlQ6IGludGVybmFsIGN1c3RvbSBwcmVmIHRvIHRlc3QgZm9yIHN5bnRheCBlcnJvcnMKICogW05PVEVdIE5vdCBhbGwgc3ludGF4IGVycm9ycyBjYXVzZSBwYXJzaW5nIHRvIGFib3J0IGkuZS4gcmVhY2hpbmcgdGhlIGxhc3QgZGVidWcgcHJlZgogKiBubyBsb25nZXIgbmVjZXNzYXJpbHkgbWVhbnMgdGhhdCBhbGwgcHJlZnMgaGF2ZSBiZWVuIGFwcGxpZWQuIENoZWNrIHRoZSBjb25zb2xlIHJpZ2h0CiAqIGFmdGVyIHN0YXJ0dXAgZm9yIGFueSB3YXJuaW5ncy9lcnJvciBtZXNzYWdlcyByZWxhdGVkIHRvIG5vbi1hcHBsaWVkIHByZWZzCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvbm5ldGhlcmNvdGUvMjAxOC8wMy8wOS9hLW5ldy1wcmVmZXJlbmNlcy1wYXJzZXItZm9yLWZpcmVmb3gvICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiU1RBUlQ6IE9oIHllcywgdGhlIE5vcndlZ2lhbiBCbHVlLi4uIHdoYXQncyB3cm9uZyB3aXRoIGl0PyIpOwoKLyogMDAwMDogZGlzYWJsZSBhYm91dDpjb25maWcgd2FybmluZyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5hYm91dENvbmZpZy5zaG93V2FybmluZyIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gMDEwMF06IFNUQVJUVVAgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIwMTAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGRlYWQhIik7Ci8qIDAxMDI6IHNldCBzdGFydHVwIHBhZ2UgW1NFVFVQLUNIUk9NRV0KICogMD1ibGFuaywgMT1ob21lLCAyPWxhc3QgdmlzaXRlZCBwYWdlLCAzPXJlc3VtZSBwcmV2aW91cyBzZXNzaW9uCiAqIFtOT1RFXSBTZXNzaW9uIFJlc3RvcmUgaXMgY2xlYXJlZCB3aXRoIGhpc3RvcnkgKDI4MTErKSwgYW5kIG5vdCB1c2VkIGluIFByaXZhdGUgQnJvd3NpbmcgbW9kZQogKiBbU0VUVElOR10gR2VuZXJhbD5TdGFydHVwPlJlc3RvcmUgcHJldmlvdXMgc2Vzc2lvbiAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5zdGFydHVwLnBhZ2UiLCAwKTsKLyogMDEwMzogc2V0IEhPTUUrTkVXV0lORE9XIHBhZ2UKICogYWJvdXQ6aG9tZT1GaXJlZm94IEhvbWUgKGRlZmF1bHQsIHNlZSAwMTA1KSwgY3VzdG9tIFVSTCwgYWJvdXQ6YmxhbmsKICogW1NFVFRJTkddIEhvbWU+TmV3IFdpbmRvd3MgYW5kIFRhYnM+SG9tZXBhZ2UgYW5kIG5ldyB3aW5kb3dzICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnN0YXJ0dXAuaG9tZXBhZ2UiLCAiYWJvdXQ6YmxhbmsiKTsKLyogMDEwNDogc2V0IE5FV1RBQiBwYWdlCiAqIHRydWU9RmlyZWZveCBIb21lIChkZWZhdWx0LCBzZWUgMDEwNSksIGZhbHNlPWJsYW5rIHBhZ2UKICogW1NFVFRJTkddIEhvbWU+TmV3IFdpbmRvd3MgYW5kIFRhYnM+TmV3IHRhYnMgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5lbmFibGVkIiwgZmFsc2UpOwovKiAwMTA1OiBkaXNhYmxlIHNwb25zb3JlZCBjb250ZW50IG9uIEZpcmVmb3ggSG9tZSAoQWN0aXZpdHkgU3RyZWFtKQogKiBbU0VUVElOR10gSG9tZT5GaXJlZm94IEhvbWUgQ29udGVudCAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5zaG93U3BvbnNvcmVkIiwgZmFsc2UpOyAvLyBbRkY1OCtdCnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5zaG93U3BvbnNvcmVkVG9wU2l0ZXMiLCBmYWxzZSk7IC8vIFtGRjgzK10gU2hvcnRjdXRzPlNwb25zb3JlZCBzaG9ydGN1dHMKLyogMDEwNjogY2xlYXIgZGVmYXVsdCB0b3BzaXRlcwogKiBbTk9URV0gVGhpcyBkb2VzIG5vdCBibG9jayB5b3UgZnJvbSBhZGRpbmcgeW91ciBvd24gKioqLwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0uZGVmYXVsdC5zaXRlcyIsICIiKTsKCi8qKiogW1NFQ1RJT04gMDIwMF06IEdFT0xPQ0FUSU9OICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMDIwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBkZWZpbml0ZWx5IGRlY2Vhc2VkISIpOwovKiAwMjAyOiBkaXNhYmxlIHVzaW5nIHRoZSBPUydzIGdlb2xvY2F0aW9uIHNlcnZpY2UgKioqLwp1c2VyX3ByZWYoImdlby5wcm92aWRlci5tcy13aW5kb3dzLWxvY2F0aW9uIiwgZmFsc2UpOyAvLyBbV0lORE9XU10KdXNlcl9wcmVmKCJnZW8ucHJvdmlkZXIudXNlX2NvcmVsb2NhdGlvbiIsIGZhbHNlKTsgLy8gW01BQ10KdXNlcl9wcmVmKCJnZW8ucHJvdmlkZXIudXNlX2dlb2NsdWUiLCBmYWxzZSk7IC8vIFtGRjEwMitdIFtMSU5VWF0KCi8qKiogW1NFQ1RJT04gMDMwMF06IFFVSUVURVIgRk9YICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMDMwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBub3QgcGluaW4nIGZvciB0aGUgZmpvcmRzISIpOwovKiogUkVDT01NRU5EQVRJT05TICoqKi8KLyogMDMyMDogZGlzYWJsZSByZWNvbW1lbmRhdGlvbiBwYW5lIGluIGFib3V0OmFkZG9ucyAodXNlcyBHb29nbGUgQW5hbHl0aWNzKSAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5nZXRBZGRvbnMuc2hvd1BhbmUiLCBmYWxzZSk7IC8vIFtISURERU4gUFJFRl0KLyogMDMyMTogZGlzYWJsZSByZWNvbW1lbmRhdGlvbnMgaW4gYWJvdXQ6YWRkb25zJyBFeHRlbnNpb25zIGFuZCBUaGVtZXMgcGFuZXMgW0ZGNjgrXSAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5odG1sYWJvdXRhZGRvbnMucmVjb21tZW5kYXRpb25zLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDAzMjI6IGRpc2FibGUgcGVyc29uYWxpemVkIEV4dGVuc2lvbiBSZWNvbW1lbmRhdGlvbnMgaW4gYWJvdXQ6YWRkb25zIGFuZCBBTU8gW0ZGNjUrXQogKiBbTk9URV0gVGhpcyBwcmVmIGhhcyBubyBlZmZlY3Qgd2hlbiBIZWFsdGggUmVwb3J0cyAoODUwMSkgYXJlIGRpc2FibGVkCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+RmlyZWZveCBEYXRhIENvbGxlY3Rpb24gYW5kIFVzZT5BbGxvdyBwZXJzb25hbGl6ZWQgZXh0ZW5zaW9uIHJlY29tbWVuZGF0aW9ucwogKiBbMV0gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL3BlcnNvbmFsaXplZC1leHRlbnNpb24tcmVjb21tZW5kYXRpb25zICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmRpc2NvdmVyeS5lbmFibGVkIiwgZmFsc2UpOwovKiAwMzIzOiBkaXNhYmxlIHNob3BwaW5nIGV4cGVyaWVuY2UgW0ZGMTE2K10KICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDAxNTYjYzAgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuc2hvcHBpbmcuZXhwZXJpZW5jZTIwMjMuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQoKLyoqIFRFTEVNRVRSWSAqKiovCi8qIDAzMzU6IGRpc2FibGUgRmlyZWZveCBIb21lIChBY3Rpdml0eSBTdHJlYW0pIHRlbGVtZXRyeSAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5mZWVkcy50ZWxlbWV0cnkiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS50ZWxlbWV0cnkiLCBmYWxzZSk7CgovKiogU1RVRElFUyAqKiovCi8qIDAzNDA6IGRpc2FibGUgU3R1ZGllcwogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkZpcmVmb3ggRGF0YSBDb2xsZWN0aW9uIGFuZCBVc2U+SW5zdGFsbCBhbmQgcnVuIHN0dWRpZXMgKioqLwp1c2VyX3ByZWYoImFwcC5zaGllbGQub3B0b3V0c3R1ZGllcy5lbmFibGVkIiwgZmFsc2UpOwovKiAwMzQxOiBkaXNhYmxlIE5vcm1hbmR5L1NoaWVsZCBbRkY2MCtdCiAqIFNoaWVsZCBpcyBhIHRlbGVtZXRyeSBzeXN0ZW0gdGhhdCBjYW4gcHVzaCBhbmQgdGVzdCAicmVjaXBlcyIKICogWzFdIGh0dHBzOi8vbW96aWxsYS5naXRodWIuaW8vbm9ybWFuZHkvICoqKi8KdXNlcl9wcmVmKCJhcHAubm9ybWFuZHkuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJhcHAubm9ybWFuZHkuYXBpX3VybCIsICIiKTsKCi8qKiBDUkFTSCBSRVBPUlRTICoqKi8KLyogMDM1MDogZGlzYWJsZSBDcmFzaCBSZXBvcnRzICoqKi8KdXNlcl9wcmVmKCJicmVha3BhZC5yZXBvcnRVUkwiLCAiIik7CnVzZXJfcHJlZigiYnJvd3Nlci50YWJzLmNyYXNoUmVwb3J0aW5nLnNlbmRSZXBvcnQiLCBmYWxzZSk7IC8vIFtGRjQ0K10KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLmNyYXNoUmVwb3J0cy51bnN1Ym1pdHRlZENoZWNrLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjUxK10gW0RFRkFVTFQ6IGZhbHNlXQovKiAwMzUxOiBlbmZvcmNlIG5vIHN1Ym1pc3Npb24gb2YgYmFja2xvZ2dlZCBDcmFzaCBSZXBvcnRzIFtGRjU4K10KICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5GaXJlZm94IERhdGEgQ29sbGVjdGlvbiBhbmQgVXNlPlNlbmQgYmFja2xvZ2dlZCBjcmFzaCByZXBvcnRzICAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5jcmFzaFJlcG9ydHMudW5zdWJtaXR0ZWRDaGVjay5hdXRvU3VibWl0MiIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQoKLyoqIE9USEVSICoqKi8KLyogMDM2MDogZGlzYWJsZSBDYXB0aXZlIFBvcnRhbCBkZXRlY3Rpb24KICogWzFdIGh0dHBzOi8vd3d3LmVmZi5vcmcvZGVlcGxpbmtzLzIwMTcvMDgvaG93LWNhcHRpdmUtcG9ydGFscy1pbnRlcmZlcmUtd2lyZWxlc3Mtc2VjdXJpdHktYW5kLXByaXZhY3kgKioqLwp1c2VyX3ByZWYoImNhcHRpdmVkZXRlY3QuY2Fub25pY2FsVVJMIiwgIiIpOwp1c2VyX3ByZWYoIm5ldHdvcmsuY2FwdGl2ZS1wb3J0YWwtc2VydmljZS5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY1MitdCi8qIDAzNjE6IGRpc2FibGUgTmV0d29yayBDb25uZWN0aXZpdHkgY2hlY2tzIFtGRjY1K10KICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTQ2MDUzNyAqKiovCnVzZXJfcHJlZigibmV0d29yay5jb25uZWN0aXZpdHktc2VydmljZS5lbmFibGVkIiwgZmFsc2UpOwoKLyoqKiBbU0VDVElPTiAwNDAwXTogU0FGRSBCUk9XU0lORyAoU0IpCiAgIFNCIGhhcyB0YWtlbiBtYW55IHN0ZXBzIHRvIHByZXNlcnZlIHByaXZhY3kuIElmIHJlcXVpcmVkLCBhIGZ1bGwgdXJsIGlzIG5ldmVyIHNlbnQKICAgdG8gR29vZ2xlLCBvbmx5IGEgcGFydC1oYXNoIG9mIHRoZSBwcmVmaXgsIGhpZGRlbiB3aXRoIG5vaXNlIG9mIG90aGVyIHJlYWwgcGFydC1oYXNoZXMuCiAgIEZpcmVmb3ggdGFrZXMgbWVhc3VyZXMgc3VjaCBhcyBzdHJpcHBpbmcgb3V0IGlkZW50aWZ5aW5nIHBhcmFtZXRlcnMgYW5kIHNpbmNlIFNCdjQgKEZGNTcrKQogICBkb2Vzbid0IGV2ZW4gdXNlIGNvb2tpZXMuICgjVHVybiBvbiBicm93c2VyLnNhZmVicm93c2luZy5kZWJ1ZyB0byBtb25pdG9yIHRoaXMgYWN0aXZpdHkpCgogICBbMV0gaHR0cHM6Ly9mZWVkaW5nLmNsb3VkLmdlZWsubnovcG9zdHMvaG93LXNhZmUtYnJvd3Npbmctd29ya3MtaW4tZmlyZWZveC8KICAgWzJdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9TZWN1cml0eS9TYWZlX0Jyb3dzaW5nCiAgIFszXSBodHRwczovL3N1cHBvcnQubW96aWxsYS5vcmcva2IvaG93LWRvZXMtcGhpc2hpbmctYW5kLW1hbHdhcmUtcHJvdGVjdGlvbi13b3JrCiAgIFs0XSBodHRwczovL2VkdWNhdGVkZ3Vlc3N3b3JrLm9yZy9wb3N0cy9zYWZlLWJyb3dzaW5nLXByaXZhY3kvCioqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMDQwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBwYXNzZWQgb24hIik7Ci8qIDA0MDE6IGRpc2FibGUgU0IgKFNhZmUgQnJvd3NpbmcpCiAqIFtXQVJOSU5HXSBEbyB0aGlzIGF0IHlvdXIgb3duIHJpc2shIFRoZXNlIGFyZSB0aGUgbWFzdGVyIHN3aXRjaGVzCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+U2VjdXJpdHk+Li4uIEJsb2NrIGRhbmdlcm91cyBhbmQgZGVjZXB0aXZlIGNvbnRlbnQgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLm1hbHdhcmUuZW5hYmxlZCIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5waGlzaGluZy5lbmFibGVkIiwgZmFsc2UpOwovKiAwNDAyOiBkaXNhYmxlIFNCIGNoZWNrcyBmb3IgZG93bmxvYWRzIChib3RoIGxvY2FsIGxvb2t1cHMgKyByZW1vdGUpCiAqIFRoaXMgaXMgdGhlIG1hc3RlciBzd2l0Y2ggZm9yIHRoZSBzYWZlYnJvd3NpbmcuZG93bmxvYWRzKiBwcmVmcyAoMDQwMywgMDQwNCkKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5TZWN1cml0eT4uLi4gIkJsb2NrIGRhbmdlcm91cyBkb3dubG9hZHMiICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5kb3dubG9hZHMuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDQwMzogZGlzYWJsZSBTQiBjaGVja3MgZm9yIGRvd25sb2FkcyAocmVtb3RlKQogKiBUbyB2ZXJpZnkgdGhlIHNhZmV0eSBvZiBjZXJ0YWluIGV4ZWN1dGFibGUgZmlsZXMsIEZpcmVmb3ggbWF5IHN1Ym1pdCBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZQogKiBmaWxlLCBpbmNsdWRpbmcgdGhlIG5hbWUsIG9yaWdpbiwgc2l6ZSBhbmQgYSBjcnlwdG9ncmFwaGljIGhhc2ggb2YgdGhlIGNvbnRlbnRzLCB0byB0aGUgR29vZ2xlCiAqIFNhZmUgQnJvd3Npbmcgc2VydmljZSB3aGljaCBoZWxwcyBGaXJlZm94IGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGUgZmlsZSBzaG91bGQgYmUgYmxvY2tlZAogKiBbU0VUVVAtU0VDVVJJVFldIElmIHlvdSBkbyBub3QgdW5kZXJzdGFuZCB0aGlzLCBvciB5b3Ugd2FudCB0aGlzIHByb3RlY3Rpb24sIHRoZW4gb3ZlcnJpZGUgdGhpcyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcuZG93bmxvYWRzLnJlbW90ZS5lbmFibGVkIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLmRvd25sb2Fkcy5yZW1vdGUudXJsIiwgIiIpOyAvLyBEZWZlbnNlLWluLWRlcHRoCi8qIDA0MDQ6IGRpc2FibGUgU0IgY2hlY2tzIGZvciB1bndhbnRlZCBzb2Z0d2FyZQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PlNlY3VyaXR5Pi4uLiAiV2FybiB5b3UgYWJvdXQgdW53YW50ZWQgYW5kIHVuY29tbW9uIHNvZnR3YXJlIiAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcuZG93bmxvYWRzLnJlbW90ZS5ibG9ja19wb3RlbnRpYWxseV91bndhbnRlZCIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5kb3dubG9hZHMucmVtb3RlLmJsb2NrX3VuY29tbW9uIiwgZmFsc2UpOwovKiAwNDA1OiBkaXNhYmxlICJpZ25vcmUgdGhpcyB3YXJuaW5nIiBvbiBTQiB3YXJuaW5ncyBbRkY0NStdCiAqIElmIGNsaWNrZWQsIGl0IGJ5cGFzc2VzIHRoZSBibG9jayBmb3IgdGhhdCBzZXNzaW9uLiBUaGlzIGlzIGEgbWVhbnMgZm9yIGFkbWlucyB0byBlbmZvcmNlIFNCCiAqIFtURVNUXSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fya2VuZm94L3VzZXIuanMvd2lraS9BcHBlbmRpeC1BLVRlc3QtU2l0ZXMjLW1vemlsbGEKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTIyNjQ5MCAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcuYWxsb3dPdmVycmlkZSIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gMDYwMF06IEJMT0NLIElNUExJQ0lUIE9VVEJPVU5EIFtub3QgZXhwbGljaXRseSBhc2tlZCBmb3IgLSBlLmcuIGNsaWNrZWQgb25dICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMDYwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBubyBtb3JlISIpOwovKiAwNjAxOiBkaXNhYmxlIGxpbmsgcHJlZmV0Y2hpbmcKICogWzFdIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUVFAvTGlua19wcmVmZXRjaGluZ19GQVEgKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsucHJlZmV0Y2gtbmV4dCIsIGZhbHNlKTsKLyogMDYwMjogZGlzYWJsZSBETlMgcHJlZmV0Y2hpbmcKICogWzFdIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9YLUROUy1QcmVmZXRjaC1Db250cm9sICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLmRucy5kaXNhYmxlUHJlZmV0Y2giLCB0cnVlKTsKdXNlcl9wcmVmKCJuZXR3b3JrLmRucy5kaXNhYmxlUHJlZmV0Y2hGcm9tSFRUUFMiLCB0cnVlKTsKLyogMDYwMzogZGlzYWJsZSBwcmVkaWN0b3IgLyBwcmVmZXRjaGluZyAqKiovCnVzZXJfcHJlZigibmV0d29yay5wcmVkaWN0b3IuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJuZXR3b3JrLnByZWRpY3Rvci5lbmFibGUtcHJlZmV0Y2giLCBmYWxzZSk7IC8vIFtGRjQ4K10gW0RFRkFVTFQ6IGZhbHNlXQovKiAwNjA0OiBkaXNhYmxlIGxpbmstbW91c2VvdmVyIG9wZW5pbmcgY29ubmVjdGlvbiB0byBsaW5rZWQgc2VydmVyCiAqIFsxXSBodHRwczovL25ld3Muc2xhc2hkb3Qub3JnL3N0b3J5LzE1LzA4LzE0LzIzMjEyMDIvaG93LXRvLXF1YXNoLWZpcmVmb3hzLXNpbGVudC1yZXF1ZXN0cyAqKiovCnVzZXJfcHJlZigibmV0d29yay5odHRwLnNwZWN1bGF0aXZlLXBhcmFsbGVsLWxpbWl0IiwgMCk7Ci8qIDA2MDU6IGRpc2FibGUgbW91c2Vkb3duIHNwZWN1bGF0aXZlIGNvbm5lY3Rpb25zIG9uIGJvb2ttYXJrcyBhbmQgaGlzdG9yeSBbRkY5OCtdICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnBsYWNlcy5zcGVjdWxhdGl2ZUNvbm5lY3QuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDYxMDogZW5mb3JjZSBubyAiSHlwZXJsaW5rIEF1ZGl0aW5nIiAoY2xpY2sgdHJhY2tpbmcpCiAqIFsxXSBodHRwczovL3d3dy5ibGVlcGluZ2NvbXB1dGVyLmNvbS9uZXdzL3NvZnR3YXJlL21ham9yLWJyb3dzZXJzLXRvLXByZXZlbnQtZGlzYWJsaW5nLW9mLWNsaWNrLXRyYWNraW5nLXByaXZhY3ktcmlzay8gKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuc2VuZF9waW5ncyIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQoKLyoqKiBbU0VDVElPTiAwNzAwXTogRE5TIC8gRG9IIC8gUFJPWFkgLyBTT0NLUyAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjA3MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgZ2l2ZW4gdXAgdGhlIGdob3N0ISIpOwovKiAwNzAyOiBzZXQgdGhlIHByb3h5IHNlcnZlciB0byBkbyBhbnkgRE5TIGxvb2t1cHMgd2hlbiB1c2luZyBTT0NLUwogKiBlLmcuIGluIFRvciwgdGhpcyBzdG9wcyB5b3VyIGxvY2FsIEROUyBzZXJ2ZXIgZnJvbSBrbm93aW5nIHlvdXIgVG9yIGRlc3RpbmF0aW9uCiAqIGFzIGEgcmVtb3RlIFRvciBub2RlIHdpbGwgaGFuZGxlIHRoZSBETlMgcmVxdWVzdAogKiBbMV0gaHR0cHM6Ly90cmFjLnRvcnByb2plY3Qub3JnL3Byb2plY3RzL3Rvci93aWtpL2RvYy9Ub3JpZnlIT1dUTy9XZWJCcm93c2VycyAqKiovCnVzZXJfcHJlZigibmV0d29yay5wcm94eS5zb2Nrc19yZW1vdGVfZG5zIiwgdHJ1ZSk7Ci8qIDA3MDM6IGRpc2FibGUgdXNpbmcgVU5DIChVbmlmb3JtIE5hbWluZyBDb252ZW50aW9uKSBwYXRocyBbRkY2MStdCiAqIFtTRVRVUC1DSFJPTUVdIENhbiBicmVhayBleHRlbnNpb25zIGZvciBwcm9maWxlcyBvbiBuZXR3b3JrIHNoYXJlcwogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xNDEzODY4ICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLmZpbGUuZGlzYWJsZV91bmNfcGF0aHMiLCB0cnVlKTsgLy8gW0hJRERFTiBQUkVGXQovKiAwNzA0OiBkaXNhYmxlIEdJTyBhcyBhIHBvdGVudGlhbCBwcm94eSBieXBhc3MgdmVjdG9yCiAqIEd2ZnMvR0lPIGhhcyBhIHNldCBvZiBzdXBwb3J0ZWQgcHJvdG9jb2xzIGxpa2Ugb2JleCwgbmV0d29yaywgYXJjaGl2ZSwgY29tcHV0ZXIsCiAqIGRhdiwgY2RkYSwgZ3Bob3RvMiwgdHJhc2gsIGV0Yy4gRnJvbSBGRjg3LTExNywgYnkgZGVmYXVsdCBvbmx5IHNmdHAgd2FzIGFjY2VwdGVkCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzE0MzM1MDcKICogWzJdIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dWZnMKICogWzNdIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dJT18oc29mdHdhcmUpICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLmdpby5zdXBwb3J0ZWQtcHJvdG9jb2xzIiwgIiIpOyAvLyBbSElEREVOIFBSRUZdIFtERUZBVUxUOiAiIl0KLyogMDcwNTogZGlzYWJsZSBwcm94eSBkaXJlY3QgZmFpbG92ZXIgZm9yIHN5c3RlbSByZXF1ZXN0cyBbRkY5MStdCiAqIFtXQVJOSU5HXSBEZWZhdWx0IHRydWUgaXMgYSBzZWN1cml0eSBmZWF0dXJlIGFnYWluc3QgbWFsaWNpb3VzIGV4dGVuc2lvbnMgWzFdCiAqIFtTRVRVUC1DSFJPTUVdIElmIHlvdSB1c2UgYSBwcm94eSBhbmQgeW91IHRydXN0IHlvdXIgZXh0ZW5zaW9ucwogKiBbMV0gaHR0cHM6Ly9ibG9nLm1vemlsbGEub3JnL3NlY3VyaXR5LzIwMjEvMTAvMjUvc2VjdXJpbmctdGhlLXByb3h5LWFwaS1mb3ItZmlyZWZveC1hZGQtb25zLyAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5wcm94eS5mYWlsb3Zlcl9kaXJlY3QiLCBmYWxzZSk7Ci8qIDA3MDY6IGRpc2FibGUgcHJveHkgYnlwYXNzIGZvciBzeXN0ZW0gcmVxdWVzdCBmYWlsdXJlcyBbRkY5NStdCiAqIFJlbW90ZVNldHRpbmdzLCBVcGRhdGVTZXJ2aWNlLCBUZWxlbWV0cnkgWzFdCiAqIFtXQVJOSU5HXSBJZiBmYWxzZSwgdGhpcyB3aWxsIGJyZWFrIHRoZSBmYWxsYmFjayBmb3Igc29tZSBzZWN1cml0eSBmZWF0dXJlcwogKiBbU0VUVVAtQ0hST01FXSBJZiB5b3UgdXNlIGEgcHJveHkgYW5kIHlvdSB1bmRlcnN0YW5kIHRoZSBzZWN1cml0eSBpbXBhY3QKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvYnVnbGlzdC5jZ2k/YnVnX2lkPTE3MzI3OTIsMTczMzk5NCwxNzMzNDgxICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLnByb3h5LmFsbG93X2J5cGFzcyIsIGZhbHNlKTsKLyogMDcxMDogZW5hYmxlIEROUy1vdmVyLUhUVFBTIChEb0gpIFtGRjYwK10KICogMD1kZWZhdWx0LCAyPWluY3JlYXNlZCAoVFJSIChUcnVzdGVkIFJlY3Vyc2l2ZSBSZXNvbHZlcikgZmlyc3QpLCAzPW1heCAoVFJSIG9ubHkpLCA1PW9mZiAobm8gcm9sbG91dCkKICogc2VlICJkb2gtcm9sbG91dC5ob21lLXJlZ2lvbiI6IFVTQSAyMDE5LCBDYW5hZGEgMjAyMSwgUnVzc2lhL1VrcmFpbmUgMjAyMiBbM10KICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5ETlMgb3ZlciBIVFRQUwogKiBbMV0gaHR0cHM6Ly9oYWNrcy5tb3ppbGxhLm9yZy8yMDE4LzA1L2EtY2FydG9vbi1pbnRyby10by1kbnMtb3Zlci1odHRwcy8KICogWzJdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9TZWN1cml0eS9ET0gtcmVzb2x2ZXItcG9saWN5CiAqIFszXSBodHRwczovL3N1cHBvcnQubW96aWxsYS5vcmcva2IvZmlyZWZveC1kbnMtb3Zlci1odHRwcwogKiBbNF0gaHR0cHM6Ly93d3cuZWZmLm9yZy9kZWVwbGlua3MvMjAyMC8xMi9kbnMtZG9oLWFuZC1vZG9oLW9oLW15LXllYXItcmV2aWV3LTIwMjAgKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsudHJyLm1vZGUiLCAzKTsKLyogMDcxMjogc2V0IERvSCBwcm92aWRlcgogKiBUaGUgY3VzdG9tIHVyaSBpcyB0aGUgdmFsdWUgc2hvd24gd2hlbiB5b3UgIkNob29zZSBwcm92aWRlcj5DdXN0b20+IgogKiBbTk9URV0gSWYgeW91IFVTRSBjdXN0b20gdGhlbiAibmV0d29yay50cnIudXJpIiBzaG91bGQgYmUgc2V0IHRoZSBzYW1lCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+RE5TIG92ZXIgSFRUUFM+SW5jcmVhc2VkL01heD5DaG9vc2UgcHJvdmlkZXIgKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsudHJyLnVyaSIsICJodHRwczovL2V4YW1wbGUuZG5zIik7CiAgIC8vIHVzZXJfcHJlZigibmV0d29yay50cnIuY3VzdG9tX3VyaSIsICJodHRwczovL2V4YW1wbGUuZG5zIik7CgovKioqIFtTRUNUSU9OIDA4MDBdOiBMT0NBVElPTiBCQVIgLyBTRUFSQ0ggQkFSIC8gU1VHR0VTVElPTlMgLyBISVNUT1JZIC8gRk9STVMgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIwODAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGNlYXNlZCB0byBiZSEiKTsKLyogMDgwMTogZGlzYWJsZSBsb2NhdGlvbiBiYXIgbWFraW5nIHNwZWN1bGF0aXZlIGNvbm5lY3Rpb25zIFtGRjU2K10KICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTM0ODI3NSAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc3BlY3VsYXRpdmVDb25uZWN0LmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDA4MDI6IGRpc2FibGUgbG9jYXRpb24gYmFyIGNvbnRleHR1YWwgc3VnZ2VzdGlvbnMKICogW05PVEVdIFRoZSBVSSBpcyBjb250cm9sbGVkIGJ5IHRoZSAuZW5hYmxlZCBwcmVmCiAqIFtTRVRUSU5HXSBTZWFyY2g+QWRkcmVzcyBCYXI+U3VnZ2VzdGlvbnMgZnJvbS4uLgogKiBbMV0gaHR0cHM6Ly9ibG9nLm1vemlsbGEub3JnL2RhdGEvMjAyMS8wOS8xNS9kYXRhLWFuZC1maXJlZm94LXN1Z2dlc3QvICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5xdWlja3N1Z2dlc3QuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGOTIrXQp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnN1Z2dlc3QucXVpY2tzdWdnZXN0Lm5vbnNwb25zb3JlZCIsIGZhbHNlKTsgLy8gW0ZGOTUrXQp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnN1Z2dlc3QucXVpY2tzdWdnZXN0LnNwb25zb3JlZCIsIGZhbHNlKTsgLy8gW0ZGOTIrXQovKiAwODAzOiBkaXNhYmxlIGxpdmUgc2VhcmNoIHN1Z2dlc3Rpb25zCiAqIFtOT1RFXSBCb3RoIG11c3QgYmUgdHJ1ZSBmb3IgbGl2ZSBzZWFyY2ggdG8gd29yayBpbiB0aGUgbG9jYXRpb24gYmFyCiAqIFtTRVRVUC1DSFJPTUVdIE92ZXJyaWRlIHRoZXNlIGlmIHlvdSB0cnVzdCBhbmQgdXNlIGEgcHJpdmFjeSByZXNwZWN0aW5nIHNlYXJjaCBlbmdpbmUKICogW1NFVFRJTkddIFNlYXJjaD5TaG93IHNlYXJjaCBzdWdnZXN0aW9ucyB8IFNob3cgc2VhcmNoIHN1Z2dlc3Rpb25zIGluIGFkZHJlc3MgYmFyIHJlc3VsdHMgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuc2VhcmNoLnN1Z2dlc3QuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zdWdnZXN0LnNlYXJjaGVzIiwgZmFsc2UpOwovKiAwODA1OiBkaXNhYmxlIHVybGJhciB0cmVuZGluZyBzZWFyY2ggc3VnZ2VzdGlvbnMgW0ZGMTE4K10KICogW1NFVFRJTkddIFNlYXJjaD5TZWFyY2ggU3VnZ2VzdGlvbnM+U2hvdyB0cmVuZGluZyBzZWFyY2ggc3VnZ2VzdGlvbnMgKEZGMTE5KSAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIudHJlbmRpbmcuZmVhdHVyZUdhdGUiLCBmYWxzZSk7Ci8qIDA4MDY6IGRpc2FibGUgdXJsYmFyIHN1Z2dlc3Rpb25zICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5hZGRvbnMuZmVhdHVyZUdhdGUiLCBmYWxzZSk7IC8vIFtGRjExNStdCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuZmFrZXNwb3QuZmVhdHVyZUdhdGUiLCBmYWxzZSk7IC8vIFtGRjEzMCtdIFtERUZBVUxUOiBmYWxzZV0KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5tZG4uZmVhdHVyZUdhdGUiLCBmYWxzZSk7IC8vIFtGRjExNytdIFtISURERU4gUFJFRl0KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5wb2NrZXQuZmVhdHVyZUdhdGUiLCBmYWxzZSk7IC8vIFtGRjExNitdIFtERUZBVUxUOiBmYWxzZV0KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci53ZWF0aGVyLmZlYXR1cmVHYXRlIiwgZmFsc2UpOyAvLyBbRkYxMDgrXSBbREVGQVVMVDogZmFsc2VdCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIueWVscC5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsgLy8gW0ZGMTI0K10KLyogMDgwNzogZGlzYWJsZSB1cmxiYXIgY2xpcGJvYXJkIHN1Z2dlc3Rpb25zIFtGRjExOCtdICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5jbGlwYm9hcmQuZmVhdHVyZUdhdGUiLCBmYWxzZSk7Ci8qIDA4MDg6IGRpc2FibGUgcmVjZW50IHNlYXJjaGVzIFtGRjEyMCtdCiAqIFtOT1RFXSBSZWNlbnQgc2VhcmNoZXMgYXJlIGNsZWFyZWQgd2l0aCBoaXN0b3J5ICgyODExKykKICogWzFdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi9zZWFyY2gtc3VnZ2VzdGlvbnMtZmlyZWZveCAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIucmVjZW50c2VhcmNoZXMuZmVhdHVyZUdhdGUiLCBmYWxzZSk7Ci8qIDA4MTA6IGRpc2FibGUgc2VhcmNoIGFuZCBmb3JtIGhpc3RvcnkKICogW05PVEVdIFdlIGFsc28gY2xlYXIgZm9ybWRhdGEgb24gZXhpdCAoMjgxMSspCiAqIFtTRVRVUC1XRUJdIEJlIGF3YXJlIHRoYXQgYXV0b2NvbXBsZXRlIGZvcm0gZGF0YSBjYW4gYmUgcmVhZCBieSB0aGlyZCBwYXJ0aWVzIFsxXVsyXQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5Pkhpc3Rvcnk+Q3VzdG9tIFNldHRpbmdzPlJlbWVtYmVyIHNlYXJjaCBhbmQgZm9ybSBoaXN0b3J5CiAqIFsxXSBodHRwczovL2Jsb2cubWluZGVkc2VjdXJpdHkuY29tLzIwMTEvMTAvYXV0b2NvbXBsZXRlYWdhaW4uaHRtbAogKiBbMl0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8zODE2ODEgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuZm9ybWZpbGwuZW5hYmxlIiwgZmFsc2UpOwovKiAwODE1OiBkaXNhYmxlIHRhYi10by1zZWFyY2ggW0ZGODUrXQogKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGV4Y2x1ZGUgb24gYSBwZXItZW5naW5lIGJhc2lzIGJ5IHVuY2hlY2tpbmcgdGhlbSBpbiBPcHRpb25zPlNlYXJjaAogKiBbU0VUVElOR10gU2VhcmNoPkFkZHJlc3MgQmFyPldoZW4gdXNpbmcgdGhlIGFkZHJlc3MgYmFyLCBzdWdnZXN0PlNlYXJjaCBlbmdpbmVzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zdWdnZXN0LmVuZ2luZXMiLCBmYWxzZSk7Ci8qIDA4MjA6IGRpc2FibGUgY29sb3Jpbmcgb2YgdmlzaXRlZCBsaW5rcwogKiBbU0VUVVAtSEFSREVOXSBCdWxrIHJhcGlkIGhpc3Rvcnkgc25pZmZpbmcgd2FzIG1pdGlnYXRlZCBpbiAyMDEwIFsxXVsyXS4gU2xvd2VyIGFuZCBtb3JlIGV4cGVuc2l2ZQogKiByZWRyYXcgdGltaW5nIGF0dGFja3Mgd2VyZSBsYXJnZWx5IG1pdGlnYXRlZCBpbiBGRjc3KyBbM10uIFVzaW5nIFJGUCAoNDUwMSkgZnVydGhlciBoYW1wZXJzIHRpbWluZwogKiBhdHRhY2tzLiBEb24ndCBmb3JnZXQgY2xlYXJpbmcgaGlzdG9yeSBvbiBleGl0ICgyODExKykuIEhvd2V2ZXIsIHNvY2lhbCBlbmdpbmVlcmluZyBbMiNsaW1pdHNdWzRdWzVdCiAqIGFuZCBhZHZhbmNlZCB0YXJnZXRlZCB0aW1pbmcgYXR0YWNrcyBjb3VsZCBzdGlsbCBwcm9kdWNlIHVzYWJsZSByZXN1bHRzCiAqIFsxXSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9DU1MvUHJpdmFjeV9hbmRfdGhlXzp2aXNpdGVkX3NlbGVjdG9yCiAqIFsyXSBodHRwczovL2RiYXJvbi5vcmcvbW96aWxsYS92aXNpdGVkLXByaXZhY3kKICogWzNdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTYzMjc2NQogKiBbNF0gaHR0cHM6Ly9lYXJ0aGxuZy5naXRodWIuaW8vdGVzdHBhZ2VzL3Zpc2l0ZWRfbGlua3MuaHRtbCAoc2VlIGdpdGh1YiB3aWtpIEFQUEVORElYIEEgb24gaG93IHRvIHVzZSkKICogWzVdIGh0dHBzOi8vbGNhbXR1Zi5ibG9nc3BvdC5jb20vMjAxNi8wOC9jc3MtbWl4LWJsZW5kLW1vZGUtaXMtYmFkLWZvci1rZWVwaW5nLmh0bWwgKioqLwogICAvLyB1c2VyX3ByZWYoImxheW91dC5jc3MudmlzaXRlZF9saW5rc19lbmFibGVkIiwgZmFsc2UpOwovKiAwODMwOiBlbmFibGUgc2VwYXJhdGUgZGVmYXVsdCBzZWFyY2ggZW5naW5lIGluIFByaXZhdGUgV2luZG93cyBhbmQgaXRzIFVJIHNldHRpbmcKICogW1NFVFRJTkddIFNlYXJjaD5EZWZhdWx0IFNlYXJjaCBFbmdpbmU+Q2hvb3NlIGEgZGlmZmVyZW50IGRlZmF1bHQgc2VhcmNoIGVuZ2luZSBmb3IgUHJpdmF0ZSBXaW5kb3dzIG9ubHkgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuc2VhcmNoLnNlcGFyYXRlUHJpdmF0ZURlZmF1bHQiLCB0cnVlKTsgLy8gW0ZGNzArXQp1c2VyX3ByZWYoImJyb3dzZXIuc2VhcmNoLnNlcGFyYXRlUHJpdmF0ZURlZmF1bHQudWkuZW5hYmxlZCIsIHRydWUpOyAvLyBbRkY3MStdCgovKioqIFtTRUNUSU9OIDA5MDBdOiBQQVNTV09SRFMKICAgWzFdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi91c2UtcHJpbWFyeS1wYXNzd29yZC1wcm90ZWN0LXN0b3JlZC1sb2dpbnMtYW5kLXBhcwoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjA5MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgZXhwaXJlZCEiKTsKLyogMDkwMzogZGlzYWJsZSBhdXRvLWZpbGxpbmcgdXNlcm5hbWUgJiBwYXNzd29yZCBmb3JtIGZpZWxkcwogKiBjYW4gbGVhayBpbiBjcm9zcy1zaXRlIGZvcm1zICphbmQqIGJlIHNwb29mZWQKICogW05PVEVdIFVzZXJuYW1lICYgcGFzc3dvcmQgaXMgc3RpbGwgYXZhaWxhYmxlIHdoZW4geW91IGVudGVyIHRoZSBmaWVsZAogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkxvZ2lucyBhbmQgUGFzc3dvcmRzPkF1dG9maWxsIGxvZ2lucyBhbmQgcGFzc3dvcmRzCiAqIFsxXSBodHRwczovL2ZyZWVkb20tdG8tdGlua2VyLmNvbS8yMDE3LzEyLzI3L25vLWJvdW5kYXJpZXMtZm9yLXVzZXItaWRlbnRpdGllcy13ZWItdHJhY2tlcnMtZXhwbG9pdC1icm93c2VyLWxvZ2luLW1hbmFnZXJzLwogKiBbMl0gaHR0cHM6Ly9ob21lcy5lc2F0Lmt1bGV1dmVuLmJlL35hc2Vub2wvbGVha3ktZm9ybXMvICoqKi8KdXNlcl9wcmVmKCJzaWdub24uYXV0b2ZpbGxGb3JtcyIsIGZhbHNlKTsKLyogMDkwNDogZGlzYWJsZSBmb3JtbGVzcyBsb2dpbiBjYXB0dXJlIGZvciBQYXNzd29yZCBNYW5hZ2VyIFtGRjUxK10gKioqLwp1c2VyX3ByZWYoInNpZ25vbi5mb3JtbGVzc0NhcHR1cmUuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDkwNTogbGltaXQgKG9yIGRpc2FibGUpIEhUVFAgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgZGlhbG9ncyB0cmlnZ2VyZWQgYnkgc3ViLXJlc291cmNlcyBbRkY0MStdCiAqIGhhcmRlbnMgYWdhaW5zdCBwb3RlbnRpYWwgY3JlZGVudGlhbHMgcGhpc2hpbmcKICogMCA9IGRvbid0IGFsbG93IHN1Yi1yZXNvdXJjZXMgdG8gb3BlbiBIVFRQIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIGRpYWxvZ3MKICogMSA9IGRvbid0IGFsbG93IGNyb3NzLW9yaWdpbiBzdWItcmVzb3VyY2VzIHRvIG9wZW4gSFRUUCBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyBkaWFsb2dzCiAqIDIgPSBhbGxvdyBzdWItcmVzb3VyY2VzIHRvIG9wZW4gSFRUUCBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyBkaWFsb2dzIChkZWZhdWx0KSAqKiovCnVzZXJfcHJlZigibmV0d29yay5hdXRoLnN1YnJlc291cmNlLWh0dHAtYXV0aC1hbGxvdyIsIDEpOwovKiAwOTA2OiBlbmZvcmNlIG5vIGF1dG9tYXRpYyBhdXRoZW50aWNhdGlvbiBvbiBNaWNyb3NvZnQgc2l0ZXMgW0ZGOTErXSBbV0lORE9XUyAxMCtdCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+TG9naW5zIGFuZCBQYXNzd29yZHM+QWxsb3cgV2luZG93cyBzaW5nbGUgc2lnbi1vbiBmb3IuLi4KICogWzFdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi93aW5kb3dzLXNzbyAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5odHRwLndpbmRvd3Mtc3NvLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KLyogMDkwNzogZW5mb3JjZSBubyBhdXRvbWF0aWMgYXV0aGVudGljYXRpb24gb24gTWljcm9zb2Z0IHNpdGVzIFtGRjEzMStdIFtNQUNdCiAqIE9uIG1hY09TLCBTU08gb25seSB3b3JrcyBvbiBjb3Jwb3JhdGUgZGV2aWNlcyAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5odHRwLm1pY3Jvc29mdC1lbnRyYS1zc28uZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQoKLyoqKiBbU0VDVElPTiAxMDAwXTogRElTSyBBVk9JREFOQ0UgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIxMDAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGdvbmUgdG8gbWVldCAnaXMgbWFrZXIhIik7Ci8qIDEwMDE6IGRpc2FibGUgZGlzayBjYWNoZQogKiBbTk9URV0gV2UgYWxzbyBjbGVhciBjYWNoZSBvbiBleGl0ICgyODExKykKICogW1NFVFVQLUNIUk9NRV0gSWYgeW91IHRoaW5rIGRpc2sgY2FjaGUgaGVscHMgcGVyZiwgdGhlbiBmZWVsIGZyZWUgdG8gb3ZlcnJpZGUgdGhpcyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5jYWNoZS5kaXNrLmVuYWJsZSIsIGZhbHNlKTsKLyogMTAwMjogc2V0IG1lZGlhIGNhY2hlIGluIFByaXZhdGUgQnJvd3NpbmcgdG8gaW4tbWVtb3J5IGFuZCBpbmNyZWFzZSBpdHMgbWF4aW11bSBzaXplCiAqIFtOT1RFXSBNU0UgKE1lZGlhIFNvdXJjZSBFeHRlbnNpb25zKSBhcmUgYWxyZWFkeSBzdG9yZWQgaW4tbWVtb3J5IGluIFBCICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnByaXZhdGVicm93c2luZy5mb3JjZU1lZGlhTWVtb3J5Q2FjaGUiLCB0cnVlKTsgLy8gW0ZGNzUrXQp1c2VyX3ByZWYoIm1lZGlhLm1lbW9yeV9jYWNoZV9tYXhfc2l6ZSIsIDY1NTM2KTsKLyogMTAwMzogZGlzYWJsZSBzdG9yaW5nIGV4dHJhIHNlc3Npb24gZGF0YSBbU0VUVVAtQ0hST01FXQogKiBkZWZpbmUgb24gd2hpY2ggc2l0ZXMgdG8gc2F2ZSBleHRyYSBzZXNzaW9uIGRhdGEgc3VjaCBhcyBmb3JtIGNvbnRlbnQsIGNvb2tpZXMgYW5kIFBPU1QgZGF0YQogKiAwPWV2ZXJ5d2hlcmUsIDE9dW5lbmNyeXB0ZWQgc2l0ZXMsIDI9bm93aGVyZSAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5zZXNzaW9uc3RvcmUucHJpdmFjeV9sZXZlbCIsIDIpOwovKiAxMDA1OiBkaXNhYmxlIGF1dG9tYXRpYyBGaXJlZm94IHN0YXJ0IGFuZCBzZXNzaW9uIHJlc3RvcmUgYWZ0ZXIgcmVib290IFtGRjYyK10gW1dJTkRPV1NdCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzYwMzkwMyAqKiovCnVzZXJfcHJlZigidG9vbGtpdC53aW5SZWdpc3RlckFwcGxpY2F0aW9uUmVzdGFydCIsIGZhbHNlKTsKLyogMTAwNjogZGlzYWJsZSBmYXZpY29ucyBpbiBzaG9ydGN1dHMgW1dJTkRPV1NdCiAqIFVSTCBzaG9ydGN1dHMgdXNlIGEgY2FjaGVkIHJhbmRvbWx5IG5hbWVkIC5pY28gZmlsZSB3aGljaCBpcyBzdG9yZWQgaW4geW91cgogKiBwcm9maWxlL3Nob3J0Y3V0Q2FjaGUgZGlyZWN0b3J5LiBUaGUgLmljbyByZW1haW5zIGFmdGVyIHRoZSBzaG9ydGN1dCBpcyBkZWxldGVkCiAqIElmIHNldCB0byBmYWxzZSB0aGVuIHRoZSBzaG9ydGN1dHMgdXNlIGEgZ2VuZXJpYyBGaXJlZm94IGljb24gKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuc2hlbGwuc2hvcnRjdXRGYXZpY29ucyIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gMTIwMF06IEhUVFBTIChTU0wvVExTIC8gT0NTUCAvIENFUlRTIC8gSFBLUCkKICAgWW91ciBjaXBoZXIgYW5kIG90aGVyIHNldHRpbmdzIGNhbiBiZSB1c2VkIGluIHNlcnZlciBzaWRlIGZpbmdlcnByaW50aW5nCiAgIFtURVNUXSBodHRwczovL3d3dy5zc2xsYWJzLmNvbS9zc2x0ZXN0L3ZpZXdNeUNsaWVudC5odG1sCiAgIFtURVNUXSBodHRwczovL2Jyb3dzZXJsZWFrcy5jb20vc3NsCiAgIFtURVNUXSBodHRwczovL2phM2VyLmNvbS8KICAgWzFdIGh0dHBzOi8vd3d3LnNlY3VyaXR5YXJ0d29yay5lcy8yMDE3LzAyLzAyL3Rscy1jbGllbnQtZmluZ2VycHJpbnRpbmctd2l0aC1icm8vCioqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMTIwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBhIHN0aWZmISIpOwovKiogU1NMIChTZWN1cmUgU29ja2V0cyBMYXllcikgLyBUTFMgKFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSkgKioqLwovKiAxMjAxOiByZXF1aXJlIHNhZmUgbmVnb3RpYXRpb24KICogQmxvY2tzIGNvbm5lY3Rpb25zIHRvIHNlcnZlcnMgdGhhdCBkb24ndCBzdXBwb3J0IFJGQyA1NzQ2IFsyXSBhcyB0aGV5J3JlIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gYQogKiBNaVRNIGF0dGFjayBbM10uIEEgc2VydmVyIHdpdGhvdXQgUkZDIDU3NDYgY2FuIGJlIHNhZmUgZnJvbSB0aGUgYXR0YWNrIGlmIGl0IGRpc2FibGVzIHJlbmVnb3RpYXRpb25zCiAqIGJ1dCB0aGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBicm93c2VyIGNhbid0IGtub3cgdGhhdC4gU2V0dGluZyB0aGlzIHByZWYgdG8gdHJ1ZSBpcyB0aGUgb25seSB3YXkgZm9yIHRoZQogKiBicm93c2VyIHRvIGVuc3VyZSB0aGVyZSB3aWxsIGJlIG5vIHVuc2FmZSByZW5lZ290aWF0aW9ucyBvbiB0aGUgY2hhbm5lbCBiZXR3ZWVuIHRoZSBicm93c2VyIGFuZCB0aGUgc2VydmVyCiAqIFtTRVRVUC1XRUJdIFNTTF9FUlJPUl9VTlNBRkVfTkVHT1RJQVRJT046IGlzIGl0IHdvcnRoIG92ZXJyaWRpbmcgdGhpcyBmb3IgdGhhdCBvbmUgc2l0ZT8KICogW1NUQVRTXSBTU0wgTGFicyAoTWF5IDIwMjQpIHJlcG9ydHMgb3ZlciA5OS43JSBvZiB0b3Agc2l0ZXMgaGF2ZSBzZWN1cmUgcmVuZWdvdGlhdGlvbiBbNF0KICogWzFdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9TZWN1cml0eTpSZW5lZ290aWF0aW9uCiAqIFsyXSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzU3NDYKICogWzNdIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMDktMzU1NQogKiBbNF0gaHR0cHM6Ly93d3cuc3NsbGFicy5jb20vc3NsLXB1bHNlLyAqKiovCnVzZXJfcHJlZigic2VjdXJpdHkuc3NsLnJlcXVpcmVfc2FmZV9uZWdvdGlhdGlvbiIsIHRydWUpOwovKiAxMjA2OiBkaXNhYmxlIFRMUzEuMyAwLVJUVCAocm91bmQtdHJpcCB0aW1lKSBbRkY1MStdCiAqIFRoaXMgZGF0YSBpcyBub3QgZm9yd2FyZCBzZWNyZXQsIGFzIGl0IGlzIGVuY3J5cHRlZCBzb2xlbHkgdW5kZXIga2V5cyBkZXJpdmVkIHVzaW5nCiAqIHRoZSBvZmZlcmVkIFBTSy4gVGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgb2Ygbm9uLXJlcGxheSBiZXR3ZWVuIGNvbm5lY3Rpb25zCiAqIFsxXSBodHRwczovL2dpdGh1Yi5jb20vdGxzd2cvdGxzMTMtc3BlYy9pc3N1ZXMvMTAwMQogKiBbMl0gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkwMDEuaHRtbCNuYW1lLXJlcGxheS1hdHRhY2tzLXdpdGgtMC1ydHQKICogWzNdIGh0dHBzOi8vYmxvZy5jbG91ZGZsYXJlLmNvbS90bHMtMS0zLW92ZXJ2aWV3LWFuZC1xLWFuZC1hLyAqKiovCnVzZXJfcHJlZigic2VjdXJpdHkudGxzLmVuYWJsZV8wcnR0X2RhdGEiLCBmYWxzZSk7CgovKiogT0NTUCAoT25saW5lIENlcnRpZmljYXRlIFN0YXR1cyBQcm90b2NvbCkKICAgWzFdIGh0dHBzOi8vc2NvdHRoZWxtZS5jby51ay9yZXZvY2F0aW9uLWlzLWJyb2tlbi8KICAgWzJdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9zZWN1cml0eS8yMDEzLzA3LzI5L29jc3Atc3RhcGxpbmctaW4tZmlyZWZveC8KKioqLwovKiAxMjExOiBlbmZvcmNlIE9DU1AgZmV0Y2hpbmcgdG8gY29uZmlybSBjdXJyZW50IHZhbGlkaXR5IG9mIGNlcnRpZmljYXRlcwogKiAwPWRpc2FibGVkLCAxPWVuYWJsZWQgKGRlZmF1bHQpLCAyPWVuYWJsZWQgZm9yIEVWIGNlcnRpZmljYXRlcyBvbmx5CiAqIE9DU1AgKG5vbi1zdGFwbGVkKSBsZWFrcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2l0ZXMgeW91IHZpc2l0IHRvIHRoZSBDQSAoY2VydCBhdXRob3JpdHkpCiAqIEl0J3MgYSB0cmFkZS1vZmYgYmV0d2VlbiBzZWN1cml0eSAoY2hlY2tpbmcpIGFuZCBwcml2YWN5IChsZWFraW5nIGluZm8gdG8gdGhlIENBKQogKiBbTk9URV0gVGhpcyBwcmVmIG9ubHkgY29udHJvbHMgT0NTUCBmZXRjaGluZyBhbmQgZG9lcyBub3QgYWZmZWN0IE9DU1Agc3RhcGxpbmcKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5TZWN1cml0eT5DZXJ0aWZpY2F0ZXM+UXVlcnkgT0NTUCByZXNwb25kZXIgc2VydmVycy4uLgogKiBbMV0gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT2NzcCAqKiovCnVzZXJfcHJlZigic2VjdXJpdHkuT0NTUC5lbmFibGVkIiwgMSk7IC8vIFtERUZBVUxUOiAxXQovKiAxMjEyOiBzZXQgT0NTUCBmZXRjaCBmYWlsdXJlcyAobm9uLXN0YXBsZWQsIHNlZSAxMjExKSB0byBoYXJkLWZhaWwKICogW1NFVFVQLVdFQl0gU0VDX0VSUk9SX09DU1BfU0VSVkVSX0VSUk9SIHwgU0VDX0VSUk9SX09DU1BfVU5BVVRIT1JJWkVEX1JFUVVFU1QKICogV2hlbiBhIENBIGNhbm5vdCBiZSByZWFjaGVkIHRvIHZhbGlkYXRlIGEgY2VydCwgRmlyZWZveCBqdXN0IGNvbnRpbnVlcyB0aGUgY29ubmVjdGlvbiAoPXNvZnQtZmFpbCkKICogU2V0dGluZyB0aGlzIHByZWYgdG8gdHJ1ZSB0ZWxscyBGaXJlZm94IHRvIGluc3RlYWQgdGVybWluYXRlIHRoZSBjb25uZWN0aW9uICg9aGFyZC1mYWlsKQogKiBJdCBpcyBwb2ludGxlc3MgdG8gc29mdC1mYWlsIHdoZW4gYW4gT0NTUCBmZXRjaCBmYWlsczogeW91IGNhbm5vdCBjb25maXJtIGEgY2VydCBpcyBzdGlsbCB2YWxpZCAoaXQKICogY291bGQgaGF2ZSBiZWVuIHJldm9rZWQpIGFuZC9vciB5b3UgY291bGQgYmUgdW5kZXIgYXR0YWNrIChlLmcuIG1hbGljaW91cyBibG9ja2luZyBvZiBPQ1NQIHNlcnZlcnMpCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAxMy8wNy8yOS9vY3NwLXN0YXBsaW5nLWluLWZpcmVmb3gvCiAqIFsyXSBodHRwczovL3d3dy5pbXBlcmlhbHZpb2xldC5vcmcvMjAxNC8wNC8xOS9yZXZjaGVja2luZy5odG1sCiAqIFszXSBodHRwczovL2xldHNlbmNyeXB0Lm9yZy8yMDI0LzEyLzA1L2VuZGluZy1vY3NwLyAqKiovCnVzZXJfcHJlZigic2VjdXJpdHkuT0NTUC5yZXF1aXJlIiwgdHJ1ZSk7CgovKiogQ0VSVFMgLyBIUEtQIChIVFRQIFB1YmxpYyBLZXkgUGlubmluZykgKioqLwovKiAxMjIzOiBlbmFibGUgc3RyaWN0IFBLUCAoUHVibGljIEtleSBQaW5uaW5nKQogKiAwPWRpc2FibGVkLCAxPWFsbG93IHVzZXIgTWlUTSAoZGVmYXVsdDsgc3VjaCBhcyB5b3VyIGFudGl2aXJ1cyksIDI9c3RyaWN0CiAqIFtTRVRVUC1XRUJdIE1PWklMTEFfUEtJWF9FUlJPUl9LRVlfUElOTklOR19GQUlMVVJFICoqKi8KdXNlcl9wcmVmKCJzZWN1cml0eS5jZXJ0X3Bpbm5pbmcuZW5mb3JjZW1lbnRfbGV2ZWwiLCAyKTsKLyogMTIyNDogZW5hYmxlIENSTGl0ZSBbRkY3MytdCiAqIDAgPSBkaXNhYmxlZAogKiAxID0gY29uc3VsdCBDUkxpdGUgYnV0IG9ubHkgY29sbGVjdCB0ZWxlbWV0cnkKICogMiA9IGNvbnN1bHQgQ1JMaXRlIGFuZCBlbmZvcmNlIGJvdGggIlJldm9rZWQiIGFuZCAiTm90IFJldm9rZWQiIHJlc3VsdHMKICogMyA9IGNvbnN1bHQgQ1JMaXRlIGFuZCBlbmZvcmNlICJOb3QgUmV2b2tlZCIgcmVzdWx0cywgYnV0IGRlZmVyIHRvIE9DU1AgZm9yICJSZXZva2VkIiAoZGVmYXVsdCkKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvYnVnbGlzdC5jZ2k/YnVnX2lkPTE0Mjk4MDAsMTY3MDk4NSwxNzUzMDcxCiAqIFsyXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvdGFnL2NybGl0ZS8gKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LnJlbW90ZV9zZXR0aW5ncy5jcmxpdGVfZmlsdGVycy5lbmFibGVkIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlIEZGMTM3K10KdXNlcl9wcmVmKCJzZWN1cml0eS5wa2kuY3JsaXRlX21vZGUiLCAyKTsKCi8qKiBNSVhFRCBDT05URU5UICoqKi8KLyogMTI0MTogZGlzYWJsZSBpbnNlY3VyZSBwYXNzaXZlIGNvbnRlbnQgKHN1Y2ggYXMgaW1hZ2VzKSBvbiBodHRwcyBwYWdlcyAqKiovCiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkubWl4ZWRfY29udGVudC5ibG9ja19kaXNwbGF5X2NvbnRlbnQiLCB0cnVlKTsgLy8gRGVmZW5zZS1pbi1kZXB0aCAoc2VlIDEyNDQpCi8qIDEyNDQ6IGVuYWJsZSBIVFRQUy1Pbmx5IG1vZGUgaW4gYWxsIHdpbmRvd3MKICogV2hlbiB0aGUgdG9wLWxldmVsIGlzIEhUVFBTLCBpbnNlY3VyZSBzdWJyZXNvdXJjZXMgYXJlIGFsc28gdXBncmFkZWQgKHNpbGVudCBmYWlsKQogKiBbU0VUVElOR10gdG8gYWRkIHNpdGUgZXhjZXB0aW9uczogUGFkbG9jaz5IVFRQUy1Pbmx5IG1vZGU+T24gKGFmdGVyICJDb250aW51ZSB0byBIVFRQIFNpdGUiKQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkhUVFBTLU9ubHkgTW9kZSAoYW5kIG1hbmFnZSBleGNlcHRpb25zKQogKiBbVEVTVF0gaHR0cDovL2V4YW1wbGUuY29tIFt1cGdyYWRlXQogKiBbVEVTVF0gaHR0cDovL2h0dHBmb3JldmVyLmNvbS8gfCBodHRwOi8vaHR0cC5yaXAgW25vIHVwZ3JhZGVdICoqKi8KdXNlcl9wcmVmKCJkb20uc2VjdXJpdHkuaHR0cHNfb25seV9tb2RlIiwgdHJ1ZSk7IC8vIFtGRjc2K10KICAgLy8gdXNlcl9wcmVmKCJkb20uc2VjdXJpdHkuaHR0cHNfb25seV9tb2RlX3BibSIsIHRydWUpOyAvLyBbRkY4MCtdCi8qIDEyNDU6IGVuYWJsZSBIVFRQUy1Pbmx5IG1vZGUgZm9yIGxvY2FsIHJlc291cmNlcyBbRkY3NytdICoqKi8KICAgLy8gdXNlcl9wcmVmKCJkb20uc2VjdXJpdHkuaHR0cHNfb25seV9tb2RlLnVwZ3JhZGVfbG9jYWwiLCB0cnVlKTsKLyogMTI0NjogZGlzYWJsZSBIVFRQIGJhY2tncm91bmQgcmVxdWVzdHMgW0ZGODIrXQogKiBXaGVuIGF0dGVtcHRpbmcgdG8gdXBncmFkZSwgaWYgdGhlIHNlcnZlciBkb2Vzbid0IHJlc3BvbmQgd2l0aGluIDMgc2Vjb25kcywgRmlyZWZveCBzZW5kcwogKiBhIHRvcC1sZXZlbCBIVFRQIHJlcXVlc3Qgd2l0aG91dCBwYXRoIGluIG9yZGVyIHRvIGNoZWNrIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgSFRUUFMgb3Igbm90CiAqIFRoaXMgaXMgZG9uZSB0byBhdm9pZCB3YWl0aW5nIGZvciBhIHRpbWVvdXQgd2hpY2ggdGFrZXMgOTAgc2Vjb25kcwogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9idWdsaXN0LmNnaT9idWdfaWQ9MTY0MjM4NywxNjYwOTQ1ICoqKi8KdXNlcl9wcmVmKCJkb20uc2VjdXJpdHkuaHR0cHNfb25seV9tb2RlX3NlbmRfaHR0cF9iYWNrZ3JvdW5kX3JlcXVlc3QiLCBmYWxzZSk7CgovKiogVUkgKFVzZXIgSW50ZXJmYWNlKSAqKiovCi8qIDEyNzA6IGRpc3BsYXkgd2FybmluZyBvbiB0aGUgcGFkbG9jayBmb3IgImJyb2tlbiBzZWN1cml0eSIgKGlmIDEyMDEgaXMgZmFsc2UpCiAqIEJ1Zzogd2FybmluZyBwYWRsb2NrIG5vdCBpbmRpY2F0ZWQgZm9yIHN1YnJlc291cmNlcyBvbiBhIHNlY3VyZSBwYWdlISBbMl0KICogWzFdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9TZWN1cml0eTpSZW5lZ290aWF0aW9uCiAqIFsyXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzEzNTM3MDUgKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LnNzbC50cmVhdF91bnNhZmVfbmVnb3RpYXRpb25fYXNfYnJva2VuIiwgdHJ1ZSk7Ci8qIDEyNzI6IGRpc3BsYXkgYWR2YW5jZWQgaW5mb3JtYXRpb24gb24gSW5zZWN1cmUgQ29ubmVjdGlvbiB3YXJuaW5nIHBhZ2VzCiAqIG9ubHkgd29ya3Mgd2hlbiBpdCdzIHBvc3NpYmxlIHRvIGFkZCBhbiBleGNlcHRpb24KICogaS5lLiBpdCBkb2Vzbid0IHdvcmsgZm9yIEhTVFMgZGlzY3JlcGFuY2llcyAoaHR0cHM6Ly9zdWJkb21haW4ucHJlbG9hZGVkLWhzdHMuYmFkc3NsLmNvbS8pCiAqIFtURVNUXSBodHRwczovL2V4cGlyZWQuYmFkc3NsLmNvbS8gKioqLwp1c2VyX3ByZWYoImJyb3dzZXIueHVsLmVycm9yX3BhZ2VzLmV4cGVydF9iYWRfY2VydCIsIHRydWUpOwoKLyoqKiBbU0VDVElPTiAxNjAwXTogUkVGRVJFUlMKICAgICAgICAgICAgICAgICAgZnVsbCBVUkk6IGh0dHBzOi8vZXhhbXBsZS5jb206ODg4OC9mb28vYmFyLmh0bWw/aWQ9MTIzNAogICAgIHNjaGVtZStob3N0K3BvcnQrcGF0aDogaHR0cHM6Ly9leGFtcGxlLmNvbTo4ODg4L2Zvby9iYXIuaHRtbAogICAgICAgICAgc2NoZW1lK2hvc3QrcG9ydDogaHR0cHM6Ly9leGFtcGxlLmNvbTo4ODg4CiAgIFsxXSBodHRwczovL2ZlZWRpbmcuY2xvdWQuZ2Vlay5uei9wb3N0cy90d2Vha2luZy1yZWZlcnJlci1mb3ItcHJpdmFjeS1pbi1maXJlZm94LwoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjE2MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90IHJlc3RzIGluIHBlYWNlISIpOwovKiAxNjAyOiBjb250cm9sIHRoZSBhbW91bnQgb2YgY3Jvc3Mtb3JpZ2luIGluZm9ybWF0aW9uIHRvIHNlbmQgW0ZGNTIrXQogKiAwPXNlbmQgZnVsbCBVUkkgKGRlZmF1bHQpLCAxPXNjaGVtZStob3N0K3BvcnQrcGF0aCwgMj1zY2hlbWUraG9zdCtwb3J0ICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAucmVmZXJlci5YT3JpZ2luVHJpbW1pbmdQb2xpY3kiLCAyKTsKCi8qKiogW1NFQ1RJT04gMTcwMF06IENPTlRBSU5FUlMgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIxNzAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGJpdCB0aGUgZHVzdCEiKTsKLyogMTcwMTogZW5hYmxlIENvbnRhaW5lciBUYWJzIGFuZCBpdHMgVUkgc2V0dGluZyBbRkY1MCtdCiAqIFtTRVRUSU5HXSBHZW5lcmFsPlRhYnM+RW5hYmxlIENvbnRhaW5lciBUYWJzCiAqIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9TZWN1cml0eS9Db250ZXh0dWFsX0lkZW50aXR5X1Byb2plY3QvQ29udGFpbmVycyAqKiovCnVzZXJfcHJlZigicHJpdmFjeS51c2VyQ29udGV4dC5lbmFibGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigicHJpdmFjeS51c2VyQ29udGV4dC51aS5lbmFibGVkIiwgdHJ1ZSk7Ci8qIDE3MDI6IHNldCBiZWhhdmlvciBvbiAiKyBUYWIiIGJ1dHRvbiB0byBkaXNwbGF5IGNvbnRhaW5lciBtZW51IG9uIGxlZnQgY2xpY2sgW0ZGNzQrXQogKiBbTk9URV0gVGhlIG1lbnUgaXMgYWx3YXlzIHNob3duIG9uIGxvbmcgcHJlc3MgYW5kIHJpZ2h0IGNsaWNrCiAqIFtTRVRUSU5HXSBHZW5lcmFsPlRhYnM+RW5hYmxlIENvbnRhaW5lciBUYWJzPlNldHRpbmdzPlNlbGVjdCBhIGNvbnRhaW5lciBmb3IgZWFjaCBuZXcgdGFiICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnVzZXJDb250ZXh0Lm5ld1RhYkNvbnRhaW5lck9uTGVmdENsaWNrLmVuYWJsZWQiLCB0cnVlKTsKLyogMTcwMzogc2V0IGV4dGVybmFsIGxpbmtzIHRvIG9wZW4gaW4gc2l0ZS1zcGVjaWZpYyBjb250YWluZXJzIFtGRjEyMytdCiAqIFtTRVRVUC1XRUJdIERlcGVuZGluZyBvbiB5b3VyIGNvbnRhaW5lciBleHRlbnNpb24ocykgYW5kIHRoZWlyIHNldHRpbmdzCiAqIHRydWU9RmlyZWZveCB3aWxsIG5vdCBjaG9vc2UgYSBjb250YWluZXIgKHNvIHlvdXIgZXh0ZW5zaW9uIGNhbikKICogZmFsc2U9RmlyZWZveCB3aWxsIGNob29zZSB0aGUgY29udGFpbmVyL25vLWNvbnRhaW5lciAoZGVmYXVsdCkKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTg3NDU5OSAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5saW5rLmZvcmNlX2RlZmF1bHRfdXNlcl9jb250ZXh0X2lkX2Zvcl9leHRlcm5hbF9vcGVucyIsIHRydWUpOwoKLyoqKiBbU0VDVElPTiAyMDAwXTogUExVR0lOUyAvIE1FRElBIC8gV0VCUlRDICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMjAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBzbnVmZmVkIGl0ISIpOwovKiAyMDAyOiBmb3JjZSBXZWJSVEMgaW5zaWRlIHRoZSBwcm94eSBbRkY3MCtdICoqKi8KdXNlcl9wcmVmKCJtZWRpYS5wZWVyY29ubmVjdGlvbi5pY2UucHJveHlfb25seV9pZl9iZWhpbmRfcHJveHkiLCB0cnVlKTsKLyogMjAwMzogZm9yY2UgYSBzaW5nbGUgbmV0d29yayBpbnRlcmZhY2UgZm9yIElDRSBjYW5kaWRhdGVzIGdlbmVyYXRpb24gW0ZGNDIrXQogKiBXaGVuIHVzaW5nIGEgc3lzdGVtLXdpZGUgcHJveHksIGl0IHVzZXMgdGhlIHByb3h5IGludGVyZmFjZQogKiBbMV0gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1JUQ0ljZUNhbmRpZGF0ZQogKiBbMl0gaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL01lZGlhL1dlYlJUQy9Qcml2YWN5ICoqKi8KdXNlcl9wcmVmKCJtZWRpYS5wZWVyY29ubmVjdGlvbi5pY2UuZGVmYXVsdF9hZGRyZXNzX29ubHkiLCB0cnVlKTsKLyogMjAwNDogZm9yY2UgZXhjbHVzaW9uIG9mIHByaXZhdGUgSVBzIGZyb20gSUNFIGNhbmRpZGF0ZXMgW0ZGNTErXQogKiBbU0VUVVAtSEFSREVOXSBUaGlzIHdpbGwgcHJvdGVjdCB5b3VyIHByaXZhdGUgSVAgZXZlbiBpbiBUUlVTVEVEIHNjZW5hcmlvcyBhZnRlciB5b3UKICogZ3JhbnQgZGV2aWNlIGFjY2VzcywgYnV0IG9mdGVuIHJlc3VsdHMgaW4gYnJlYWthZ2Ugb24gdmlkZW8tY29uZmVyZW5jaW5nIHBsYXRmb3JtcyAqKiovCiAgIC8vIHVzZXJfcHJlZigibWVkaWEucGVlcmNvbm5lY3Rpb24uaWNlLm5vX2hvc3QiLCB0cnVlKTsKLyogMjAyMDogZGlzYWJsZSBHTVAgKEdlY2tvIE1lZGlhIFBsdWdpbnMpCiAqIFsxXSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvR2Vja29NZWRpYVBsdWdpbnMgKioqLwogICAvLyB1c2VyX3ByZWYoIm1lZGlhLmdtcC1wcm92aWRlci5lbmFibGVkIiwgZmFsc2UpOwoKLyoqKiBbU0VDVElPTiAyNDAwXTogRE9NIChET0NVTUVOVCBPQkpFQ1QgTU9ERUwpICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMjQwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBraWNrZWQgdGhlIGJ1Y2tldCEiKTsKLyogMjQwMjogcHJldmVudCBzY3JpcHRzIGZyb20gbW92aW5nIGFuZCByZXNpemluZyBvcGVuIHdpbmRvd3MgKioqLwp1c2VyX3ByZWYoImRvbS5kaXNhYmxlX3dpbmRvd19tb3ZlX3Jlc2l6ZSIsIHRydWUpOwoKLyoqKiBbU0VDVElPTiAyNjAwXTogTUlTQ0VMTEFORU9VUyAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjI2MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgcnVuIGRvd24gdGhlIGN1cnRhaW4hIik7Ci8qIDI2MDM6IHJlbW92ZSB0ZW1wIGZpbGVzIG9wZW5lZCBmcm9tIG5vbi1QQiB3aW5kb3dzIHdpdGggYW4gZXh0ZXJuYWwgYXBwbGljYXRpb24KICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvYnVnbGlzdC5jZ2k/YnVnX2lkPTMwMjQzMywxNzM4NTc0ICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmRvd25sb2FkLnN0YXJ0X2Rvd25sb2Fkc19pbl90bXBfZGlyIiwgdHJ1ZSk7IC8vIFtGRjEwMitdCnVzZXJfcHJlZigiYnJvd3Nlci5oZWxwZXJBcHBzLmRlbGV0ZVRlbXBGaWxlT25FeGl0IiwgdHJ1ZSk7Ci8qIDI2MDY6IGRpc2FibGUgVUlUb3VyIGJhY2tlbmQgc28gdGhlcmUgaXMgbm8gY2hhbmNlIHRoYXQgYSByZW1vdGUgcGFnZSBjYW4gdXNlIGl0ICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnVpdG91ci5lbmFibGVkIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudWl0b3VyLnVybCIsICIiKTsgLy8gRGVmZW5zZS1pbi1kZXB0aAovKiAyNjA4OiByZXNldCByZW1vdGUgZGVidWdnaW5nIHRvIGRpc2FibGVkCiAqIFsxXSBodHRwczovL2dpdGxhYi50b3Jwcm9qZWN0Lm9yZy90cG8vYXBwbGljYXRpb25zL3Rvci1icm93c2VyLy0vaXNzdWVzLzE2MjIyICoqKi8KdXNlcl9wcmVmKCJkZXZ0b29scy5kZWJ1Z2dlci5yZW1vdGUtZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiAyNjE1OiBkaXNhYmxlIHdlYnNpdGVzIG92ZXJyaWRpbmcgRmlyZWZveCdzIGtleWJvYXJkIHNob3J0Y3V0cyBbRkY1OCtdCiAqIDAgKGRlZmF1bHQpIG9yIDE9YWxsb3csIDI9YmxvY2sKICogW1NFVFRJTkddIHRvIGFkZCBzaXRlIGV4Y2VwdGlvbnM6IEN0cmwrST5QZXJtaXNzaW9ucz5PdmVycmlkZSBLZXlib2FyZCBTaG9ydGN1dHMgKioqLwogICAvLyB1c2VyX3ByZWYoInBlcm1pc3Npb25zLmRlZmF1bHQuc2hvcnRjdXRzIiwgMik7Ci8qIDI2MTY6IHJlbW92ZSBzcGVjaWFsIHBlcm1pc3Npb25zIGZvciBjZXJ0YWluIG1vemlsbGEgZG9tYWlucyBbRkYzNStdCiAqIFsxXSByZXNvdXJjZTovL2FwcC9kZWZhdWx0cy9wZXJtaXNzaW9ucyAqKiovCnVzZXJfcHJlZigicGVybWlzc2lvbnMubWFuYWdlci5kZWZhdWx0c1VybCIsICIiKTsKLyogMjYxOTogdXNlIFB1bnljb2RlIGluIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyB0byBlbGltaW5hdGUgcG9zc2libGUgc3Bvb2ZpbmcKICogW1NFVFVQLVdFQl0gTWlnaHQgYmUgdW5kZXNpcmFibGUgZm9yIG5vbi1sYXRpbiBhbHBoYWJldCB1c2VycyBzaW5jZSBsZWdpdGltYXRlIElETidzIGFyZSBhbHNvIHB1bnljb2RlZAogKiBbVEVTVF0gaHR0cHM6Ly93d3cueG4tLTgwYWs2YWE5MmUuY29tLyAod3d3LmFwcGxlLmNvbSkKICogWzFdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9JRE5fRGlzcGxheV9BbGdvcml0aG0KICogWzJdIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lETl9ob21vZ3JhcGhfYXR0YWNrCiAqIFszXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9cHVueWNvZGUrZmlyZWZveAogKiBbNF0gaHR0cHM6Ly93d3cueHVkb25nei5jb20vYmxvZy8yMDE3L2lkbi1waGlzaGluZy8gKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsuSUROX3Nob3dfcHVueWNvZGUiLCB0cnVlKTsKLyogMjYyMDogZW5mb3JjZSBQREZKUywgZGlzYWJsZSBQREZKUyBzY3JpcHRpbmcKICogVGhpcyBzZXR0aW5nIGNvbnRyb2xzIGlmIHRoZSBvcHRpb24gIkRpc3BsYXkgaW4gRmlyZWZveCIgaXMgYXZhaWxhYmxlIGluIHRoZSBzZXR0aW5nIGJlbG93CiAqICAgYW5kIGJ5IGVmZmVjdCBjb250cm9scyB3aGV0aGVyIFBERnMgYXJlIGhhbmRsZWQgaW4tYnJvd3NlciBvciBleHRlcm5hbGx5ICgiQXNrIiBvciAiT3BlbiBXaXRoIikKICogW1dIWV0gcGRmanMgaXMgbGlnaHR3ZWlnaHQsIG9wZW4gc291cmNlLCBhbmQgc2VjdXJlOiB0aGUgbGFzdCBleHBsb2l0IHdhcyBKdW5lIDIwMTUgWzFdCiAqICAgSXQgZG9lc24ndCBicmVhayAic3RhdGUgc2VwYXJhdGlvbiIgb2YgYnJvd3NlciBjb250ZW50IChieSBub3Qgc2hhcmluZyB3aXRoIE9TLCBpbmRlcGVuZGVudCBhcHBzKS4KICogICBJdCBtYWludGFpbnMgZGlzayBhdm9pZGFuY2UgYW5kIGFwcGxpY2F0aW9uIGRhdGEgaXNvbGF0aW9uLiBJdCdzIGNvbnZlbmllbnQuIFlvdSBjYW4gc3RpbGwgc2F2ZSB0byBkaXNrLgogKiBbTk9URV0gSlMgY2FuIHN0aWxsIGZvcmNlIGEgcGRmIHRvIG9wZW4gaW4tYnJvd3NlciBieSBidW5kbGluZyBpdHMgb3duIGNvZGUKICogW1NFVFVQLUNIUk9NRV0gWW91IG1heSBwcmVmZXIgYSBkaWZmZXJlbnQgcGRmIHJlYWRlciBmb3Igc2VjdXJpdHkvd29ya2Zsb3cgcmVhc29ucwogKiBbU0VUVElOR10gR2VuZXJhbD5BcHBsaWNhdGlvbnM+UG9ydGFibGUgRG9jdW1lbnQgRm9ybWF0IChQREYpCiAqIFsxXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9cGRmLmpzK2ZpcmVmb3ggKioqLwp1c2VyX3ByZWYoInBkZmpzLmRpc2FibGVkIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2VdCnVzZXJfcHJlZigicGRmanMuZW5hYmxlU2NyaXB0aW5nIiwgZmFsc2UpOyAvLyBbRkY4NitdCi8qIDI2MjQ6IGRpc2FibGUgbWlkZGxlIGNsaWNrIG9uIG5ldyB0YWIgYnV0dG9uIG9wZW5pbmcgVVJMcyBvciBzZWFyY2hlcyB1c2luZyBjbGlwYm9hcmQgW0ZGMTE1K10gKi8KdXNlcl9wcmVmKCJicm93c2VyLnRhYnMuc2VhcmNoY2xpcGJvYXJkZm9yLm1pZGRsZWNsaWNrIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2UgTk9OLUxJTlVYXQovKiAyNjMwOiBkaXNhYmxlIGNvbnRlbnQgYW5hbHlzaXMgYnkgRExQIChEYXRhIExvc3MgUHJldmVudGlvbikgYWdlbnRzCiAqIERMUCBhZ2VudHMgYXJlIGJhY2tncm91bmQgcHJvY2Vzc2VzIG9uIG1hbmFnZWQgY29tcHV0ZXJzIHRoYXQgYWxsb3cgZW50ZXJwcmlzZXMgdG8gbW9uaXRvciBsb2NhbGx5IHJ1bm5pbmcKICogYXBwbGljYXRpb25zIGZvciBkYXRhIGV4ZmlsdHJhdGlvbiBldmVudHMsIHdoaWNoIHRoZXkgY2FuIGFsbG93L2Jsb2NrIGJhc2VkIG9uIGN1c3RvbWVyIGRlZmluZWQgRExQIHBvbGljaWVzLgogKiAwPUJsb2NrIGFsbCByZXF1ZXN0cywgMT1XYXJuIG9uIGFsbCByZXF1ZXN0cyAod2hpY2ggbGV0cyB0aGUgdXNlciBkZWNpZGUpLCAyPUFsbG93IGFsbCByZXF1ZXN0cwogKiBbMV0gaHR0cHM6Ly9naXRodWIuY29tL2Nocm9taXVtL2NvbnRlbnRfYW5hbHlzaXNfc2RrICovCnVzZXJfcHJlZigiYnJvd3Nlci5jb250ZW50YW5hbHlzaXMuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGMTIxK10gW0RFRkFVTFQ6IGZhbHNlXQp1c2VyX3ByZWYoImJyb3dzZXIuY29udGVudGFuYWx5c2lzLmRlZmF1bHRfcmVzdWx0IiwgMCk7IC8vIFtGRjEyNytdIFtERUZBVUxUOiAwXQoKLyoqIERPV05MT0FEUyAqKiovCi8qIDI2NTE6IGVuYWJsZSB1c2VyIGludGVyYWN0aW9uIGZvciBzZWN1cml0eSBieSBhbHdheXMgYXNraW5nIHdoZXJlIHRvIGRvd25sb2FkCiAqIFtTRVRVUC1DSFJPTUVdIE9uIEFuZHJvaWQgdGhpcyBibG9ja3MgbG9uZ3RhcHBpbmcgYW5kIHNhdmluZyBpbWFnZXMKICogW1NFVFRJTkddIEdlbmVyYWw+RG93bmxvYWRzPkFsd2F5cyBhc2sgeW91IHdoZXJlIHRvIHNhdmUgZmlsZXMgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuZG93bmxvYWQudXNlRG93bmxvYWREaXIiLCBmYWxzZSk7Ci8qIDI2NTI6IGRpc2FibGUgZG93bmxvYWRzIHBhbmVsIG9wZW5pbmcgb24gZXZlcnkgZG93bmxvYWQgW0ZGOTYrXSAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5kb3dubG9hZC5hbHdheXNPcGVuUGFuZWwiLCBmYWxzZSk7Ci8qIDI2NTM6IGRpc2FibGUgYWRkaW5nIGRvd25sb2FkcyB0byB0aGUgc3lzdGVtJ3MgInJlY2VudCBkb2N1bWVudHMiIGxpc3QgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuZG93bmxvYWQubWFuYWdlci5hZGRUb1JlY2VudERvY3MiLCBmYWxzZSk7Ci8qIDI2NTQ6IGVuYWJsZSB1c2VyIGludGVyYWN0aW9uIGZvciBzZWN1cml0eSBieSBhbHdheXMgYXNraW5nIGhvdyB0byBoYW5kbGUgbmV3IG1pbWV0eXBlcyBbRkYxMDErXQogKiBbU0VUVElOR10gR2VuZXJhbD5GaWxlcyBhbmQgQXBwbGljYXRpb25zPldoYXQgc2hvdWxkIEZpcmVmb3ggZG8gd2l0aCBvdGhlciBmaWxlcyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5kb3dubG9hZC5hbHdheXNfYXNrX2JlZm9yZV9oYW5kbGluZ19uZXdfdHlwZXMiLCB0cnVlKTsKCi8qKiBFWFRFTlNJT05TICoqKi8KLyogMjY2MDogbGltaXQgYWxsb3dlZCBleHRlbnNpb24gZGlyZWN0b3JpZXMKICogMT1wcm9maWxlLCAyPXVzZXIsIDQ9YXBwbGljYXRpb24sIDg9c3lzdGVtLCAxNj10ZW1wb3JhcnksIDMxPWFsbAogKiBUaGUgcHJlZiB2YWx1ZSByZXByZXNlbnRzIHRoZSBzdW06IGUuZy4gNSB3b3VsZCBiZSBwcm9maWxlIGFuZCBhcHBsaWNhdGlvbiBkaXJlY3RvcmllcwogKiBbU0VUVVAtQ0hST01FXSBCcmVha3MgdXNhZ2Ugb2YgZmlsZXMgd2hpY2ggYXJlIGluc3RhbGxlZCBvdXRzaWRlIGFsbG93ZWQgZGlyZWN0b3JpZXMKICogWzFdIGh0dHBzOi8vYXJjaGl2ZS5pcy9EWWpBTSAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5lbmFibGVkU2NvcGVzIiwgNSk7IC8vIFtISURERU4gUFJFRl0KICAgLy8gdXNlcl9wcmVmKCJleHRlbnNpb25zLmF1dG9EaXNhYmxlU2NvcGVzIiwgMTUpOyAvLyBbREVGQVVMVDogMTVdCi8qIDI2NjE6IGRpc2FibGUgYnlwYXNzaW5nIDNyZCBwYXJ0eSBleHRlbnNpb24gaW5zdGFsbCBwcm9tcHRzIFtGRjgyK10KICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvYnVnbGlzdC5jZ2k/YnVnX2lkPTE2NTk1MzAsMTY4MTMzMSAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5wb3N0RG93bmxvYWRUaGlyZFBhcnR5UHJvbXB0IiwgZmFsc2UpOwovKiAyNjYyOiBkaXNhYmxlIHdlYmV4dGVuc2lvbiByZXN0cmljdGlvbnMgb24gY2VydGFpbiBtb3ppbGxhIGRvbWFpbnMgKHlvdSBhbHNvIG5lZWQgNDUwMykgW0ZGNjArXQogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9idWdsaXN0LmNnaT9idWdfaWQ9MTM4NDMzMCwxNDA2Nzk1LDE0MTU2NDQsMTQ1Mzk4OCAqKiovCiAgIC8vIHVzZXJfcHJlZigiZXh0ZW5zaW9ucy53ZWJleHRlbnNpb25zLnJlc3RyaWN0ZWREb21haW5zIiwgIiIpOwoKLyoqKiBbU0VDVElPTiAyNzAwXTogRVRQIChFTkhBTkNFRCBUUkFDS0lORyBQUk9URUNUSU9OKSAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjI3MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3Mgam9pbmVkIHRoZSBibGVlZGluJyBjaG9pciBpbnZpc2libGUhIik7Ci8qIDI3MDE6IGVuYWJsZSBFVFAgU3RyaWN0IE1vZGUgW0ZGODYrXQogKiBFVFAgU3RyaWN0IE1vZGUgZW5hYmxlcyBUb3RhbCBDb29raWUgUHJvdGVjdGlvbiAoVENQKQogKiBbTk9URV0gQWRkaW5nIHNpdGUgZXhjZXB0aW9ucyBkaXNhYmxlcyBhbGwgRVRQIHByb3RlY3Rpb25zIGZvciB0aGF0IHNpdGUgYW5kIGluY3JlYXNlcyB0aGUgcmlzayBvZgogKiBjcm9zcy1zaXRlIHN0YXRlIHRyYWNraW5nIGUuZy4gZXhjZXB0aW9ucyBmb3IgU2l0ZUEgYW5kIFNpdGVCIG1lYW5zIFBhcnR5QyBvbiBib3RoIHNpdGVzIGlzIHNoYXJlZAogKiBbMV0gaHR0cHM6Ly9ibG9nLm1vemlsbGEub3JnL3NlY3VyaXR5LzIwMjEvMDIvMjMvdG90YWwtY29va2llLXByb3RlY3Rpb24vCiAqIFtTRVRUSU5HXSB0byBhZGQgc2l0ZSBleGNlcHRpb25zOiBVcmxiYXI+RVRQIFNoaWVsZAogKiBbU0VUVElOR10gdG8gbWFuYWdlIHNpdGUgZXhjZXB0aW9uczogT3B0aW9ucz5Qcml2YWN5ICYgU2VjdXJpdHk+RW5oYW5jZWQgVHJhY2tpbmcgUHJvdGVjdGlvbj5NYW5hZ2UgRXhjZXB0aW9ucyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5jb250ZW50YmxvY2tpbmcuY2F0ZWdvcnkiLCAic3RyaWN0Iik7IC8vIFtISURERU4gUFJFRl0KLyogMjcwMjogZGlzYWJsZSBFVFAgd2ViIGNvbXBhdCBmZWF0dXJlcyBbRkY5MytdCiAqIFtTRVRVUC1IQVJERU5dIEluY2x1ZGVzIHNraXAgbGlzdHMsIGhldXJpc3RpY3MgKFNtYXJ0QmxvY2spIGFuZCBhdXRvbWF0aWMgZ3JhbnRzCiAqIE9wZW5lciBhbmQgcmVkaXJlY3QgaGV1cmlzdGljcyBhcmUgZ3JhbnRlZCBmb3IgMzAgZGF5cywgc2VlIFszXQogKiBbMV0gaHR0cHM6Ly9ibG9nLm1vemlsbGEub3JnL3NlY3VyaXR5LzIwMjEvMDcvMTMvc21hcnRibG9jay12Mi8KICogWzJdIGh0dHBzOi8vaGcubW96aWxsYS5vcmcvbW96aWxsYS1jZW50cmFsL3Jldi9lNTQ4M2ZkNDY5YWIjbDQuMTIKICogWzNdIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL1ByaXZhY3kvU3RhdGVfUGFydGl0aW9uaW5nI3N0b3JhZ2VfYWNjZXNzX2hldXJpc3RpY3MgKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuYW50aXRyYWNraW5nLmVuYWJsZVdlYmNvbXBhdCIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gMjgwMF06IFNIVVRET1dOICYgU0FOSVRJWklORyAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjI4MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgYmxlZWRpbicgZGVtaXNlZCEiKTsKLyogMjgxMDogZW5hYmxlIEZpcmVmb3ggdG8gY2xlYXIgaXRlbXMgb24gc2h1dGRvd24KICogW05PVEVdIEluIEZGMTI5KyBjbGVhcmluZyAic2l0ZVNldHRpbmdzIiBvbiBzaHV0ZG93biAoMjgxMSspLCBvciBtYW51YWxseSB2aWEgc2l0ZSBkYXRhICgyODIwKykgYW5kCiAqIHZpYSBoaXN0b3J5ICgyODMwKSwgd2lsbCBubyBsb25nZXIgcmVtb3ZlIHNhbml0aXplIG9uIHNodXRkb3duICJjb29raWUgYW5kIHNpdGUgZGF0YSIgc2l0ZSBleGNlcHRpb25zICgyODE1KQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5Pkhpc3Rvcnk+Q3VzdG9tIFNldHRpbmdzPkNsZWFyIGhpc3Rvcnkgd2hlbiBGaXJlZm94IGNsb3NlcyB8IFNldHRpbmdzICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LnNhbml0aXplLnNhbml0aXplT25TaHV0ZG93biIsIHRydWUpOwoKLyoqIFNBTklUSVpFIE9OIFNIVVRET1dOOiBJR05PUkVTICJBTExPVyIgU0lURSBFWENFUFRJT05TICoqKi8KLyogMjgxMTogc2V0L2VuZm9yY2UgY2xlYXJPblNodXRkb3duIGl0ZW1zIChpZiAyODEwIGlzIHRydWUpIFtTRVRVUC1DSFJPTUVdIFtGRjEyOCtdICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bl92Mi5jYWNoZSIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bl92Mi5oaXN0b3J5Rm9ybURhdGFBbmREb3dubG9hZHMiLCB0cnVlKTsgLy8gW0RFRkFVTFQ6IHRydWVdCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd25fdjIuc2l0ZVNldHRpbmdzIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2VdCi8qIDI4MTI6IHNldC9lbmZvcmNlIGNsZWFyT25TaHV0ZG93biBpdGVtcyBbRkYxMzYrXSAqKiovCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd25fdjIuYnJvd3NpbmdIaXN0b3J5QW5kRG93bmxvYWRzIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duX3YyLmRvd25sb2FkcyIsIHRydWUpOwp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duX3YyLmZvcm1kYXRhIiwgdHJ1ZSk7Ci8qIDI4MTM6IHNldCBTZXNzaW9uIFJlc3RvcmUgdG8gY2xlYXIgb24gc2h1dGRvd24gKGlmIDI4MTAgaXMgdHJ1ZSkgW0ZGMzQrXQogKiBbTk9URV0gTm90IG5lZWRlZCBpZiBTZXNzaW9uIFJlc3RvcmUgaXMgbm90IHVzZWQgKDAxMDIpIG9yIGl0IGlzIGFscmVhZHkgY2xlYXJlZCB3aXRoIGhpc3RvcnkgKDI4MTErKQogKiBbTk9URV0gSWYgdHJ1ZSwgdGhpcyBwcmV2ZW50cyByZXN1bWluZyBmcm9tIGNyYXNoZXMgKGFsc28gc2VlIDUwMDgpICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bi5vcGVuV2luZG93cyIsIHRydWUpOwoKLyoqIFNBTklUSVpFIE9OIFNIVVRET1dOOiBSRVNQRUNUUyAiQUxMT1ciIFNJVEUgRVhDRVBUSU9OUyAqKiovCi8qIDI4MTU6IHNldCAiQ29va2llcyIgYW5kICJTaXRlIERhdGEiIHRvIGNsZWFyIG9uIHNodXRkb3duIChpZiAyODEwIGlzIHRydWUpIFtTRVRVUC1DSFJPTUVdIFtGRjEyOCtdCiAqIFtOT1RFXSBFeGNlcHRpb25zOiBGb3IgY3Jvc3MtZG9tYWluIGxvZ2lucywgYWRkIGV4Y2VwdGlvbnMgZm9yIGJvdGggc2l0ZXMKICogZS5nLiBodHRwczovL3d3dy55b3V0dWJlLmNvbSAoc2l0ZSkgKyBodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20gKHNpbmdsZSBzaWduIG9uKQogKiBbV0FSTklOR10gQmUgc2VsZWN0aXZlIHdpdGggd2hhdCBzaXRlcyB5b3UgIkFsbG93IiwgYXMgdGhleSBhbHNvIGRpc2FibGUgcGFydGl0aW9uaW5nICgxNzY3MjcxKQogKiBbU0VUVElOR10gdG8gYWRkIHNpdGUgZXhjZXB0aW9uczogQ3RybCtJPlBlcm1pc3Npb25zPkNvb2tpZXM+QWxsb3cgKHdoZW4gb24gdGhlIHdlYnNpdGUgaW4gcXVlc3Rpb24pCiAqIFtTRVRUSU5HXSB0byBtYW5hZ2Ugc2l0ZSBleGNlcHRpb25zOiBPcHRpb25zPlByaXZhY3kgJiBTZWN1cml0eT5QZXJtaXNzaW9ucz5TZXR0aW5ncyAqKiovCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd25fdjIuY29va2llc0FuZFN0b3JhZ2UiLCB0cnVlKTsKCi8qKiBTQU5JVElaRSBTSVRFIERBVEE6IElHTk9SRVMgIkFMTE9XIiBTSVRFIEVYQ0VQVElPTlMgKioqLwovKiAyODIwOiBzZXQgbWFudWFsICJDbGVhciBEYXRhIiBpdGVtcyBbU0VUVVAtQ0hST01FXSBbRkYxMjgrXQogKiBGaXJlZm94IHJlbWVtYmVycyB5b3VyIGxhc3QgY2hvaWNlcy4gVGhpcyB3aWxsIHJlc2V0IHRoZW0gd2hlbiB5b3Ugc3RhcnQgRmlyZWZveAogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkJyb3dzZXIgUHJpdmFjeT5Db29raWVzIGFuZCBTaXRlIERhdGE+Q2xlYXIgRGF0YSAqKiovCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhclNpdGVEYXRhLmNhY2hlIiwgdHJ1ZSk7CnVzZXJfcHJlZigicHJpdmFjeS5jbGVhclNpdGVEYXRhLmNvb2tpZXNBbmRTdG9yYWdlIiwgZmFsc2UpOyAvLyBrZWVwIGZhbHNlIHVudGlsIGl0IHJlc3BlY3RzICJhbGxvdyIgc2l0ZSBleGNlcHRpb25zCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhclNpdGVEYXRhLmhpc3RvcnlGb3JtRGF0YUFuZERvd25sb2FkcyIsIHRydWUpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJTaXRlRGF0YS5zaXRlU2V0dGluZ3MiLCBmYWxzZSk7Ci8qIDI4MjE6IHNldCBtYW51YWwgIkNsZWFyIERhdGEiIGl0ZW1zIFtGRjEzNitdICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyU2l0ZURhdGEuYnJvd3NpbmdIaXN0b3J5QW5kRG93bmxvYWRzIiwgdHJ1ZSk7CnVzZXJfcHJlZigicHJpdmFjeS5jbGVhclNpdGVEYXRhLmZvcm1kYXRhIiwgdHJ1ZSk7CgovKiogU0FOSVRJWkUgSElTVE9SWTogSUdOT1JFUyAiQUxMT1ciIFNJVEUgRVhDRVBUSU9OUyAqKiovCi8qIDI4MzA6IHNldCBtYW51YWwgIkNsZWFyIEhpc3RvcnkiIGl0ZW1zLCBhbHNvIHZpYSBDdHJsLVNoaWZ0LURlbCBbU0VUVVAtQ0hST01FXSBbRkYxMjgrXQogKiBGaXJlZm94IHJlbWVtYmVycyB5b3VyIGxhc3QgY2hvaWNlcy4gVGhpcyB3aWxsIHJlc2V0IHRoZW0gd2hlbiB5b3Ugc3RhcnQgRmlyZWZveAogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5Pkhpc3Rvcnk+Q3VzdG9tIFNldHRpbmdzPkNsZWFyIEhpc3RvcnkgKioqLwp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJIaXN0b3J5LmNhY2hlIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJIaXN0b3J5LmNvb2tpZXNBbmRTdG9yYWdlIiwgZmFsc2UpOwp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJIaXN0b3J5Lmhpc3RvcnlGb3JtRGF0YUFuZERvd25sb2FkcyIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFySGlzdG9yeS5zaXRlU2V0dGluZ3MiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KLyogMjgzMTogc2V0IG1hbnVhbCAiQ2xlYXIgSGlzdG9yeSIgaXRlbXMgW0ZGMTM2K10gKioqLwp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJIaXN0b3J5LmJyb3dzaW5nSGlzdG9yeUFuZERvd25sb2FkcyIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFySGlzdG9yeS5mb3JtZGF0YSIsIHRydWUpOwoKLyoqIFNBTklUSVpFIE1BTlVBTDogVElNRVJBTkdFICoqKi8KLyogMjg0MDogc2V0ICJUaW1lIHJhbmdlIHRvIGNsZWFyIiBmb3IgIkNsZWFyIERhdGEiICgyODIwKykgYW5kICJDbGVhciBIaXN0b3J5IiAoMjgzMCspCiAqIEZpcmVmb3ggcmVtZW1iZXJzIHlvdXIgbGFzdCBjaG9pY2UuIFRoaXMgd2lsbCByZXNldCB0aGUgdmFsdWUgd2hlbiB5b3Ugc3RhcnQgRmlyZWZveAogKiAwPWV2ZXJ5dGhpbmcsIDE9bGFzdCBob3VyLCAyPWxhc3QgdHdvIGhvdXJzLCAzPWxhc3QgZm91ciBob3VycywgND10b2RheQogKiBbTk9URV0gVmFsdWVzIDUgKGxhc3QgNSBtaW51dGVzKSBhbmQgNiAobGFzdCAyNCBob3VycykgYXJlIG5vdCBsaXN0ZWQgaW4gdGhlIGRyb3Bkb3duLAogKiB3aGljaCB3aWxsIGRpc3BsYXkgYSBibGFuayB2YWx1ZSwgYW5kIGFyZSBub3QgZ3VhcmFudGVlZCB0byB3b3JrICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LnNhbml0aXplLnRpbWVTcGFuIiwgMCk7CgovKioqIFtTRUNUSU9OIDQwMDBdOiBGUFAgKGZpbmdlcnByaW50aW5nUHJvdGVjdGlvbikKICAgUkZQICg0NTAxKSBvdmVycmlkZXMgRlBQCgogICBJbiBGRjExOCsgRlBQIGlzIG9uIGJ5IGRlZmF1bHQgaW4gcHJpdmF0ZSB3aW5kb3dzICg0MDAxKSBhbmQgaW4gRkYxMTkrIGlzIGNvbnRyb2xsZWQKICAgYnkgRVRQICgyNzAxKS4gRlBQIHdpbGwgYWxzbyB1c2UgUmVtb3RlIFNlcnZpY2VzIGluIGZ1dHVyZSB0byByZWxheCBGUFAgcHJvdGVjdGlvbnMKICAgb24gYSBwZXIgc2l0ZSBiYXNpcyBmb3IgY29tcGF0aWJpbGl0eSAoNDAwNCkuCgogICBodHRwczovL3NlYXJjaGZveC5vcmcvbW96aWxsYS1jZW50cmFsL3NvdXJjZS90b29sa2l0L2NvbXBvbmVudHMvcmVzaXN0ZmluZ2VycHJpbnRpbmcvUkZQVGFyZ2V0c0RlZmF1bHQuaW5jCgogICBbTk9URV0gUkZQVGFyZ2V0cyArIGdyYW51bGFyIG92ZXJyaWRlcyBhcmUgc29tZXdoYXQgZXhwZXJpbWVudGFsIGFuZCBtYXkgcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMKICAgLSBlLmcuIEZyYW1lUmF0ZSBjYW4gb25seSBiZSBjb250cm9sbGVkIHBlciBwcm9jZXNzLCBub3QgcGVyIG9yaWdpbgoKICAgMTgyNjQwOCAtIHJlc3RyaWN0IGZvbnRzIHRvIHN5c3RlbSAoa0Jhc2VGb250cyArIGtMYW5nUGFja0ZvbnRzKSAoV2luZG93cywgTWFjLCBzb21lIExpbnV4KQogICAgICBodHRwczovL3NlYXJjaGZveC5vcmcvbW96aWxsYS1jZW50cmFsL3NlYXJjaD9wYXRoPVN0YW5kYXJkRm9udHMqLmluYwogICAxODU4MTgxIC0gc3VidGx5IHJhbmRvbWl6ZSBjYW52YXMgcGVyIGVUTEQrMSwgcGVyIHNlc3Npb24gYW5kIHBlciB3aW5kb3ctbW9kZSAoRkYxMjArKQoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjQwMDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgYmVyZWZ0IG9mIGxpZmUhIik7Ci8qIDQwMDE6IGVuYWJsZSBGUFAgaW4gUEIgbW9kZSBbRkYxMTQrXQogKiBbTk9URV0gSW4gRkYxMTkrLCBGUFAgZm9yIGFsbCBtb2RlcyAoNzAxNikgaXMgZW5hYmxlZCB3aXRoIEVUUCBTdHJpY3QgKDI3MDEpICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmZpbmdlcnByaW50aW5nUHJvdGVjdGlvbi5wYm1vZGUiLCB0cnVlKTsgLy8gW0RFRkFVTFQ6IHRydWVdCi8qIDQwMDI6IHNldCBnbG9iYWwgRlBQIG92ZXJyaWRlcyBbRkYxMTQrXQogKiB1c2VzICJSRlBUYXJnZXRzIiBbMV0gd2hpY2ggZGVzcGl0ZSB0aGUgbmFtZSB0aGVzZSBhcmUgbm90IHVzZWQgYnkgUkZQCiAqIGUuZy4gIitBbGxUYXJnZXRzLC1DU1NQcmVmZXJzQ29sb3JTY2hlbWUsLUpTRGF0ZVRpbWVVVEMiID0gYWxsIHRhcmdldHMgYnV0IGFsbG93IHByZWZlcnMtY29sb3Itc2NoZW1lIGFuZCBkbyBub3QgY2hhbmdlIHRpbWV6b25lCiAqIGUuZy4gIi1BbGxUYXJnZXRzLCtDYW52YXNSYW5kb21pemF0aW9uLCtKU0RhdGVUaW1lVVRDIiA9IG5vIHRhcmdldHMgYnV0IGRvIHVzZSBGUFAgY2FudmFzIGFuZCBjaGFuZ2UgdGltZXpvbmUKICogW05PVEVdIE5vdCBzdXBwb3J0ZWQgYnkgYXJrZW5mb3guIEVpdGhlciB1c2UgUkZQIG9yIEZQUCBhdCBkZWZhdWx0cwogKiBbMV0gaHR0cHM6Ly9zZWFyY2hmb3gub3JnL21vemlsbGEtY2VudHJhbC9zb3VyY2UvdG9vbGtpdC9jb21wb25lbnRzL3Jlc2lzdGZpbmdlcnByaW50aW5nL1JGUFRhcmdldHMuaW5jICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmZpbmdlcnByaW50aW5nUHJvdGVjdGlvbi5vdmVycmlkZXMiLCAiIik7Ci8qIDQwMDM6IHNldCBncmFudWxhciBGUFAgb3ZlcnJpZGVzCiAqIEpTT04gZm9ybWF0OiBlLmcuIlt7XCJmaXJzdFBhcnR5RG9tYWluXCI6IFwibmV0ZmxpeC5jb21cIiwgXCJvdmVycmlkZXNcIjogXCItQ2FudmFzUmFuZG9taXphdGlvbiwtRnJhbWVSYXRlLFwifV0iCiAqIFtOT1RFXSBOb3Qgc3VwcG9ydGVkIGJ5IGFya2VuZm94LiBFaXRoZXIgdXNlIFJGUCBvciBGUFAgYXQgZGVmYXVsdHMgKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuZmluZ2VycHJpbnRpbmdQcm90ZWN0aW9uLmdyYW51bGFyT3ZlcnJpZGVzIiwgIiIpOwovKiA0MDA0OiBkaXNhYmxlIHJlbW90ZSBGUFAgb3ZlcnJpZGVzIFtGRjEyNytdICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmZpbmdlcnByaW50aW5nUHJvdGVjdGlvbi5yZW1vdGVPdmVycmlkZXMuZW5hYmxlZCIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gNDUwMF06IE9QVElPTkFMIFJGUCAocmVzaXN0RmluZ2VycHJpbnRpbmcpCiAgIFJGUCBvdmVycmlkZXMgRlBQICg0MDAwKQoKICAgRkYxMjgrIEFya2VuZm94IGJ5IGRlZmF1bHQgdXNlcyBGUFAgKGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aXRoIEVUUCBTdHJpY3QpLiBGb3IgbW9zdCBwZW9wbGUKICAgdGhpcyBpcyBhbGwgeW91IG5lZWQuIFRvIHVzZSBSRlAgaW5zdGVhZCwgYWRkIFJGUCAoNDUwMSkgdG8geW91ciBvdmVycmlkZXMsIGFuZCBvcHRpb25hbGx5CiAgIGFkZCBsZXR0ZXJib3hpbmcgKDQ1MDQpLCBzcG9vZl9lbmdsaXNoICg0NTA2KSwgYW5kIHdlYmdsICg0NTIwKS4KCiAgIFJGUCBpcyBhbiBhbGwtb3Itbm90aGluZyBidXkgaW46IHlvdSBjYW5ub3QgcGljayBhbmQgY2hvb3NlIHdoYXQgcGFydHMgeW91IHdhbnQKCiAgIFtXQVJOSU5HXSBETyBOT1QgVVNFIGV4dGVuc2lvbnMgdG8gYWx0ZXIgUkZQIHByb3RlY3RlZCBtZXRyaWNzCgogICAgNDE4OTg2IC0gbGltaXQgd2luZG93LnNjcmVlbiAmIENTUyBtZWRpYSBxdWVyaWVzIChGRjQxKQogICAxMzYwMDM5IC0gc3Bvb2YgbmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kgYXMgMiAoRkY1NSkKIEZGNTYKICAgMTMzMzY1MSAtIHNwb29mIFVzZXIgQWdlbnQgJiBOYXZpZ2F0b3IgQVBJCiAgICAgIEpTOiBzcG9vZmVkIGFzIFdpbmRvd3MgMTAsIE9TIDEwLjE1LCBBbmRyb2lkIDEwLCBvciBMaW51eAogICAgICBIVFRQIEhlYWRlcjogc3Bvb2ZlZCBhcyBXaW5kb3dzIDEwIG9yIEFuZHJvaWQgMTAuMTUgdW50aWwgRkYxMzYgdGhlbiBtYXRjaGVzIEpTIHNwb29mCiAgIDEzNjkzMTkgLSBkaXNhYmxlIGRldmljZSBzZW5zb3IgQVBJCiAgIDEzNjkzNTcgLSBkaXNhYmxlIHNpdGUgc3BlY2lmaWMgem9vbQogICAxMzM3MTYxIC0gaGlkZSBnYW1lcGFkcyBmcm9tIGNvbnRlbnQKICAgMTM3MjA3MiAtIHNwb29mIG5ldHdvcmsgaW5mb3JtYXRpb24gQVBJIGFzICJ1bmtub3duIiB3aGVuIGRvbS5uZXRpbmZvLmVuYWJsZWQgPSB0cnVlCiAgIDEzMzM2NDEgLSByZWR1Y2UgZmluZ2VycHJpbnRpbmcgaW4gV2ViU3BlZWNoIEFQSQogRkY1NwogICAxMzY5MzA5IC0gc3Bvb2YgbWVkaWEgc3RhdGlzdGljcwogICAxMzgyNDk5IC0gcmVkdWNlIHNjcmVlbiBjby1vcmRpbmF0ZSBmaW5nZXJwcmludGluZyBpbiBUb3VjaCBBUEkKICAgMTIxNzI5MCAmIDE0MDk2NzcgLSBlbmFibGUgc29tZSBmaW5nZXJwcmludGluZyByZXNpc3RhbmNlIGZvciBXZWJHTAogICAxMzU0NjMzIC0gbGltaXQgTWVkaWFFcnJvci5tZXNzYWdlIHRvIGEgd2hpdGVsaXN0CiBGRjU4KwogICAxMzcyMDczIC0gc3Bvb2YvYmxvY2sgZmluZ2VycHJpbnRpbmcgaW4gTWVkaWFEZXZpY2VzIEFQSSAoRkY1OSkKICAgICAgU3Bvb2Y6IGVudW1lcmF0ZSBkZXZpY2VzIGFzIG9uZSAiSW50ZXJuYWwgQ2FtZXJhIiBhbmQgb25lICJJbnRlcm5hbCBNaWNyb3Bob25lIgogICAgICBCbG9jazogc3VwcHJlc3NlcyB0aGUgb25kZXZpY2VjaGFuZ2UgZXZlbnQKICAgMTAzOTA2OSAtIHdhcm4gd2hlbiBsYW5ndWFnZSBwcmVmcyBhcmUgbm90IHNldCB0byAiZW4qIiAoRkY1OSkKICAgMTIyMjI4NSAmIDE0MzM1OTIgLSBzcG9vZiBrZXlib2FyZCBldmVudHMgYW5kIHN1cHByZXNzIGtleWJvYXJkIG1vZGlmaWVyIGV2ZW50cyAoRkY1OSkKICAgICAgU3Bvb2ZpbmcgbWltaWNzIHRoZSBjb250ZW50IGxhbmd1YWdlIG9mIHRoZSBkb2N1bWVudC4gQ3VycmVudGx5IGl0IG9ubHkgc3VwcG9ydHMgZW4tVVMuCiAgICAgIE1vZGlmaWVyIGV2ZW50cyBzdXBwcmVzc2VkIGFyZSBTSElGVCBhbmQgYm90aCBBTFQga2V5cy4gQ2hyb21lIGlzIG5vdCBhZmZlY3RlZC4KICAgMTMzNzE1NyAtIGRpc2FibGUgV2ViR0wgZGVidWcgcmVuZGVyZXIgaW5mbyAoRkY2MCkKICAgMTQ1OTA4OSAtIGRpc2FibGUgT1MgbG9jYWxlIGluIEhUVFAgQWNjZXB0LUxhbmd1YWdlIGhlYWRlcnMgKEFORFJPSUQpIChGRjYyKQogICAxNDc5MjM5IC0gcmV0dXJuICJuby1wcmVmZXJlbmNlIiB3aXRoIHByZWZlcnMtcmVkdWNlZC1tb3Rpb24gKEZGNjMpCiAgIDEzNjM1MDggJiAxODI2MDUxIC0gc3Bvb2Yvc3VwcHJlc3MgUG9pbnRlciBFdmVudHMgKEZGNjQsIEZGMTMyKQogICAxNDkyNzY2IC0gc3Bvb2YgcG9pbnRlckV2ZW50LnBvaW50ZXJpZCAoRkY2NSkKICAgMTQ4NTI2NiAtIGRpc2FibGUgZXhwb3N1cmUgb2Ygc3lzdGVtIGNvbG9ycyB0byBDU1Mgb3IgY2FudmFzIChGRjY3KQogICAxNDk0MDM0IC0gcmV0dXJuICJsaWdodCIgd2l0aCBwcmVmZXJzLWNvbG9yLXNjaGVtZSAoRkY2NykKICAgMTU2NDQyMiAtIHNwb29mIGF1ZGlvQ29udGV4dCBvdXRwdXRMYXRlbmN5IChGRjcwKQogICAxNTk1ODIzIC0gcmV0dXJuIGF1ZGlvQ29udGV4dCBzYW1wbGVSYXRlIGFzIDQ0MTAwIChGRjcyKQogICAxNjA3MzE2IC0gc3Bvb2YgcG9pbnRlciBhcyBjb2Fyc2UgYW5kIGhvdmVyIGFzIG5vbmUgKEFORFJPSUQpIChGRjc0KQogICAxNjIxNDMzIC0gcmFuZG9taXplIGNhbnZhcyAocHJldmlvdXNseSBGRjU4KyByZXR1cm5lZCBhbiBhbGwtd2hpdGUgY2FudmFzKSAoRkY3OCkKICAgMTUwNjM2NCAtIHJldHVybiAibm8tcHJlZmVyZW5jZSIgd2l0aCBwcmVmZXJzLWNvbnRyYXN0IChGRjgwKQogICAxNjUzOTg3IC0gbGltaXQgZm9udCB2aXNpYmlsaXR5IHRvIGJ1bmRsZWQgYW5kICJCYXNlIEZvbnRzIiAoV2luZG93cywgTWFjLCBzb21lIExpbnV4KSAoRkY4MCkKICAgMTQ2MTQ1NCAtIHNwb29mIHNtb290aD10cnVlIGFuZCBwb3dlckVmZmljaWVudD1mYWxzZSBmb3Igc3VwcG9ydGVkIG1lZGlhIGluIE1lZGlhQ2FwYWJpbGl0aWVzIChGRjgyKQogICAgNTMxOTE1IC0gdXNlIGZkbGlibSdzIHNpbiwgY29zIGFuZCB0YW4gaW4ganNtYXRoIChGRjkzLCBFU1I5MS4xKQogICAxNzU2MjgwIC0gZW5mb3JjZSBuYXZpZ2F0b3IucGRmVmlld2VyRW5hYmxlZCBhcyB0cnVlIGFuZCBwbHVnaW5zL21pbWVUeXBlcyBhcyBoYXJkLWNvZGVkIHZhbHVlcyAoRkYxMDAtMTE1KQogICAxNjkyNjA5IC0gcmVkdWNlIEpTIHRpbWluZyBwcmVjaXNpb24gdG8gMTYuNjdtcyAocHJldmlvdXNseSBGRjU1KyB3YXMgMTAwbXMpIChGRjEwMikKICAgMTQyMjIzNyAtIHJldHVybiAic3JnYiIgd2l0aCBjb2xvci1nYW11dCAoRkYxMTApCiAgIDE3OTQ2MjggLSByZXR1cm4gIm5vbmUiIHdpdGggaW52ZXJ0ZWQtY29sb3JzIChGRjExNCkKICAgMTc4Nzc5MCAtIG5vcm1hbGl6ZSBzeXN0ZW0gZm9udHMgKEZGMTI4KQogICAxODM1OTg3IC0gc3Bvb2YgdGltZXpvbmUgYXMgQXRsYW50aWMvUmV5a2phdmlrIChwcmV2aW91c2x5IEZGNTUrIHdhcyBVVEMpIChGRjEyOCkKICAgMTgzNDMwNyAtIGFsd2F5cyB1c2Ugc21vb3RoIHNjcm9sbGluZyAoRkYxMzIpCiAgIDE5MTgyMDIgLSBzcG9vZiBzY3JlZW4gb3JpZW50YXRpb24gYmFzZWQgb24gc3Bvb2ZlZCBzY3JlZW4gc2l6ZSBhbmQgcGxhdGZvcm0gKEZGMTMyKQogICAgICBwcmV2aW91c2x5IGl0IGFsd2F5cyByZXR1cm5lZCBsYW5kc2NhcGUtcHJpbWFyeSBhbmQgYW4gYW5nbGUgb2YgMCAoRkY1MCspCiAgIDEzOTA0NjUgLSBsb2FkIGFsbCBzdWJ0aXRsZXMgaW4gV2ViVlRUIChWaWRlbyBUZXh0IFRyYWNrcykgKEZGMTMzKQogICAxODczMzgyIC0gbWFrZSBzcG9vZmVkIGRldmljZVBpeGVsUmF0aW8gYW5kIENTUyBtZWRpYSBxdWVyaWVzIG1hdGNoIChGRjEzMykKICAgICAgcHJldmlvdXNseSBGRjQxKyBkZXZpY2VQaXhlbFJhdGlvIHdhcyBoYXJkY29kZWQgYXMgMSBhbmQgRkYxMjcrIGFzIDIKICAgICAgcHJldmlvdXNseSBGRjQxKyBDU1MgbWVkaWEgcXVlcmllcyB3ZXJlIHNwb29mZWQgYXMgem9vbSBsZXZlbCBhdCBhIGRldmljZVBpeGVsUmF0aW8gb2YgMQoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjQ1MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgcG9wcGVkICdpcyBjbG9ncyIpOwovKiA0NTAxOiBlbmFibGUgUkZQCiAqIFtOT1RFXSBwYm1vZGUgYXBwbGllcyBpZiB0cnVlIGFuZCB0aGUgb3JpZ2luYWwgcHJlZiBpcyBmYWxzZQogKiBbU0VUVVAtV0VCXSBSRlAgY2FuIGNhdXNlIHNvbWUgd2Vic2l0ZSBicmVha2FnZTogbWFpbmx5IGNhbnZhcywgdXNlIGEgY2FudmFzIHNpdGUgZXhjZXB0aW9uIHZpYSB0aGUgdXJsYmFyLgogKiBSRlAgYWxzbyBoYXMgYSBmZXcgc2lkZSBlZmZlY3RzOiBtYWlubHkgdGhhdCB0aW1lem9uZSBpcyBHTVQsIGFuZCB3ZWJzaXRlcyB3aWxsIHByZWZlciBsaWdodCB0aGVtZSAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5yZXNpc3RGaW5nZXJwcmludGluZyIsIHRydWUpOyAvLyBbRkY0MStdCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5yZXNpc3RGaW5nZXJwcmludGluZy5wYm1vZGUiLCB0cnVlKTsgLy8gW0ZGMTE0K10KLyogNDUwMjogc2V0IFJGUCBuZXcgd2luZG93IHNpemUgbWF4IHJvdW5kZWQgdmFsdWVzIFtGRjU1K10KICogW1NFVFVQLUNIUk9NRV0gc2l6ZXMgcm91bmQgZG93biBpbiBodW5kcmVkczogd2lkdGggdG8gMjAwcyBhbmQgaGVpZ2h0IHRvIDEwMHMsIHRvIGZpdCB5b3VyIHNjcmVlbgogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xMzMwODgyICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LndpbmRvdy5tYXhJbm5lcldpZHRoIiwgMTYwMCk7CnVzZXJfcHJlZigicHJpdmFjeS53aW5kb3cubWF4SW5uZXJIZWlnaHQiLCA5MDApOwovKiA0NTAzOiBkaXNhYmxlIG1vekFkZG9uTWFuYWdlciBXZWIgQVBJIFtGRjU3K10KICogW05PVEVdIFRvIGFsbG93IGV4dGVuc2lvbnMgdG8gd29yayBvbiBBTU8sIHlvdSBhbHNvIG5lZWQgMjY2MgogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9idWdsaXN0LmNnaT9idWdfaWQ9MTM4NDMzMCwxNDA2Nzk1LDE0MTU2NDQsMTQ1Mzk4OCAqKiovCnVzZXJfcHJlZigicHJpdmFjeS5yZXNpc3RGaW5nZXJwcmludGluZy5ibG9ja19tb3pBZGRvbk1hbmFnZXIiLCB0cnVlKTsKLyogNDUwNDogZW5hYmxlIGxldHRlcmJveGluZyBbRkY2NytdCiAqIER5bmFtaWNhbGx5IHJlc2l6ZXMgdGhlIGlubmVyIHdpbmRvdyBieSBhcHBseWluZyBtYXJnaW5zIGluIHN0ZXBwZWQgcmFuZ2VzIFsyXQogKiBJZiB5b3UgdXNlIHRoZSBkaW1lbnNpb24gcHJlZiwgdGhlbiBpdCB3aWxsIG9ubHkgYXBwbHkgdGhvc2UgcmVzb2x1dGlvbnMuCiAqIFRoZSBmb3JtYXQgaXMgIndpZHRoMXhoZWlnaHQxLCB3aWR0aDJ4aGVpZ2h0MiwgLi4uIiAoZS5nLiAiODAweDYwMCwgMTAwMHgxMDAwIikKICogW1NFVFVQLVdFQl0gVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBSRlAgKDQ1MDEpLiBJZiB5b3UncmUgbm90IHVzaW5nIFJGUCwgb3IgeW91IGFyZSBidXQKICogZGlzbGlrZSB0aGUgbWFyZ2lucywgdGhlbiBmbGlwIHRoaXMgcHJlZiwga2VlcGluZyBpbiBtaW5kIHRoYXQgaXQgaXMgZWZmZWN0aXZlbHkgZmluZ2VycHJpbnRhYmxlCiAqIFtXQVJOSU5HXSBETyBOT1QgVVNFOiB0aGUgZGltZW5zaW9uIHByZWYgaXMgb25seSBtZWFudCBmb3IgdGVzdGluZwogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xNDA3MzY2CiAqIFsyXSBodHRwczovL2hnLm1vemlsbGEub3JnL21vemlsbGEtY2VudHJhbC9yZXYvNzIxMWNiNGY1OGZmI2w1LjEzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnJlc2lzdEZpbmdlcnByaW50aW5nLmxldHRlcmJveGluZyIsIHRydWUpOyAvLyBbSElEREVOIFBSRUZdCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5yZXNpc3RGaW5nZXJwcmludGluZy5sZXR0ZXJib3hpbmcuZGltZW5zaW9ucyIsICIiKTsgLy8gW0hJRERFTiBQUkVGXQovKiA0NTA1OiBkaXNhYmxlIFJGUCBieSBkb21haW4gW0ZGOTErXQogKiBbTk9URV0gV29ya2luZyBleGFtcGxlczogImFya2VuZm94LmdpdGh1Yi5pbyIsICIqZ2l0aHViLmlvIgogKiBOb24td29ya2luZyBleGFtcGxlczogImh0dHBzOi8vYXJrZW5mb3guZ2l0aHViLmlvIiwgImdpdGh1Yi5pbyIsICIqYXJrZW5mb3guZ2l0aHViLmlvIiAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5yZXNpc3RGaW5nZXJwcmludGluZy5leGVtcHRlZERvbWFpbnMiLCAiKi5leGFtcGxlLmludmFsaWQiKTsKLyogNDUwNjogZGlzYWJsZSBSRlAgc3Bvb2YgZW5nbGlzaCBwcm9tcHQgW0ZGNTkrXQogKiAwPXByb21wdCwgMT1kaXNhYmxlZCwgMj1lbmFibGVkCiAqIFtOT1RFXSBXaGVuIGNoYW5naW5nIGZyb20gdmFsdWUgMiwgcHJlZmVycmVkIGxhbmd1YWdlcyAoJ2ludGwuYWNjZXB0X2xhbmd1YWdlcycpIGlzIG5vdCByZXNldC4KICogW1NFVFVQLVdFQl0gd2hlbiBlbmFibGVkLCBzZXRzICdlbi1VUywgZW4nIGZvciBkaXNwbGF5aW5nIHBhZ2VzIGFuZCAnZW4tVVMnIGFzIGxvY2FsZS4KICogW1NFVFRJTkddIEdlbmVyYWw+TGFuZ3VhZ2U+Q2hvb3NlIHlvdXIgcHJlZmVycmVkIGxhbmd1YWdlIGZvciBkaXNwbGF5aW5nIHBhZ2VzPkNob29zZT5SZXF1ZXN0IEVuZ2xpc2guLi4gKioqLwp1c2VyX3ByZWYoInByaXZhY3kuc3Bvb2ZfZW5nbGlzaCIsIDEpOwovKiA0NTEwOiBkaXNhYmxlIHVzaW5nIHN5c3RlbSBjb2xvcnMKICogW1NFVFRJTkddIEdlbmVyYWw+TGFuZ3VhZ2UgYW5kIEFwcGVhcmFuY2U+Rm9udHMgYW5kIENvbG9ycz5Db2xvcnM+VXNlIHN5c3RlbSBjb2xvcnMgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuZGlzcGxheS51c2Vfc3lzdGVtX2NvbG9ycyIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlIE5PTi1XSU5ET1dTXQovKiA0NTExOiBkaXNhYmxlIHVzaW5nIHN5c3RlbSBhY2NlbnQgY29sb3JzICoqKi8KdXNlcl9wcmVmKCJ3aWRnZXQubm9uLW5hdGl2ZS10aGVtZS51c2UtdGhlbWUtYWNjZW50IiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2UgV0lORE9XU10KLyogNDUxMjogZW5mb3JjZSBsaW5rcyB0YXJnZXRpbmcgbmV3IHdpbmRvd3MgdG8gb3BlbiBpbiBhIG5ldyB0YWIgaW5zdGVhZAogKiAxPW1vc3QgcmVjZW50IHdpbmRvdyBvciB0YWIsIDI9bmV3IHdpbmRvdywgMz1uZXcgdGFiCiAqIFN0b3BzIG1hbGljaW91cyB3aW5kb3cgc2l6ZXMgYW5kIHNvbWUgc2NyZWVuIHJlc29sdXRpb24gbGVha3MuCiAqIFlvdSBjYW4gc3RpbGwgcmlnaHQtY2xpY2sgYSBsaW5rIGFuZCBvcGVuIGluIGEgbmV3IHdpbmRvdwogKiBbU0VUVElOR10gR2VuZXJhbD5UYWJzPk9wZW4gbGlua3MgaW4gdGFicyBpbnN0ZWFkIG9mIG5ldyB3aW5kb3dzCiAqIFsxXSBodHRwczovL2dpdGxhYi50b3Jwcm9qZWN0Lm9yZy90cG8vYXBwbGljYXRpb25zL3Rvci1icm93c2VyLy0vaXNzdWVzLzk4ODEgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIubGluay5vcGVuX25ld3dpbmRvdyIsIDMpOyAvLyBbREVGQVVMVDogM10KLyogNDUxMzogc2V0IGFsbCBvcGVuIHdpbmRvdyBtZXRob2RzIHRvIGFiaWRlIGJ5ICJicm93c2VyLmxpbmsub3Blbl9uZXd3aW5kb3ciICg0NTEyKQogKiBbMV0gaHR0cHM6Ly9zZWFyY2hmb3gub3JnL21vemlsbGEtY2VudHJhbC9zb3VyY2UvZG9tL3Rlc3RzL2Jyb3dzZXIvYnJvd3Nlcl90ZXN0X25ld193aW5kb3dfZnJvbV9jb250ZW50LmpzICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmxpbmsub3Blbl9uZXd3aW5kb3cucmVzdHJpY3Rpb24iLCAwKTsKLyogNDUyMDogZGlzYWJsZSBXZWJHTCAoV2ViIEdyYXBoaWNzIExpYnJhcnkpICoqKi8KICAgLy8gdXNlcl9wcmVmKCJ3ZWJnbC5kaXNhYmxlZCIsIHRydWUpOwoKLyoqKiBbU0VDVElPTiA1MDAwXTogT1BUSU9OQUwgT1BTRUMKICAgRGlzayBhdm9pZGFuY2UsIGFwcGxpY2F0aW9uIGRhdGEgaXNvbGF0aW9uLCBleWViYWxscy4uLgoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjUwMDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgdGFrZW4gJ2lzIGxhc3QgYm93Iik7Ci8qIDUwMDE6IHN0YXJ0IEZpcmVmb3ggaW4gUEIgKFByaXZhdGUgQnJvd3NpbmcpIG1vZGUKICogW05PVEVdIEluIHRoaXMgbW9kZSBhbGwgd2luZG93cyBhcmUgInByaXZhdGUgd2luZG93cyIgYW5kIHRoZSBQQiBtb2RlIGljb24gaXMgbm90IGRpc3BsYXllZAogKiBbTk9URV0gVGhlIFAgaW4gUEIgbW9kZSBjYW4gYmUgbWlzbGVhZGluZzogaXQgbWVhbnMgbm8gInBlcnNpc3RlbnQiIGRpc2sgc3RhdGUgc3VjaCBhcyBoaXN0b3J5LAogKiBjYWNoZXMsIHNlYXJjaGVzLCBjb29raWVzLCBsb2NhbFN0b3JhZ2UsIEluZGV4ZWREQiBldGMgKHdoaWNoIHlvdSBjYW4gYWNoaWV2ZSBpbiBub3JtYWwgbW9kZSkuCiAqIEluIGZhY3QsIFBCIG1vZGUgbGltaXRzIG9yIHJlbW92ZXMgdGhlIGFiaWxpdHkgdG8gY29udHJvbCBzb21lIG9mIHRoZXNlLCBhbmQgeW91IG5lZWQgdG8gcXVpdAogKiBGaXJlZm94IHRvIGNsZWFyIHRoZW0uIFBCIGlzIGJlc3QgdXNlZCBhcyBhIG9uZSBvZmYgd2luZG93IChNZW51Pk5ldyBQcml2YXRlIFdpbmRvdykgdG8gcHJvdmlkZQogKiBhIHRlbXBvcmFyeSBzZWxmLWNvbnRhaW5lZCBuZXcgc2Vzc2lvbi4gQ2xvc2UgYWxsIHByaXZhdGUgd2luZG93cyB0byBjbGVhciB0aGUgUEIgc2Vzc2lvbi4KICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5IaXN0b3J5PkN1c3RvbSBTZXR0aW5ncz5BbHdheXMgdXNlIHByaXZhdGUgYnJvd3NpbmcgbW9kZQogKiBbMV0gaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL1ByaXZhdGVfQnJvd3NpbmcKICogWzJdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi9jb21tb24tbXl0aHMtYWJvdXQtcHJpdmF0ZS1icm93c2luZyAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5wcml2YXRlYnJvd3NpbmcuYXV0b3N0YXJ0IiwgdHJ1ZSk7Ci8qIDUwMDI6IGRpc2FibGUgbWVtb3J5IGNhY2hlCiAqIGNhcGFjaXR5OiAtMT1kZXRlcm1pbmUgZHluYW1pY2FsbHkgKGRlZmF1bHQpLCAwPW5vbmUsIG49bWVtb3J5IGNhcGFjaXR5IGluIGtpYmlieXRlcyAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5jYWNoZS5tZW1vcnkuZW5hYmxlIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuY2FjaGUubWVtb3J5LmNhcGFjaXR5IiwgMCk7Ci8qIDUwMDM6IGRpc2FibGUgc2F2aW5nIHBhc3N3b3JkcwogKiBbTk9URV0gVGhpcyBkb2VzIG5vdCBjbGVhciBhbnkgcGFzc3dvcmRzIGFscmVhZHkgc2F2ZWQKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5Mb2dpbnMgYW5kIFBhc3N3b3Jkcz5Bc2sgdG8gc2F2ZSBsb2dpbnMgYW5kIHBhc3N3b3JkcyBmb3Igd2Vic2l0ZXMgKioqLwogICAvLyB1c2VyX3ByZWYoInNpZ25vbi5yZW1lbWJlclNpZ25vbnMiLCBmYWxzZSk7Ci8qIDUwMDQ6IGRpc2FibGUgcGVybWlzc2lvbnMgbWFuYWdlciBmcm9tIHdyaXRpbmcgdG8gZGlzayBbRkY0MStdIFtSRVNUQVJUXQogKiBbTk9URV0gVGhpcyBtZWFucyBhbnkgcGVybWlzc2lvbiBjaGFuZ2VzIGFyZSBzZXNzaW9uIG9ubHkKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvOTY3ODEyICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwZXJtaXNzaW9ucy5tZW1vcnlfb25seSIsIHRydWUpOyAvLyBbSElEREVOIFBSRUZdCi8qIDUwMDU6IGRpc2FibGUgaW50ZXJtZWRpYXRlIGNlcnRpZmljYXRlIGNhY2hpbmcgW0ZGNDErXSBbUkVTVEFSVF0KICogW05PVEVdIFRoaXMgYWZmZWN0cyBsb2dpbi9jZXJ0L2tleSBkYnMuIFRoZSBlZmZlY3QgaXMgYWxsIGNyZWRlbnRpYWxzIGFyZSBzZXNzaW9uLW9ubHkuCiAqIFNhdmVkIGxvZ2lucyBhbmQgcGFzc3dvcmRzIGFyZSBub3QgYXZhaWxhYmxlLiBSZXNldCB0aGUgcHJlZiBhbmQgcmVzdGFydCB0byByZXR1cm4gdGhlbSAqKiovCiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkubm9jZXJ0ZGIiLCB0cnVlKTsKLyogNTAwNjogZGlzYWJsZSBmYXZpY29ucyBpbiBoaXN0b3J5IGFuZCBib29rbWFya3MKICogW05PVEVdIFN0b3JlZCBhcyBkYXRhIGJsb2JzIGluIGZhdmljb25zLnNxbGl0ZSwgdGhlc2UgZG9uJ3QgcmV2ZWFsIGFueXRoaW5nIHRoYXQgeW91cgogKiBhY3R1YWwgaGlzdG9yeSAoYW5kIGJvb2ttYXJrcykgYWxyZWFkeSBkby4gWW91ciBoaXN0b3J5IGlzIG1vcmUgZGV0YWlsZWQsIHNvCiAqIGNvbnRyb2wgdGhhdCBpbnN0ZWFkOyBlLmcuIGRpc2FibGUgaGlzdG9yeSwgY2xlYXIgaGlzdG9yeSBvbiBleGl0LCB1c2UgUEIgbW9kZQogKiBbTk9URV0gZmF2aWNvbnMuc3FsaXRlIGlzIHNhbml0aXplZCBvbiBGaXJlZm94IGNsb3NlICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLmNocm9tZS5zaXRlX2ljb25zIiwgZmFsc2UpOwovKiA1MDA3OiBleGNsdWRlICJVbmRvIENsb3NlZCBUYWJzIiBpbiBTZXNzaW9uIFJlc3RvcmUgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuc2Vzc2lvbnN0b3JlLm1heF90YWJzX3VuZG8iLCAwKTsKLyogNTAwODogZGlzYWJsZSByZXN1bWluZyBzZXNzaW9uIGZyb20gY3Jhc2gKICogW1RFU1RdIGFib3V0OmNyYXNocGFyZW50ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNlc3Npb25zdG9yZS5yZXN1bWVfZnJvbV9jcmFzaCIsIGZhbHNlKTsKLyogNTAwOTogZGlzYWJsZSAib3BlbiB3aXRoIiBpbiBkb3dubG9hZCBkaWFsb2cgW0ZGNTArXQogKiBBcHBsaWNhdGlvbiBkYXRhIGlzb2xhdGlvbiBbMV0KICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTI4MTk1OSAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5kb3dubG9hZC5mb3JiaWRfb3Blbl93aXRoIiwgdHJ1ZSk7Ci8qIDUwMTA6IGRpc2FibGUgbG9jYXRpb24gYmFyIHN1Z2dlc3Rpb24gdHlwZXMKICogW1NFVFRJTkddIFNlYXJjaD5BZGRyZXNzIEJhcj5XaGVuIHVzaW5nIHRoZSBhZGRyZXNzIGJhciwgc3VnZ2VzdCAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc3VnZ2VzdC5oaXN0b3J5IiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnN1Z2dlc3QuYm9va21hcmsiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc3VnZ2VzdC5vcGVucGFnZSIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zdWdnZXN0LnRvcHNpdGVzIiwgZmFsc2UpOyAvLyBbRkY3OCtdCi8qIDUwMTE6IGRpc2FibGUgbG9jYXRpb24gYmFyIGRyb3Bkb3duCiAqIFRoaXMgdmFsdWUgY29udHJvbHMgdGhlIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIHRvIGFwcGVhciBpbiB0aGUgbG9jYXRpb24gYmFyIGRyb3Bkb3duICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5tYXhSaWNoUmVzdWx0cyIsIDApOwovKiA1MDEyOiBkaXNhYmxlIGxvY2F0aW9uIGJhciBhdXRvZmlsbAogKiBbMV0gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL2FkZHJlc3MtYmFyLWF1dG9jb21wbGV0ZS1maXJlZm94I3dfdXJsLWF1dG9jb21wbGV0ZSAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuYXV0b0ZpbGwiLCBmYWxzZSk7Ci8qIDUwMTM6IGRpc2FibGUgYnJvd3NpbmcgYW5kIGRvd25sb2FkIGhpc3RvcnkKICogW05PVEVdIFdlIGFsc28gY2xlYXIgaGlzdG9yeSBhbmQgZG93bmxvYWRzIG9uIGV4aXQgKDI4MTErKQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5Pkhpc3Rvcnk+Q3VzdG9tIFNldHRpbmdzPlJlbWVtYmVyIGJyb3dzaW5nIGFuZCBkb3dubG9hZCBoaXN0b3J5ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwbGFjZXMuaGlzdG9yeS5lbmFibGVkIiwgZmFsc2UpOwovKiA1MDE0OiBkaXNhYmxlIFdpbmRvd3MganVtcGxpc3QgW1dJTkRPV1NdICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnRhc2tiYXIubGlzdHMuZW5hYmxlZCIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnRhc2tiYXIubGlzdHMuZnJlcXVlbnQuZW5hYmxlZCIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnRhc2tiYXIubGlzdHMucmVjZW50LmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci50YXNrYmFyLmxpc3RzLnRhc2tzLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDUwMTY6IGRpc2NvdXJhZ2UgZG93bmxvYWRpbmcgdG8gZGVza3RvcAogKiAwPWRlc2t0b3AsIDE9ZG93bmxvYWRzIChkZWZhdWx0KSwgMj1jdXN0b20KICogW1NFVFRJTkddIFRvIHNldCB5b3VyIGN1c3RvbSBkZWZhdWx0ICJkb3dubG9hZHMiOiBHZW5lcmFsPkRvd25sb2Fkcz5TYXZlIGZpbGVzIHRvICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLmRvd25sb2FkLmZvbGRlckxpc3QiLCAyKTsKLyogNTAxNzogZGlzYWJsZSBGb3JtIEF1dG9maWxsCiAqIElmIC5zdXBwb3J0ZWRDb3VudHJpZXMgaW5jbHVkZXMgeW91ciByZWdpb24gKGJyb3dzZXIuc2VhcmNoLnJlZ2lvbikgYW5kIC5zdXBwb3J0ZWQKICogaXMgImRldGVjdCIgKGRlZmF1bHQpLCB0aGVuIHRoZSBVSSB3aWxsIHNob3cuIFN0b3JlZCBkYXRhIGlzIG5vdCBzZWN1cmUsIHVzZXMgSlNPTgogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkZvcm1zIGFuZCBBdXRvZmlsbD5BdXRvZmlsbCBhZGRyZXNzZXMKICogWzFdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9GaXJlZm94L0ZlYXR1cmVzL0Zvcm1fQXV0b2ZpbGwgKioqLwogICAvLyB1c2VyX3ByZWYoImV4dGVuc2lvbnMuZm9ybWF1dG9maWxsLmFkZHJlc3Nlcy5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY1NStdCiAgIC8vIHVzZXJfcHJlZigiZXh0ZW5zaW9ucy5mb3JtYXV0b2ZpbGwuY3JlZGl0Q2FyZHMuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTYrXQovKiA1MDE4OiBsaW1pdCBldmVudHMgdGhhdCBjYW4gY2F1c2UgYSBwb3AtdXAgKioqLwogICAvLyB1c2VyX3ByZWYoImRvbS5wb3B1cF9hbGxvd2VkX2V2ZW50cyIsICJjbGljayBkYmxjbGljayBtb3VzZWRvd24gcG9pbnRlcmRvd24iKTsKLyogNTAxOTogZGlzYWJsZSBwYWdlIHRodW1ibmFpbCBjb2xsZWN0aW9uICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnBhZ2V0aHVtYm5haWxzLmNhcHR1cmluZ19kaXNhYmxlZCIsIHRydWUpOyAvLyBbSElEREVOIFBSRUZdCi8qIDUwMjA6IGRpc2FibGUgV2luZG93cyBuYXRpdmUgbm90aWZpY2F0aW9ucyBhbmQgdXNlIGFwcCBub3RpY2F0aW9ucyBpbnN0ZWFkIFtGRjExMStdIFtXSU5ET1dTXSAqKiovCiAgIC8vIHVzZXJfcHJlZigiYWxlcnRzLnVzZVN5c3RlbUJhY2tlbmQud2luZG93cy5ub3RpZmljYXRpb25zZXJ2ZXIuZW5hYmxlZCIsIGZhbHNlKTsKLyogNTAyMTogZGlzYWJsZSBsb2NhdGlvbiBiYXIgdXNpbmcgc2VhcmNoCiAqIERvbid0IGxlYWsgVVJMIHR5cG9zIHRvIGEgc2VhcmNoIGVuZ2luZSwgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIGluc3RlYWQKICogRXhhbXBsZXM6ICJzZWNyZXRwbGFjZSxjb20iLCAic2VjcmV0cGxhY2UvY29tIiwgInNlY3JldHBsYWNlIGNvbSIsICJzZWNyZXQgcGxhY2UuY29tIgogKiBbTk9URV0gVGhpcyBkb2VzIG5vdCBhZmZlY3QgZXhwbGljaXQgdXNlciBhY3Rpb24gc3VjaCBhcyB1c2luZyBzZWFyY2ggYnV0dG9ucyBpbiB0aGUKICogZHJvcGRvd24sIG9yIHVzaW5nIGtleXdvcmQgc2VhcmNoIHNob3J0Y3V0cyB5b3UgY29uZmlndXJlIGluIG9wdGlvbnMgKGUuZy4gImQiIGZvciBEdWNrRHVja0dvKSAqKiovCiAgIC8vIHVzZXJfcHJlZigia2V5d29yZC5lbmFibGVkIiwgZmFsc2UpOwoKLyoqKiBbU0VDVElPTiA1NTAwXTogT1BUSU9OQUwgSEFSREVOSU5HCiAgIE5vdCByZWNvbW1lbmRlZC4gT3ZlcnJpZGluZyB0aGVzZSBjYW4gY2F1c2UgYnJlYWthZ2UgYW5kIHBlcmZvcm1hbmNlIGlzc3VlcywKICAgdGhleSBhcmUgbW9zdGx5IGZpbmdlcnByaW50YWJsZSwgYW5kIHRoZSB0aHJlYXQgbW9kZWwgaXMgcHJhY3RpY2FsbHkgbm9uZXhpc3RlbnQKKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI1NTAwIHN5bnRheCBlcnJvcjogdGhpcyBpcyBhbiBleC1wYXJyb3QhIik7Ci8qIDU1MDE6IGRpc2FibGUgTWF0aE1MIChNYXRoZW1hdGljYWwgTWFya3VwIExhbmd1YWdlKSBbRkY1MStdCiAqIFsxXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9bWF0aG1sICoqKi8KICAgLy8gdXNlcl9wcmVmKCJtYXRobWwuZGlzYWJsZWQiLCB0cnVlKTsgLy8gMTE3MzE5OQovKiA1NTAyOiBkaXNhYmxlIGluLWNvbnRlbnQgU1ZHIChTY2FsYWJsZSBWZWN0b3IgR3JhcGhpY3MpIFtGRjUzK10KICogWzFdIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZWtleS5jZ2k/a2V5d29yZD1maXJlZm94K3N2ZyAqKiovCiAgIC8vIHVzZXJfcHJlZigic3ZnLmRpc2FibGVkIiwgdHJ1ZSk7IC8vIDEyMTY4OTMKLyogNTUwMzogZGlzYWJsZSBncmFwaGl0ZQogKiBbMV0gaHR0cHM6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3Zla2V5LmNnaT9rZXl3b3JkPWZpcmVmb3grZ3JhcGhpdGUKICogWzJdIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyYXBoaXRlXyhTSUwpICoqKi8KICAgLy8gdXNlcl9wcmVmKCJnZnguZm9udF9yZW5kZXJpbmcuZ3JhcGhpdGUuZW5hYmxlZCIsIGZhbHNlKTsKLyogNTUwNDogZGlzYWJsZSBhc20uanMgW0ZGMjIrXQogKiBbMV0gaHR0cDovL2FzbWpzLm9yZy8KICogWzJdIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZWtleS5jZ2k/a2V5d29yZD1hc20uanMKICogWzNdIGh0dHBzOi8vcmgwZGV2LmdpdGh1Yi5pby9ibG9nLzIwMTcvdGhlLXJldHVybi1vZi10aGUtaml0LyAqKiovCiAgIC8vIHVzZXJfcHJlZigiamF2YXNjcmlwdC5vcHRpb25zLmFzbWpzIiwgZmFsc2UpOwovKiA1NTA1OiBkaXNhYmxlIElvbiBhbmQgYmFzZWxpbmUgSklUIHRvIGhhcmRlbiBhZ2FpbnN0IEpTIGV4cGxvaXRzIFtSRVNUQVJUXQogKiBbTk9URV0gV2hlbiBib3RoIElvbiBhbmQgSklUIGFyZSBkaXNhYmxlZCwgYW5kIHRydXN0ZWRwcmluY2lwYWxzCiAqIGlzIGVuYWJsZWQsIHRoZW4gSW9uIGNhbiBzdGlsbCBiZSB1c2VkIGJ5IGV4dGVuc2lvbnMgKDE1OTkyMjYpCiAqIFsxXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9ZmlyZWZveCtqaXQKICogWzJdIGh0dHBzOi8vbWljcm9zb2Z0ZWRnZS5naXRodWIuaW8vZWRnZXZyL3Bvc3RzL1N1cGVyLUR1cGVyLVNlY3VyZS1Nb2RlLyAqKiovCiAgIC8vIHVzZXJfcHJlZigiamF2YXNjcmlwdC5vcHRpb25zLmlvbiIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJqYXZhc2NyaXB0Lm9wdGlvbnMuYmFzZWxpbmVqaXQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiamF2YXNjcmlwdC5vcHRpb25zLmppdF90cnVzdGVkcHJpbmNpcGFscyIsIHRydWUpOyAvLyBbRkY3NStdIFtISURERU4gUFJFRl0KLyogNTUwNjogZGlzYWJsZSBXZWJBc3NlbWJseSBbRkY1MitdCiAqIFZ1bG5lcmFiaWxpdGllcyBbMV0gaGF2ZSBpbmNyZWFzaW5nbHkgYmVlbiBmb3VuZCwgaW5jbHVkaW5nIHRob3NlIGtub3duIGFuZCBmaXhlZAogKiBpbiBuYXRpdmUgcHJvZ3JhbXMgeWVhcnMgYWdvIFsyXS4gV0FTTSBoYXMgcG93ZXJmdWwgbG93LWxldmVsIGFjY2VzcywgbWFraW5nCiAqIGNlcnRhaW4gYXR0YWNrcyAoYnJ1dGUtZm9yY2UpIGFuZCB2dWxuZXJhYmlsaXRpZXMgbW9yZSBwb3NzaWJsZQogKiBbU1RBVFNdIH4wLjIlIG9mIHdlYnNpdGVzLCBhYm91dCBoYWxmIG9mIHdoaWNoIGFyZSBmb3IgY3J5cHRvbWluaW5nIC8gbWFsdmVydGlzaW5nIFsyXVszXQogKiBbMV0gaHR0cHM6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3Zla2V5LmNnaT9rZXl3b3JkPXdhc20KICogWzJdIGh0dHBzOi8vc3BlY3RydW0uaWVlZS5vcmcvdGVjaC10YWxrL3RlbGVjb20vc2VjdXJpdHkvbW9yZS13b3JyaWVzLW92ZXItdGhlLXNlY3VyaXR5LW9mLXdlYi1hc3NlbWJseQogKiBbM10gaHR0cHM6Ly93d3cuemRuZXQuY29tL2FydGljbGUvaGFsZi1vZi10aGUtd2Vic2l0ZXMtdXNpbmctd2ViYXNzZW1ibHktdXNlLWl0LWZvci1tYWxpY2lvdXMtcHVycG9zZXMgKioqLwogICAvLyB1c2VyX3ByZWYoImphdmFzY3JpcHQub3B0aW9ucy53YXNtIiwgZmFsc2UpOwovKiA1NTA3OiBkaXNhYmxlIHJlbmRlcmluZyBvZiBTVkcgT3BlblR5cGUgZm9udHMgKioqLwogICAvLyB1c2VyX3ByZWYoImdmeC5mb250X3JlbmRlcmluZy5vcGVudHlwZV9zdmcuZW5hYmxlZCIsIGZhbHNlKTsKLyogNTUwODogZGlzYWJsZSBhbGwgRFJNIGNvbnRlbnQgKEVNRTogRW5jcnlwdGlvbiBNZWRpYSBFeHRlbnNpb24pCiAqIE9wdGlvbmFsbHkgaGlkZSB0aGUgVUkgc2V0dGluZyB3aGljaCBhbHNvIGRpc2FibGVzIHRoZSBEUk0gcHJvbXB0CiAqIFtTRVRUSU5HXSBHZW5lcmFsPkRSTSBDb250ZW50PlBsYXkgRFJNLWNvbnRyb2xsZWQgY29udGVudAogKiBbVEVTVF0gaHR0cHM6Ly9iaXRtb3Zpbi5jb20vZGVtb3MvZHJtCiAqIFsxXSBodHRwczovL3d3dy5lZmYub3JnL2RlZXBsaW5rcy8yMDE3LzEwL2RybXMtZGVhZC1jYW5hcnktaG93LXdlLWp1c3QtbG9zdC13ZWItd2hhdC13ZS1sZWFybmVkLWl0LWFuZC13aGF0LXdlLW5lZWQtZG8tbmV4dCAqKiovCiAgIC8vIHVzZXJfcHJlZigibWVkaWEuZW1lLmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5lbWUudWkuZW5hYmxlZCIsIGZhbHNlKTsKLyogNTUwOTogZGlzYWJsZSBJUHY2IGlmIHVzaW5nIGEgVlBOCiAqIFRoaXMgaXMgYW4gYXBwbGljYXRpb24gbGV2ZWwgZmFsbGJhY2suIERpc2FibGluZyBJUHY2IGlzIGJlc3QgZG9uZSBhdCBhbiBPUy9uZXR3b3JrCiAqIGxldmVsLCBhbmQvb3IgY29uZmlndXJlZCBwcm9wZXJseSBpbiBzeXN0ZW0gd2lkZSBWUE4gc2V0dXBzLgogKiBbTk9URV0gUEhQIGRlZmF1bHRzIHRvIElQdjYgd2l0aCAibG9jYWxob3N0Ii4gVXNlICJwaHAgLVMgMTI3LjAuMC4xOlBPUlQiCiAqIFtTRVRVUC1XRUJdIFBSX0NPTk5FQ1RfUkVTRVRfRVJST1IKICogW1RFU1RdIGh0dHBzOi8vaXBsZWFrLm9yZy8KICogWzFdIGh0dHBzOi8vd3d3LmludGVybmV0c29jaWV0eS5vcmcvdGFnL2lwdjYtc2VjdXJpdHkvIChNeXRocyAyLDQsNSw2KSAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5kbnMuZGlzYWJsZUlQdjYiLCB0cnVlKTsKLyogNTUxMDogY29udHJvbCB3aGVuIHRvIHNlbmQgYSBjcm9zcy1vcmlnaW4gcmVmZXJlcgogKiAwPWFsd2F5cyAoZGVmYXVsdCksIDE9b25seSBpZiBiYXNlIGRvbWFpbnMgbWF0Y2gsIDI9b25seSBpZiBob3N0cyBtYXRjaAogKiBbTk9URV0gV2lsbCBjYXVzZSBicmVha2FnZTogb2xkZXIgbW9kZW1zL3JvdXRlcnMgYW5kIHNvbWUgc2l0ZXMgZS5nIGJhbmtzLCB2aW1lbywgaWNsb3VkLCBpbnN0YWdyYW0gKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5yZWZlcmVyLlhPcmlnaW5Qb2xpY3kiLCAyKTsKLyogNTUxMTogc2V0IERvSCBib290c3RyYXAgYWRkcmVzcyBbRkY4OStdCiAqIEZpcmVmb3ggdXNlcyB0aGUgc3lzdGVtIEROUyB0byBpbml0aWFsbHkgcmVzb2x2ZSB0aGUgSVAgYWRkcmVzcyBvZiB5b3VyIERvSCBzZXJ2ZXIuCiAqIFdoZW4gc2V0IHRvIGEgdmFsaWQsIHdvcmtpbmcgdmFsdWUgdGhhdCBtYXRjaGVzIHlvdXIgIm5ldHdvcmsudHJyLnVyaSIgKDA3MTIpIEZpcmVmb3gKICogd29uJ3QgdXNlIHRoZSBzeXN0ZW0gRE5TLiBJZiB0aGUgSVAgZG9lc24ndCBtYXRjaCB0aGVuIERvSCB3b24ndCB3b3JrICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLnRyci5ib290c3RyYXBBZGRyIiwgIjEwLjAuMC4xIik7IC8vIFtISURERU4gUFJFRl0KCi8qKiogW1NFQ1RJT04gNjAwMF06IERPTidUIFRPVUNIICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiNjAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyAnaXN0b3J5ISIpOwovKiA2MDAxOiBlbmZvcmNlIEZpcmVmb3ggYmxvY2tsaXN0CiAqIFtXSFldIEl0IGluY2x1ZGVzIHVwZGF0ZXMgZm9yICJyZXZva2VkIGNlcnRpZmljYXRlcyIKICogWzFdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9zZWN1cml0eS8yMDE1LzAzLzAzL3Jldm9raW5nLWludGVybWVkaWF0ZS1jZXJ0aWZpY2F0ZXMtaW50cm9kdWNpbmctb25lY3JsLyAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5ibG9ja2xpc3QuZW5hYmxlZCIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KLyogNjAwMjogZW5mb3JjZSBubyByZWZlcmVyIHNwb29maW5nCiAqIFtXSFldIFNwb29maW5nIGNhbiBhZmZlY3QgQ1NSRiAoQ3Jvc3MtU2l0ZSBSZXF1ZXN0IEZvcmdlcnkpIHByb3RlY3Rpb25zICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAucmVmZXJlci5zcG9vZlNvdXJjZSIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiA2MDA0OiBlbmZvcmNlIGEgc2VjdXJpdHkgZGVsYXkgb24gc29tZSBjb25maXJtYXRpb24gZGlhbG9ncyBzdWNoIGFzIGluc3RhbGwsIG9wZW4vc2F2ZQogKiBbMV0gaHR0cHM6Ly93d3cuc3F1YXJlZnJlZS5jb20vMjAwNC8wNy8wMS9yYWNlLWNvbmRpdGlvbnMtaW4tc2VjdXJpdHktZGlhbG9ncy8gKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LmRpYWxvZ19lbmFibGVfZGVsYXkiLCAxMDAwKTsgLy8gW0RFRkFVTFQ6IDEwMDBdCi8qIDYwMDg6IGVuZm9yY2Ugbm8gRmlyc3QgUGFydHkgSXNvbGF0aW9uIFtGRjUxK10KICogW1dBUk5JTkddIFJlcGxhY2VkIHdpdGggbmV0d29yayBwYXJ0aXRpb25pbmcgKEZGODUrKSBhbmQgVENQICgyNzAxKSwgYW5kIGVuYWJsaW5nIEZQSQogKiBkaXNhYmxlcyB0aG9zZS4gRlBJIGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGV4Y2VwdCBhdCBUb3IgUHJvamVjdCBmb3IgVG9yIEJyb3dzZXIncyBjb25maWcgKioqLwp1c2VyX3ByZWYoInByaXZhY3kuZmlyc3RwYXJ0eS5pc29sYXRlIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2VdCi8qIDYwMDk6IGVuZm9yY2UgU21hcnRCbG9jayBzaGltcyAoYWJvdXQ6Y29tcGF0KSBbRkY4MStdCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAyMS8wMy8yMy9pbnRyb2R1Y2luZy1zbWFydGJsb2NrLyAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy53ZWJjb21wYXQuZW5hYmxlX3NoaW1zIiwgdHJ1ZSk7IC8vIFtISURERU4gUFJFRl0gW0RFRkFVTFQ6IHRydWVdCi8qIDYwMTA6IGVuZm9yY2Ugbm8gVExTIDEuMC8xLjEgZG93bmdyYWRlcwogKiBbVEVTVF0gaHR0cHM6Ly90bHMtdjEtMS5iYWRzc2wuY29tOjEwMTAvICoqKi8KdXNlcl9wcmVmKCJzZWN1cml0eS50bHMudmVyc2lvbi5lbmFibGUtZGVwcmVjYXRlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiA2MDExOiBlbmZvcmNlIGRpc2FibGluZyBvZiBXZWIgQ29tcGF0aWJpbGl0eSBSZXBvcnRlciBbRkY1NitdCiAqIFdlYiBDb21wYXRpYmlsaXR5IFJlcG9ydGVyIGFkZHMgYSAiUmVwb3J0IFNpdGUgSXNzdWUiIGJ1dHRvbiB0byBzZW5kIGRhdGEgdG8gTW96aWxsYQogKiBbV0hZXSBUbyBwcmV2ZW50IHdhc3RpbmcgTW96aWxsYSdzIHRpbWUgd2l0aCBhIGN1c3RvbSBzZXR1cCAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy53ZWJjb21wYXQtcmVwb3J0ZXIuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiA2MDEyOiBlbmZvcmNlIFF1YXJhbnRpbmVkIERvbWFpbnMgW0ZGMTE1K10KICogW1dIWV0gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL3F1YXJhbnRpbmVkLWRvbWFpbnMgKi8KdXNlcl9wcmVmKCJleHRlbnNpb25zLnF1YXJhbnRpbmVkRG9tYWlucy5lbmFibGVkIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQovKiA2MDUwOiBwcmVmc0NsZWFuZXI6IHJlc2V0IHByZXZpb3VzbHkgYWN0aXZlIGl0ZW1zIHJlbW92ZWQgZnJvbSBhcmtlbmZveCBGRjEyOCsgKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duLmNhY2hlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duLmNvb2tpZXMiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd24uZG93bmxvYWRzIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duLmZvcm1kYXRhIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duLmhpc3RvcnkiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd24ub2ZmbGluZUFwcHMiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd24uc2Vzc2lvbnMiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jcGQuY2FjaGUiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jcGQuY29va2llcyIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmNwZC5mb3JtZGF0YSIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmNwZC5oaXN0b3J5IiwgIiIpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY3BkLm9mZmxpbmVBcHBzIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY3BkLnNlc3Npb25zIiwgIiIpOwoKLyoqKiBbU0VDVElPTiA3MDAwXTogRE9OJ1QgQk9USEVSICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiNzAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBwdXNoaW5nIHVwIGRhaXNpZXMhIik7Ci8qIDcwMDE6IGRpc2FibGUgQVBJcwogKiBMb2NhdGlvbi1Bd2FyZSBCcm93c2luZywgRnVsbCBTY3JlZW4KICogW1dIWV0gVGhlIEFQSSBzdGF0ZSBpcyBlYXNpbHkgZmluZ2VycHJpbnRhYmxlLgogKiBHZW8gaXMgYmVoaW5kIGEgcHJvbXB0ICg3MDAyKS4gRnVsbCBzY3JlZW4gcmVxdWlyZXMgdXNlciBpbnRlcmFjdGlvbiAqKiovCiAgIC8vIHVzZXJfcHJlZigiZ2VvLmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiZnVsbC1zY3JlZW4tYXBpLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDcwMDI6IHNldCBkZWZhdWx0IHBlcm1pc3Npb25zCiAqIExvY2F0aW9uLCBDYW1lcmEsIE1pY3JvcGhvbmUsIE5vdGlmaWNhdGlvbnMgW0ZGNTgrXSBWaXJ0dWFsIFJlYWxpdHkgW0ZGNzMrXQogKiAwPWFsd2F5cyBhc2sgKGRlZmF1bHQpLCAxPWFsbG93LCAyPWJsb2NrCiAqIFtXSFldIFRoZXNlIGFyZSBmaW5nZXJwcmludGFibGUgdmlhIFBlcm1pc3Npb25zIEFQSSwgZXhjZXB0IFZSLiBKdXN0IGFkZCBzaXRlCiAqIGV4Y2VwdGlvbnMgYXMgYWxsb3cvYmxvY2sgZm9yIGZyZXF1ZW50bHkgdmlzaXRlZC9hbm5veWluZyBzaXRlczogaS5lLiBub3QgZ2xvYmFsCiAqIFtTRVRUSU5HXSB0byBhZGQgc2l0ZSBleGNlcHRpb25zOiBDdHJsK0k+UGVybWlzc2lvbnM+CiAqIFtTRVRUSU5HXSB0byBtYW5hZ2Ugc2l0ZSBleGNlcHRpb25zOiBPcHRpb25zPlByaXZhY3kgJiBTZWN1cml0eT5QZXJtaXNzaW9ucz5TZXR0aW5ncyAqKiovCiAgIC8vIHVzZXJfcHJlZigicGVybWlzc2lvbnMuZGVmYXVsdC5nZW8iLCAwKTsKICAgLy8gdXNlcl9wcmVmKCJwZXJtaXNzaW9ucy5kZWZhdWx0LmNhbWVyYSIsIDApOwogICAvLyB1c2VyX3ByZWYoInBlcm1pc3Npb25zLmRlZmF1bHQubWljcm9waG9uZSIsIDApOwogICAvLyB1c2VyX3ByZWYoInBlcm1pc3Npb25zLmRlZmF1bHQuZGVza3RvcC1ub3RpZmljYXRpb24iLCAwKTsKICAgLy8gdXNlcl9wcmVmKCJwZXJtaXNzaW9ucy5kZWZhdWx0LnhyIiwgMCk7IC8vIFZpcnR1YWwgUmVhbGl0eQovKiA3MDAzOiBkaXNhYmxlIG5vbi1tb2Rlcm4gY2lwaGVyIHN1aXRlcyBbMV0KICogW1dIWV0gUGFzc2l2ZSBmaW5nZXJwcmludGluZy4gTWluaW1hbC9ub24tZXhpc3RlbnQgdGhyZWF0IG9mIGRvd25ncmFkZSBhdHRhY2tzCiAqIFsxXSBodHRwczovL2Jyb3dzZXJsZWFrcy5jb20vc3NsICoqKi8KICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5zc2wzLmVjZGhlX2VjZHNhX2Flc18xMjhfc2hhIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5LnNzbDMuZWNkaGVfZWNkc2FfYWVzXzI1Nl9zaGEiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkuc3NsMy5lY2RoZV9yc2FfYWVzXzEyOF9zaGEiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkuc3NsMy5lY2RoZV9yc2FfYWVzXzI1Nl9zaGEiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkuc3NsMy5yc2FfYWVzXzEyOF9nY21fc2hhMjU2IiwgZmFsc2UpOyAvLyBubyBQRlMKICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5zc2wzLnJzYV9hZXNfMjU2X2djbV9zaGEzODQiLCBmYWxzZSk7IC8vIG5vIFBGUwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5LnNzbDMucnNhX2Flc18xMjhfc2hhIiwgZmFsc2UpOyAvLyBubyBQRlMKICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5zc2wzLnJzYV9hZXNfMjU2X3NoYSIsIGZhbHNlKTsgLy8gbm8gUEZTCi8qIDcwMDQ6IGNvbnRyb2wgVExTIHZlcnNpb25zCiAqIFtXSFldIFBhc3NpdmUgZmluZ2VycHJpbnRpbmcgYW5kIHNlY3VyaXR5ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS50bHMudmVyc2lvbi5taW4iLCAzKTsgLy8gW0RFRkFVTFQ6IDNdCiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkudGxzLnZlcnNpb24ubWF4IiwgNCk7Ci8qIDcwMDU6IGRpc2FibGUgU1NMIHNlc3Npb24gSURzIFtGRjM2K10KICogW1dIWV0gUGFzc2l2ZSBmaW5nZXJwcmludGluZyBhbmQgcGVyZiBjb3N0cy4gVGhlc2UgYXJlIHNlc3Npb24tb25seQogKiBhbmQgaXNvbGF0ZWQgd2l0aCBuZXR3b3JrIHBhcnRpdGlvbmluZyAoRkY4NSspIGFuZC9vciBjb250YWluZXJzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5zc2wuZGlzYWJsZV9zZXNzaW9uX2lkZW50aWZpZXJzIiwgdHJ1ZSk7Ci8qIDcwMDc6IHJlZmVyZXJzCiAqIFtXSFldIE9ubHkgY3Jvc3Mtb3JpZ2luIHJlZmVyZXJzICgxNjAyLCA1NTEwKSBtYXR0ZXIgKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5zZW5kUmVmZXJlckhlYWRlciIsIDIpOwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5yZWZlcmVyLnRyaW1taW5nUG9saWN5IiwgMCk7Ci8qIDcwMDg6IHNldCB0aGUgZGVmYXVsdCBSZWZlcnJlciBQb2xpY3kgW0ZGNTkrXQogKiAwPW5vLXJlZmVyZXIsIDE9c2FtZS1vcmlnaW4sIDI9c3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiwgMz1uby1yZWZlcnJlci13aGVuLWRvd25ncmFkZQogKiBbV0hZXSBEZWZhdWx0cyBhcmUgZmluZS4gVGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIHNpdGUtY29udHJvbGxlZCBSZWZlcnJlciBQb2xpY3kgKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5yZWZlcmVyLmRlZmF1bHRQb2xpY3kiLCAyKTsgLy8gW0RFRkFVTFQ6IDJdCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5odHRwLnJlZmVyZXIuZGVmYXVsdFBvbGljeS5wYm1vZGUiLCAyKTsgLy8gW0RFRkFVTFQ6IDJdCi8qIDcwMTA6IGRpc2FibGUgSFRUUCBBbHRlcm5hdGl2ZSBTZXJ2aWNlcyBbRkYzNytdCiAqIFtXSFldIEFscmVhZHkgaXNvbGF0ZWQgd2l0aCBuZXR3b3JrIHBhcnRpdGlvbmluZyAoRkY4NSspICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAuYWx0c3ZjLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDcwMTE6IGRpc2FibGUgd2Vic2l0ZSBjb250cm9sIG92ZXIgYnJvd3NlciByaWdodC1jbGljayBjb250ZXh0IG1lbnUKICogW1dIWV0gSnVzdCB1c2UgU2hpZnQtUmlnaHQtQ2xpY2sgKioqLwogICAvLyB1c2VyX3ByZWYoImRvbS5ldmVudC5jb250ZXh0bWVudS5lbmFibGVkIiwgZmFsc2UpOwovKiA3MDEyOiBkaXNhYmxlIGljb24gZm9udHMgKGdseXBocykgYW5kIGxvY2FsIGZhbGxiYWNrIHJlbmRlcmluZwogKiBbV0hZXSBCcmVha2FnZSwgZm9udCBmYWxsYmFjayBpcyBlcXVpdmFsZW5jeSwgYWxzbyBSRlAKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvNzg5Nzg4CiAqIFsyXSBodHRwczovL2dpdGxhYi50b3Jwcm9qZWN0Lm9yZy9sZWdhY3kvdHJhYy8tL2lzc3Vlcy84NDU1ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJnZnguZG93bmxvYWRhYmxlX2ZvbnRzLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjQxK10KICAgLy8gdXNlcl9wcmVmKCJnZnguZG93bmxvYWRhYmxlX2ZvbnRzLmZhbGxiYWNrX2RlbGF5IiwgLTEpOwovKiA3MDEzOiBkaXNhYmxlIENsaXBib2FyZCBBUEkKICogW1dIWV0gRmluZ2VycHJpbnRhYmxlLiBCcmVha2FnZS4gQ3V0L2NvcHkvcGFzdGUgcmVxdWlyZSB1c2VyCiAqIGludGVyYWN0aW9uLCBhbmQgcGFzdGUgaXMgbGltaXRlZCB0byBmb2N1c2VkIGVkaXRhYmxlIGZpZWxkcyAqKiovCiAgIC8vIHVzZXJfcHJlZigiZG9tLmV2ZW50LmNsaXBib2FyZGV2ZW50cy5lbmFibGVkIiwgZmFsc2UpOwovKiA3MDE0OiBkaXNhYmxlIFN5c3RlbSBBZGQtb24gdXBkYXRlcwogKiBbV0hZXSBJdCBjYW4gY29tcHJvbWlzZSBzZWN1cml0eS4gU3lzdGVtIGFkZG9ucyBzaGlwIHdpdGggcHJlZnMsIHVzZSB0aG9zZSAqKiovCiAgIC8vIHVzZXJfcHJlZigiZXh0ZW5zaW9ucy5zeXN0ZW1BZGRvbi51cGRhdGUuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNjIrXQogICAvLyB1c2VyX3ByZWYoImV4dGVuc2lvbnMuc3lzdGVtQWRkb24udXBkYXRlLnVybCIsICIiKTsgLy8gW0ZGNDQrXQovKiA3MDE1OiBlbmFibGUgdGhlIEROVCAoRG8gTm90IFRyYWNrKSBIVFRQIGhlYWRlcgogKiBbV0hZXSBETlQgaXMgZW5mb3JjZWQgd2l0aCBUcmFja2luZyBQcm90ZWN0aW9uIHdoaWNoIGlzIHVzZWQgaW4gRVRQIFN0cmljdCAoMjcwMSkgKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuZG9ub3R0cmFja2hlYWRlci5lbmFibGVkIiwgdHJ1ZSk7Ci8qIDcwMTY6IGN1c3RvbWl6ZSBFVFAgc2V0dGluZ3MKICogW05PVEVdIEZQUCAoZmluZ2VycHJpbnRpbmdQcm90ZWN0aW9uKSBpcyBpZ25vcmVkIHdoZW4gUkZQICg0NTAxKSBpcyBlbmFibGVkCiAqIFtXSFldIEFya2VuZm94IG9ubHkgc3VwcG9ydHMgc3RyaWN0ICgyNzAxKSB3aGljaCBzZXRzIHRoZXNlIGF0IHJ1bnRpbWUgKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuY29va2llLmNvb2tpZUJlaGF2aW9yIiwgNSk7IC8vIFtERUZBVUxUOiA1XQogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuY29va2llLmNvb2tpZUJlaGF2aW9yLm9wdEluUGFydGl0aW9uaW5nIiwgdHJ1ZSk7IC8vIFtFVFAgRkYxMzIrXQogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5yZWZlcmVyLmRpc2FsbG93Q3Jvc3NTaXRlUmVsYXhpbmdEZWZhdWx0IiwgdHJ1ZSk7CiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5odHRwLnJlZmVyZXIuZGlzYWxsb3dDcm9zc1NpdGVSZWxheGluZ0RlZmF1bHQudG9wX25hdmlnYXRpb24iLCB0cnVlKTsgLy8gW0ZGMTAwK10KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmJvdW5jZVRyYWNraW5nUHJvdGVjdGlvbi5tb2RlIiwgMSk7IC8vIFtGRjEzMStdIFtFVFAgRkYxMzMrXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuZmluZ2VycHJpbnRpbmdQcm90ZWN0aW9uIiwgdHJ1ZSk7IC8vIFtGRjExNCtdIFtFVFAgRkYxMTkrXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucGFydGl0aW9uLm5ldHdvcmtfc3RhdGUub2NzcF9jYWNoZSIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnF1ZXJ5X3N0cmlwcGluZy5lbmFibGVkIiwgdHJ1ZSk7IC8vIFtGRjEwMStdCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS50cmFja2luZ3Byb3RlY3Rpb24uZW5hYmxlZCIsIHRydWUpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kudHJhY2tpbmdwcm90ZWN0aW9uLnNvY2lhbHRyYWNraW5nLmVuYWJsZWQiLCB0cnVlKTsKICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnRyYWNraW5ncHJvdGVjdGlvbi5jcnlwdG9taW5pbmcuZW5hYmxlZCIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnRyYWNraW5ncHJvdGVjdGlvbi5maW5nZXJwcmludGluZy5lbmFibGVkIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQovKiA3MDE3OiBkaXNhYmxlIHNlcnZpY2Ugd29ya2VycwogKiBbV0hZXSBBbHJlYWR5IGlzb2xhdGVkIHdpdGggVENQICgyNzAxKSBiZWhpbmQgYSBwcmVmICgyNzEwKSAqKiovCiAgIC8vIHVzZXJfcHJlZigiZG9tLnNlcnZpY2VXb3JrZXJzLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDcwMTg6IGRpc2FibGUgV2ViIE5vdGlmaWNhdGlvbnMgW0ZGMjIrXQogKiBbV0hZXSBXZWIgTm90aWZpY2F0aW9ucyBhcmUgYmVoaW5kIGEgcHJvbXB0ICg3MDAyKQogKiBbMV0gaHR0cHM6Ly9ibG9nLm1vemlsbGEub3JnL2VuL3Byb2R1Y3RzL2ZpcmVmb3gvYmxvY2stbm90aWZpY2F0aW9uLXJlcXVlc3RzLyAqKiovCiAgIC8vIHVzZXJfcHJlZigiZG9tLndlYm5vdGlmaWNhdGlvbnMuZW5hYmxlZCIsIGZhbHNlKTsKLyogNzAxOTogZGlzYWJsZSBQdXNoIE5vdGlmaWNhdGlvbnMgW0ZGNDQrXQogKiBbV0hZXSBXZWJzaXRlICJwdXNoIiByZXF1aXJlcyBzdWJzY3JpcHRpb24sIGFuZCB0aGUgQVBJIGlzIHJlcXVpcmVkIGZvciBDUkxpdGUgKDEyMjQpCiAqIFtOT1RFXSBUbyByZW1vdmUgYWxsIHN1YnNjcmlwdGlvbnMsIHJlc2V0ICJkb20ucHVzaC51c2VyQWdlbnRJRCIKICogWzFdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi9wdXNoLW5vdGlmaWNhdGlvbnMtZmlyZWZveCAqKiovCiAgIC8vIHVzZXJfcHJlZigiZG9tLnB1c2guZW5hYmxlZCIsIGZhbHNlKTsKLyogNzAyMDogZGlzYWJsZSBXZWJSVEMgKFdlYiBSZWFsLVRpbWUgQ29tbXVuaWNhdGlvbikKICogW1dIWV0gRmlyZWZveCBkZXNrdG9wIHVzZXMgbUROUyBob3N0bmFtZSBvYmZ1c2NhdGlvbiBhbmQgdGhlIHByaXZhdGUgSVAgaXMgbmV2ZXIgZXhwb3NlZCB1bnRpbAogKiByZXF1aXJlZCBpbiBUUlVTVEVEIHNjZW5hcmlvczsgaS5lLiBhZnRlciB5b3UgZ3JhbnQgZGV2aWNlIChtaWNyb3Bob25lIG9yIGNhbWVyYSkgYWNjZXNzCiAqIFtURVNUXSBodHRwczovL2Jyb3dzZXJsZWFrcy5jb20vd2VicnRjCiAqIFsxXSBodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2cvZGlzY3Vzcy13ZWJydGMvYy82c3RRWGk3MkJFVS9tLzJGd1pkMjRVQVFBSgogKiBbMl0gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLW1tdXNpYy1tZG5zLWljZS1jYW5kaWRhdGVzI3NlY3Rpb24tMy4xLjEgKioqLwogICAvLyB1c2VyX3ByZWYoIm1lZGlhLnBlZXJjb25uZWN0aW9uLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDcwMjE6IGVuYWJsZSBHUEMgKEdsb2JhbCBQcml2YWN5IENvbnRyb2wpIGluIG5vbi1QQiB3aW5kb3dzCiAqIFtXSFldIFBhc3NpdmUgYW5kIGFjdGl2ZSBmaW5nZXJwcmludGluZy4gTW9zdGx5IHJlZHVuZGFudCB3aXRoIFRyYWNraW5nIFByb3RlY3Rpb24KICogaW4gRVRQIFN0cmljdCAoMjcwMSkgYW5kIHNhbml0aXppbmcgb24gY2xvc2UgKDI4MDBzKSAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5nbG9iYWxwcml2YWN5Y29udHJvbC5lbmFibGVkIiwgdHJ1ZSk7CgovKioqIFtTRUNUSU9OIDgwMDBdOiBET04nVCBCT1RIRVI6IEZJTkdFUlBSSU5USU5HCiAgIFtXSFldIFRoZXkgYXJlIGluc3VmZmljaWVudCB0byBoZWxwIGFudGktZmluZ2VycHJpbnRpbmcgYW5kIGRvIG1vcmUgaGFybSB0aGFuIGdvb2QKICAgW1dBUk5JTkddIERPIE5PVCBVU0Ugd2l0aCBSRlAuIFJGUCBhbHJlYWR5IGNvdmVycyB0aGVzZSBhbmQgdGhleSBjYW4gaW50ZXJmZXJlCioqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiODAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBjcm9zc2VkIHRoZSBKb3JkYW4iKTsKLyogODAwMTogcHJlZnNDbGVhbmVyOiByZXNldCBpdGVtcyB1c2VsZXNzIGZvciBhbnRpLWZpbmdlcnByaW50aW5nICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLmRpc3BsYXkudXNlX2RvY3VtZW50X2ZvbnRzIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuem9vbS5zaXRlU3BlY2lmaWMiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZGV2aWNlLnNlbnNvcnMuZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJkb20uZW5hYmxlX3BlcmZvcm1hbmNlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImRvbS5lbmFibGVfcmVzb3VyY2VfdGltaW5nIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImRvbS5nYW1lcGFkLmVuYWJsZWQiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZG9tLm1heEhhcmR3YXJlQ29uY3VycmVuY3kiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZG9tLnczY190b3VjaF9ldmVudHMuZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJkb20ud2ViYXVkaW8uZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJmb250LnN5c3RlbS53aGl0ZWxpc3QiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZ2VuZXJhbC5hcHBuYW1lLm92ZXJyaWRlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImdlbmVyYWwuYXBwdmVyc2lvbi5vdmVycmlkZSIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJnZW5lcmFsLmJ1aWxkSUQub3ZlcnJpZGUiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZ2VuZXJhbC5vc2NwdS5vdmVycmlkZSIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJnZW5lcmFsLnBsYXRmb3JtLm92ZXJyaWRlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImdlbmVyYWwudXNlcmFnZW50Lm92ZXJyaWRlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoIm1lZGlhLm5hdmlnYXRvci5lbmFibGVkIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoIm1lZGlhLm9uZGV2aWNlY2hhbmdlLmVuYWJsZWQiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigibWVkaWEudmlkZW9fc3RhdHMuZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJtZWRpYS53ZWJzcGVlY2guc3ludGguZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJ1aS51c2Vfc3RhbmRpbnNfZm9yX25hdGl2ZV9jb2xvcnMiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigid2ViZ2wuZW5hYmxlLWRlYnVnLXJlbmRlcmVyLWluZm8iLCAiIik7CgovKioqIFtTRUNUSU9OIDg1MDBdOiBURUxFTUVUUlkKICAgQXJrZW5mb3ggZG9lcyBub3QgY29uc2lkZXIgRmlyZWZveCB0ZWxlbWV0cnkgdG8gYmUgYSBwcml2YWN5IG9yIHNlY3VyaXR5IGNvbmNlcm4gLSBjb21tZW50cyBiZWxvdy4KICAgQnV0IHNpbmNlIG1vc3QgYXJrZW5mb3ggdXNlcnMgcHJlZmVyIGl0IGRpc2FibGVkLCB3ZSdsbCBkbyB0aGF0IHJhdGhlciB0aGFuIGNhdXNlIG92ZXJyaWRlcy4KCiAgIE9wdC1vdXQKICAgLSBUZWxlbWV0cnkgaXMgZXNzZW50aWFsOiBhIGJyb3dzZXIgZW5naW5lIGlzIGEgX3ZlcnlfIGxhcmdlIGNvbXBsZXggYmVhc3QgY29zdGluZyBiaWxsaW9ucyB0byBtYWludGFpbgogICAtIE9wdC1pbiB0ZWxlbWV0cnkgX2RvZXMgbm90XyB3b3JrIGFuZCByZXN1bHRzIGluIGRhdGEgdGhhdCBpcyB1bnJlcHJlc2VudGF0aXZlIGFuZCBtYXkgYmUgbWlzbGVhZGluZwogICBDaG9pY2UKICAgLSBFdmVyeSBuZXcgcHJvZmlsZSBvbiBmaXJzdCB1c2UgcHJvdmlkZXMgZGF0YSBjb2xsZWN0aW9uL3VzZSBwb2xpY3kgYW5kIHRoZSBhYmlsbHR5IHRvIG9wdC1vdXQKICAgLSBJdCBjYW4gYmUgZGlzYWJsZWQgYXQgYW55IHRpbWUgKFNldHRpbmdzPlByaXZhY3kgJiBTZWN1cml0eT5EYXRhIENvbGxlY3Rpb24gYW5kIFVzZSkgCiAgIERhdGEKICAgLSBubyBQSUkgKFBlcnNvbmFsbHkgSWRlbnRpZmlhYmxlIEluZm9ybWF0aW9uKQogICAtIGNhbiBiZSB2aWV3ZWQgaW4gYWJvdXQ6dGVsZW1ldHJ5CiAgIC0gdXNlcyBQcmlvIFsxXVsyXVszXSwgR2xlYW4gWzRdLCBPYmxpdmlvdXMgSFRUUCBbNV1bNl0KCiAgIFsxXSBodHRwczovL2NyeXB0by5zdGFuZm9yZC5lZHUvcHJpby8KICAgWzJdIGh0dHBzOi8vaGFja3MubW96aWxsYS5vcmcvMjAxOC8xMC90ZXN0aW5nLXByaXZhY3ktcHJlc2VydmluZy10ZWxlbWV0cnktd2l0aC1wcmlvLwogICBbM10gaHR0cHM6Ly9ibG9nLm1vemlsbGEub3JnL3NlY3VyaXR5LzIwMTkvMDYvMDYvbmV4dC1zdGVwcy1pbi1wcml2YWN5LXByZXNlcnZpbmctdGVsZW1ldHJ5LXdpdGgtcHJpby8KICAgWzRdIGh0dHBzOi8vZmlyZWZveC1zb3VyY2UtZG9jcy5tb3ppbGxhLm9yZy90b29sa2l0L2NvbXBvbmVudHMvZ2xlYW4vaW5kZXguaHRtbAogICBbNV0gaHR0cHM6Ly9maXJlZm94LXNvdXJjZS1kb2NzLm1vemlsbGEub3JnL3Rvb2xraXQvY29tcG9uZW50cy9nbGVhbi91c2VyL29odHRwLmh0bWwKICAgWzZdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9lbi90YWcvb2JsaXZpb3VzLWh0dHAvCioqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiODUwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBvZmYgdGhlIHR3aWchIik7Ci8qIDg1MDA6IGRpc2FibGUgbmV3IGRhdGEgc3VibWlzc2lvbiBbRkY0MStdCiAqIElmIGRpc2FibGVkLCBubyBwb2xpY3kgaXMgc2hvd24gb3IgdXBsb2FkIHRha2VzIHBsYWNlLCBldmVyCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzExOTU1NTIgKioqLwp1c2VyX3ByZWYoImRhdGFyZXBvcnRpbmcucG9saWN5LmRhdGFTdWJtaXNzaW9uRW5hYmxlZCIsIGZhbHNlKTsKLyogODUwMTogZGlzYWJsZSBIZWFsdGggUmVwb3J0cwogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkZpcmVmb3ggRGF0YSBDb2xsZWN0aW9uIGFuZCBVc2U+U2VuZCB0ZWNobmljYWwuLi4gZGF0YSAqKiovCnVzZXJfcHJlZigiZGF0YXJlcG9ydGluZy5oZWFsdGhyZXBvcnQudXBsb2FkRW5hYmxlZCIsIGZhbHNlKTsKLyogMDgwMjogZGlzYWJsZSB0ZWxlbWV0cnkKICogVGhlICJ1bmlmaWVkIiBwcmVmIGFmZmVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSAiZW5hYmxlZCIgcHJlZgogKiAtIElmICJ1bmlmaWVkIiBpcyBmYWxzZSB0aGVuICJlbmFibGVkIiBjb250cm9scyB0aGUgdGVsZW1ldHJ5IG1vZHVsZQogKiAtIElmICJ1bmlmaWVkIiBpcyB0cnVlIHRoZW4gImVuYWJsZWQiIG9ubHkgY29udHJvbHMgd2hldGhlciB0byByZWNvcmQgZXh0ZW5kZWQgZGF0YQogKiBbTk9URV0gInRvb2xraXQudGVsZW1ldHJ5LmVuYWJsZWQiIGlzIG5vdyBMT0NLRUQgdG8gcmVmbGVjdCBwcmVyZWxlYXNlICh0cnVlKSBvciByZWxlYXNlIGJ1aWxkcyAoZmFsc2UpIFsyXQogKiBbMV0gaHR0cHM6Ly9maXJlZm94LXNvdXJjZS1kb2NzLm1vemlsbGEub3JnL3Rvb2xraXQvY29tcG9uZW50cy90ZWxlbWV0cnkvdGVsZW1ldHJ5L2ludGVybmFscy9wcmVmZXJlbmNlcy5odG1sCiAqIFsyXSBodHRwczovL21lZGl1bS5jb20vZ2VvcmctZnJpdHpzY2hlL2RhdGEtcHJlZmVyZW5jZS1jaGFuZ2VzLWluLWZpcmVmb3gtNTgtMmQ1ZGY5YzQyOGI1ICoqKi8KdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS51bmlmaWVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LmVuYWJsZWQiLCBmYWxzZSk7IC8vIHNlZSBbTk9URV0KdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS5zZXJ2ZXIiLCAiZGF0YTosIik7CnVzZXJfcHJlZigidG9vbGtpdC50ZWxlbWV0cnkuYXJjaGl2ZS5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5Lm5ld1Byb2ZpbGVQaW5nLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjU1K10KdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS5zaHV0ZG93blBpbmdTZW5kZXIuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTUrXQp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LnVwZGF0ZVBpbmcuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTYrXQp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LmJoclBpbmcuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTcrXSBCYWNrZ3JvdW5kIEhhbmcgUmVwb3J0ZXIKdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS5maXJzdFNodXRkb3duUGluZy5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY1NytdCi8qIDg1MDM6IGRpc2FibGUgVGVsZW1ldHJ5IENvdmVyYWdlCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvZGF0YS8yMDE4LzA4LzIwL2VmZmVjdGl2ZWx5LW1lYXN1cmluZy1zZWFyY2gtaW4tZmlyZWZveC8gKioqLwp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LmNvdmVyYWdlLm9wdC1vdXQiLCB0cnVlKTsgLy8gW0hJRERFTiBQUkVGXQp1c2VyX3ByZWYoInRvb2xraXQuY292ZXJhZ2Uub3B0LW91dCIsIHRydWUpOyAvLyBbRkY2NCtdIFtISURERU4gUFJFRl0KdXNlcl9wcmVmKCJ0b29sa2l0LmNvdmVyYWdlLmVuZHBvaW50LmJhc2UiLCAiIik7CgovKioqIFtTRUNUSU9OIDkwMDBdOiBOT04tUFJPSkVDVCBSRUxBVEVEICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiOTAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBjYXNoZWQgaW4gJ2lzIGNoaXBzISIpOwovKiA5MDAxOiBkaXNhYmxlIHdlbGNvbWUgbm90aWNlcyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5zdGFydHVwLmhvbWVwYWdlX292ZXJyaWRlLm1zdG9uZSIsICJpZ25vcmUiKTsgLy8gW0hJRERFTiBQUkVGXQovKiA5MDAyOiBkaXNhYmxlIEdlbmVyYWw+QnJvd3Npbmc+UmVjb21tZW5kIGV4dGVuc2lvbnMvZmVhdHVyZXMgYXMgeW91IGJyb3dzZSBbRkY2NytdICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLmFzcm91dGVyLnVzZXJwcmVmcy5jZnIuYWRkb25zIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0uYXNyb3V0ZXIudXNlcnByZWZzLmNmci5mZWF0dXJlcyIsIGZhbHNlKTsKLyogOTAwNDogZGlzYWJsZSBzZWFyY2ggdGVybXMgW0ZGMTEwK10KICogW1NFVFRJTkddIFNlYXJjaD5TZWFyY2ggQmFyPlVzZSB0aGUgYWRkcmVzcyBiYXIgZm9yIHNlYXJjaCBhbmQgbmF2aWdhdGlvbj5TaG93IHNlYXJjaCB0ZXJtcyBpbnN0ZWFkIG9mIFVSTC4uLiAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc2hvd1NlYXJjaFRlcm1zLmVuYWJsZWQiLCBmYWxzZSk7CgovKioqIFtTRUNUSU9OIDk5OTldOiBERVBSRUNBVEVEIC8gUkVOQU1FRCAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjk5OTkgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3Mgc2h1ZmZsZWQgb2ZmICdpcyBtb3J0YWwgY29pbCEiKTsKLyogRVNSMTI4Lnggc3RpbGwgdXNlcyBhbGwgdGhlIGZvbGxvd2luZyBwcmVmcwovLyBbTk9URV0gcmVwbGFjZSB0aGUgKiB3aXRoIGEgc2xhc2ggaW4gdGhlIGxpbmUgYWJvdmUgdG8gcmUtZW5hYmxlIGFjdGl2ZSBvbmVzCi8vIEZGMTMyCi8qIDI2MTc6IHJlbW92ZSB3ZWJjaGFubmVsIHdoaXRlbGlzdAogICAvLyBbLV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xMjc1NjEyCiAgIC8vIHVzZXJfcHJlZigid2ViY2hhbm5lbC5hbGxvd09iamVjdC51cmxXaGl0ZWxpc3QiLCAiIik7Ci8vICoqKi8KCi8qIEVORDogaW50ZXJuYWwgY3VzdG9tIHByZWYgdG8gdGVzdCBmb3Igc3ludGF4IGVycm9ycyAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIlNVQ0NFU1M6IE5vIG5vIGhlJ3Mgbm90IGRlYWQsIGhlJ3MsIGhlJ3MgcmVzdGluJyEiKTsK"