VGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGhhdmUgbWFkZSBsYXJnZSBjb250cmlidXRpb25zCnRvIHRoZSBwdWJsaWMgdmVyc2lvbiBvZiBQcm90b2NvbCBCdWZmZXJzLgoKT3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uOgogIFNhbmpheSBHaGVtYXdhdCA8c2FuamF5QGdvb2dsZS5jb20+CiAgSmVmZiBEZWFuIDxqZWZmQGdvb2dsZS5jb20+CiAgRGFuaWVsIER1bGl0eiA8ZGFuaWVsQGdvb2dsZS5jb20+CiAgQ3JhaWcgU2lsdmVyc3RlaW4KICBQYXVsIEhhYWhyIDxoYWFockBnb29nbGUuY29tPgogIENvcmV5IEFuZGVyc29uIDxjb3JpbkBnb29nbGUuY29tPgogIChhbmQgbWFueSBvdGhlcnMpCgpQcm90bzIgQysrIGFuZCBKYXZhIHByaW1hcnkgYXV0aG9yOgogIEtlbnRvbiBWYXJkYSA8a2VudG9uQGdvb2dsZS5jb20+CgpQcm90bzIgUHl0aG9uIHByaW1hcnkgYXV0aG9yczoKICBXaWxsIFJvYmluc29uIDxyb2JpbnNvbkBnb29nbGUuY29tPgogIFBldGFyIFBldHJvdiA8cGV0YXJAZ29vZ2xlLmNvbT4KCkxhcmdlIGNvZGUgY29udHJpYnV0aW9uczoKICBKYXNvbiBIc3VlaCA8amFzb25oQGdvb2dsZS5jb20+CiAgSm9zZXBoIFNjaG9yciA8anNjaG9yckBnb29nbGUuY29tPgogIFdlbmJvIFpodSA8d2VuYm96QGdvb2dsZS5jb20+CgpMYXJnZSBxdWFudGl0eSBvZiBjb2RlIHJldmlld3M6CiAgU2NvdHQgQnJ1Y2UgPHNicnVjZUBnb29nbGUuY29tPgogIEZyYW5rIFllbGxpbgogIE5lYWwgTm9yd2l0eiA8bm5vcndpdHpAZ29vZ2xlLmNvbT4KICBKZWZmcmV5IFlhc3NraW4gPGp5YXNza2luQGdvb2dsZS5jb20+CiAgQW1icm9zZSBGZWluc3RlaW4gPGFtYnJvc2VAZ29vZ2xlLmNvbT4KCkRvY3VtZW50YXRpb246CiAgTGlzYSBDYXJleSA8bGNhcmV5QGdvb2dsZS5jb20+CgpNYXZlbiBwYWNrYWdpbmc6CiAgR3JlZ29yeSBLaWNrIDxnYWtAZ29vZ2xlLmNvbT4KClBhdGNoIGNvbnRyaWJ1dG9yczoKICBLZXZpbiBLbyA8a2V2aW4ucy5rb0BnbWFpbC5jb20+CiAgICAqIFNtYWxsIHBhdGNoIHRvIGhhbmRsZSB0cmFpbGluZyBzbGFzaGVzIGluIC0tcHJvdG9fcGF0aCBmbGFnLgogIEpvaGFuIEV1cGhyb3NpbmUgPHByb3BweUBhbWluY2hlLmNvbT4KICAgICogU21hbGwgcGF0Y2ggdG8gZml4IFB5dGhvbiBDYWxsTWV0aG9kKCkuCiAgVWxyaWNoIEt1bml0eiA8a3VuZUBkZWluZS10YWxlci5kZT4KICAgICogU21hbGwgb3B0aW1pemF0aW9ucyB0byBQeXRob24gc2VyaWFsaXphdGlvbi4KICBMZWFuZHJvIEx1Y2FyZWxsYSA8bGx1Y2F4QGdtYWlsLmNvbT4KICAgICogVkkgc3ludGF4IGhpZ2hsaWdodGluZyB0d2Vha3MuCiAgICAqIEZpeCBjb21waWxlciB0byBub3QgbWFrZSBvdXRwdXQgZXhlY3V0YWJsZS4KICBEaWxpcCBKb3NlcGggPGRpbGlwLmFudG9ueS5qb3NlcGhAZ21haWwuY29tPgogICAgKiBIZXVyaXN0aWMgZGV0ZWN0aW9uIG9mIHN1Yi1tZXNzYWdlcyB3aGVuIHByaW50aW5nIHVua25vd24gZmllbGRzIGluCiAgICAgIHRleHQgZm9ybWF0LgogIEJyaWFuIEF0a2luc29uIDxuYWlyYjc3NEBnbWFpbC5jb20+CiAgICAqIEFkZGVkIEBPdmVycmlkZSBhbm5vdGF0aW9uIHRvIGdlbmVyYXRlZCBKYXZhIGNvZGUgd2hlcmUgYXBwcm9wcmlhdGUuCiAgVmluY2VudCBDaG9pbmnocmUgPENob2luaWVyZS5WaW5jZW50QGh5ZHJvLnFjLmNhPgogICAgKiBUcnU2NCBzdXBwb3J0LgogIE1vbnR5IFRheWxvciA8bW9udHkudGF5bG9yQGdtYWlsLmNvbT4KICAgICogU29sYXJpcyAxMCArIFN1biBTdHVkaW8gZml4ZXMuCiAgQWxlayBTdG9ybSA8YWxlay5zdG9ybUBnbWFpbC5jb20+CiAgICAqIFNsaWNpbmcgc3VwcG9ydCBmb3IgcmVwZWF0ZWQgc2NhbGFyIGZpZWxkcyBmb3IgdGhlIFB5dGhvbiBBUEkuCiAgT2xlZyBTbW9sc2t5IDxvbGVnLnNtb2xza3lAZ21haWwuY29tPgogICAgKiBNUyBWaXN1YWwgU3R1ZGlvIGVycm9yIGZvcm1hdCBvcHRpb24uCiAgICAqIERldGVjdCB1bm9yZGVyZWRfbWFwIGluIHN0bF9oYXNoLm00LgogIEJyaWFuIE9sc29uIDxicmlhbm9sc29uQGdvb2dsZS5jb20+CiAgICAqIGd6aXAvemxpYiBJL08gc3VwcG9ydC4KICBNaWNoYWVsIFBvb2xlIDxtZHBvb2xlQHRyb2lsdXMub3JnPgogICAgKiBGaXhlZCB3YXJuaW5ncyBhYm91dCBnZW5lcmF0ZWQgY29uc3RydWN0b3JzIG5vdCBleHBsaWNpdGx5IGluaXRpYWxpemluZwogICAgICBhbGwgZmllbGRzIChvbmx5IHByZXNlbnQgd2l0aCBjZXJ0YWluIGNvbXBpbGVyIHNldHRpbmdzKS4KICAgICogQWRkZWQgZ2VuZXJhdGlvbiBvZiBmaWVsZCBudW1iZXIgY29uc3RhbnRzLgogIFdpbmsgU2F2aWxsZSA8d2lua0Bnb29nbGUuY29tPgogICAgKiBGaXhlZCBpbml0aWFsaXphdGlvbiBvcmRlcmluZyBwcm9ibGVtIGluIGxvZ2dpbmcgY29kZS4KICBXaWxsIFBpZXJjZSA8d2lsbHBAbnVjbGVpLmNvbT4KICAgICogU21hbGwgcGF0Y2ggaW1wcm92aW5nIHBlcmZvcm1hbmNlIG9mIGluIFB5dGhvbiBzZXJpYWxpemF0aW9uLgogIEFsZXhhbmRyZSBWYXNzYWxvdHRpIDxhbGV4YW5kcmVAcGVhZHJvcC5jb20+CiAgICAqIEVtYWNzIG1vZGUgZm9yIFByb3RvY29sIEJ1ZmZlcnMgKGVkaXRvcnMvcHJvdG9idWYtbW9kZS5lbCkuCiAgU2NvdHQgU3RhZmZvcmQgPHNjb3R0LnN0YWZmb3JkQGdtYWlsLmNvbT4KICAgICogQWRkZWQgU3dhcCgpLCBTd2FwRWxlbWVudHMoKSwgYW5kIFJlbW92ZUxhc3QoKSB0byBSZWZsZWN0aW9uIGludGVyZmFjZS4KICBBbGV4YW5kZXIgTWVsbmlrb3YgPGFsbUBzaWJtYWlsLnJ1PgogICAgKiBIUFVYIHN1cHBvcnQuCiAgT2xpdmVyIEpvd2V0dCA8b2xpdmVyLmpvd2V0dEBnbWFpbC5jb20+CiAgICAqIERldGVjdCB3aGV0aGVyIHpsaWIgaXMgbmV3IGVub3VnaCBpbiBjb25maWd1cmUgc2NyaXB0LgogICAgKiBGaXhlcyBmb3IgU29sYXJpcyAxMCAzMi82NC1iaXQgY29uZnVzaW9uLgogIEV2YW4gSm9uZXMgPGV2YW5qQG1pdC5lZHU+CiAgICAqIE9wdGltaXplIEphdmEgc2VyaWFsaXphdGlvbiBjb2RlIHdoZW4gd3JpdGluZyBhIHNtYWxsIG1lc3NhZ2UgdG8gYSBzdHJlYW0uCiAgICAqIE9wdGltaXplIEphdmEgc2VyaWFsaXphdGlvbiBvZiBzdHJpbmdzIHNvIHRoYXQgVVRGLTggZW5jb2RpbmcgaGFwcGVucyBvbmx5CiAgICAgIG9uY2UgcGVyIHN0cmluZyBwZXIgc2VyaWFsaXphdGlvbiBjYWxsLgogICAgKiBDbGVhbiB1cCBzb21lIEphdmEgd2FybmluZ3MuCiAgICAqIEZpeCBidWcgd2l0aCBwZXJtYW5lbnQgY2FsbGJhY2tzIHRoYXQgZGVsZXRlIHRoZW1zZWx2ZXMgd2hlbiBydW4uCiAgTWljaGFlbCBLdWNoYXJza2kgPG0ua3VjaGFyc2tpQGdtYWlsLmNvbT4KICAgICogQWRkZWQgQ29kZWRJbnB1dFN0cmVhbS5nZXRUb3RhbEJ5dGVzUmVhZCgpLgo=