ZGFzaCAoMC40LjI2KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBEaXNhYmxlZCBmbm1hdGNoIGNvZGUgYWdhaW4gKGNsb3NlczogIzI0MDg4NykuCiAgKiBVcGRhdGVkIGNvcHlyaWdodC4KICAqIFVwZGF0ZWQgR2VybWFuIGRlYmNvbmYgdHJhbnNsYXRpb24gKEZsb3JpYW4gRXJuc3QsIGNsb3NlczogIzI0NDUwNykuCiAgKiBGaXhlZCBvYnN0YWNrIGNvcnJ1cHRpb24gaW4gc2V0cHJvbXB0IChjbG9zZXM6ICMyNDY2MzUpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIEZyaSwgMzAgQXByIDIwMDQgMjE6NDg6NTIgKzEwMDAKCmRhc2ggKDAuNC4yNSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHNldHZhcmVxIChWbGFkaW1pciBOLiBPbGV5bmlrKS4KICAqIEZpeGVkIHZhbHVlIG9mIGV4cGRlc3QgYWZ0ZXIgX1NUUFVUQyBpbiBleHBhbmRhcmcgKGNsb3NlczogIzIzODI2NSkuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgVGh1LCAxOCBNYXIgMjAwNCAyMDo1NTo1NyArMTEwMAoKZGFzaCAoMC40LjI0KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBQV0QgaXMgdW5kZWZpbmVkLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFR1ZSwgIDkgTWFyIDIwMDQgMTk6NTg6NDEgKzExMDAKCmRhc2ggKDAuNC4yMykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogVmVyaWZ5IFBXRCBiZWZvcmUgdXNpbmcgaXQuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgTW9uLCAgOCBNYXIgMjAwNCAyMDoxMjoyNyArMTEwMAoKZGFzaCAoMC40LjIyKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBSZWFkIFBXRCBmcm9tIGVudmlyb25tZW50IChjbG9zZXM6ICMyMjg2NTkpLgogICogQWRkZWQgRGFuaXNoIGRlYmNvbmYgdHJhbnNsYXRpb24gKENsYXVzIEhpbmRzZ2F1bCwgY2xvc2VzOiAjMjMzNzU2KS4KICAqIEFkZGVkIGNoZWNrX2djYyB0byBzdXBwb3J0IGdjYyAyLjk1IChjbG9zZXM6ICMyMzU5MzMpLgogICogUGVyZm9ybSBoZXJlLWRvYyBleHBhbnNpb24gb24gUFMxL1BTMi9QUzQgKGNsb3NlczogIzIzMDg1OCkuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU3VuLCAgNyBNYXIgMjAwNCAyMTo1MDowNCArMTEwMAoKZGFzaCAoMC40LjIxKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCB0eXBvIHRoYXQgYnJva2UgdWxpbWl0IChHQ1MsIGNsb3NlczogIzIyODM2OSkuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgTW9uLCAxOSBKYW4gMjAwNCAxOTowMjozMiArMTEwMAoKZGFzaCAoMC40LjIwKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBBZGRlZCBEdXRjaCBkZWJjb25mIHRyYW5zbGF0aW9uIChUaW0gRGlqa3N0cmEsIGNsb3NlczogIzIxODkwNCkuCiAgKiBDaGVjayBleGlzdGVuY2UgUkxJTUlUIHN5bWJvbHMgZm9yIHVsaW1pdC4KICAqIFJlbW92ZWQgdGFibGUgbG9va3VwIGluIGVycm1zZy4KICAqIFJlc3RvcmVkIE5VTEwgY2hlY2sgaW4gY21kdHh0LgogICogUmVzdG9yZWQgYXNoIHBvc3RybSB0byBwdXJnZSBkZWJjb25mIGVudHJpZXMgKGNsb3NlczogIzIyMTkxMykuCiAgKiBGaXhlZCBleGl0IHN0YXR1cyBvZiBleGl0IGluIEVYSVQgdHJhcCAoY2xvc2VzOiAjMjI3NzM0KS4KICAqIFVwZGF0ZWQgQnJhemlsaWFuIGRlYmNvbmYgdHJhbnNsYXRpb24gKEFuZHJlIEx1aXMgTG9wZXMsIGNsb3NlczogIzIyODA5NSkuCiAgKiBSZXN0b3JlZCBnb29kbmFtZSBjaGVjayBpbiBwcmVoYXNoLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFNhdCwgMTcgSmFuIDIwMDQgMDk6NTc6MTQgKzExMDAKCmRhc2ggKDAuNC4xOSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgaGFuZGxpbmcgb2YgZXZhbHNraXAgaW4gZG90Y21kIChjbG9zZXM6ICMyMTI5NzUpLgogICogVXBkYXRlZCBSdXNzaWFuIGRlYmNvbmYgdHJhbnNsYXRpb24gKElsZ2l6IEthbG1ldGV2LCBjbG9zZXM6ICMyMTQzMzMpLgogICogQWRkZWQgUG9ydHVnZXNlIGRlYmNvbmYgdHJhbnNsYXRpb24gKEJydW5vIFJvZHJpZ3VlcywgY2xvc2VzOiAjMjE2MjE0KS4KICAqIFVwZGF0ZWQgU3BhbmlzaCBkZWJjb25mIHRyYW5zbGF0aW9uIChDYXJsb3MgVmFsZGl2aWEsIGNsb3NlczogIzIxNjMzOCkuCiAgKiBGaXhlZCBsZW5ndGggZXhwYW5zaW9uIG9mIHNwZWNpYWwgdmFyaWFibGVzIChjbG9zZXM6ICMyMTY3NjcpLgogICogUmVwbGFjZWQgdW1hc2sgYnVpbHRpbiB3aXRoIHBka3NoIHZlcnNpb24uCiAgKiBSZXZlcnRlZCBib2d1cyBldmFsIGNoYW5nZSBpbiAwLjMuMS0yMC4KICAqIEFkZGVkIHZtZW1vcnkvbG9ja3Mgc3VwcG9ydCBpbiB1bGltaXQuCiAgKiBDYWxsIGluc3RhbGwgLUQgaW5zdGVhZCBvZiBjcCBmb3IgbWVyZ2VkIHRlbXBsYXRlLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFdlZCwgMjkgT2N0IDIwMDMgMjI6MTQ6MjIgKzExMDAKCmRhc2ggKDAuNC4xOCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgYm91bmRhcnkgY2hlY2tzIGluIGdldG9wdHMuCiAgKiBVcGRhdGVkIEphcGFuZXNlIGRlYmNvbmYgdGVtcGxhdGUgKFRvbW9oaXJvIEtVQk9UQSwgY2xvc2VzOiAjMTkyMzgyKS4KICAqIFVzZSAtZmFsaWduLSogaW5zdGVhZCAtbWFsaWduLSouCiAgKiBVc2Ugc3RydG9sbCBmb3IgcGFyc2luZyBpbnRlZ2VycyBpbiBhcml0aCBleHBhbnNpb24uCiAgKiBBZGRlZCBzdXBwb3J0IGZvciBhZGQtc2hlbGwvcmVtb3ZlLXNoZWxsIChjbG9zZXM6ICMxNjMxMzEpLgogICogRml4ZWQgSk9CUyBpZmRlZnMgaW4gc3ByaW50X3N0YXR1cyAoY2xvc2VzOiAjMjExMDA5KS4KICAqIEZpeGVkIGJpdC13aXNlIG9yIGluIGFyaXRoIGV4cGFuc2lvbiAoTW90b3Rvc2hpIEtPTkRPLCBjbG9zZXM6ICMyMTI4MjUpLgogICogUHJpbnQgUFM0IG9uIHByZXZpb3VzIHN0ZGVyci4KICAqIENvbnZlcnRlZCBkZWJjb25mIHRlbXBsYXRlcyB0byBnZXR0ZXh0IChDaHJpc3RpYW4gUGVycmllciwKICAgIGNsb3NlczogIzIwMDExMikuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU2F0LCAyNyBTZXAgMjAwMyAxNDoyNjozNiArMTAwMAoKZGFzaCAoMC40LjE3KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBSZXNldCByZWhhc2ggd2hlbiByZWN5bGNpbmcgY21kIGVudHJpZXMuCiAgKiBGaXhlZCBudWxsIGFyZzAgc2VnZmF1bHQgd2l0aCAtYyAoY2xvc2VzOiAjMTkxNjg3KS4KICAqIFJlbG9jYXRlIGpvYiBwb2ludGVycyBpbiBtYWtlam9iIChjbG9zZXM6ICMxOTE1OTUpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFNhdCwgIDMgTWF5IDIwMDMgMjA6NTc6NDYgKzEwMDAKCmRhc2ggKDAuNC4xNikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgcHJpbnRmIHNvIHRoYXQgZXhpdCBzdGF0dXMgaXMgY2xlYXJlZCBvbiBlbnRyeS4KICAqIENhbGwgbmV4dG9wdCgpIGluIHByaW50Zi4KICAqIEZpeGVkIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGNvcnJ1cHRpb24gYnkgZ3JhYmJpbmcgZXhwZGVzdCBpbiBleHBiYWNrcQogICAgKGNsb3NlczogIzE4Nzg5NikuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgTW9uLCAgNyBBcHIgMjAwMyAyMToyMTozMCArMTAwMAoKZGFzaCAoMC40LjE1KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCBvY3RhbCBlc2NhcGVzIGluIGVjaG8vcHJpbnRmIChjbG9zZXM6ICMxODc4MjcpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFN1biwgIDYgQXByIDIwMDMgMjA6NDU6MzggKzEwMDAKCmRhc2ggKDAuNC4xNCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogQWRkZWQgbWlzc2luZyBuZXdsaW5lIHdoZW4gcHJpbnRpbmcgaW4gZG93YWl0LgogICogRG8gbm90IHByaW50IHN0YXR1cyBpbiBkb3dhaXQgd2hlbiBzdG9wcGVkLgogICogRml4ZWQgam9iIHN0YXR1cyBkaXNwbGF5LgogICogRml4ZWQgY3VycmVudCBqb2Igc2V0dGluZy4KICAqIEZpeGVkIGtpbGwgc2VnZmF1bHQgd2l0aCBubyBhcmd1bWVudHMgKGNsb3NlczogIzE4NzE4OSkuCiAgKiBGaXhlZCBzb3J0aW5nIG9mIHNldCBvdXRwdXQuCiAgKiBSZW1vdmVkIHNldHZhciBidWlsdGluLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFRodSwgIDMgQXByIDIwMDMgMjA6Mzg6MzMgKzEwMDAKCmRhc2ggKDAuNC4xMykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgcHJlY2lzaW9uIHR5cGUgb24gNjQgYml0IHN5c3RlbXMgaW4gc2hvd3ZhcnMuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgV2VkLCAyNiBNYXIgMjAwMyAyMDowMDowMyArMTEwMAoKZGFzaCAoMC40LjEyKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCBkYXNoX2Vycm5vIGJ1aWxkIHByb2JsZW0gd2l0aCBnY2MgMy4yLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFR1ZSwgMjUgTWFyIDIwMDMgMjI6Mjg6NTAgKzExMDAKCmRhc2ggKDAuNC4xMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogUmVtb3ZlZCB1bnVzZWQgcGdycCBmaWVsZCBmcm9tIGpvYiBzdHJ1Y3R1cmUuCiAgKiBGcmVlIGpvYnMgd2hlbiBjYWxsaW5nIHdhaXQgd2l0aCBubyBhcmd1bWVudHMuCiAgKiBGaXhlZCBidWlsZCBwcm9ibGVtIHdpdGggYmlzb24uCiAgKiBNZXJnZWQgY2hhbmdlcyBmcm9tIE5ldEJTRCAyMDAzMDEyMy4KICAgLiBwcmludGY6CiAgICAtIEZpeGVkIG1rbG9uZyBzZWZhdWx0LgogICAgLSBGaXhlZCBwcmVjaXNpb24vZmllbGQgd2lkdGggd2l0aCAlYi4KICAgLiBJbXByb3ZlZCBvcHRpb24gcGFyc2luZyBvZiBjb21tYW5kKDEpLgogICAuIEFkZGVkIHJ1ZGltZW50YXJ5IHN1cHBvcnQgZm9yIFBTNC4KICAqIE1vdmVkIGJ1aWx0aW4gZmxhZ3MgaW50byBidWlsdGlucy5kZWYuCiAgKiBVcGRhdGVkIFNwYW5pc2ggZGViY29uZiB0ZW1wbGF0ZSAoQ2FybG9zIFZhbGRpdmlhIFlhZ/xlLCBjbG9zZXM6ICMxNzgzNTkpLgogICogRml4ZWQgb3JkZXJpbmcgb2YgcmVkaXJlY3Rpb24gdmVyc3VzIGFzc2lnbm1lbnQgc3Vic3RpdHV0aW9uLgogICogRml4ZWQgcG90ZW50aWFsIHNldHZhcmVxIG1lbW9yeSBsZWFrcy4KICAqIFVzZSBiaXNvbiBpbnN0ZWFkIG9mIGJ5YWNjLgogICogRml4ZWQgd2FpdCgxKSByYWNlIGNvbmRpdGlvbi4KICAqIEZpeGVkIGFsaWdubWVudCBtZW1vcnkgY29ycnVwdGlvbiBidWcgaW4gZ3Jvd3N0YWNrYmxvY2soKS4KICAqIEZpeGVkIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBpbiBwYXJzaW5nIHBvc2l0aW9uIHBhcmFtZXRlcnMuCiAgKiBGaXhlZCBnZXRvcHRzIGRvbmUgY2hlY2suCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgTW9uLCAyNCBNYXIgMjAwMyAyMDo0MjoyOSArMTEwMAoKZGFzaCAoMC40LjEwKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCByZWRpcmVjdGlvbiBmZCBsZWFrIHdoZW4gZXhlY2luZy4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBTdW4sIDE5IEphbiAyMDAzIDEzOjI1OjQxICsxMTAwCgpkYXNoICgwLjQuOSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogUmVzZXQgZXhpdHN0YXR1cyBpbiBldmFsc3Vic2hlbGwgaWYgYmFja2duZCBpcyB0cnVlLgogICogRml4ZWQgZ2xpYmMgZ2xvYiBzeW50YXggZXJyb3IgaW4gZXhwYW5kLmMuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU2F0LCAxMSBKYW4gMjAwMyAxNjowNDowMiArMTEwMAoKZGFzaCAoMC40LjgpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIFJlbW92ZWQgYmFja2duZCBmbGFnIGZyb20gbmNtZCBkdWUgdG8gcHJldmlvdXMgcmVkaXJlY3Rpb24gY2hhbmdlLgogICogU2V0IGxpbSBhZnRlciB0aGUgc3RhY2sgc3RhYmxpc2VzIGluIHVwZGF0ZXB3ZCAoY2xvc2VzOiAjMTczODg0KS4KICAqIERvIG5vdCBjbG9iYmVyIHRoZSBleGl0c3RhdHVzIGFmdGVyIHJlZGlyZWN0aW9uLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIE1vbiwgMjMgRGVjIDIwMDIgMTk6NTA6MDYgKzExMDAKCmRhc2ggKDAuNC43KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBNZXJnZWQgY2xlYXJyZWRpciB3aXRoIHJlc2V0IGNvZGUgaW4gcmVkaXIuYy4KICAqIFJlZGlyZWN0IGJlZm9yZSBjb21tYW5kIHNlYXJjaCBpbiBldmFsY29tbWFuZCAoY2xvc2VzOiAjMTY4ODYyKS4KICAqIEJ1aWxkIGJpbmFyeS1hbGwgcGFja2FnZXMgaW4gYmluYXJ5LWluZGVwIChjbG9zZXM6ICMxNzMxOTEpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFNhdCwgMjEgRGVjIDIwMDIgMTM6NTI6MzcgKzExMDAKCmRhc2ggKDAuNC42KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBSZXN0b3JlZCBjb2RlIGZvciBsZWF2aW5nIGpvYiBjb250cm9sLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFN1biwgIDggRGVjIDIwMDIgMTU6MjE6NTggKzExMDAKCmRhc2ggKDAuNC41KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBPcHRpbWlzZWQgZG9mb3JtYXQgc28gdGhhdCB2c25wcmludGYgaXMgdXN1YWxseSBjYWxsZWQgb25seSBvbmNlLgogICogUmVzZXQgcmVkaXJsaXN0IGluIGNsZWFycmVkaXIgc28gdGhhdCBwb3ByZWRpciBjYW4gd29yayAoY2xvc2VzOiAjMTcwMjQ3KS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBTYXQsIDIzIE5vdiAyMDAyIDIyOjA5OjU5ICsxMTAwCgpkYXNoICgwLjQuNCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgZHVwbGljYXRlIGRlZmluZSB3YXJuaW5ncyBpbiBpbml0LmMuCiAgKiBTZXQgZGViaGVscGVyIGNvbXBhdCB0byA0LgogICogVmFuaXNoaW5nIG1haWwgYm94ZXMgbm8gbG9uZ2VyIGVsaWNpdCAieW91IGhhdmUgbWFpbCIgbWVzc2FnZXMuCiAgKiBGdW5jdGlvbiByZWRpcmVjdGlvbiBlcnJvcnMgbm8gbG9uZ2VyIGFib3J0IHRoZSBzaGVsbC4KICAqIEZpeGVkIHBvdGVudGlhbCBtZW1vcnkgbGVhayBpbiByZWRpcmVjdC4KICAqIE9ubHkgYWxsb2NhdGUgbWVtb3J5IGlmIG5lY2Vzc2FyeSBpbiByZWRpcmVjdC4KICAqIFJlYXAgZGVhZCBoZXJlIGRvY3VtZW50cy4KICAqIERvIG5vdCBzdHJkdXAgZGVmYXVsdCB2YWx1ZXMgb2Ygc3RhdGljIHNoZWxsIHZhcmlhYmxlcy4KICAqIFJlbW92ZWQgdW5uZWNlc3Nhcnkgc2V0cHJvbXB0KDApIGNhbGxzLgogICogUmVhZCBpbiBCVUZTSVogY2h1bmtzIHJhdGhlciB0aGFuIEJVRlNJWiAtIDEuCiAgKiBEb2N1bWVudGVkIHVuZGVmaW5lZCBlc2NhcGUgYmVoYXZpb3VyIGZvciBlY2hvKDEpIChjbG9zZXM6ICMxNjc4OTMpLgogICogRG8gdmFfY29weSB3aGVuIHdlIHVzZSBhIHZhX2xpc3QgdHdpY2UgKGNsb3NlczogIzE2OTUwMykuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgV2VkLCAyMCBOb3YgMjAwMiAxOTo0ODozMSArMTEwMAoKZGFzaCAoMC40LjMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEFkZGVkIG1hbnVhbCBlbnRyeSBmb3IgUFBJRC4KICAqIEV4cG9ydGluZyBhbiB1bnNldCB2YXJpYWJsZSBubyBsb25nZXIgY2F1c2VzIGl0IHRvIGJlIHNldC4KICAqIEZpeGVkIGZkMCByZWRpcmVjdGlvbiBpbiBhc3luY2hyb25vdXMgbGlzdHMuCiAgKiBPbmx5IHN0YXQgaWYgbmVjZXNzYXJ5IGluIGNkY21kIChzZWUgIzQyODgwKS4KICAqIFJlbW92ZWQgZXh0cmEgbmV3bGluZSBpbiBlcnJvciBtZXNzYWdlIGluIGFyaXRoIGxleGVyLgogICogU2V0IGhlcmVkb2NsaXN0IHRvIDAgQVNBUCBpbiBwYXJzZWhlcmVkb2MuCiAgKiBSZW1vdmVkIEJTRCBhZHZlcnRpc2luZyBjbGF1c2UgZnJvbSBjb3B5cmlnaHQgZmlsZS4KICAqIENoZWNrIG5vbi1hc2ggZGl2ZXJzaW9ucyBhcyB3ZWxsIGluIGRhc2gucG9zdGluc3QuCiAgKiBEdXBsaWNhdGVkIGRpdmVyc2lvbiBjaGVja2luZyBpbiBhc2gucG9zdGluc3QgKGNsb3NlczogIzE2NjQ0MSkuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU2F0LCAyNiBPY3QgMjAwMiAyMToyODozMyArMTAwMAoKZGFzaCAoMC40LjIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEdpdmUgYmVuZWZpdHMgb2YgZGFzaCBpbiB0ZW1wbGF0ZXMgKGNsb3NlczogIzE2MTUyNykuCiAgKiBGaXhlZCBzaWduZWQvdW5zaWduZWQgb24gcmVzdWx0IG9mIHh3cml0ZSAoY2xvc2VzOiAjMTYxNjA2KS4KICAqIFJlbW92ZWQgc3VwcG9ydCBmb3IgU0lHIHByZWZpeGVzIGluIGtpbGwgYW5kIHRyYXAuCiAgKiBBZGRlZCAtLSBwcm9jZXNzaW5nIGluIHRyYXAuCiAgKiBEcm9wcGVkIHVzZSBvZiB1bnNldCBpbiBwb3N0aW5zdCAoY2xvc2VzOiAxNjE4NjgpLgogICogRml4ZWQgcHJpbnRmKDEpICUqIHByb2Nlc3Npbmcgb24gYmFkIGludGVnZXJzIGFuZCB6ZXJvLgogICogVXNlIHN0YXQ2NCBpbiB0ZXN0KDEpLgogICogQWxsb2NhdGUgZ3JvdXBfYXJyYXkgd2l0aCBzdGFsbG9jIGluIHRlc3QoMSkuCiAgKiBEaXNhYmxlZCBhbGlhcyBjaGVja2luZyBhZnRlciBhIHBhdHRlcm4gaW4gYSBjYXNlIHN0YXRlbWVudC4KICAqIFdhaXQgbm93IHJldHVybnMgMTI4ICsgbGFzdCB0cmFwcGVkIHNpZ25hbC4KICAqIFByaW50ZiBub3cga2VlcHMgZ29pbmcgYWZ0ZXIgZXJyb3JzLgogICogRW1wdHkgbm9uLXRyaXZpYWwgcGFyYW1ldGVyIGV4cGFuc2lvbnMgYXJlIG5vdyByZW1vdmVkIGNvcnJlY3RseS4KICAqIENhbGwgcmVzZXQoKSBiZWZvcmUgZXhpdHNoZWxsKCkgaXMgY2FsbGVkLiAgVGhpcyBmaXhlcyB0aGUgYnVnIHdoZXJlCiAgICByZXR1cm5pbmcgYW4gZXJyb3IgZnJvbSBhIGZ1bmN0aW9uIHJ1bm5pbmcgdW5kZXIgc2V0IC1lIGNhdXNlZCB0aGUgZXhpdAogICAgdHJhcCB0byBiZSB0YWtlbiB3aXRoIGV2YWxza2lwIHNldC4KICAqIEZpeGVkIHF1b3Rpbmcgb2YgZW1wdHkgc3RyaW5ncyBpbiBzaW5nbGVfcXVvdGUoKS4KICAqIFNob3cgbGluZSBudW1iZXJzIG9uIGFsbCBlcnJvcnMuCiAgKiBGdW5jdGlvbiBuYW1lcyBtdXN0IGJlIHZhbGlkIGlkZW50aWZpZXJzLgogICogUmVtb3ZlZCB1bnVzZWQgZGVwZW5kZW5jeSBvbiBncm9mZi4KICAqIEZpeGVkIHJhY2UgY29uZGl0aW9uIGJlZm9yZSBlbnRlcmluZyBhIGZ1bmN0aW9uLgogICogRml4ZWQgZ2V0b3B0cyBpbml0aWFsaXNhdGlvbiBmb3IgZnVuY3Rpb25zLgogICogQWRkZWQgbWVtb3J5IGJhcnJpZXJzIGluIElOVCBtYWNyb3MuCiAgKiBCYW5uZWQgZW1wdHkgY29tcG91bmQgbGlzdHMgaW4gbW9zdCBwbGFjZXMuCiAgKiBLZWVwIHVzYWdlIGNvdW50ZXJzIG9uIGZ1bmN0aW9ucyAoY2xvc2VzOiAjMTY0MjM0KS4KICAqIFVwZGF0ZWQgY29weXJpZ2h0IGZpbGUuCiAgKiBDaGVjayBldmFsc2tpcCBpbiBldmFsc3RyaW5nIChjbG9zZXM6ICMxNjUwNTYpLgogICogTWVyZ2VkIGNoYW5nZXMgZnJvbSBOZXRCU0QgMS42OgogICAuIEFkZGVkIGludG1heCBzdXBwb3J0IGluIHByaW50ZigxKS4KICAgLiBJbXBsZW1lbnRlZCBzZXQgLXUuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU2F0LCAxOSBPY3QgMjAwMiAxNDoyMzoxMSArMTAwMAoKZGFzaCAoMC40LjEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIFJlbW92ZWQgZXh0cmEgbmV3IGxpbmUgaW4gY29tbWFuZCAtdiBvdXRwdXQgZm9yIGFsaWFzZXMuCiAgKiBSZW1vdmVkIGFsYWlzIHByZWZpeCBpbiB0aGUgb3V0cHV0IG9mIGFsaWFzLgogICogUmVjb2duaXNlIG9jdGFsIGFuZCBoZXggbnVtYmVycyBpbiBhcml0aCBleHBhbnNpb24gKGNsb3NlczogIzE1MTQ0OSkuCiAgKiBBZGRlZCBzaCgxKSBlbnRyaWVzIGZvciBlY2hvLCBwcmludGYgYW5kIHRlc3QgKGNsb3NlczogIzE1NjQ0NikuCiAgKiBSZW5hbWVkIHRvIGRhc2ggLS0tIHRoZSBEZWJpYW4gQWxtcXVpc3QgU2hlbGwuCiAgKiBDbGVhbmVkIHVwIHJ1bGVzIGZpbGUgKE1hdGVqIFZlbGEpLgogICogQ2hlY2sgbXRpbWUgaW5zdGVhZCBvZiBzaXplIGluIGNoa21haWwgcGVyIFBPU0lYLgogICogQWRkZWQgc3VwcG9ydCBmb3IgTEZTIChjbG9zZXM6ICMxNTc4ODQpLgogICogQWRkZWQgU3VTIG9wdGlvbnMgdG8gY2QgYW5kIHB3ZCAoY2xvc2VzOiAjMTQ1ODI4KS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBGcmksIDEzIFNlcCAyMDAyIDIwOjM1OjA2ICsxMDAwCgphc2ggKDAuMy44LTM4KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBUdXJuZWQgcHJlLWRlcGVuZGVuY3kgdG8gZGVwZW5kZW5jeSBpbiB1ZGViIHNpbmNlIHRoZSBmb3JtZXIgaXMgbm90IGFsbG93ZWQKICAgIChjbG9zZXM6ICMxNDM3NDkpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFN1biwgMjggQXByIDIwMDIgMTE6NTk6MDUgKzEwMDAKCmFzaCAoMC4zLjgtMzcpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEFkZGVkIEphcGFuZXNlIGRlYmNvbmYgdHJhbnNsYXRpb24gKFRvbW9oaXJvIEtVQk9UQSwgY2xvc2VzOiAjMTM3NDMxKS4KICAqIEFkZGVkIG1pc3NpbmcgZXNjYXBlcyBpbiBtYW51YWwgcGFnZSAoQWFyb24gU2NocmFiLCBjbG9zZXM6ICMxMzc5NjYpLgogICogQWRkZWQgUnVzc2lhbiBkZWJjb25mIHRyYW5zbGF0aW9uIChJbGdpeiBLYWxtZXRldiwgY2xvc2VzOiAjMTM3NjE4KS4KICAqIEZpeGVkIHRyYXAoMSkgZG9jdW1lbnRhdGlvbiAoY2xvc2VzOiAjMTQwOTczKS4KICAqIERvIG5vdCBhYm9ydCBpZiBnZXRjd2QgZmFpbHMuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgV2VkLCAgMyBBcHIgMjAwMiAyMDo1ODowOSArMTAwMAoKYXNoICgwLjMuOC0zNikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogQWRkZWQgbGlicmFyeSBkZXBlbmRlbmN5IGZvciBhc2gtdWRlYi4KICAqIEhhbmRsZSBudWxsIGNhc2Ugc3RhdGVtZW50cyBjb3JyZWN0bHkuCiAgKiBGaXhlZCBhbGlhcyBleHBhbnNpb25zIGluIGNhc2Ugc3RhdGVtZW50cyAoTmV0QlNEKS4KICAqIERpc2FibGVkIHVudXNlZCBqb2JpZCBjb21tYW5kLgogICogQ29ycmVjdGVkIGRvY3VtZW50YXRpb24gYWJvdXQgc2hpZnRpbmcgdG9vIG11Y2guCiAgKiBBZGRlZCBGcmVuY2ggZGViY29uZiB0cmFuc2xhdGlvbiAoRGVuaXMgQmFyYmllciwgY2xvc2VzOiAjMTM0NjI1KS4KICAqIFVwZGF0ZWQgU3BhbmlzaCBkZWJjb25mIHRyYW5zbGF0aW9uIChDYXJsb3MgVmFsZGl2aWEsIGNsb3NlczogIzEzNjM2NikuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU2F0LCAgMiBNYXIgMjAwMiAxODozMToyMiArMTEwMAoKYXNoICgwLjMuOC0zNSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogTW92ZWQgUFdEIGluaXRpYWxpc2F0aW9uIGludG8gdmFyLmMgKGNsb3NlczogIzEyNDAzMikuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgTW9uLCAyNCBEZWMgMjAwMSAwOTozNDo1NSArMTEwMAoKYXNoICgwLjMuOC0zNCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogTlNFTUkgbXVzdCBiZSBOT1IgKyAxLgogICogU2V0IGV4aXRzdGF0dXMgdG8gemVybyBiZWZvcmUgZXZhbHVhdGluZyBjYXNlcyAoY2xvc2VzOiAjMTI0MDY2KS4KICAqIEV4cGxpY2l0bHkgc2V0IGRlZmF1bHQgYW5zd2VyIG9mIHRoZSBhc2gvc2ggcXVlc3Rpb24gdG8gZmFsc2Ugc28gdGhhdAogICAgcGVvcGxlIHdob3NlIGRlYmNvbmYgcHJpb3JpdHkgaXMgc2V0IHRvIGxvdyBhbmQgd2hvIGtlZXBzIGJhbmdpbmcgb24gdGhlaXIKICAgIGtleWJvYXJkcyBkb24ndCBhY2NpZGVudGx5IGVuZCB1cCB3aXRoIGFzaCBhcyAvYmluL3NoLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIEZyaSwgMjEgRGVjIDIwMDEgMjA6MzA6NDkgKzExMDAKCmFzaCAoMC4zLjgtMzMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEFkZGVkIG1pc3NpbmcgaW5jbHVzaW9uIG9mIGJsdGluLmggaW4gYmx0aW4vdGltZXMuYy4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBUaHUsIDEzIERlYyAyMDAxIDE4OjQ2OjA3ICsxMTAwCgphc2ggKDAuMy44LTMyKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBCYWNrIHNsYXNoZXMgaW4gZXhwYW5zaW9ucyBhcmUgbm93IGVzY2FwZWQgKGNsb3NlczogIzEyMTUxNikuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgV2VkLCAyOCBOb3YgMjAwMSAyMDoxNTowMSArMTEwMAoKYXNoICgwLjMuOC0zMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogTWFkZSBzdXJlIGFsbCBiYWNrIHNsYXNoZXMgYXJlIGVzY2FwZWQuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgTW9uLCAyNiBOb3YgMjAwMSAxOToxMDoyNyArMTEwMAoKYXNoICgwLjMuOC0zMCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogUmVzdG9yZWQgZm5tYXRjaCgzKSBjb2RlLgogICogVHJlYXQgZXNjYXBlZCBzbGFzaGVzIGNvcnJlY3RseSB3aGlsZSBnbG9iYmluZy4KICAqIFJlc3RvcmVkIG1pc3NpbmcgRVZfRVhJVCBjaGVjayBpbiBldmFsY29tbWFuZCAoY2xvc2VzOiAjMTIwMzY0KS4KICAqIEZpeGVkIHN0YWNrIGNvcnJ1cHRpb24gaW4gX3JtZXNjYXBlcy4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBTdW4sIDI1IE5vdiAyMDAxIDE3OjUxOjE5ICsxMTAwCgphc2ggKDAuMy44LTI5KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBBZGRlZCBtaXNzaW5nIHZhX2VuZCBpbiBmbXRzdHIgKE5ldEJTRCkuCiAgKiBSZW1vdmVkIHNoZWxscHJvYyBjcmFwLgogICogVXBkYXRlZCBTd2VkaXNoIGRlYmNvbmYgdHJhbnNsYXRpb24gKE1pa2FlbCBIZWRpbiwgY2xvc2VzOiAjMTE2MDk3KS4KICAqIFVwZGF0ZWQgR2VybWFuIGRlYmNvbmYgdHJhbnNsYXRpb24gKEFuZHJlYXMgTWV0emxlciwgY2xvc2VzOiAjMTE3MTYwKS4KICAqIEJyZWFrIG5vdyB0cmVhdHMgaWxsZWdhbCBudW1iZXJzIGFjY29yZGluZyB0byBTdVMuCiAgKiBFcnJvcnMgaW4gc3BlY2lhbCBidWlsdGlucyBub3cgcmlzZSB0byB0aGUgdG9wLgogICogTm9ybWFsIHJlZGlyZWN0aW9uIGVycm9ycyBubyBsb25nZXIgYWJvcnQgdGhlIHNoZWxsLgogICogRnVuY3Rpb25zIG5vdyBoYXZlIHRoZSBzYW1lIHZhcmlhYmxlIGFzc2lnbm1lbnQgcHJvcGVydGllcyBhcyBzcGVjaWFsCiAgICBidWlsdGlucy4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBTYXQsICAzIE5vdiAyMDAxIDExOjM2OjM2ICsxMTAwCgphc2ggKDAuMy44LTI4KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBMb2NhbCB2YXJpYWJsZXMgYXJlIG5vdyB1bnNldCBwcm9wZXJseSBpbiBzaHByb2N2YXIoKSAoY2xvc2VzOiAjMTE0OTE3KS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBTYXQsIDEzIE9jdCAyMDAxIDE0OjA3OjIxICsxMDAwCgphc2ggKDAuMy44LTI3KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBLaWxsIG5vIGxvbmdlciBhYm9ydHMgaWYgaXQgZmFpbHMgdG8ga2lsbCBzb21lb25lLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFN1biwgMzAgU2VwIDIwMDEgMjI6MjA6MzYgKzEwMDAKCmFzaCAoMC4zLjgtMjYpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIFRoZSBzaC4xLmd6IGRpdmVyc2lvbiBub3cgYWdyZWVzIHdpdGggcmVhbGl0eSAoY2xvc2VzOiAjMTEzODMxKS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBTYXQsIDI5IFNlcCAyMDAxIDA4OjQzOjI3ICsxMDAwCgphc2ggKDAuMy44LTI1KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBPbmx5IHJlYWQgRU5WIGlmIHRoZSBzaGVsbCBpcyBpbnRlcmFjdGl2ZSAoY2xvc2VzOiAjMTEwNDIxKS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBXZWQsIDI5IEF1ZyAyMDAxIDE5OjE4OjUzICsxMDAwCgphc2ggKDAuMy44LTI0KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBIYW5kbGUgU0lHSU5UIHdoZW4gd2FpdGluZyBldmVuIGlmIHRoZXJlIGlzIG5vIHRyYXAgKGNsb3NlczogIzEwNzY5OSkuCiAgKiBQcm90ZWN0IGFsbCBtYWtlam9iL2ZvcmtzaGVsbC93YWl0Zm9yam9icyBzZXF1ZW5jZXMgZnJvbSBTSUdJTlQuCiAgKiBXb3JrIGFyb3VuZCBnY2MgYnVnIHRoYXQgZ2VuZXJhdGVzIGJhZCAuLm5nIHJlZmVyZW5jZXMgKGNsb3NlczogIzEwNzk5NCkuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgV2VkLCAgOCBBdWcgMjAwMSAyMDoyODoyOCArMTAwMAoKYXNoICgwLjMuOC0yMykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgZmVuY2UgcG9zdCBlcnJvciBpbiBzY2FubGVmdCAoY2xvc2VzOiAjMTA3MjI5KS4KICAqIFJlbW92ZWQgc3R1bmFsbG9jIGluIGV4cG5hbWUgYXMgaXQgaW50ZXJmZXJlcyB3aXRoIGFkZGZuYW1lLgogICogRml4ZWQgQ1RMRVNDIHNraXBwaW5nIGluIHNjYW5yaWdodC4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBUaHUsICAyIEF1ZyAyMDAxIDIwOjA2OjAwICsxMDAwCgphc2ggKDAuMy44LTIyKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCB0cmFpbGluZyBiYWNrIHNsYXNoIGJ1ZyBpbiBlY2hvL3ByaW50ZiAoY2xvc2VzOiAjMTA2NjkzKS4KICAqIFNvbWUgcXVvdGVkJ3MgYXJlIG1lYW50IHRvIGJlIHF1b3Rlcy4KICAqIEFkZGVkIEJyYXppbGlhbiB0cmFuc2xhdGlvbiAoQW5kcmUgTHVpcyBMb3BlcywgY2xvc2VzOiAjMTA3MDQxKS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBNb24sIDMwIEp1bCAyMDAxIDIwOjIxOjUyICsxMDAwCgphc2ggKDAuMy44LTIxKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCBFVl9FWElUL3JlZGlyZWN0aW9uIGJ1Z3MgdGhhdCBjYXVzZWQgY29yZSBkdW1wcy4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBTYXQsIDI4IEp1bCAyMDAxIDE3OjAzOjI4ICsxMDAwCgphc2ggKDAuMy44LTIwKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBEb24ndCBzYXZlIGZkMiBpZiBqb2IgY29udHJvbCBpcyB0dXJuZWQgb2ZmLgogICogRG9uJ3QgcHVzaCByZWRpcmVjdGlvbnMgd2hlbiBFVl9FWElUIGlzIHNldC4KICAqIEZpeGVkIGFzc2lnbm1lbnQgcmVjb2duaXRpb24gaW4gdGhlIHByZXNlbmNlIG9mIGJhY2sgdGlja3MuCiAgKiBDb21iaW5lZCBjaGVja2t3ZCBhbmQgY2hlY2thbGlhcy4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBGcmksIDI3IEp1bCAyMDAxIDIyOjI5OjQxICsxMDAwCgphc2ggKDAuMy44LTE5KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBSZWNvbXB1dGUgc3RyaW5ncyBhZnRlciBncm93aW5nIGluIHN1YmV2YWx2YXIgKGNsb3NlczogIzEwNjA1MCkuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgTW9uLCAyMyBKdWwgMjAwMSAyMToxNjo1MCArMTAwMAoKYXNoICgwLjMuOC0xOCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogQWRkZWQgbW9yZSBzcGFjZSBvcHRpbWlzYXRpb25zIGZvciB1ZGViIG9uIGkzODYuCiAgKiBTZXQgc3RhY2sgbWFyayBpbiBwYXRtYXRjaCAoY2xvc2VzOiAjMTA2MDUwKS4KICAqIEZpeGVkIHRoZW9yZXRpY2FsIGJ1ZyBpbiBleHBhcmkuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU2F0LCAyMSBKdWwgMjAwMSAyMDowODoxNSArMTAwMAoKYXNoICgwLjMuOC0xNykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRG9uJ3QgY29tcGxhaW4gYWJvdXQgdW5rbm93biBlc2NhcGUgY29kZXMgaW4gZWNobyBhbmQgcHJpbnRmCiAgICAoY2xvc2VzOiAjMTA1NjU5KS4KICAqIFVwZGF0ZWQgYnVpbGQtdGltZSBkZXBlbmRlbmN5IG9uIGdyb2ZmLWJhc2UgKGNsb3NlczogIzEwNTYxMikuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgV2VkLCAxOCBKdWwgMjAwMSAxOTozMzoyMCArMTAwMAoKYXNoICgwLjMuOC0xNikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgYmFja3NsYXNoIGJ1ZyBpbiBuZXcgcGF0dGVybiBtYXRjaGluZyBjb2RlLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIE1vbiwgMTYgSnVsIDIwMDEgMjE6NDc6MzkgKzEwMDAKCmFzaCAoMC4zLjgtMTUpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEFkZGVkIFN3ZWRpc2ggdHJhbnNsYXRpb24gb2YgdGVtcGxhdGVzIChNYXJ0aW4gU2r2Z3JlbiwgY2xvc2VzOiAjMTAzMTU4KS4KICAqIFJlc3RvcmVkIGVzY2FwZSBjb2RlIHN1cHBvcnQgaW4gZWNoby4KICAqIFJlbW92ZWQgYXNzaWdubWVudCBidWlsdGlucyBzaW5jZSBpdCBpcyBhdCBiZXN0IHVuZGVmaW5lZCBieSB0aGUgU3VTIGFuZAogICAgYWxzbyBjYW4ndCBiZSBpbXBsZW1lbnRlZCBjb25zaXN0ZW50bHkuCiAgKiBSZW1vdmVkIGV4dHJhbmVvdXMgdm9sYXRpbGUgbW9kaWZpZXIgKGNsb3NlczogIzEwNDUxOCkuCiAgKiBHZW5lcmFsIG92ZXJoYXVsIG9mIHdvcmQgZXhwYW5zaW9uIChjbG9zZXM6ICM5NjU4OCkuCiAgKiBSZWRpcmVjdGlvbiBwcmVmaXhlcyBubyBsb25nZXIgc3RvcCBhc3NpZ25tZW50cyBmcm9tIGJlaW5nIHJlY29nbmlzZWQuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU3VuLCAxNSBKdWwgMjAwMSAxNzoyNzowMyArMTAwMAoKYXNoICgwLjMuOC0xNCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRGl2ZXJ0IHNoLjEuZ3ogdG8gc2guZGlzdHJpYi4xLmd6IChjbG9zZXM6ICMxMDIyNTEpLgogICogQWRkZWQgSEVUSU8gc3VwcG9ydCBmb3IgXkQgYW5kIF5VIChBYXJvbiBMZWhtYW5uLCBjbG9zZXM6ICMxMDIyMTUpLgogICogQWRkZWQgU3Bhbmlhc2ggdHJhbnNsYXRpb24gb2YgZGViY29uZiB0ZW1wbGF0ZXMgKENhcmxvcyBWYWxkaXZpYSBZYWf8ZSwKICAgIGNsb3NlczogIzEwMzA0MCkuCiAgKiBBZGRlZCB2ZXJzaW9uZWQgYnVpbGQtdGltZSBkZXBlbmRlbmN5IG9uIGdyb2ZmLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIE1vbiwgIDIgSnVsIDIwMDEgMTk6MzI6MDMgKzEwMDAKCmFzaCAoMC4zLjgtMTMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEZpeGVkIGEgYnVnIHdoZXJlIGVycm9ycyBpbiBwaXBlbGluZXMgd2hpY2ggYXJlIHBhcnQgb2YgYW5kb3IgbGlzdHMgd2VyZQogICAgbm90IGlnbm9yZWQgd2hlbiAtZSBpcyBpbiBlZmZlY3QuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgTW9uLCAyNSBKdW4gMjAwMSAxOTo0MDoyNyArMTAwMAoKYXNoICgwLjMuOC0xMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogUmV3cm90ZSBhcml0aF9sZXgubCBpbiBDIChBYXJvbiBMZWhtYW5uLCBjbG9zZXM6ICMxMDE3NDEpLgogICogJiYgYW5kIHx8IGluIGFyaXRobWV0aWMgZXhwYW5zaW9ucyBub3cgcmV0dXJuIGVpdGhlciAwIG9yIDEuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU3VuLCAyNCBKdW4gMjAwMSAyMDoxNDoyOSArMTAwMAoKYXNoICgwLjMuOC0xMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogQ2hlY2sgZm9yIE5VTEwgYXJndW1lbnQgaW4gZXZhbHRyZWUoKSAoY2xvc2VzOiAjOTg4NjUsICM5ODg2NykuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU3VuLCAyNyBNYXkgMjAwMSAxNzo1MzoxNCArMTAwMAoKYXNoICgwLjMuOC0xMCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogVXNlIC9iaW4vYXNoIGluIHBvc3RpbnN0IHRvIHNpZGVzdGVwIGJ1Z3MgaW4gb3RoZXIgc2hlbGxzIChjbG9zZXM6ICM5ODczOSkuCiAgKiBFeGl0IHN0YXR1cyBpcyBub3cgdGVzdGVkIG9uIG5vbi1uZWdhdGVkIHBpcGVsaW5lcyAoY2xvc2VzOiAjOTg3MzYpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFNhdCwgMjYgTWF5IDIwMDEgMjM6NTY6MDcgKzEwMDAKCmFzaCAoMC4zLjgtOSkgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCgogICogSUZTIGlzIG5vdyBmZXRjaGVkIHVzaW5nIGJsdGlubG9va3VwKCkgYWdhaW4gaW4gcmVhZCAoY2xvc2VzOiAjOTgzNDMpLgogICogRGl2ZXJ0IHNoKDEpIG1hbiBwYWdlIGFzIHdlbGwgYXMgL2Jpbi9zaCAoY2xvc2VzOiAjOTg1MjUpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIEZyaSwgMjUgTWF5IDIwMDEgMjA6MzA6MDYgKzEwMDAKCmFzaCAoMC4zLjgtOCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgZGl2ZXJzaW9uIHJlbW92YWwgaW4gcHJlcm0gKGR1aCwgY2xvc2VzOiAjOTgwMzEpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIE1vbiwgMjEgTWF5IDIwMDEgMjA6NTI6NDggKzEwMDAKCmFzaCAoMC4zLjgtNykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgZGl2ZXJzaW9uIHRlc3QgaW4gcHJlcm0gKGNsb3NlczogIzk4MDMxKS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBTdW4sIDIwIE1heSAyMDAxIDEyOjMwOjUzICsxMDAwCgphc2ggKDAuMy44LTYpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIE1ha2Ugc3VyZSB0aGF0IGZkMiBpcyBjbG9zZWQgd2hlbiBjbGVhcmluZyByZWRpcmVjdHMgKGNsb3NlczogIzk2NjE5KS4KICAqIEZpeGVkIG1lbW9yeSBjb3JydXB0aW9uIGluIHN0dW5hbGxvYygpLgogICogVGhlIG91dHB1dCBvZiBleHBvcnQvcmVhZG9ubHkvc2V0IGlzIG5vdyBjb3JyZWN0bHkgcXVvdGVkLgogICogRml4ZWQgbmV3bGluZSBlYXRpbmcgYnVnIGluIGV4cGJhY2txKCkuCiAgKiBTZXQgT0xEUFdELgogICogUmVtb3ZlZCBhc2gtbWVkaXVtIGFzIG5laXRoZXIgYmYgb3IgZGkgdXNlcyBpdC4KICAqIFdhaXQgbm93IHdhaXRzIGZvciBhbGwgaXRzIGFyZ3VtZW50IHJhdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUuCiAgKiBXYWl0IHdpbGwgZXhpdCB3aXRoIDEyOSB3aGVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIGZvciBhIHdoaWNoIGEgdHJhcCBoYXMKICAgIGJlZW4gc2V0LgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIEZyaSwgMTggTWF5IDIwMDEgMjE6NTE6NDEgKzEwMDAKCmFzaCAoMC4zLjgtNSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogQWRkZWQgR2VybWFuIHRyYW5zbGF0aW9uIHRvIHRlbXBsYXRlIGZpbGUgKFNlYmFzdGlhbiBGZWx0ZWwsCiAgICBjbG9zZXM6ICM5NjIwMykuCiAgKiBBZGRlZCBtaXNzaW5nIGluaXRpYWxpc2F0aW9uIGluIHNldGFsaWFzKCkgKGNsb3NlczogIzk1NDMzKS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBGcmksICA0IE1heSAyMDAxIDIwOjU0OjMxICsxMDAwCgphc2ggKDAuMy44LTQpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIERpc2FibGVkIGZubWF0Y2ggY29kZSBhcyBmbm1hdGNoKDMpIGluIGdsaWJjIGlzIGJyb2tlbi4KICAqIEZpeGVkIGVjaG8gZXhhbXBsZSBpbiBtYW4gcGFnZSAoS2FsbGUgT2xhdmkgTmllbWl0YWxvLCBjbG9zZXM6ICM5NjAxNCkuCiAgKiBGaXhlZCB0cmFpbGluZyBzZW1pY29sb24gYnVnIHdpdGggZXZhbCAoTmV0QlNEKS4KICAqIEZpeGVkIGdsb2JiaW5nIGluY29uc2lzdGVuY3kgd2l0aCBicm9rZW4gc3ltbGlua3MgKE5ldEJTRCkuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgV2VkLCAgMiBNYXkgMjAwMSAyMjo1NzoxNiArMTAwMAoKYXNoICgwLjMuOC0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBXb3JrIGFyb3VuZCBicm9rZW4gYXV0b2NvbmYgc2NyaXB0cyAoY2xvc2VzOiAjOTU0MzApLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFR1ZSwgIDEgTWF5IDIwMDEgMTg6Mjc6NTAgKzEwMDAKCmFzaCAoMC4zLjgtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogU2F2ZSBjaGVja2FsaWFzIGJlZm9yZSBjYWxsaW5nIHh4cmVhZHRva2VuKCkgKGNsb3NlczogIzk1NjI4KS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBTdW4sIDI5IEFwciAyMDAxIDE3OjM2OjAxICsxMDAwCgphc2ggKDAuMy44LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIE5ldEJTRC1jdXJyZW50IHZlcnNpb24gYXMgb2YgMjAwMTAzMTYuCiAgKiBSZW1vdmVkIGNvZGUgdGhhdCBzZXRzIElGUy4KICAqIEZpeGVkIG1lbW9yeSBsZWFrIHdpdGggUFdELgogICogU2V0IFBQSUQuCiAgKiBGaXhlZCBpbmNvbnNpc3RlbmNpZXMgaW4gYWxpYXMgZXhwYW5zaW9uLgogICogUmVzdG9yZWQgb3JpZ2luYWwgb3V0cHV0IGNvZGUuCiAgKiBFbmFibGVkIGZubWF0Y2ggY29kZSBhZ2Fpbi4KICAqIEFkZGVkIGJ1aWx0aW4gcHJpbnRmLgogICogT2ZmZXIgdG8gZGl2ZXJ0IC9iaW4vc2ggKGNsb3NlczogIzcwNDYyKS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBXZWQsIDI1IEFwciAyMDAxIDIyOjMyOjM5ICsxMDAwCgphc2ggKDAuMy43LTE2KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCBpbmNvcnJlY3QgZGVmYXVsdCBJRlMgaW4gcmVhZGNtZCAoY2xvc2VzOiAjODg5NTApLgogICogQWRkZWQgbWlzc2luZyByZXR1cm4gaW4gaGFzaGNtZC4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBGcmksICA5IE1hciAyMDAxIDIwOjQ0OjQwICsxMTAwCgphc2ggKDAuMy43LTE1KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBVbmtub3duIGVzY2FwZSBjb2RlcyBhcmUgbm93IHBybnRlZCBsaXRlcmFsbHkgYnkgZWNobyAoY2xvc2VzOiAjODI4NjkpLgogICogTWFkZSBoZXRpb19yZWFkX2lucHV0KCkgZmFpbCBpZiBmZCBpcyBub3Qgc3RkaW4uCiAgKiBTb21lIHVzZXMgb2YgVlNRVU9URSB3ZXJlIHJlYWxseSBtZWFudCB0byBiZSBxdW90ZXMgKGNsb3NlczogIzg4Nzc3KS4KICAqIEJ1aWxkIGRpZmZlcmVudCBhc2hlcyBpbiBkaWZmZXJlbnQgc3ViZGlyZWN0b3JpZXMuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgVGh1LCAgOCBNYXIgMjAwMSAyMTozMjoyOCArMTEwMAogCmFzaCAoMC4zLjctMTQpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIFJlbW92ZWQgcHJlZGVwZW5kZW5jeSBmcm9tIHVkZWIgKGNsb3NlczogIzgxOTk1KS4KICAqIEFkZGVkIC9iaW4vc2ggc3ltbGluayB0byB1ZGViIChjbG9zZXM6ICM4MTk2NykuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU2F0LCAxMyBKYW4gMjAwMSAxNToyMzoyMSArMTEwMAoKYXNoICgwLjMuNy0xMykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogUmVuYW1lZCB0aGUgdWRlYiB0byBhc2gtdWRlYi4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBXZWQsIDIwIERlYyAyMDAwIDE5OjMyOjM0ICsxMTAwCgphc2ggKDAuMy43LTEyKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBBZGRlZCBzdXBwb3J0IGZvciB1ZGVicyAoUmFuZG9scGggQ2h1bmcsIGNsb3NlczogIzc5MjM3KS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBTYXQsIDE2IERlYyAyMDAwIDEzOjUzOjI4ICsxMTAwCgphc2ggKDAuMy43LTExKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBQcmVzZXJ2ZSB0aGUgcHJldmlvdXMgZXhpdCBzdGF0dXMgdXBvbiBlbnRlcmluZyBhIGZ1bmN0aW9uCiAgICAoY2xvc2VzOiAjNzgzNzQpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFN1biwgIDMgRGVjIDIwMDAgMTM6MzQ6MjcgKzExMDAKCmFzaCAoMC4zLjctMTApIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIE1lcmdlZCBjaGFuZ2VzIGZvciBHTlUgZnJvbSBJZ29yIEtoYXZraW5lLgogICogTWluaW1pc2UgdGhlIG51bWJlciBvZiBzaWdhY3Rpb25zLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIEZyaSwgIDMgTm92IDIwMDAgMjA6MzE6NTIgKzExMDAKCmFzaCAoMC4zLjctOSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogUHJlZGVwZW5kIG9uIHRoZSBsaWJyYXJpZXMuCiAgKiBBbHdheXMgc2F2ZSBmZCAyIHdoZW4gaXQgaXMgcmVkaXJlY3RlZCAoY2xvc2VzOiAjNzUzMDIpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFN1biwgMjIgT2N0IDIwMDAgMDg6NDA6NDAgKzExMDAKCmFzaCAoMC4zLjctOCkgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAoKICAqIE1vcmUgcmVkaXJlY3Rpb24gZml4ZXMgKGNsb3NlczogIzczNjEzKS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBUaHUsICA1IE9jdCAyMDAwIDE4OjIyOjE3ICsxMTAwCgphc2ggKDAuMy43LTcpIHVuc3RhYmxlOyB1cmdlbmN5PWhpZ2gKCiAgKiBBZGRlZCBtaXNzaW5nIGJyZWFrIGluIHJlZGlyZWN0aW9uIGNvZGUgKGNsb3NlczogIzcyOTU2KS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBUdWUsICAzIE9jdCAyMDAwIDA3OjU4OjA0ICsxMTAwCgphc2ggKDAuMy43LTYpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIGNvbW1hbmQgLVt2Vl0gbm8gbG9uZ2VyIGRpc3BsYXlzIGFuIGVycm9yIG1lc3NhZ2Ugb24gc3Rkb3V0LgogICogUmVkaXJlY3RpbmcgdG8gL3Byb2Mvc2VsZi9mZC8qIG5vdyB3b3JrcyAoY2xvc2VzOiAjNzI4NTIpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFN1biwgIDEgT2N0IDIwMDAgMTI6NTY6MzkgKzExMDAKCmFzaCAoMC4zLjctNSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogSW1wbGVtZW50ZWQgc2V0IC1hLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFNhdCwgMzAgU2VwIDIwMDAgMTY6MDA6MzMgKzExMDAKCmFzaCAoMC4zLjctNCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogQWRkZWQgYnVpbGQtdGltZSBkZXBlbmRlbmN5IG9uIGRlYmhlbHBlciAoY2xvc2VzOiAjNjk5MjApLgogICogRXh0ZW5kZWQgbWF4aW11bSBsZW5ndGggb2YgYXJpdGhtZXRpYyBleHBhbnNpb25zIHRvIG1hdGNoIDMyLWJpdCBpbnRlZ2Vycy4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBXZWQsIDIwIFNlcCAyMDAwIDE0OjI4OjE2ICsxMTAwCgphc2ggKDAuMy43LTMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIFN3aXRjaCB0byB0aGUgb2xkIGdsb2JiaW5nIGNvZGUgc2luY2UgZ2xvYigzKSBpcyBob3BlbGVzc2x5IGJyb2tlbgogICAgKGNsb3NlczogIzY5NDU1KS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBNb24sIDIxIEF1ZyAyMDAwIDIwOjM3OjE1ICsxMDAwCgphc2ggKDAuMy43LTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIENhbGwgZ2xvYigzKSB3aXRoIEdMT0JfTk9NQUdJQyAob3VjaCkuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU3VuLCAgNiBBdWcgMjAwMCAxNzo0NzowOCArMTAwMAoKYXNoICgwLjMuNy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBOZXRCU0QtY3VycmVudCB2ZXJzaW9uIGFzIG9mIDIwMDAwNzI5LgogICogVXNlIGZubWF0Y2goMykgYW5kIGdsb2IoMykuCiAgKiBGaXhlZCB0aGUgdXNlIG9mIGJhY2tzbGFzaGVzIGluIHRoZSBwYXR0ZXJuIGluIHBhcmFtZXRlciBzdWJzdGl0dXRpb25zLAogICAgaG9wZWZ1bGx5IGZvciB0aGUgbGFzdCB0aW1lLgogICogQXBwbGllZCBIRVRJTyBwYXRjaCBhbmQgYnVpbHQgYXNoLm1lZGl1bSAoY2xvc2VzOiAjNTA3ODgpLiAgV2lsbCBkbyBhc2guYmlnCiAgICB3aGVuIHJlYWRsaW5lIGlzIGZpeGVkIHNvIHRoYXQgaXQgZG9lc24ndCBsZWFrIGFueW1vcmUuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgRnJpLCAgNCBBdWcgMjAwMCAyMTozNjo0NCArMTAwMAoKYXNoICgwLjMuNi01KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCBtYW5wYWdlIGVudHJ5IGZvciByZWFkIHdpdGggcGF0Y2ggZnJvbSBLZXZpbiBSeWRlIChjbG9zZXM6ICM2MjUwMCkuCiAgKiBGaXhlZCBhIGZpbGUgZGVzY3JpcHRvciBsZWFrIGZvciBwaXBlbGluZXMuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgV2VkLCAxOSBBcHIgMjAwMCAxODo1NjoyMCArMTAwMAoKYXNoICgwLjMuNi00KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCB0aGUgY2FzZSBvZiBhbiBlbXB0eSBjb21tYW5kIHdpdGggcmVkaXJlY3Rpb25zLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIEZyaSwgIDcgQXByIDIwMDAgMTI6MDc6MTggKzEwMDAKCmFzaCAoMC4zLjYtMykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogISBpcyBub3cgcmVjb2duaXNlZCBjb3JyZWN0bHkuCiAgKiBBc2ggaXMgbm93IG1vcmUgc3RyaWN0IG9uIHRoZSBzeW50YXgsIGUuZy4sIGEgbG9uZSAhIGlzIG5vIGxvbmdlciBhY2NlcHRlZAogICAgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gISB0cnVlLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIEZyaSwgIDcgQXByIDIwMDAgMTA6NDY6MDYgKzEwMDAKCmFzaCAoMC4zLjYtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgYSBwcm9ibGVtIHdpdGggZm10c3RyKCkgd2hpY2ggYnJva2UgZ2V0b3B0cy4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBTdW4sICAyIEFwciAyMDAwIDEwOjQ5OjI2ICsxMDAwCgphc2ggKDAuMy42LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIE5ldEJTRC1jdXJyZW50IHZlcnNpb24gYXMgb2YgMjAwMDAzMjYuCiAgKiBBZGRlZCBhIEJ1aWxkLURlcGVuZHMgb24gZ3JvZmYgKGNsb3NlczogIzYxMDQxKS4KICAqIEltcGxlbWVudGVkIG5vY2xvYmJlciAoY2xvc2VzOiAjNTkwMjgpLgogICogUmV3cm90ZSBvdXRwdXQuYyB0byB1c2Ugc3RyZWFtIElPLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFNhdCwgIDEgQXByIDIwMDAgMTk6MjQ6MzEgKzEwMDAKCmFzaCAoMC4zLjUtMTApIGZyb3plbiB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBEb24ndCBzdGF0IG1haWwgYm94ZXMgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUgKGNsb3NlczogIzU5MjEzKS4KICAqIEFkZGVkIGFuIGZmbHVzaChzdGRvdXQpIHRvIHRoZSB0aW1lcyBidWlsdGluIChjbG9zZXM6ICM1OTAyNykuCiAgKiBEb2N1bWVudGVkIHRoZSB0aW1lcyBidWlsdGluLgogICogQWRkZWQgc291cmNlIGRlcGVuZHMuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU2F0LCAxOCBNYXIgMjAwMCAxODo1ODo0NCArMTEwMAoKYXNoICgwLjMuNS05KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBEb3VibGUgcXVvdGVzIGluc2lkZSBwYXJhbWF0ZXIgc3Vic3RpdHV0aW9ucyBpbnNpZGUgZG91YmxlIHF1b3RlcyBhcmUgbm93CiAgICBpZ25vcmVkIGFzIGluIGJhc2ggKHRoZSBvcmlnaW5pYWwgYmVoYXZpb3VyIHdhcyBQT1NJWCBjb21wbGlhbnQgdG9vIGJ1dAogICAgSU1ITyB0aGlzIG9uZSBtYWtlcyBhIGxpdHRsZSBiaXQgbW9yZSBzZW5zZSkuCiAgICBUaGlzIG9uZSBicm9rZSBtd20gKGJ1dCBpdCB3YXMgYWN0dWFsbHkgbXdtJ3MgZmF1bHQpLgogICogQ29ycmVjdGVkIGJhY2tzbGFzaC9DVExFU0MgdHJlYXRtZW50IGZvciBwYXR0ZXJucyBpbiBwYXJhbWV0ZXIKICAgIHN1YnN0aXR1dGlvbnMuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU2F0LCAgNiBOb3YgMTk5OSAxODoxMzoxOSArMTEwMAoKYXNoICgwLjMuNS04KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBSZXBsYWNlZCB1c2Ugb2YgZWNobyAtbiBpbiBtYW51YWwgcGFnZSB3aXRoIGVzY2FwZSBjb2Rlcy4KICAqIE1hZGUgRkhTIGNvbXBsaWFudCAoY2xvc2VzOiAjNDc5NzgpLgogICogUmVzdG9yZWQgZWNobydzIG9wdGlvbiBwcm9jZXNzaW5nIGFiaWxpdHkuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgRnJpLCAyMiBPY3QgMTk5OSAxMDoyMDo1OCArMTAwMAoKYXNoICgwLjMuNS03KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBlY2hvIG5vIGxvbmdlciBzdXBwb3J0cyBvcHRpb25zLgogICogRG9uJ3QgcXVvdGUgcGF0dGVybnMgaW5zaWRlIHBhcmFtZXRlciBzdWJzdGl0dXRpb25zIGVuY2xvc2VkIGJ5IGRvdWJsZQogICAgcXVvdGVzIChjbG9zZXM6ICM0Nzg0MikuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgV2VkLCAyMCBPY3QgMTk5OSAyMDoyODoxNCArMTAwMAoKYXNoICgwLjMuNS02KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBVc2UgZ2V0Y3dkKCkgaW5zdGVhZCBvZiAvYmluL3B3ZCAtLSBaYWNrIFdlaW5iZXJnIChjbG9zZXM6ICM0Njk4MSkuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU3VuLCAxMCBPY3QgMTk5OSAxNjozMTo0OSArMTAwMAoKYXNoICgwLjMuNS01KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBPbmx5IHRlc3QgZm9yIC1lIG9uIHNpbXBsZSBjb21tYW5kcyAoZml4ZXMgIzQ0NTU5KS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBXZWQsICA4IFNlcCAxOTk5IDIyOjE4OjI3ICsxMDAwCgphc2ggKDAuMy41LTQpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIERvbid0IHdhaXQgZm9yIHN0b3BwZWQgY2hpbGRyZW4gaWYgam9iIGNvbnRyb2wgaXMgZGlzYWJsZWQgKGZpeGVzICM0MjgxNCkuCiAgKiBBbGxvdyBhbiBvcHRpb24gJygnIGluIGEgY2FzZSBzdGF0ZW1lbnQgKGZpeGVzICM0MjM2NCkuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgVGh1LCAxMiBBdWcgMTk5OSAyMzozMDozMCArMTAwMAoKYXNoICgwLjMuNS0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBPSywgdGhlIGZpeCB0byB0aGUgZXNvdGVyaWMgcHJvYmxlbSBpbiAwLjMuNS0xIGFjdHVhbGx5IGJyZWFrcyBWU0FTU0lHTgogICAgYW5kIFZTUVVFU1RJT04sIHRoZXkgc2hvdWxkIHdvcmsgcHJvcGVybHkgbm93IChmaXhlcyAjNDEzMjcpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFRodSwgMTUgSnVsIDE5OTkgMjI6NDc6MTMgKzEwMDAKCmFzaCAoMC4zLjUtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogUEFUSCBzZWFyY2ggYW5kIGV4ZWN1dGlvbiBpcyBub3cgY29ycmVjdC4KICAqIGhhc2ggbm8gbG9uZ2VyIHNob3dzIGJ1aWx0aW5zLgogICogQWRkZWQga2lsbCBidWlsdGluLgogICogTmV3IGRlc2NyaXB0aW9uIGZyb20gSmFtZXMgUi4gdmFuIFphbmR0IHJlZm9ybWF0dGVkIGJ5IEpvc2lwIFJvZGluLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIE1vbiwgMTIgSnVsIDE5OTkgMTg6NTE6NDIgKzEwMDAKCmFzaCAoMC4zLjUtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogTmV3IHVwc3RyZWFtIHJlbGVhc2UuCiAgKiBBZGFwdGVkIHRvIG5ldyBwbWFrZSAoZml4ZXMgIzM4NzM3KS4KICAqIEZpeGVkIGJlaHZhaW91ciBvZiBiYWNrc2xhc2hlcyBwcmVjZWRpbmcgYSBjbG9zaW5nIGJyYWNlIGZvciBhIHBhcmFtZXRlcgogICAgc3Vic3RpdHVpb24gaW5zaWRlIGRvdWJsZSBxdW90ZXMgKGV2ZW4gYmFzaCBtZXNzZXMgdGhpcyBvbmUgdXAgOikuCiAgKiBGaXhlZCBjb21tYW5kIChmaXhlcyAjMzQ2MzkpLgogICogRml4ZWQgYSBwaXBlIGJ1ZyB3aGVyZSBzdGRpbiBtYXkgYmUgd3JvbmdseSBjbG9zZWQgKGZpeGVzICMzNTQ1MikuCiAgKiBSZXZhbXBlZCBnZXRvcHRzIChmaXhlcyAjMzk2OTQpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFN1biwgIDQgSnVsIDE5OTkgMTI6MTk6MDEgKzEwMDAKCmFzaCAoMC4zLjQtNykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgYSBnbGliYyAyLjEgY29tcGF0aXRpYmlsaXR5IHByb2JsZW0uCiAgKiBGaXhlZCBhIFBXRCBpbmNvbnNpc3RlbmN5IHRoYXQgc3R1ZmZlZCB1cCB0aGUga2VybmVsIGNvbXBpbGF0aW9uLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIE1vbiwgMTcgTWF5IDE5OTkgMjM6MTQ6NTcgKzEwMDAKCmFzaCAoMC4zLjQtNikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgaW5jb3JyZWN0IC1lIHRlc3QgZHVlIHRvIHRoZSBsYXN0IGJ1ZyBmaXggKGZpeGVzICMyNjUwOSkuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgVHVlLCAgOCBTZXAgMTk5OCAxMDowMjo0NiArMTAwMAoKYXNoICgwLjMuNC01KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBVc2UgdGVzdF9lYWNjZXNzIGZyb20gYmFzaCBpbnN0ZWFkIG9mIGFjY2VzcygyKSAoZml4ZXMgIzI2MTEwKS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBXZWQsIDI2IEF1ZyAxOTk4IDIxOjIyOjQ5ICsxMDAwCgphc2ggKDAuMy40LTQpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIE9ubHkgdXBsb2FkIHRvIHVuc3RhYmxlLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFR1ZSwgIDUgTWF5IDE5OTggMTg6MDE6MDIgKzEwMDAKCmFzaCAoMC4zLjQtMykgZnJvemVuIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEFwcGxpZWQgc3BhcmMgcGF0Y2ggKGZpeGVzICMyMTU2MikuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgRnJpLCAgMSBNYXkgMTk5OCAxOTo0ODoxMyArMTAwMAoKYXNoICgwLjMuNC0yKSBmcm96ZW4gdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgdGhlIGluY29ycmVjdCB0cmFwIGZpeGVzIChmaXhlcyAjMjAzNjMpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFRodSwgMTYgQXByIDE5OTggMjE6MDc6MTAgKzEwMDAKCmFzaCAoMC4zLjQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogTmV3IHVwc3RyZWFtIHJlbGVhc2UuCiAgKiBSZXZlcnRlZCB3b3JkIHNwbGl0dGluZyBjaGFuZ2UgaW4gMC4zLjItMSBzaW5jZSB0aGUgZml4IHdhcyBicm9rZW4gYW5kCiAgICBtYWpvciB3b3JrICh0aGUgcXVvdGUgcmVtb3ZhbCBpcyBkb25lIHRvbyBxdWlja2x5IGF0IHRoZSBtb21lbnQpIGlzIG5lZWRlZAogICAgdG8gZml4IGl0IHByb3Blcmx5LgogICogRml4ZWQgbW9yZSB0cmFwIG5vbmNvbXBsaWFuY2UuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgVGh1LCAxOSBNYXIgMTk5OCAyMjo1OToxMiArMTEwMAoKYXNoICgwLjMuMi01KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCBhIGJ1ZyB3aGVuIGRvaW5nIHBhdHRlcm4gbWF0Y2hpbmcgaW4gcGFyYW1ldGVyIGV4cGFuc2lvbnMuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgVHVlLCAxMCBNYXIgMTk5OCAyMToyNTo0MCArMTEwMAoKYXNoICgwLjMuMi00KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBBbGxvdyBdIHRvIGJlIHF1b3RlZCBpbiBicmFja2V0IGV4cHJlc3Npb25zIChmaXhlcyAjMTc1MzMpLgogICogTW92ZSBkaF9maXhwZXJtcyB0byBzZWNvbmQgbGFzdCBzcG90IChmaXhlcyAjMTgyNjcpLgogICogRG9uJ3QgZG8gZmllbGQgc3BsaXR0aW5nIGluIGV2YWxmb3IuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgVHVlLCAxNyBGZWIgMTk5OCAxMzozMjowOSArMTEwMAoKYXNoICgwLjMuMi0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCBzdHVwaWQgY29yZSBkdW1wLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFdlZCwgMTEgRmViIDE5OTggMjE6MzM6NTUgKzExMDAKCmFzaCAoMC4zLjItMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogSGFjayBmb3Igc3BlY2lhbCBidWlsdGlucyAoZml4ZXMgIzE4MDU1KS4KICAqIEhhY2sgZm9yIGNvbW1hbmQuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgV2VkLCAxMSBGZWIgMTk5OCAyMToxOTo0NiArMTEwMAoKYXNoICgwLjMuMi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBOZXRCU0QtY3VycmVudCB2ZXJzaW9uIGFzIG9mIDE5OTgwMjA5LgogICogRml4ZWQgYSB3b3JkIHNwbGl0dGluZyBwcm9ibGVtIGFmdGVyIHBhcmFtZXRlciBleHBhbnNpb24gdGhhbmtzIHRvIEFsZXhleQogICAgTWFyaW5pY2hldi4KICAqIENvbnZlcnRlZCB0byBkZWJoZWxwZXIgKGZpeGVzICMxNDYxMiwgIzE1MDA1KS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBNb24sICA5IEZlYiAxOTk4IDE2OjUzOjQ4ICsxMTAwCgphc2ggKDAuMy4xLTIwKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCAtZSBwcm9ibGVtIHdpdGggZXZhbC4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBTdW4sICA3IERlYyAxOTk3IDIwOjE5OjAwICsxMTAwCgphc2ggKDAuMy4xLTE5KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCAtZSBwcm9ibGVtIHdpdGggY29tbWFuZCBzdWJzdGl0dXRpb24uCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU3VuLCAgNyBEZWMgMTk5NyAxOTo0NDo0OSArMTEwMAoKYXNoICgwLjMuMS0xOCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRG8gbm90IGxpbmsgd2l0aCBuY3Vyc2VzICgjMTU0ODUpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFN1biwgMzAgTm92IDE5OTcgMTI6MDA6MTEgKzExMDAKCmFzaCAoMC4zLjEtMTcpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIFNldCBQQVRIIGxpa2UgYmFzaCAoIzE1MjM4KS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBXZWQsIDI2IE5vdiAxOTk3IDE2OjE3OjI3ICsxMTAwCgphc2ggKDAuMy4xLTE2KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCBpbmNvcnJlY3QgYXNzaWdubWVudCBidWlsdGluIGNvZGUuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgTW9uLCAyNCBOb3YgMTk5NyAxNjoxOToxMCArMTEwMAoKYXNoICgwLjMuMS0xNSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogaGFzaCBub3cgcmV0dXJucyBlcnJvciBjb2RlcyAobmVlZGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwpLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFN1biwgMjMgTm92IDE5OTcgMjE6Mzc6MDggKzExMDAKCmFzaCAoMC4zLjEtMTQpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIERpc2FibGVkIHdvcmQtc3BsaXR0aW5nIGZvciBhc3NpZ25tZW50IGJ1aWx0aW5zLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFN1biwgMjMgTm92IDE5OTcgMTI6NDU6MTUgKzExMDAKCmFzaCAoMC4zLjEtMTMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqICEgaXMgbm93IHJlY29nbmlzZWQgZXZlbiBhZnRlciAmJi98fC4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBGcmksIDIxIE5vdiAxOTk3IDIyOjA5OjA1ICsxMTAwCgphc2ggKDAuMy4xLTEyKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBNb3JlIGZpeGVzIHRvIHRoZSBoYW5kbGluZyBvZiBTSUdJTlQgd2hlbiBmb3JraW5nLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIEZyaSwgMTQgTm92IDE5OTcgMTU6MTQ6MzIgKzExMDAKCmFzaCAoMC4zLjEtMTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIElnbm9yZSBTSUdJTlQgd2hlbiBmb3JraW5nIG5vbi1pbnRlcmFjdGl2ZWx5LgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIE1vbiwgIDMgTm92IDE5OTcgMTI6MDA6MDIgKzExMDAKCmFzaCAoMC4zLjEtMTApIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIGVjaG8gbm93IGhhbmRsZXMgb3B0aW9ucyBjb3JyZWN0bHkuCiAgKiBlY2hvIG5vbG9uZ2VyIHJldHVybnMgMCBpZiBlcm9ycnMgb2NjdXJlZCB3aGlsZSB3cml0aW5nIHRvIHN0ZG91dC4KICAqIE5ldyBjb2RlIGZyb20gR05VIGVjaG8gbWVyZ2VkLgogICogRXJyb3IgbWVzc2FnZXMgZnJvbSB0ZXN0IG5vdyB3b3JrLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFdlZCwgIDggT2N0IDE5OTcgMjE6NDc6MTMgKzEwMDAKCmFzaCAoMC4zLjEtOSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogISBpcyByZWNvZ25pc2VkIGF0IHBpcGVsaW5lIGxldmVsIGxpa2UgYmFzaC4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBNb24sIDE1IFNlcCAxOTk3IDIzOjEzOjQ1ICsxMDAwCgphc2ggKDAuMy4xLTgpIHVuc3RhYmxlOyB1cmdlbmN5PW1lZGl1bQoKICAqIE9sZCBwYXRjaCByZWdhcmRpbmcgU0lHQ0hMRCBpbiBhZ2Fpbi4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBTdW4sIDMxIEF1ZyAxOTk3IDExOjIwOjI3ICsxMDAwCgphc2ggKDAuMy4xLTcpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIC9iaW4vc2ggLWUgaXMgYmVoYXZpbmcgZXZlbiBiZXR0ZXIgbm93IChmb3IgbG9vcHMgd2l0aGluIGNvbmRpdGlvbmFscykuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU2F0LCAyMyBBdWcgMTk5NyAyMjowODoxOSArMTAwMAoKYXNoICgwLjMuMS02KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiAvYmluL3NoIC1lIGlzIGJlaGF2aW5nIGJldHRlciBub3cuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU2F0LCAyMyBBdWcgMTk5NyAxMzoxNjoyNiArMTAwMAoKYXNoICgwLjMuMS01KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBoYXNoIC12IC9kaXIvY29tbWFuZCBkb2Vzbid0IGNvcmVkdW1wIGFueW1vcmUuCiAgKiB0eXBlIC9kaXIvY29tbWFuZCBub3cgd29ya3MgY29ycmVjdGx5LgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIEZyaSwgIDEgQXVnIDE5OTcgMjA6NDg6MTkgKzEwMDAKCmFzaCAoMC4zLjEtNCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogdHJhcCBub3cgdW5kZXJzdGFuZHMgc3ltYm9saWMgc2lnbmFsIG5hbWVzLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFNhdCwgMjYgSnVsIDE5OTcgMTQ6MDQ6NDYgKzEwMDAKCmFzaCAoMC4zLjEtMykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogQWRkZWQgdGhlIGJ1aWx0aW4gdGVzdCBjb21tYW5kLgoKIC0tIEhlcmJlcnQgWHUgPGhlcmJlcnRAZGViaWFuLm9yZz4gIFN1biwgMjAgSnVsIDE5OTcgMTU6MDA6MTQgKzEwMDAKCmFzaCAoMC4zLjEtMikgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCgogICogRml4ZWQgYSBjb3JlZHVtcCBpbnZvbHZpbmcgJCouCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgU2F0LCAxOSBKdWwgMTk5NyAxMjowMzowMiArMTAwMAoKYXNoICgwLjMuMS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1tZWRpdW0KCiAgKiBOZXRCU0QtY3VycmVudCB2ZXJzaW9uIGFzIG9mIDE5OTcwNzE1LgogICogRml4ZWQgYSAidXNlIGFmdGVyIGZyZWUiIGJ1ZyAoIzExMjk0KS4KCiAtLSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGRlYmlhbi5vcmc+ICBGcmksIDE4IEp1bCAxOTk3IDEzOjQ4OjA5ICsxMDAwCgphc2ggKDAuMy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBJbml0aWFsIFJlbGVhc2UuCgogLS0gSGVyYmVydCBYdSA8aGVyYmVydEBkZWJpYW4ub3JnPiAgVGh1LCAxOSBKdW4gMTk5NyAxOToyOToxNiArMTAwMAoK